【STM32技巧】ADC模拟量采集的几种用法
1. AD单次转换+软件启动
通过程序启动AD,AD采集一次,我们就去读一次。这种情况,建议开启AD转换完成中断,在中断中读出AD值并做处理。
初始化的时候,启动一次。然后在主循环里,每隔一秒启动一次。
在中断回调函数里,进行相关处理:
电脑输出如下:
2. 连续转换+软件启动
在方法1的基础上做调整,从单次转换,变成连续转换。也就是说,只需要开启一次,它就能一直转换,直到程序让它停止。
优点是省去了频繁开启中断的麻烦;缺点是需要频繁进入中断去读AD值。
初始化的时候开启AD即可,后面无需再频繁开启。
在中断中进行处理,当AD转换次数达到1000次的时候,停止转换。
注意事项:函数HAL_ADC_Stop_IT(&hadc1) 需要在中断内调用,中断外调用不起作用。
3. 连续转换+DMA+手动启动
- 在方法2的基础上,引入DMA这个东西。不得不说,DMA真的是很方便,省去了很多手动操作的麻烦。可以直接把指定数量的AD转换值存入数组里,可以单次存入,也可以循环覆盖。
- 在方法2里面,每次转换完成,需要我们手动去读一下AD值;启动DMA之后,完全省掉了这个过程,只需要等待1000个值全部转换完成之后触发一个中断即可。
- 初始化阶段,开启DMA传输:
- 传输完成之后产生一个中断:
- 这时候看数组里面的值:
4.连续转换+DMA+定时器+手动启动
- 方法4是在方法3的基础上稍微做了一些调整,主要面向的需求是:固定时间间隔的AD采样。比如说,每隔0.1秒,需要连续采样100次。
通常的做法是,使用定时器做一个定时中断,在定时中断里,调用函数:
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ad_value,1000); //启动,同时开启中断
方法和原理都比较简单,就不细说了。
5. 连续转换+DMA+定时器触发
- 方法5是对方法4里面的需求的实现过程进行了优化。STM32的定时器可以自动触发AD转换,省去了手动启动的麻烦。例如STM32的TIM1,TIM2,TIM3和TIM4,以及外部中断,都可以做为启动AD转换的触发源。
以TIM3做为触发源为例,如下:
- DMA这里要开启循环模式:
- TIM3的配置如下,这里实现了一个1ms的定时,也就是说每隔1ms自动触发一次AD转换:
- 主函数里代码如下:
- 然后,中断里做一下处理即可:
【STM32技巧】ADC模拟量采集的几种用法相关推荐
- STM32之ADC(模拟量-数字量的转化)
当外设的引脚是模拟量时,需要用到ADC,比如引脚的电压在0-3.3V之间,如果采用普通的方式,只能判断该引脚有没有电压,而不能判断具体是多少V,所以这个时候就可以利用ADC将引脚的电压转换为数字量,通 ...
- STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及傻瓜式解析)
STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及通俗解析) 利用STM32的片上外设可采集多个模拟量(如传感器数值),并在嵌入式程序中使用.如果只使用了一个通道,用时令ADC转换而后读取 ...
- Arduino初初教程7——模拟量采集
2019独角兽企业重金招聘Python工程师标准>>> 模拟量采集需要用到模拟量器件,这里主要指一些随着环境变化输出电压值随之变化的器件,如火焰传感器.部分温度传感器.可调电阻等等 ...
- PLC模拟量采集在工业自动化控制中的应用
在复杂的工业现场中,往往需要对温度.电压.电流.压力等等模拟量进行数据采集,可以借助PLC进行控制采集,但目前市场各种PLC模拟量采集模块十分多,不同的厂家不同的PLC都有自己独特的模拟量采集模块,而 ...
- PLC模拟量采集算法数学基础(线性传感器)
模拟量采集库如何设计,具体算法代码请参看下面这篇博文: PLC模拟量输入 模拟量转换FC:S_ITR_RXXW_BOSS的博客-CSDN博客_s_itr模拟量采集.工业现场应用特别广泛.大部分传感器的 ...
- 模拟量采集软件虚拟精度提升方案
模拟量采集软件虚拟精度提升方案 AI的数据采集精度是AI采集的重要指标,一般来说控制器的AI精度会有一个指标,比如)0.5%,这个精度是标定精度,实际AI通过高一个等级的测量系统如0.1%测量后,经过 ...
- Arduino UNO模拟量采集
Arduino UNO模拟量采集 环境准备 打开arduino开发环境 观察输出结果 环境准备 准备一个滑动变阻器,Arduino uno 板一块,接线图如下: 打开arduino开发环境 编写程序代 ...
- 树莓派拓展模拟量采集(AD)功能
1.前言 树莓派自身不带有模拟量采集功能(A/D)功能,当需要AD功能时,常通过IIC外接一个A/D模块来实现,如8位A/D芯片PCA9685.本文首先简要介绍PCA9685特性,然后基于树莓派的Bc ...
- Arduino最便宜的模拟量采集
对于大多数人而言,利用Arduino和传感器采集环境数据已经不是问题了,但是,如何控制成本问题呢? 今天我将带大家做一个最最简单的模拟值采集电路,当然这种电路早就有了,我只是引用而已. 大家常见的传感 ...
最新文章
- Kong APIGW — 基本操作
- linux开启kafka消费者命令,Linux kafka常用命令
- boost::regex模块用于测试特定于语言环境的表达式的帮助程序类
- 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
- 杠上百度?今日头条也做起搜索来了 | 畅言
- netty5、3 和socket
- ZOJ-1010 奇偶剪枝
- mysql建表语句转oracle_MYSQL事务他快你慢,都是你自己惹的祸
- python 图片对比文件夹_Python挑选文件夹里宽大于300图片的方法
- 历届奥斯卡获奖影片(1971-2014年)
- 团队作业7——第二次项目冲刺(Beta版本)
- 尔雅通识课题库【1】
- 链表-双向循环链表【C语言】
- 从零搭建一个vue项目
- 基于虚拟打印的PDF文档归档探索
- uniAPP 自定义页面导航烂 - 搜索 APP有效
- rn+android+sdk,RN与Android原生交互
- IntelliJ IDEA设置显示内存指示器的几种方法
- CVPR 2022 | 微软提出MiniViT:极致压缩视觉Transformer
- 测试颜色度的软件是什么情况,分光测色仪的测色应用以及注意事项