ADC(Analog-Digital Converter)模拟-数字转换器
- ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
- (分辨率)12位逐次逼近型ADC,(转换频率)1us转换时间
- 输入电压范围:0 ~ 3.3V,转换结果范围:0~4095
- 18个输入通道,可测量16个外部和2个内部信号源(内部温度传感器与基准电压)
- 规则组和注入组两个转换单元(增强功能)
- 模拟看门狗自动监测输入电压范围
基准电压决定了输入电压的范围
STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道
作用(个人简记):从io口读取模拟量,通过转换,得出对应的数字量存在寄存器中
AD转换的步骤 与 时间
AD转换的步骤:采样,保持,量化,编码 [ADC]采样时间和转换时间
STM32 ADC的总转换时间为:
TCONV = 采样时间 + 12.5个ADC周期
- (其中采样时间可调整,越长越准确)
- (为什么转换时间是12.5个ADC周期?请参考上面视频) stm32是12位ADC,要比较12次比较过程动画
例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期
TCONV = 1.5 + 12.5 = 14个ADC周期 = 1μs
stm32ADC的转换模式
-
ADC单通道:
- 要求进行一次ADC转换:配置为单次模式使能,扫描模式失能。这样ADC的这个通道,转换一次后,就停止转换。
- 要求进行连续ADC转换:配置为连续模式使能,扫描模式失能。这样ADC的这个通道,转换一次后,接着进行下一次转换,不断连续。
-
ADC多通道:
-
要求进行一次ADC转换:配置为单次模式使能,扫描模式使能。这样ADC的多个通道,按照配置的顺序依次转换一次后,就停止转换。
-
要求进行连续ADC转换:配置为连续模式使能,扫描模式使能。 这样ADC的多个通道,按照配置的顺序依次转换一次后,接着进行下一次转换,不断连续。
-
因此,得出结论:扫描模式只在多通道的条件下有效,来使得各个通道按照配置循序依次转换。而单次模式无论在单通道还是多通道下只对这些或者这个通道进行一次转换,连续模式无论是在单通道还是多通道下都对这些或者这个通道不断进行连续的转换。
注意!扫描模式一个组内所有通道扫描完才会产生一次EOC(End Of Convert)标志位,而再产生标志位时,(规则组)数据寄存器的值已经被一个又一个的通道数据覆盖,只剩下了最后一个通道的数据,所以我们需要用DMA在转换过程中辅助转运数据。
ADC框图
输入部分:支持多路输入,分为两个组输入AD转换器。
分为注入组与规则组 举例子说明
- 注入组
- 可最多选择4个通道
- 注入组有四个数据寄存器,可同时储存
- 规则组
- 可最多选择16个通道
- 注意到规则组只有一个数据寄存器,新数据会覆盖旧数据
stm32的ADC引脚
配置stm32ADC的步骤
1. 开启rcc时钟(ADC,与gpio)
2. 配置ADC的是时钟分频
3. 配置gpio为模拟输入模式
4. 配置输入开关(点菜,把菜(各个通道)点在菜单(规则组或注入组)中)
- 选择某个通道,并配置各通道顺序
- 配置采样时间
5. 配置ADC转换器(转换方式等)
- 是否开启扫描模式
- 是否开启连续模式
- 配置两个ADC的状态(Reg组或Ing组)
- 配置数据对齐方式
- 配置通道数量
- 配置ADC转换触发方式(软件或硬件触发) 如何实现硬件触发 | 库函数解释
7. 开关控制 ADC_cmd() 使能ADC
8. 校准 校准的函数介绍
- 函数用法
- 复位校准与开始校准函数介绍
- ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。在
校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换
中每个电容器上产生的误差。
9. 软件触发转换,读取转换值
uint16_t AD_GetValue(void)
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); //等待ADC采样(55个周期) 转换 (12.5个周期)
return ADC_GetConversionValue(ADC1);
}