使用STM32单片机进行ADC间断转换模式的应用实例说明

有时我们可能需要对多个adc通道进行分组转换,组与组之间希望有可调的时间间隔。比方像下面图示的情形。先转换头2个通道,再转换中间2个通道,之后转换最后的2个通道。
如果我们采样查询或中断方式,每转换完2个通道后,然后做后续通道的切换配置再启动ad模块也是可以的。至于那个时间间隔我们往往会使用定时器来协助。显然,这样做有时会显得有点繁琐。
像上面这种情况,我们还可以考虑使用adc的间断转换模式。即将一个adc转换通道序列分成几组,每来一次adc转换触发事件,就转换一组ad通道,这样依次进行直至整个序列转换完毕。
比方,我们用到某adc模块的ch1/ch2/ch3/ch4/ch5五个通道,将它们分成3组,使用定时器触发adc。第一次触发时,进行ch1/ch2两个通道的ad转换,第二次触发时进行ch3/ch4两个通道的ad转换,第三次触发时,完成ch5通道的ad转换。 第四次触发时进行跟第一次触发一样的转换,这样循环下去。
不妨基于上面的描述举一个实际的例子演示一下。使用stm32f411-discovery开发板来做调试验证。用到adc1模块的从ch1开始的连续5个ad通道,被分成3组。如下图所示。
我们使用定时器更新事件触发adc转换,第1组与第2组转换之间的间隔、第2组与第3组转换的间隔通过适时调整定时器的计时长短来控制。
我们使用定时器更新事件触发dma,通过dma修改arr的值来调节相邻两组转换之间的时间间隔。另外,adc的转换结果通过eoc事件触发dma,并由dma将转换结果有序地搬到指定的内存空间。
整个adc序列的5个通道转换完成后,进入adc的dma传输完成中断,在中断回调函数里对各个通道的转换结果进行处理。之后,又可以开始下一轮adc转换。
将上面提到的整个实现过程稍微整理下:
1、adc转换依靠定时器的更新事件触发,按照间断模式进行分组转换。
2、开启了两路dma传输,1路用于adc结果的搬运,另1路用于定时器arr值的更新。
第1次定时触发事件发生时,完成第一组ad通道【ch1、ch2】的转换,同时触发定时器的dma传输,修改arr的值,由其决定第1次触发事件与第2次触发事件的的时间间隔;当第2次定时触发事件发生时,完成第二组ad通道【ch3、ch4】的转换,同时触发定时器的dma传输,修改arr的值,以决定第2次触发事件与第3次触发事件的时间间隔;当第3次触发事件发生时,这里只做第3组ad通道【ch5】的转换,不通过dma对arr进行修改,其值将在adc的dma传输完成中断的回调函数里由用户指定。
下面将整个配置和代码实现的全过程贴出来,以供参考。使用stm32cubemx工具进行图形化配置,基于st公司的stm32cube库来组织代码。
假设第一组ad通道转换后经过0x7000个时间单位触发第二组ad通道的转换,再过0x5000个时间单位触发第三组ad通道转换。【实际应用时,时基参数视具体情况而定】
一、基于cubemx的配置【rcc/sys的配置从略】。
1.1tim3的配置,tim3的更新事件触发adc转换,并触发dma做arr的更新。
1.2 adc的配置。【选择5个adc通道,间断转换模式,启用adc的dma传输】
二、生成初始化代码。
基于stm32cube库,生成基于arm keil mdk集成开发环境的工程代码。
三、添加用户代码。【代码基于stm32cube库】
首先介绍下用户代码里用到的2个数组,分别是adc_value[5]和data_arr[2].
其中adc_value[5]用来存放adc通道的的转换结果,data_arr[2]用来存放arr的数据以改变计时周期。二者分别被不同的dma流访问。
3.1 在main()里添加如下用户代码。
第1行,清除定时器更新事件标志。
红色方框内的两行分别对adc/tim3的dma传输做启动配置。
第4行使能tim3更新事件的dma请求。
4、结果验证。
将硬件连接好,编译代码,运行后可以看到转换结果。5个ad通道分为三组按预定时间间隔被依次触发转换,转换结果被dma搬到指定的内存空间。通过调试器,我们可以看到adc结果及定时器arr的相应变化。
小结:这里主要是抛砖引玉似地介绍下stm32芯片adc间断转换模式,同时用到了定时器和dma两个外设。希望能给读者带来些参考或启示,将来在自己的开发中变通使用。这几个外设都是stm32芯片最常用、最基础的外设,掌握之后若能灵活使用,会让我们的stm32开发工作更加得心应手。

韩国成像雷达公司 bitsensing:推出监控传感器 Traffic Insight 革新智慧交通基础
配备智能手套的太空服可能是解决宇航员操作困难问题
进博会:汇川技术×埃森哲,推进国际化合作
2018年人工智能发展趋势总结 总体呈现以下八大特点
MAX14529E, MAX14530E应用电路:具有USB
使用STM32单片机进行ADC间断转换模式的应用实例说明
如何使用Arduino的TFTLCD
8块2080ti主机炫到没朋友
思必驰与星海实验中学打造AI赋能教育新典范
采访刘军光:三星如何夺下小间距LED的风口机遇?
谷歌为其网络浏览器Chrome 81 beta版新增AR支持
魅族蓝牙音频接收器体验 有线耳机秒变蓝牙耳机
马斯克:2021年将在部分地区推出L5级全自动驾驶功能
ADPA7002CHIP功率放大器
ATAM 计划进入中国市场
ST推出电阻式多点触感单片控制器
业余开发者怎样进阶成专业开发者
基于区块链技术B2R企业对机器人的运营平台SKYFchain介绍
未来已来,人工智能将数字化运营提高,未来场景已经成为现实
感恩高原义诊,丁真点赞vivo影像加获奖作品