☰
高精度ADC选型全指南:从ENOB到模拟前端,不要被分辨率忽悠
2026/9/28 3:26:05 网站建设 项目流程

很多工程师第一次选高精度ADC,翻开datasheet看到24-bit、16-bit就觉得稳了,结果板子打样回来,实测有效位数比标称低了六七个bit,噪底还一塌糊涂。问题出在哪儿?多半是选型时只盯了分辨率,没盯真正决定系统精度的那几个参数。在这篇文章里,我想把高精度ADC硬件电路设计选型这件事从头捋一遍:哪些参数是决定性的,哪些参数只是数字游戏,参数与参数之间又怎么权衡。无论你是在做工业采集、仪器仪表、传感器前端还是精密电源监测,这套方法都适用,希望能帮你在画原理图之前把方向定对。

1. 分辨率背后的真相:ENOB、SINAD与标称位数的水分

先聊最容易被"位数"耽误的地方。

很多ADC datasheet首页最显眼的位置写着"24-Bit, Delta-Sigma ADC",但这只是它的分辨率(resolution),代表它能将满量程分成2的N次方份,并不代表每一份都站得住。真正决定测量质量的是无噪声位数:在没有任何输入信号的情况下连续采一组码,看散落范围有多大。假如一颗24bit ADC在PGA=1、低速模式下峰峰值噪声是5个LSB,那么它的无噪声分辨率大约是24 - log2(5) ≈ 21.7bit,这个数字才是你能真正信任的精度上限。

1.1 无噪声位数与峰峰值噪声

手册里有一对容易混淆的指标:RMS噪声和峰峰值噪声。RMS噪声是小信号下统计出来的标准差,峰峰值噪声则代表99.7%置信区间的包络,对高斯分布噪声来说大约是RMS的6.6倍。有效分辨率用RMS算,无噪声分辨率用峰峰值算,两者能差出2到3个bit。很多供应商喜欢在首页标有效分辨率,因为数字更漂亮,但做称重、测温这类需要稳定显示的应用,你该盯的是无噪声分辨率。

理想N位ADC的量化噪声对应的信噪比上限是:

SNR = 6.02 × N + 1.76 dB

比如16bit器件的理想SNR是98.08dB。但真实世界里还有热噪声、参考电压噪声、时钟抖动和谐波失真,所以datasheet会直接给你SINAD(信号与噪声加谐波失真比),并且用下面的公式换算成ENOB(有效位数):

ENOB = (SINAD - 1.76) / 6.02

选型的时候,与其看分辨率,不如看SINAD和ENOB在目标采样率、目标信号频率下的数值,那才是系统能做到的真实位深。同一颗ADC,数据速率从10SPS提到100kSPS,ENOB可能从21bit掉到16bit以下,不同应用的结论完全不同。

1.2 INL、DNL:校准也无法消除的线性误差

除了噪声,还有一对参数容易被忽略:INL(积分非线性)和DNL(微分非线性)。INL表示实际传输曲线与理想直线之间的最大偏差,这个误差是系统性的,做两点校准时无法彻底消除。DNL如果大于1 LSB,则意味着存在丢码,在闭环控制场景里,丢码往往比随机噪声更讨厌,因为它会让输出值在一个码附近跳变,控制环路会跟着抖动。

高精度测量场合,INL直接关系到你的测量曲线平不平。同样是16bit ADC,一个INL是±1.5 LSB,另一个是±4 LSB,在满量程范围内的最坏误差差异明显。对精度分布要求严格的设备,选型时一定要把INL、DNL放进对比清单。

1.3 不同应用场景对有效位数的真实需求

我的建议是,选型前先画一张需求表,把应用场景、数据速率和所需有效位数填进去,再回头挑架构:

应用场景所需有效位数数据速率量级常见架构选择
温度、应力应变、称重18~20bit以上10~100 SPSDelta-Sigma
电压电流精密监测16~18bit1~10 kSPSDelta-Sigma / SAR
振动分析、音频采集14~16bit50k~1 MSPSSAR / 高速Delta-Sigma
瞬态记录、示波器前端10~12bit10 MSPS以上流水线 / SAR

