STM32ADC自身的误差来源剖析
嵌入式之入坑笔记 2025-05-19

本文章主要研究影响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
 


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
下载排行榜
更多
评测报告
更多
广告