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
评论
  • 【下载】电源设计工程师指南(共542页)


  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • 51单片机超声波测距程序详解

    51单片机超声波测距程序详解 超声波四通道测距:超声波测距实现分为三大块: 其一是12864带字库的液晶驱动程序: 代码如下: /////////////////12864驱动程序/////////////////////////// //1写数据 void WriteDat...

    3小时前
  • 51系列单片机的引脚图

    51系列单片机的引脚图 端子介绍 l P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。 l P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。 l P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。 l P3.0~P3.7 P2口8...

    3小时前
  • 51单片机串口通信需要加超时中断吗?

    接收数据时,超过一定时间就算出错. 这个超时的时间是单片机自己算出的吗?超时的时间是由编程序的人定的,他定多长就多长从一段程序开始 实现电脑向 单片机发送一些数据,单片机返回Iget +数据 #include #define u...

    3小时前
  • 51单片机电机pid控制系统程序

    51单片机电机pid控制系统程序 本程序来源网上,小编进行了简单修改,还未验证。 /************************* 应用背景:直流电机的额定功率12V,额定转速3000rpm,光码盘12孔, 晶振为12MHz,定时/计数器T0检测转...

    3小时前
  • 51单片机指令集设计实例

    当你编写完一个程序后,通过软件调试,你可以看到程序的指令集,从指令集你就能知道单片机内部是如何工作的,比如数据存取的寄存器与地址,下面是电工之家找的一篇指令集,讲的蛮好的。 一、数据传送类指令(7种助...

    3小时前
  • 51单片机定时器工作原理及用法

    TMOD : 控制定时器的工作方式。8个bit,高四位 bit 控制 T1,、低四位 bit 控制 T0。因为定时器有4种工作方式;TMOD = 0x00(工作方式0),TMOD = 0x01(工作方式0),TMOD = 0x02(工作方式2),TMOD = 0x03(工作方式3)。...

    3小时前
  • 51单片机指令系统寻址方式

    指令给出参与运算的数据方式称为寻址方式。换句话说,寻址方式就是寻找确定参与操作的数的真正地址。 在MCS-51系列单片机的指令系统中寻址方式共有7种,立即寻址方式,mcs-51单片机的一种寻址方式,操作数就写在指...

    3小时前
  • 51单片机学习单片机之路总结

    学习单片机有一学期了,现在也由51转到STM32了。一直想对51的学习做一个总结。也希望对别人有一些启发。也给后学者提供一些建议。当然本文是我对自己学习过程的总结,若有不对的地方,还请高手指出。 我想,再看本...

    3小时前
  • 入手STM32单片机的知识点总结

    从STM32新建工程、编译下载程序出发,让新手由浅入深,尽享STM32标准库开发的乐趣

    前天
  • 单片机定时器之改良版:时间轮定时器

    前段时间把自己以前用的单片机定时器整理出来,我称之为简单定时器,这种简单定时器比较适合定时器使用量少的程序中,如果定时器数量要求多,精度要求高,效率就会有问题,为此,俺就实现了一个时间轮定时器,简单测...

    前天
  • 详聊单片机BootLoader的发展进化史

    Bootloader是一个用于引导嵌入式系统的软件程序,通常存储在芯片的非易失性存储器中,如闪存。Bootloader的主要功能是在系统上电后,负责初始化系统硬件并加载操作系统或应用程序到内存中执行。

    06-18
下载排行榜
更多
评测报告
更多
广告