别小看这张表。我见过一个做振动监测的方案,最初选了一颗24bit Delta-Sigma,数据速率拉到一百多kSPS时ENOB已经掉到14bit,而一颗16bit SAR在同样速率下ENOB反而有12.5bit,成本也更低。选ADC不是选分辨率数字最大的,而是选在你需要的数据速率和信号带宽下ENOB最高的。

2. 采样、建立时间与输入驱动:为什么前端比ADC更容易翻车

datasheet电子特性表往后翻,有一组不会写在首页但直接决定电路成败的参数:采样电容、输入阻抗、建立时间、孔径延时。很多板子最终性能不行,问题恰恰出在ADC前面那一小段电路。

2.1 从采样保持到建立时间:灌水杯模型

可以把SAR ADC的输入端想象成一个带开关的水杯。采样阶段,开关闭合,水杯里的水要灌到和外部水位一致;开关断开后,才开始读数。如果灌水时间不够,读到的就是低一截的水位,这就是建立误差(settling error)。

建立时间取决于外部源阻抗和内部采样结构构成的RC时间常数。源阻抗越大,充电时间常数越大,同样的采样窗口内能建立到的精度就越差。所以SAR ADC的datasheet通常会给出不同源阻抗下的推荐参数,或者要求外部电容提供电荷缓冲。这是一个容易踩坑的地方:很多人随手在ADC前面接一个高阻分压网络,分压电阻到几百kΩ,结果精度差得离谱,不是ADC不行,而是源阻抗太高、采样瞬间电压跌落太大。

2.2 等效输入阻抗与电荷反冲

开关电容输入对外表现成动态负载,可以粗略估算等效输入阻抗:

Z = 1 / (f_sample × C_sample)

例如采样电容20pF、采样率1MSPS时,等效阻抗大约50kΩ。注意这是等效值,实际上每次采样瞬间抽取的峰值电流很大,普通运放会被直接拉出电压跌落,导致采样值偏低。

还有一个让很多人困惑的现象叫电荷反冲(charge kickback):每次采样开关断开,采样电容上残留的电荷会沿着输入引脚反冲回源头。如果上一次采样值是满量程附近,下一次采样是小信号,上一次的残留电荷会在输入端形成一个数mV量级的毛刺。前端滤波没处理好,这个毛刺会被当成信号采进去。

解决方法是ADC输入前加一个电荷反冲吸收电路:用一个几百nF的大电容作为电荷池,再串一个小电阻去隔离运放输出阻抗。这个电容要在每个采样周期内稳定住输入电压,容量必须远大于内部采样电容,通常取470nF到1μF量级。具体取值我在第5章会展开讲。

2.3 驱动运放怎么选:看建立时间而不是只看GBW

驱动高精度ADC的运放不能随便选。SAR ADC的建立精度要到1 LSB以下,16bit意味着0.0015%的建立精度。你去查运放datasheet时,要关注的关键参数不是GBW(增益带宽积),而是它在目标负载条件下的建立时间,尤其是0.01%、0.001%精度的settling time,以及它驱动大电容负载时是否会振铃。

很多精密运放的GBW很高,但直接驱动470nF容性负载就会振荡。正确做法是像前面说的,运放输出先串一个几十欧到几百欧的电阻,再接大电容到ADC引脚,用这个电阻把运放输出端和容性负载隔开,从而避免振荡。这个结构在ADI和TI的评估板上非常常见,照抄它基本不会错。

采样率和建立时间之间还有一对矛盾:数据速率提高一倍,留给采样建立的时间就短一倍,外部RC时间常数被迫缩小,噪声带宽又变大。高精度和高速度始终是权衡,选型时把这个账提前算清楚,你就能理解为什么有的系统宁可把采样率降下来换ENOB。

3. 基准电压与温漂:决定系统精度上限的隐藏变量

很多人把ADC选型当成选ADC本身,等画完原理图才想起来参考电压随便焊了一个三端稳压器。在高精度系统里,基准源从来没有资格当配角,它往往是系统精度天花板所在。

3.1 温漂是如何吃掉LSB的:一个算术例子

先做一道算术。16bit ADC搭配5V参考电压,1 LSB大约是:

5V / 65536 ≈ 76.3μV

如果一个基准源的温漂是10ppm/°C,环境温度相对校准温度变化±5°C,参考电压就会漂移±50ppm,也就是±250μV,直接吃掉3.3个LSB。如果系统工作温度范围是-20°C到+50°C,相对25°C偏差达到45°C,漂移量就是±450ppm,相当于±2.25mV,折合约30个LSB。25ppm还是10ppm的差别,在这个算例里一目了然。

