ADC采样精度到底怎么算?别只盯着12位、16位了,真正决定精度的是这几个误差

创业资讯
2026 09-10 17:31:04
分享

很多硬件工程师第一次做ADC选型,最容易陷入一个误区ADC是16bit,所以精度就是16bit,实际上,这两个概念差得很远。

16bit只是告诉你ADC理论上可以把满量程成2^16=65536份,但真正拿到板子上测电压,结果可能远没有想象中那么准。尤其是做电池电压、电流采样、温度采集这类电路时,ADC精度不能只看一个参数,而要把量化误差、偏移误差、增益误差、INL、DNL、参考电压、输入源阻抗、噪声和温漂全部放进来考虑,这也是很多规格书上看起来很准,实测却差不少的根源。

为了让大家一次彻底掌握ADC设计选型,我搜集了网上各个大厂关于ADC的设计指南,本文的内容也是基于这些大厂的指南来写的,站在巨人的肩膀上才能走得更远哦,文末有获取方式,大家需要的自取哈:

那这些东西如何考虑呢?今天咱们就聊聊这个问题。

先搞清楚1 LSB到底是多少?

假设一个12 bit ADC,参考电压VREF=3.3V,那么理想情况下:

计算得到1 LSB≈0.806mV,也就是说,ADC理论上的最小量化步进只有0.806mV。如果换成16 bit,1 LSB≈50.4μV,看到这里是不是觉得16 bit非常厉害?先别急。

50µV只是理论分辨率,不代表你真的能测准50µV,因为ADC内部还有各种误差,外面还有参考源噪声、电源噪声、PCB串扰,接下来我们聊一下ADC精度最容易搞混的几个参数

1. Offset Error——偏移误差

假设ADC输入0V,理论上应该输出0,但实际输出可能是几个LSB。比如Offset=+3LSB,对于12 bit、3.3V参考:3×0.806=2.42mV

这意味着即使输入端完全是0V,ADC仍然可能显示约2.42mV。这个误差最大的特点是,它基本表现为整体平移,所以偏移误差其实是比较好处理的,可以通过软件校准消掉。

2.Gain Error——增益误差

增益误差更像是ADC的比例尺不准了,假设满量程理论应该对应3.3V,但实际满量程对应3.29V,那么整个转换曲线就不是理想斜率。例如ADC实际存在Gain Error=0.1%,测量3.0V时,仅增益误差就可能带来:3.0×0.1%=3mV

所以对于高精度测量,Offset和Gain通常需要分开处理。

3.真正让ADC非线性的,是INL和DNL

这两个参数很多人看规格书容易跳过去,但做精密ADC设计时非常重要。DNL是微分非线性误差,DNL关注的是每一个ADC码之间的实际步长是不是一样,理想情况下每一步应该是1LSB,如果某一级实际只有:0.7LSB或者1.3LSB,这就是DNL误差,严重时甚至可能出现丢码。

INL是积分非线性误差,INL关注的是实际转换曲线和理想直线到底偏了多少,例如规格书写INL=±2LSB,对于前面的12 bit ADC:2×0.806=1.61mV

这意味着即使你把Offset和Gain都校准好了,ADC内部的非线性仍可能贡献约±1.61mV的误差,所以这里就能看出来校准ADC并不等于ADC变成理想ADC。校准主要解决系统性的偏移、增益问题,而INL/DNL属于转换器自身线性度的问题。

4.参考电压

ADC测量本质上是在做:

所以ADC不只是测输入电压,它其实是在测输入电压 / 参考电压。

假设VIN=1.65V,VREF=3.3V,理论输出:Code=1.65/3.3×4096=2048

但是如果参考电压实际变成3.3V+10mV=3.31,那么:Code=1.65/3.31×4096≈2042Code

已经差了大约6个码,所以很多时候ADC本身没问题,真正拖后腿的是VREF。这也是为什么做高精度ADC时,参考源的噪声、初始精度、温漂、负载调整率都不能忽略。

5.ADC输入端的RC滤波,为什么有时候反而把精度搞差?

这是实际硬件设计中非常容易踩坑的一点,很多人看到ADC前面需要滤波,直接串一个10k电阻,再并一个100nF电容,从低频滤波角度看没问题

代入R=10kΩ,C=100nF,得到fc≈159Hz看起来很合理。

但ADC内部通常存在采样保持电容。ADC采样瞬间,需要从外部信号源抽取电荷,如果前面的源阻抗太大,采样电容来不及充电,ADC采到的电压就可能偏低。所以ADC数据手册经常会规定一个最大推荐源阻抗,或者要求外部增加缓冲运放。

