ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

高精度ADC选型全指南:从ENOB到模拟前端,不要被分辨率忽悠

高精度ADC选型全指南:从ENOB到模拟前端,不要被分辨率忽悠 很多工程师第一次选高精度ADC翻开datasheet看到24-bit、16-bit就觉得稳了结果板子打样回来实测有效位数比标称低了六七个bit噪底还一塌糊涂。问题出在哪儿多半是选型时只盯了分辨率没盯真正决定系统精度的那几个参数。在这篇文章里我想把高精度ADC硬件电路设计选型这件事从头捋一遍哪些参数是决定性的哪些参数只是数字游戏参数与参数之间又怎么权衡。无论你是在做工业采集、仪器仪表、传感器前端还是精密电源监测这套方法都适用希望能帮你在画原理图之前把方向定对。1. 分辨率背后的真相ENOB、SINAD与标称位数的水分先聊最容易被位数耽误的地方。很多ADC datasheet首页最显眼的位置写着24-Bit, Delta-Sigma ADC但这只是它的分辨率resolution代表它能将满量程分成2的N次方份并不代表每一份都站得住。真正决定测量质量的是无噪声位数在没有任何输入信号的情况下连续采一组码看散落范围有多大。假如一颗24bit ADC在PGA1、低速模式下峰峰值噪声是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提到100kSPSENOB可能从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越大折合到输入的噪声也越大数据速率往往受限。选型时把几个增益档位下的无噪声位数放在一起看别被最高增益档的理论分辨率迷惑。我见过有人在PGA128下用一颗高分辨率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的数据速率和数字滤波能力。典型取值可以是R1kΩ、C15nF但有一个原则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上做多通道ADCDMA采集DMA流中断和ADC全局中断的配合确实值得认真设计很多人在这上面踩过坑。高精度ADC的选型最终是一道系统题。我说一个自己长期坚持的做法拿到一颗新ADC不急着看首页的分辨率先翻datasheet最后几页的典型应用电路照抄它的输入RC、基准去耦和电源滤波然后画板、出样用信号发生器灌一个干净正弦波实测SINAD再和自己算出来的理论值对账。只要这条链路的数据对得上后面的设计基本不会出大的偏差。这套方法陪我走过了不少型号没什么高深的道理但确实能少走很多弯路。
返回列表