更麻烦的是,基准电压的漂移不会被差分测量抵消,它直接改变满量程标度。ADC自身的噪声再低,只要基准源在温漂,系统精度就跟着漂。所以高精度场合的外部基准源选型权重,完全不亚于ADC本体。

3.2 精密基准源的核心指标与类型

选基准源时,我建议重点看这六个参数:

  • 初始精度:决定你需要多少校准工作量。初始精度差但温漂小的基准,通常可以通过两点校准救回来。
  • 温漂系数(ppm/°C):工业现场最关键的指标,直接决定系统全温域误差。
  • 输出电压噪声,尤其是0.1Hz到10Hz频段的低频噪声:低频采集场景下,这部分噪声会直接落在信号频带内。
  • 长期稳定性(老化率):对计量设备、长期在线监测很重要,单位通常是ppm/1000小时。
  • 负载调整率和线性调整率:反映基准源在不同负载电流和不同供电电压下的稳定程度。
  • 压差电压:低压供电系统里必须关注,别让基准源进入dropout区。

内部基准和外部基准的选择也要理性。很多ADC都内置基准源,但它的温漂和噪声通常只覆盖中低端应用。16bit以上系统几乎都会选外部精密基准源,这也解释了为什么精密基准芯片的价格往往不比ADC本身低多少。

从内部结构看,这类基准源大致有带隙、XFET和埋层齐纳等类型。带隙基准便宜、功耗低,但温漂和噪声一般;埋层齐纳温漂极低、噪声小,但要吃更高的供电电压和静态电流;XFET介于两者之间。选型时不要只盯着初始精度,把温漂和长期稳定性放在同样权重上,这两项在工业现场往往比初始精度更致命。另外,基准输出到ADC REF引脚的去耦和走线同样不能省,后面第5章会说具体做法。

4. SAR与Delta-Sigma架构选择:从输入结构、速率到接口的取舍

确定架构再谈型号,别反过来被型号带着走。高精度ADC目前主流就是SAR和Delta-Sigma两大阵营,搞清楚它们的脾气,选型就完成了一大半。

4.1 两种架构的工作原理差异

SAR(逐次逼近寄存器型)的思路是二分法:内部比较器配合电容阵列(CDAC),从最高位到最低位逐位试探,N位分辨率就是N次比较。它的特点是转换结束后输入开关断开,单次转换延迟很低,非常适合多通道扫描和多片同步采样。

Delta-Sigma则完全不同,它靠过采样和噪声整形把量化噪声推到高频,再用数字滤波器滤掉,换回远高于普通ADC的有效位数。代价是数字滤波器带来群延迟,通道切换后要等滤波结果稳定,不适合做快速多通道扫描。

两种架构放在一起对比,差异非常明显:

对比维度SARDelta-Sigma
典型有效位数12~18bit16~32bit
单通道数据速率可达数MSPS高精度下通常数十kSPS以内
多通道切换即时切换,延迟低需等待数字滤波器建立
抗混叠负担较大,需要前端RC配合过采样自带滤波效果,负担小
输入驱动要求开关电容,驱动要求高常内置缓冲器,驱动容易
典型场景工业多通道采集、电机电流称重、测温、电能计量

所以选型问题本质上是场景问题:信号变化缓慢、对精度要求极高,选Delta-Sigma;需要逐点响应、多通道轮询或高速同步,选SAR。

4.2 输入结构与PGA

确定架构后要看输入接口结构。单端输入最简单,但共模噪声抑制差,适合驱动源本身很干净的场合。伪差分是单端信号加一个独立的负输入引脚,可以抑制共模干扰,但负端不能太偏离地。真差分输入能把两条线上的共模干扰转成差分信号相互抵消,是电桥输出、高噪声环境的首选。注意手册里允许的绝对共模输入范围,超出范围会导致线性度直接崩坏。

不少ADC内置PGA,测微伏级信号时可以先把信号放大再转换,等效提高小信号的动态范围上限。但PGA越大,折合到输入的噪声也越大,数据速率往往受限。选型时把"几个增益档位下的无噪声位数"放在一起看,别被最高增益档的理论分辨率迷惑。我见过有人在PGA=128下用一颗高分辨率ADC测微伏信号,结果有效位数只剩一半,还以为是ADC不行。

