使用STM32ADC看门狗测量出待测信号

我们在做adc应用时,有些场合需要精确测量出待测信号的数据,有时可能并不关心adc结果多准确,只要满足某个范围即可,这时我们就可以考虑使用stm32adc看门狗功能了。
stm32 adc基本上都支持模拟看门狗功能,即adc模块对被检测的模拟通道的转换结果基于硬件对其合法性、安全性进行监测。我们可以设置被监测通道的转换结果合法性检查的上下阈值,若结果处于阈值之外则视为异常,并可以触发中断。
尤其有些场合,我们可能使用到数个adc通道,8个、10个甚至更多,同时程序还需要基于各通道的转换结果进行合法性或安全性监测,此时使用adc模拟看门狗功能就很方便。我们可以先让模拟看门狗做第一步把关,只有出现异常数据时才去进一步检查确认。不然的话,每次一批数据出来后,我们得逐个去检查合法性。一般来讲,多数情况下异常可能只是偶尔、个别通道发生,这样每次转换完成后总是不分青红皂白地去逐一检查、确认,显然有点浪费时间,啰嗦无益,这也会影响系统性能。
我这里使用stm32l4开发板,简单演示下实现过程,供有需要的人士参考。
这里只开启adc1模块的8个规则通道,使用dma传送转换结果,并设置模拟看门狗。使用cubemx图形化配置工具进行工程配置。
我只启用了模拟看门狗1,针对8个规则通道的转换结果进行实时监测。【当然你可以有其它更为灵活的设计。各个stm32系列这个地方不完全一样。】
开启adc模拟看门狗的中断。
代码里设置一个记录adc结果异常的标志flag_adc_abnormal,若发生结果异常会在adc中断对该标志变量赋非0值。
在主循环里若发现异常标志非0,然后去进一步做所有adc结果的确认。
上面演示过程中监测到一个异常数据,触发了模拟看门狗中断,adc结果异常标志被赋0xff值,会做进一步异常数据的确认。
我在上面采用的一个模拟看门狗对8个通道的结果进行监测,如果一轮扫描转换下来出现多个异常数据,会触发几次中断呢?
不妨基于同一开发板验证下。我加个adc中断次数累计变量adc_res_cnt,并把阈值下限调整为1200,其它不动。【见下图】
然后进行测试,得到下面结果。
从结果看,除了2个数据正常外其它均异常,故一轮转换下来发生了6次中断,显然我们可以根据中断次数进一步判断一轮转换下来的异常通道数。【注:这里adc配置为单次扫描模式,dma配置为normal模式。】

C语言入门教程-为什么要用指针?
放大电路三种基本电路的应用及其参数的选择
利尔达科技将提供Nordic全系列ULP无线连接硬件、固件、开发工具和参考设计
小米64月16日发布,外观或大变化!双摄陶瓷机身!
一体化温度变送器仪表规格书
使用STM32ADC看门狗测量出待测信号
仪表管路应该如何安装?有哪些需要注意问题?
PLC灯控系统如何实现实时监控与及时运维
Flutter 的持续发展势头
解答74HC14用什么替代/拉电流能力大概是多少
有刷电机与无刷电机工作原理
浅析PCB覆铜设计的利与弊
如何看待Bolt EV的自愿召回?
苹果年末量产Micro LED面板 三星开发第七代OLED屏
氧气测试仪的用途特点有哪些
物联网设备开发者福音,蓝牙4.2来助力
揭秘星际2人工智能AlphaStar:DeepMind科学家回应一切
旧电动车电瓶修复技术|电池终极维修技法「单格修复」
高效实用的“在线交易”日受欢迎
人类历史上第一个可编程忆阻器计算机诞生!