STM32利用模拟看门狗如何实现ADC超范围次数计数
如题,目的是想实现多个脉冲信号计数,只有超过规定的脉冲幅度才会计数,且幅度可调。想利用ADC采集脉冲信号,通过模拟看门狗检测幅值,但是现在发现模拟看门狗在超幅值后会一直触发中断,不是超过后中断一次,没法计数。求助社区专家看看有没有什么方案。比如单个通道可以这样实现:
幅值限定为:0x0c00 的信号进行计数cnt
配置好ADC和模拟看门狗后,设置幅值0x0c00,然后启动ADC,之后在中断中这样写:
void ADC1_2_IRQHandler(void)
{
static uint8_t i;
if (i==0){
ADC_AnalogWatchdogThresholdsConfig(ADC1, 0x0fff, 0x0100);//提高限值,防止再次中断,设定下限,实现信号下降后再次中断恢复限值
i=1;
cnt++;//超限计数
}else{
i=0;
ADC_AnalogWatchdogThresholdsConfig(ADC1, 0x0c00, 0x0000);//恢复限值,准备下一次中断
}
/* Clear ADC1 AWD pending interrupt bit */
ADC_ClearITPendingBit(ADC1, ADC_IT_AWD);
}
但是多个通道中断更改限值会不会有问题?
你需要的是比较器+计数器。根据需要选择对应的器件 斜阳__ 发表于 2017-9-27 11:42
你需要的是比较器+计数器。根据需要选择对应的器件
使用F3系列的带比较器的吗,但只有7个比较器。还是使用外部独立比较器,使用DAC控制比较电压,GPIO中断采集? 至少12路比较计数,用F3得两个片子。找时间试试SOT封装的外部比较器 模拟看门狗?采样ADC?这两者啥关系?
测量脉冲,也要看脉冲的频率。。。用adc完全没问题的,adc+dma,采样一次然后中断。。。问题的关键是这个adc+dma的频率,如果太高了,可能MCU没法工作了。。。对了,这里的adc采样指的的是轮询采样。。。当然了,也可以非常高的频率采样,但是就需要增加dma的buffer,不过这时候就需要引入额外的计数中断了,比如10us?当然了,这个频率也很高,一般都说100us。。。那么这里的buffer就必须可以满足保存100us的数据。。。 一块芯片的资源看似不够,还是需要外部的额外的硬件资源,加个比较器吧 小白求助楼主,你的问题正是我想用的。。现在我想实现的功能是电平检测,模拟电平是从0逐渐变大的,0到3.3v之间电平分成30阶,也是循环计数,先设置看门狗高、低阈值0-1/30*3.3时,若电平达到了1/30*3.3v,中断,串口打印信息;再设置看门狗高、低阈值为1/30*3.3v---2/30*3.3v,若电平达到2/30*3.3v,再中断,串口打印信息,如此循环30次,请问楼主觉得可行吗? ryn4 发表于 2018-1-19 18:28
小白求助楼主,你的问题正是我想用的。。现在我想实现的功能是电平检测,模拟电平是从0逐渐变大的,0到3.3v ...
一路,且变化不是很快的,应该可以的,因为你还要打印信息。
页:
[1]