历史上的今天
返回首页

历史上的今天

今天是:2025年07月01日(星期二)

正在发生

2018年07月01日 | STM32----ADC进行信号(跳变沿、PWM)的捕获

2018-07-01 来源:eefocus

      一般情况下进行信号的捕获,如上升沿或者下降沿。均可采用外部触发进行捕获。这是基于信号比较稳定的情况,如信号出现较大的纹波或者易受到干扰。会出现“误触”的现象,此时用外部中断难以捕获到正确的信号。

       这种情况的解决办法,可以采用以下办法:

(1)使用定时器进行捕获,并开启定时器的滤波功能。在库函数结构体中,为:

        TIM_ICInitStruct.TIM_ICFilter = 0x0f;(滤波系数可填0x00~0x0f)

        当系数开到最大(0x0f)可有效过滤大部分纹波以及干扰信号,但对于持续时间较长的干扰无法过滤。

(2)使用ADC模拟看门狗功能。

        比如当前信号为高电平,触发信号为下降沿,存在着一定的纹波以及偶发的干扰如图:

        

        这种信号,采用第一种方法并不能很好地捕获。但如果使用ADC模拟看门狗功能则能很好地识别。方法如下:

   (1)初始化看门狗触发阈值为低电平触发。假设触发信号的电平为0.2V,干扰信号最低达到0.6V。设置看门狗阈值为:0.4V~3.3V(STM32F1供电3.3V),此时0.4V~3.3V的信号不会触发看门狗中断,但0.2V(触发信号)可成功触发中断。达到了过滤干扰信号的目的。

   (2)当触发信号触发模拟看门狗中断后,处理完触发信号的程序后,更改看门狗触发阈值为高电平状态。如0V~2V。目的是防止触发信号时间过长,频繁进入看门狗中断。当触发信号恢复高电平状态,因为已经设置了看门狗中断为高电平触发,此时会进入一次中断。中断中只需要将看门狗触发阈值改为低电平触发,即可等待下一次的触发信号。

 

具体实现代码如下:


void  ADC2_AWGZcpInit(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

ADC_InitTypeDef  ADC_InitStruct;

NVIC_InitTypeDef  NVIC_InitStruct;

 

/*********************初始化ADC GPIO********************/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;

GPIO_Init(GPIOB,&GPIO_InitStruct);

/**********************ADC2 NVIC************************/

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStruct.NVIC_IRQChannel = ADC1_2_IRQn;

NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;

 

NVIC_Init(&NVIC_InitStruct);

 

/************************初始化ADC2************************/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);

RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //72M/6 = 12M

ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;

ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;

ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;

ADC_InitStruct.ADC_NbrOfChannel = 1;

ADC_InitStruct.ADC_ScanConvMode = ENABLE;

ADC_Init(ADC2,&ADC_InitStruct);

ADC_RegularChannelConfig(ADC2, ADC_Channel_8, 1, ADC_SampleTime_7Cycles5);

/***************************ADC看门狗设置****************************/

    ADC_AnalogWatchdogThresholdsConfig(ADC2,ADC2_AEG[2],ADC2_AEG[3]);

    ADC_AnalogWatchdogSingleChannelConfig(ADC2, ADC_Channel_8);

ADC_AnalogWatchdogCmd(ADC2,ADC_AnalogWatchdog_SingleRegEnable);

/***************************ADC校准****************************/

ADC_Cmd(ADC2, ENABLE);

 

    ADC_ResetCalibration(ADC2);

while(ADC_GetResetCalibrationStatus(ADC2)&&(timeout--));

ADC_StartCalibration(ADC2);

while(ADC_GetCalibrationStatus(ADC2)&&(timeout--));

 

ADC_ITConfig(ADC2,ADC_IT_AWD, ENABLE);

ADC_SoftwareStartConvCmd(ADC2, ENABLE);

}

 

u16 ADC2_AEG[5]={4095,250,3850,0,1};  //模拟看门狗阈值数组,第0、1元素为监测低电平触发信号阈值,2、3为高阈值  

void ADC1_2_IRQHandler(void)

{

 ADC2_AEG[4] = !ADC2_AEG[4]*2;

 ADC2->HTR = ADC2_AEG[0+ADC2_AEG[4]];  //更改ADC看门狗阈值

      ADC2->LTR = ADC2_AEG[1+ADC2_AEG[4]];

 if(ADC2_AEG[4]<1)  //下降沿触发输出

     {

   //code

}

 ADC2->SR &= 0xfffe;  //清除标志位

}


推荐阅读

史海拾趣

Desco Tools公司的发展小趣事