4.3 接口与时序:MCU和FPGA的视角

现在的精密ADC基本以SPI接口为主,一颗芯片靠SCLK、CS、SDIO几条线完成读写。用MCU还是FPGA去控,关注点不同:MCU不在乎SPI时钟极限能到多高,FPGA则希望SCLK尽量高,最好几十MHz,还要看帧格式是否支持连续读模式。如果你已经在用FPGA,选型时注意SPI时序是否支持你现有的IP核,省得后面为时序适配折腾半天。

多片ADC同步采样时,一定要找带SYNC引脚或外部触发引脚的型号,用同一根触发线启动所有芯片的转换,才能保证通道间的采样瞬间对齐。很多芯片的转换启动信号支持多种触发源:软件写位、定时器事件、外部PWM都能触发,甚至还有类似SOCA/SOCB的双触发分组设计。这类分组触发很适合在一个系统里错峰采集不同优先级的通道,把转换请求打散,避免所有通道挤在同一时刻抢总线。

另外,你还要看采样保持电路是否有旁路开关。有些SAR ADC内部有采样保持旁路,适合长时间跟踪信号后只做转换,这在多路复用场景里能简化前端设计,但牺牲了一点灵活性。按实际需求来,不要盲目追高配。

5. 从参数表到原理图:模拟前端、去耦与布局的落地细节

参数选完了只是第一步。真正让设计翻车的,往往是从芯片引脚出去的那几毫米走线。这一节讲我最常被问到的问题:模拟前端、参考去耦和PCB布局到底怎么做。

5.1 两级RC:抗混叠与电荷反冲滤波器

一个典型的高精度模拟输入链路是这样的:传感器 -> 调理运放 -> 抗混叠RC -> 电荷反冲RC -> ADC引脚。

抗混叠RC的职责是把超过奈奎斯特频率的信号压下去,避免高频噪声折叠回带内。截止频率理论上设为信号带宽的3到10倍即可,具体数值要结合ADC的数据速率和数字滤波能力。典型取值可以是R=1kΩ、C=15nF,但有一个原则:ADC引脚方向看到的电容不能太小。

电荷反冲RC是另一级电路,电容放在离ADC引脚最近的位置,容量要远大于内部采样电容,通常470nF到1μF,串联电阻取几十欧到几百欧,作用是把运放和这个大电容隔开,防止运放驱动容性负载振荡。这两级RC组合在一起,就是常说的charge-kickback filter的基本形态。很多新人只放一个几nF的滤波电容,结果电荷反冲毛刺和建立误差同时出现。

5.2 基准去耦、电源与地平面

参考电压去耦电容怎么放,一定要以datasheet为准。有的芯片要求REF引脚对地一个10μF陶瓷电容就够,有的则明确禁止某些容值组合。多数评估板的做法是10μF和0.1μF并联,把0.1μF那颗放在离REF引脚最近的位置。如果你使用外部基准芯片,基准输出走线同样要短而粗,输出端电容按基准芯片手册要求配置,不要想当然去改。

电源方面,模拟电源和数字电源建议用两个LDO各自供电,中间用磁珠或0Ω电阻在单点汇合。地平面用一整片模拟地,数字器件放远一点,ADC的数字IO走线不要跨越模拟输入引脚下方。有一个容易忽略的点:很多ADC的AGND和DGND引脚在封装上挨着,画PCB时把它们都连到模拟地,不要在ADC正下方切开地平面。这点看起来小,在高分辨率系统里对噪底影响非常直接。

5.3 一个帮我避免多次改板的习惯

分享一个我自己的习惯:在原型阶段,原理图里预留几个0402封装的0Ω电阻位——输入RC的串联电阻、基准引脚的串联电阻、电源滤波磁珠都做成可调。调试时发现某个频段有杂散,直接换这几个电阻,不用重新打样。这个习惯帮我省下不少迭代时间。

还有一个经验:如果你用外部PWM或定时器触发ADC转换,触发信号本身要干净。触发边沿的抖动会直接变成采样时刻的抖动,对高频输入信号尤其致命。触发走线要短,最好在ADC附近串一个小电阻做阻尼,避免过冲和振铃。很多人花大价钱选高精度ADC,却在触发信号上栽了跟头。

