(一)简介
- ADC (Analog-Digital Converter)模拟-数字转换器
- ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
- 12位(分辨率)逐次逼近型ADC,1us(1MHz)转换时间
- 输入电压范围:0~3.3V,对应转换结果范围:0~4095(0~2^12-1)
- 18个输入通道,可 测量16个外部和2个内部信号源
- 规则组(常规事件)和注入组(突发事件)两个转换单元
- 模拟看门狗自动监测输入电压范围
- STM32F103C8T6 ADC资源:ADC1、ADC2, 10个外部输入通道
一般读取引脚我们只能获取高电平或者低电平,但是使用ADC之后,就可以把高低电平之间的任意电压进行量化,最终用一个变量表示,读取这个变量,就可以知道计算得知具体电压。
(二)ADC原理结构
1、逐次逼近型ADC学习
以前单片机性能不强的时候,需要外挂一块ADC芯片才能进行AD转换,下图中的通道选择开关表示一个可以通过模拟信号的数据选择器,有多少ADC的通道数即多少的开关,STM32内部的ADC有18个输入通道。
通过比较器进行逐次的比较,即从高位到低位依次判断是1还是0的过程。一遍遍的比较至近似相等。
2、ADC框图
- 触发ADC转换的信号:①软件触发,在程序中调用一条代码,就可以启动转换了。②硬件触发,就是这里的这些触发源(EXTI_11/EXTI15开始连接的两控制器)。
- 参考电压:芯片的VDDA和VSSA在电路中默认接了VREF,因此没有VREF±引脚。同电源0~3.3V
- ADCCLK:来源于外设总线预分频器,最大14MHz,因此把时钟源分频时候不能弄超了。
- 数据寄存器:存数据
- 模拟看门狗:可以存一个阈值高限和一个阈值低限。启动并指定了看门的通道,一旦数据超过限制范围,就会乱叫,即申请一个中断AWD。
- 通道组完成信号:转换完成之后,也会有一个信号,EOC是规则组的完成信号,JEOC注入组完成信号。这些信号可以渠道NVIC申请中断
3、ADC基本结构
手册引脚中只有IN0~9共10个通道,其他地方就没有了。因此芯片只有10个外部输入通道。下图中ADC12_IN0的意思是ADC1和ADC2的IN0都是在PA0上的,即引脚全都是相同的。因此ADC1和ADC2可以同时运行,即双ADC模式。
4、规则组的四种转换模式
参数:单次/连续、扫描/非扫描
【单次转换,非扫描模式】
【连续转换,非扫描模式】
【单次转换,扫描模式】
【连续转换,扫描模式】
(三 )AD转换过程补充
1、触发控制
通过设置EXTSEL寄存器来选择控制源。
2、数据对齐
数据寄存器是16位的,ADC是12位的,因此存在一个数据对齐的问题,以便正确获取数据。一般使用右对齐,直接得到转换结果。
数据对齐常用于控制精度,如果后面的四位不要了,可以左对齐后只取高八位。
3、转换时间
AD转换的步骤:采样,保持;量化,编码
STM32 ADC的总转换时间为:TCONV=采样时间+ 12.5个ADC周期
需要采样保持的原因是,电压是波动的,因此想要在转换过程中,保持稳定。就需要这个采样保持电路。整个过程耗费时间即为采样时间。
12位的ADC需要12个转换周期
例如:当ADCCLK= 14MHz,采样时间为1.5个ADC周期TCONV= 1.5 + 12.5 = 14个ADC周期= 1μs
4、校准
- ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差
- 建议在每次上电后执行一次校准
- 启动校准前,ADC必须处于关电状态超过至少两个ADC时钟周期
校准过程是固定的,只需要注意调用即可。
5、硬件电路
ADC外围电路设计:方便信号接入。
①电位器产生可调电压(滑动变阻器),注意阻值不要太小。
②因为电阻阻值没法直接测量,就需要串联一个电阻分压(阻值近似传感器阻值),来得到一个反应电阻值电压的电路。
③电压转换电路,同样的需要电阻进行分压。根据分压公式计算PA2电压范围,PA2=VIN/50K*33K