Desco Tools公司最初成立于上世纪70年代,专注于防静电工具的研发和生产。当时,随着电子行业的迅速发展,对静电防护的需求日益增加。Desco Tools公司凭借其敏锐的市场洞察力和技术实力,成功开发出了一系列防静电工具,如防静电手套、手腕带等,这些产品迅速在市场上获得了认可,为公司的发展奠定了坚实的基础。

Global Components & Controls公司的发展小趣事
如果台灯不亮或亮度无法调节,可能是可控硅损坏。此时需要更换新的可控硅。
天二科技(EVER OHMS)公司的发展小趣事

天二科技始终将产品质量视为企业的生命线。为了不断提升产品品质,公司引进了先进的自动化设备和生产工艺,并建立了严格的质量控制体系。经过多年的努力,天二科技的产品质量得到了显著提升,并先后通过了ISO9001、TS16949等多项国际质量管理体系认证。这些认证的取得不仅证明了天二科技在产品品质方面的卓越表现,更为公司赢得了客户的信任和市场的认可。

Dialog Semiconductor(戴乐格半导体)公司的发展小趣事

Dialog Semiconductor自2000年成立以来,就致力于技术创新。公司在早期阶段就专注于电源管理技术的研发,推出了多款高效能、低功耗的电源管理芯片,这些芯片被广泛应用于智能手机、可穿戴设备等移动设备中。随着物联网(IoT)的兴起,Dialog Semiconductor进一步拓展了产品线,增加了蓝牙和射频(RF)芯片等连接性解决方案,以满足市场对低功耗无线通信的需求。这些技术创新使Dialog Semiconductor在电子行业中建立了稳固的地位。

EETools公司的发展小趣事

面对快速变化的市场环境和不断涌现的新技术,EETools始终保持开放和创新的姿态。公司不仅持续关注行业动态和技术趋势,还积极探索新的业务领域和增长点。例如,EETools正在研发基于人工智能和物联网技术的嵌入式开发工具,以满足未来市场的需求。同时,公司还计划进一步拓展海外市场,提升品牌在国际市场的竞争力。这些举措将为EETools的未来发展奠定坚实的基础。

Allied Electronic & Semiconductor Technology Inc公司的发展小趣事

在追求经济效益的同时,AE&ST公司也积极履行社会责任,致力于可持续发展。公司严格遵守环保法规,采用环保材料和工艺,减少生产过程中的污染排放。此外,公司还积极参与社会公益活动,支持教育事业和科技创新。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实的基础。

请注意,这些故事是基于一般电子行业发展趋势和常见模式构建的虚构故事,旨在展示一个电子公司可能的发展路径。对于AE&ST公司的实际情况,建议查阅相关官方资料或行业报告以获取准确信息。

问答坊 | AI 解惑

dsp基础

第1章   概述1.1数字信号处理器的基本概念数字信号处理器(Digital Signal Processor,简称DSP)是一种专门用来实现各种数字信号处理算法的微处理器。根据使用方法的不同,DSP可以分成专用的DSP和通用的DSP。专用的DSP用来实现某些特定的 ...…

查看全部问答>

cadence仿真问题

用的是analoglib里的元件画的电路,仿真时不知道加模型库时怎么加?…

查看全部问答>

线径与电流关系(转)

NO.1 绝缘导线芯线最小截面要求可以通过下面的顺口溜快速求得:(单位:平方毫米) 【顺口溜】:十下五、百上二,五十三四上下分,埋地套管七五折。 【意思解释】:根据绝缘导线所要求通过的总电流,当总电流为10A以下时,导线每平方毫米的截 ...…

查看全部问答>

现在学完了51,接下来该学啥?

本帖最后由 paulhyde 于 2014-9-15 09:23 编辑 请各位指教。  …

查看全部问答>

FPGA写的232接收模块,丢包问题

今天早上测试232接收程序时,发现232接收某些特定数据时,接收不到。请问高人,可能啥原因?…

查看全部问答>

0805的电阻的功耗是多少?

来自EEWORLD合作qq群:49900581 群主:wangkj…

查看全部问答>

nandflash的坏块处理

那位有nandflash的坏块处理方法,说下.…

查看全部问答>

菜鸟问问 在Wince中时间显示

想在一个EDIT控件里显示系统当前时间,不知道该怎么做。 有没有相关的控件呢? 不要time picker…

查看全部问答>

弱问,CORTEXM3内核到底高明在啥地方?

哪位高人给个比较出来和ARM7TDMI比比看…

查看全部问答>

液晶浮点值显示的一种解决方法

液晶浮点值显示的一种解决方法   在以ucOS-II为系统搭建的工程中,需要在液晶LCD上显示浮点型值,但液晶的驱动函数中仅编写了一个显示字符串的函数GUI_DispStringAt(); 所以需要一个函数把浮点型值转化成字符串,然后以字符串的形式输出到LC ...…

查看全部问答>