nyszx 发表于 2017-9-27 11:33:53

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:08

你需要的是比较器+计数器。根据需要选择对应的器件

nyszx 发表于 2017-9-27 13:07:24

斜阳__ 发表于 2017-9-27 11:42
你需要的是比较器+计数器。根据需要选择对应的器件

使用F3系列的带比较器的吗,但只有7个比较器。还是使用外部独立比较器,使用DAC控制比较电压,GPIO中断采集?

nyszx 发表于 2017-9-27 13:36:34

至少12路比较计数,用F3得两个片子。找时间试试SOT封装的外部比较器

MrJiu 发表于 2017-9-27 14:14:51

模拟看门狗?采样ADC?这两者啥关系?
测量脉冲,也要看脉冲的频率。。。用adc完全没问题的,adc+dma,采样一次然后中断。。。问题的关键是这个adc+dma的频率,如果太高了,可能MCU没法工作了。。。对了,这里的adc采样指的的是轮询采样。。。当然了,也可以非常高的频率采样,但是就需要增加dma的buffer,不过这时候就需要引入额外的计数中断了,比如10us?当然了,这个频率也很高,一般都说100us。。。那么这里的buffer就必须可以满足保存100us的数据。。。

五哥1 发表于 2017-9-28 21:50:41

一块芯片的资源看似不够,还是需要外部的额外的硬件资源,加个比较器吧

ryn4 发表于 2018-1-19 18:28:25

小白求助楼主,你的问题正是我想用的。。现在我想实现的功能是电平检测,模拟电平是从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次,请问楼主觉得可行吗?

nyszx 发表于 2018-1-21 20:27:52

ryn4 发表于 2018-1-19 18:28
小白求助楼主,你的问题正是我想用的。。现在我想实现的功能是电平检测,模拟电平是从0逐渐变大的,0到3.3v ...

一路,且变化不是很快的,应该可以的,因为你还要打印信息。
页: [1]
查看完整版本: STM32利用模拟看门狗如何实现ADC超范围次数计数