CubeMX配置功能系列:ADC(上)
目录
1. 说明
ADC作为对我来说不怎么用的功能,记录一下很有必要。本文以STM32G4系列为例。供自己学习与记录且只做简单介绍。有一定基础的朋友可参考。
2. Analog-to-Digital Converter简介
模拟到数字转换器,简称ADC。将连续的模拟信号转换为数字信号。
3. STM32里的ADC是如何进行转换的?
采用的是SAR(逐次逼近)的方法。通过二分比较使数字量逼近真实的模拟信号量。
一般stm32中的ADC储存转换结果的寄存器有效位为12位,也可以说该ADC的分辨率为12位。模拟量经过转换后与数字量是线性关系[1],0x000代表测量最小值。0xfff代表测量最大值(即参考电压值)。
3.1. 数据对齐
尽管分辨率为12位,也是放在16位寄存器里的,那么就涉及数据对齐的问题。
- 若12位数据是右对齐的,即结果为0x0???,这样得到的结果直接就是转换结果。
- 若选择左对齐,即结果为0x???0,相当于
0x0???<<4
不会有人觉得是左移1位吧 我们都知道右移四位相当于乘以24,比实际数据增大了16倍。那么我们为什么还需要左对齐呢?有时我们对分辨率要求不高,只需大概判断,所以我们用左对齐取出寄存器的高8位,相当于舍弃4位转换精度,降为8位分辨率。
3.2. 具体说明:
例如,我们需要测量模拟量为0.9V 过程如下[2]:
- 通过GPIO口采样待测电压到电容上。
- 切断与待测信号的连接,将待测电压保持在电容上。
- 我们从最高位开始 ?000-0000-0000 ,我们知道 1000-0000-0000 刚好对应十进制2048,根据线性关系2048刚好对应参考电压的一半。所以这里相当于将参考电压值的一半1.65v与待测电压比较。如果待测电压没有1.65v高,就将最高位置0。我们就知道待测电压对应在0~2048之间。此时我们就要和1024比较,1024二进制表示为 0100-0000-0000,刚好是次高位置1的情况。以此类推,直到12位全部比较完,就能确定哪些位是1哪些位是0。
4. ADC的转换模式
4.1. 关于是否要持续转换
- 单次转换模式:ADC只执行一次转换;
- 连续转换模式:转换结束之后马上开始新的转换;
4.2. 如果有多个通道
- 扫描模式:ADC扫描被规则通道和注入通道选中的所有通道,在每个组的每个通道上执行单次转换。在每个转换结束时,这一组的下一个通道被自动转换。如果设置了CONT位(开启了连续转换模式),转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。
- 间断模式:触发一次,转换一个通道,再触发,再转换。在所选转换通道循环,由触发信号启动新一轮的转换,直到转换完成为止。
5. 参考博客
给星星的是我觉得写得很好的博客。