RC不是越大越好,这是ADC前端设计非常重要的一条经验。

说了这么多,来算一个实际例子吧,假设现在做一个0~3.3V的12 bit ADC系统。参数假设量化误差:±0.5LSB,Offset:±2LSB,Gain:±3LSB,INL:±2LSB,参考电压误差换算:±2LSB,输入噪声:±2LSB,最简单的工程估算,可以把这些误差按照最坏情况相加:Errortotal=0.5+2+3+2+2+2=11.5LSB

对应电压是11.5×0.806≈9.27mV

所以这个系统虽然是12 bit ADC,理论LSB只有0.806mV,但实际最坏情况下,系统误差可能已经接近±9mV。

这就是为什么我一直觉得ADC选型不能只看多少bit,真正应该看的是整个测量链路的Total Error。

如果还要考虑温度,问题会更复杂

假设ADC的Offset Drift为:10μV/℃,系统工作温度范围:−40℃∼125℃,温差:ΔT=165℃,那么仅偏移漂移就可能达到10μV/℃×165℃=1.65mV,如果你的产品是采集微弱信号,那这个影响已经很大了,所以做精度预算时,不能只拿25℃下的数据来算。真正应该算的是整个工作温度范围内的误差。

那在实际项目里,应该怎么计算评估呢,我通常会把ADC误差拆成三个部分来看,第一部分ADC自身误差,包括:

    • Offset Error
    • Gain Error
    • INL
    • DNL
    • Quantization Error

第二部分是参考和电源影响,包括:VREF初始精度、VREF噪声、VREF温漂、AVDD噪声

第三部分是外部模拟电路影响,包括:分压电阻精度、运放Offset、运放噪声、RC滤波、源阻抗、PCB漏电、EMI串扰、地弹噪声

尤其是电阻分压,假设:

如果R1、R2都是1%电阻,你以为分压比例就是1%以内?实际上两个电阻的误差会共同影响比例。所以如果ADC本身已经做到±1LSB,但前面的分压网络贡献了±10mV,那么这个ADC选16 bit基本没有意义。

还有个问题:那软件平均能不能提高ADC精度?

可以降低随机噪声,但不能把ADC自身的INL、Gain Error凭空消掉。如果噪声是随机的,采集N次做平均,理论上噪声标准差可以近似降低:

比如原始噪声σ=4mV,平均16次:

确实有效,但如果误差来自一个固定的+5mV Offset,你平均1000次,结果仍然是+5mV,所以要记住平均主要对随机噪声有效,对系统性误差没有魔法。

那真正靠谱的ADC精度计算方法到底咋搞呢?

做项目时,不建议看到规格书上一堆参数就直接相加,更实用的方法是先建立一张误差预算表:

误差来源:ADC Offset+ADC Gain+INL+量化误差+VREF+输入电阻+运放Offset+噪声,然后根据误差的性质分别计算。如果采用最坏情况设计,可以直接做绝对值累加如果这些误差彼此独立且近似随机,可以进一步采用RSS方法:

这两种算法得到的结果可能差很多,产品做可靠性设计时,我更倾向先用Worst Case把最坏的结果算出来,再根据实际测试数据优化。所以ADC真正难的,从来不是12 bit还是16 bit,真正难的是你能不能把这16 bit里面,到底有多少bit是真正有用的,算清楚。如果一个16 bit ADC:1 LSB=50μV,但整个系统噪声和误差已经达到±5mV,那么有效分辨能力才是你要关注的,这种情况下,ADC标16 bit更多只是一个规格参数,真正决定测量结果的,是整个模拟前端和误差预算。

所以以后拿到ADC规格书,我建议不要先看Resolution 16 bit这一行。

先去找:Offset、Gain Error、INL、DNL、Reference、Noise、Temperature Drift、Input Source Resistance。把这些参数带入你的实际电路算一遍,你才知道这颗ADC到底够不够用。

ADC设计选型很重要,精度计算是一名硬件工程师必须要掌握的基本技能,我把我平时看到的比较好的各个大厂出的ADC设计的资料,整理成了一个资料包,看完要是你还不会做ADC的设计选型,你来找我,我保证不打你,当然还整理了芯片半导体行业其它详细资料。

长按下方图片添加即可领取资料

(来源:与非网)
The End
免责声明:本文内容来源于第三方或整理自互联网,本站仅提供展示,不拥有所有权,不代表本站观点立场,也不构成任何其他建议,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容,不承担相关法律责任。如发现本站文章、图片等内容有涉及版权/违法违规或其他不适合的内容, 请及时联系我们进行处理。
新领创业、分享最新创业资讯、新领创业资讯、创业资讯、智能科技