如题,目的是想实现多个脉冲信号计数,只有超过规定的脉冲幅度才会计数,且幅度可调。想利用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); } 但是多个通道中断更改限值会不会有问题? |
评分
查看全部评分
使用F3系列的带比较器的吗,但只有7个比较器。还是使用外部独立比较器,使用DAC控制比较电压,GPIO中断采集?
测量脉冲,也要看脉冲的频率。。。用adc完全没问题的,adc+dma,采样一次然后中断。。。问题的关键是这个adc+dma的频率,如果太高了,可能MCU没法工作了。。。对了,这里的adc采样指的的是轮询采样。。。当然了,也可以非常高的频率采样,但是就需要增加dma的buffer,不过这时候就需要引入额外的计数中断了,比如10us?当然了,这个频率也很高,一般都说100us。。。那么这里的buffer就必须可以满足保存100us的数据。。。
评分
查看全部评分
评分
查看全部评分
一路,且变化不是很快的,应该可以的,因为你还要打印信息。