本文章主要研究影响STM32 ADC模数转换器精度的主要误差来源,为嵌入式开发遇到采样问题时提供一些参考思路。
误差是什么呢?
大白话说就是真实数据与理想数据之间的偏差。
ADC的误差存在于所有的ADC模数转换器中,转换精度将取决于ADC器件的误差消除情况。
STM32 数据手册的ADC特性描述章节中有分析这些误差的来源情况,也规定了STM32的ADC的不同精度误差类型。
为便于展开叙述,将精度误差用1 LSB 的倍数来表示。
对于电压的采样而言,分辨率取决于ADC的转换位数和外部提供的参考电压,通过将 LSB 数乘以 1 LSB 对应的电压来计算电压误差。
ADC 自身设计带来的误差
1、偏移误差
偏移误差是指第一次实际转换和第一次理想转换之间的偏离。
第一次转换发生在数字ADC输出 从0变为1时。
理想情况下,当模拟输入介于0.5 LSB和1.5 LSB之间时,数字输出应为1。第一次转换发生在0.5 LSB处。用EO表示偏移误差。可通过应用某些方法可以轻松校准偏移误差。
比如:
在STM32 ADC的采样中,电压的最小可被测量的电压用LSB作为单位进行量化:
在 VREF+ = VDDA,ADC为12bit 情况下:1 LSB = (VREF+) / 4096
如果 VREF+ = 3.3 V,则在理想情况下,1LSB = 805.6µV,则:
402.8 µV (0.5 LSB = 0.5 × 805.6 µV)的输入应该会转换成数字 1 输出。但是实际上, ADC 转换的数字输出可能仍然是读数 0。如果是 550 µV 的模拟电压输入才有可能获得数字输出 1,则:
偏移误差 = 实际转换 – 理想转换EO = 550 µV – 402.8 µV = 141.2 µVEO = 141.2 µV / 805.6 µV = 0.17 LSB
当大于0.5 LSB的模拟输入电压生成第一次转换时,偏移误差为正。如下图:
当小于0.5 LSB的模拟输入电压生成第一次转换时,偏移误差为负。如下图:
2、增益误差
增益误差:最后一次实际转换和最后一次理想转换之间的偏离。
增益误差用EG表示。最后一次实际转换是从0xFFE到0xFFF的转换。
理想情况下,当模拟输入等于VREF+ – 0.5 LSB时,应存在从0xFFE到0xFFF的转换。
因此对于 VREF+= 3.3 V,最后一次理想转换应发生 在3.299597 V处。
如果ADC提供VAIN < VREF+ – 0.5 LSB的0xFFF读数,将获得负增益误差。
如下:
增益误差:
EG = 最后一次实际转换 – 理想转换如果VREF+ = 3.3 V且VAIN = 3.298435 V时生成从0xFFE到0xFFF的转换,则:EG = 3.298435 V – 3.299597 VEG = –1162 µVEG = (–1162 µV / 805.6 V) LSB = –1.44 LSB
如果VAIN等于VREF+时没有得到满量程读数(0xFFF),则增益误差为正。
正增益误差:
负增益误差:
3、微分线性误差
微分线性误差(DLE):实际步进和理想步进之间的最大偏离。
这里的“理想情况”不是指理想传输曲线,而是指ADC分辨率。
用ED表示DLE。
ED = 实际步宽 – 1 LSB
理想情况下,1 LSB的模拟输入电压变化量应导致数字量变化。
如果需要大于1 LSB的模拟输入电压才能导致数字代码变化,将观察到微分线性误差。
所以,DLE对应于从一个数字量变为下一个数字量所需的最大额外电压。
DLE也称为微分非线性(DLE)误差。
如下:
给定数字输出应对应于模拟输入范围。
理想情况下,步宽应为1 LSB。
假设1.9998 V至 2.0014 V模拟输入电压范围内的数字输出相同,
则步宽为:
2.0014 V – 1.9998 V = 1.6 mV
因此,ED等于较高(2.0014 V)和较低(1.9998 V)模拟电压之间的电压差减去1 LSB所对 应的电压。
如果VREF+ = 3.3 V,则1.9998 V(0x9B1)的模拟输入可提供介于0x9B0和0x9B2之间的结 果。同样地,2.0014 V(0x9B3)的输入可提供介于0x9B2和0x9B4之间的结果。
因此,0x9B2步进所对应的总电压变化量为:
0x9B3 – 0x9B1,即 2.0014 V – 1.9998 V = 1.6 mV (1660 µV)ED = 1660 µV – 805.6 µVED = 854.4 µVED = (854.4 µV/805.6 µV) LSBED = 1.06 LSB
假设当步宽小于1 LSB时,电压高于2.0014 V不会导致0x9B2数字代码,则ED为负
4、积分线性误差
积分线性误差:为任何实际转换和端点相关线间的最大偏离。
用EL表示ILE。
端点相关线可以定义为A/D传输曲线上连接第一次实际转换与最后一次实际转换的线。
EL是指与每一次转换的这条线的偏离。
因此,端点相关线对应于实际传输曲线并且与理想传输曲线不相关。
ILE也称为积分非线性(INL)误差。ILE是整个范围内DLE的积分。
示例:
如果从 0 到 1 的第一次转换发生在 550 µV 处并且最后一次转换 (0xFFE 到 0xFFF)发生在 3.298435 V (增益误差)处,则传输曲线上连接实际数字代码 0x1 和 0xFFF 的线为端点相关线。
4、总未调整的误差
总未调整误差(TUE):为实际和理想传输曲线间的最大偏离。
TUE是记录到的任何输入电压的理想预期值与从ADC获得的实际值之间的最大偏离。
TUE不是EO、EG、EL与ED之和。
偏移误差影响较低电压的数字结果,而增益误差影响较高电压的数字输出。
如下:
如果VREF+ = 3.3 V且VAIN = 2 V,则理想结果为0x9B2。
但是,如果得到的转换结果为0x9B4, 由于DLE和ILE同时发生,因此偏离可能源于偏移。
TUE = 绝对(实际值 – 理想情况值)= 0x9B4 – 0x9B2 = 0x2 = 2 LSB