6. 软件滤波与校准:把硬件的最后几个bit榨出来

硬件定型之后,软件还能再帮一把。尤其低频、稳定信号的测量场景,软件处理得当可以把有效分辨率再往上推一两个bit。

6.1 过采样与滑动平均

最基础的逻辑是:对同一个直流信号做N次采样再平均,随机噪声会被压制到原来的1/√N。平均4次,相当于SNR提升6dB,约等于增加1bit有效分辨率。这就是过采样技术的基本思想。对低频、稳定信号而言,用软件均值替代单纯堆高ADC硬件位数,往往是性价比更高的方案。

滑动平均是工程里最常用的实现,窗口大小取2的幂可以避免除法:

#define ADC_AVG_N 8 // 必须为 2 的幂,用移位替代除法 static uint16_t adc_buf[ADC_AVG_N]; static uint8_t adc_idx; static uint32_t adc_sum; uint16_t adc_filter_sample(uint16_t sample) { adc_sum = adc_sum - adc_buf[adc_idx] + sample; adc_buf[adc_idx] = sample; adc_idx = (adc_idx + 1) & (ADC_AVG_N - 1); return (uint16_t)(adc_sum >> 3); // 除以 8 }

这段代码没有乘法没有除法,循环开销很小,在MCU上跑几十kHz的ADC数据流很轻松。

6.2 去极值均值:抗脉冲实用方案

均值滤波对脉冲干扰没有抵抗能力。工业现场常见的浪涌、射频干扰会产生个别离谱的采样值,一个尖峰就能把均值拉偏一大截。所以更实用的是去极值均值:每轮采7个点,去掉最大值和最小值,剩下5个求平均。这样既保留了平均压噪声的能力,又能抗脉冲。

uint16_t adc_median_avg(uint16_t* samples, uint8_t len) { // len 建议取 7,去最值后求平均 uint8_t i, j; uint16_t tmp; for (i = 1; i < len; i++) { // 插入排序 tmp = samples[i]; j = i; while (j > 0 && samples[j - 1] > tmp) { samples[j] = samples[j - 1]; j--; } samples[j] = tmp; } uint32_t sum = 0; for (i = 1; i < len - 1; i++) sum += samples[i]; return (uint16_t)(sum / (len - 2)); }

这段代码为了简洁直接对原数组排序,介意的话可以在局部数组里先复制一份再排序。实际使用中每轮采样7个点,性能影响很小,但脉冲抵抗能力强很多。

6.3 两点校准与DMA搬运

软件校准对高精度系统帮助很大。第一步先做偏移校准:让模拟输入端真实接地,采一组码取平均,记为offset_code,之后每次采样都减去它。第二步做增益校准:给一个接近满量程的精密基准,比如0.9倍Vref,采平均后记为gain_code,线性校正系数就是:

scale = (target_code - offset_code) / (gain_code - offset_code)

两个校准点做完,初始精度误差、运放偏移和增益误差都能被压掉大部分,剩下的主要是温漂和非线性。所以高精度系统最好在输入端保留校准通道:用模拟开关或继电器把ADC切到地或精密基准,校准完再切回信号。运行时周期性自校准对抑制长期漂移非常有效。

数据搬运方面,转换完成中断里逐字节读SPI会引入不确定延迟,进而影响采样节奏。更推荐的做法是用DMA把SPI接收数据直接搬到缓冲区,一个通道采集完直接进入下一轮,CPU只在缓冲区满时处理。这样采样间隔抖动从几百ns压到个位数ns,对高速同步采集帮助很大。这里补充一句:如果你在STM32这类MCU上做多通道ADC+DMA采集,DMA流中断和ADC全局中断的配合确实值得认真设计,很多人在这上面踩过坑。

高精度ADC的选型最终是一道系统题。我说一个自己长期坚持的做法:拿到一颗新ADC,不急着看首页的分辨率,先翻datasheet最后几页的典型应用电路,照抄它的输入RC、基准去耦和电源滤波,然后画板、出样,用信号发生器灌一个干净正弦波,实测SINAD,再和自己算出来的理论值对账。只要这条链路的数据对得上,后面的设计基本不会出大的偏差。这套方法陪我走过了不少型号,没什么高深的道理,但确实能少走很多弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询