1. 一颗标称16位的SAR ADC,为什么系统里只做到13位有效位
先说一个我实际踩过的坑。早年在做多通道工业数据采集时,选了一颗16位、1MSPS的SAR ADC,板子回来后满心以为能拿到16位的精度,结果FFT一测,SNR只有80dB出头,换算成ENOB大概13位。折腾了很久,换芯片、换PCB布局,最后发现罪魁祸首是前端运放带宽不够,基准源噪声也偏大。这个经历让我养成了一个习惯:拿到任何一颗SAR ADC,先不看“几位”,而是先看性能指标里的静态参数和动态特性。
SAR ADC的全称是逐次逼近型模数转换器,它靠内部DAC、比较器和逐次逼近寄存器,通过二分查找逐位逼近输入电压。相比流水线ADC,它没有流水线延迟,单次转换就能出结果,非常适合多通道切换和低功耗应用;相比ΔΣ ADC,它不需要数字滤波器,输入带宽高,也没有延迟问题。正因为如此,工业控制、医疗器械、便携仪器里到处都能看到SAR ADC的身影。
但很多人对SAR ADC的理解停留在“分辨率等于性能”,这恰恰最容易翻车。分辨率只是理论最小量化步长,真正决定系统能拿到多少有效信息量的,是一整套静态参数和动态特性。静态参数包括失调误差、增益误差、DNL、INL,回答的是“直流或者慢变信号下,转换结果偏离理想值多少”;动态特性包括SNR、THD、SFDR、SINAD、ENOB等,回答的是“在交流输入下,ADC能把信号从噪声和谐波里分离得多干净”。
1.1 指标地图:两类参数回答了不同的问题
判断一颗SAR ADC适不适合项目,我习惯先画一张指标地图。静态参数可以看成ADC的“基准准头”:如果输入是一个稳定直流电压,输出码是否准、码宽是否均匀、有没有跳码;动态特性则是ADC的“听感”:同样一个正弦波进去,出来的频谱里有哪些不该有的东西。
| 参数类别 | 核心指标 | 回答的问题 | 典型应用侧重 |
|---|---|---|---|
| 静态参数 | 失调误差、增益误差、DNL、INL | 直流精度、码均匀性、无失码 | 称重、温度采集、精密电源测量 |
| 动态参数 | SNR、THD、SFDR、SINAD、ENOB | 交流信号的保真度、杂散抑制 | 振动分析、声呐、雷达、通信接收 |
| 混合影响 | 温漂、电源抑制比、基准噪声 | 全温度范围和环境变化下的稳定性 | 工业现场、车载、户外设备 |
这里想强调一点:静态参数和动态参数不是割裂的。INL不好,输入正弦波时就会产生谐波,导致THD和SFDR变差;采样时钟抖动不好,动态参数会变差,但静态参数看不出问题。所以完整的评估必须两者都看。
1.2 SAR架构的特点决定了指标怎么读
SAR ADC的转换过程可以理解成“用天平称重”。逐次逼近寄存器从最高位开始,每一位都放上砝码,比较器判断“重了还是轻了”,保留或撤下这个砝码。每一位的判断都建立在前一位的基础上,所以内部DAC的匹配精度、比较器的噪声和迟滞、采样开关的电荷注入,都会直接影响最终性能。
这个架构带来的第一个特点是没有流水线延迟。你随时可以启动一次转换,结果就是当前输入信号的快照。很多多通道同步采样系统用SAR ADC,就是因为切换通道后能马上读到值,不用等流水线排空。
第二个特点是输入端的采样电容会瞬间抽取电流。外部驱动电路必须有能力在很短时间内把采样电容充到目标精度,否则动态参数会大幅下降。这属于数据手册未必会提醒你、但实际测试中一定会踩到的坑,后面我会专门展开。
读SAR ADC指标时,我的建议是先把静态参数和动态参数分开做两份清单。选型阶段重点看“最坏情况”而不是“典型值”;评估阶段重点看实测值能不能达到或接近典型值。只有这样,标称16位才真正有机会变成系统里的16位。
2. 静态参数拆开看:INL、DNL、失调和增益误差如何吃掉精度
静态参数是SAR ADC最基础、也最容易被嫌弃“看不懂”的部分。很多人只盯着位数和采样率,觉得失调和增益误差反正能校准,不必在意。这话只说对了一半。
2.1 失调误差与增益误差:能校准,但别忽略温漂
失调误差就是输入为零时,ADC输出码对应的电压值“偏移了”多少。增益误差就是ADC实际传输函数的斜率跟理想斜率差了百分之几。比如一颗16位ADC,失调误差3LSB,增益误差5LSB,看起来好像不大,但如果不校准,整个量程的测量误差都会受影响。
好消息是这两项都可以在固件里做校准:先用零输入测失调,再用标准参考电压测增益,然后修正结果。坏消息是校准只能在某个温度点做好,温度一变,失调和增益都会漂。工业现场温度跨度大,校准之后在全温范围可能又会偏出去。所以选型时不能只看25°C的失调和增益,要看温漂系数,通常用ppm/°C表示。
我在实际项目里通常的做法是:只要系统允许,就保留校准流程;但选型时仍然要求失调温漂和增益温漂尽可能小。因为校准解决的是“固定偏差”,温漂解决的是“随环境变化的偏差”,两者不是一个量级的问题。
2.2 如果你关心无失码,先看DNL
DNL是微分非线性,反映的是ADC每个码的实际宽度跟理想1LSB宽度的偏差。理想情况下,输入电压每增加1LSB,输出码加1。码宽太窄或太宽,都会导致“某些码占的地盘不均匀”。如果DNL超过1LSB,就可能出现个别码缺失,也就是失码。
对SAR ADC来说,DNL有多重要,取决于应用。如果做的是直流电压测量,偶尔一个码偏宽、一个码偏窄,影响可能不大;但如果做的是波形记录、成像或传感器阵列采集,DNL不均匀会在图像或波形上表现为固定图案噪声,非常难消除。更严重的情况是失码:输入连续变化时,输出码直接跳过一个值。对精密控制系统来说,这可能意味着分辨率达不到标称值。
看DNL时,我建议大家不只盯着数据手册里的“典型值”,尤其要看“保证值”。有些芯片在常温下DNL很好,但全温度范围下指标会放宽很多。测量系统如果需要在低温或高温环境工作,必须按最坏情况来设计余量。
2.3 INL是系统精度的“隐形天花板”
INL是积分非线性,指实际传输函数跟理想直线之间的最大偏差。它表现的是整体弯曲程度,而不只是单点码宽。一颗ADC可能DNL很漂亮,逐个小台阶都很均匀,但整条曲线却像弓一样弯起来,这时候INL就会限制最终精度。
INL的影响在直流测量中最直接:输入电压和输出码之间不再是线性关系,如果软件不做查表补偿,测量结果就会偏差。在交流测量中,INL更麻烦:传输曲线弯曲会“扭曲”正弦波,产生谐波。尤其是当INL呈二次或三次曲线形状时,输入一个纯正弦波,FFT里会出现明显的二次、三次谐波,THD和SFDR都会下降。
很多人在看动态参数时想不通:明明芯片标称SNR很高,为什么THD这么差?这时候回去翻INL曲线,往往能找到原因。低频时谐波主要是INL的“功劳”;高频时还要叠加上采样开关失真和时钟抖动的影响。所以INL和THD从来都是联动的。
2.4 静态误差叠加与系统预算
把静态参数放进系统里看时,我会做一个简单的误差预算。比如一颗12位SAR ADC,失调误差3LSB,增益误差5LSB,INL 2LSB。如果按最坏情况直接相加,最大误差就是10LSB,相当于约3.3位的有效精度被吃掉了,只剩8.7位。如果用均方根叠加,则是约6.2LSB,对应损失2.6位左右。这个数量级的损失,选12位还是16位,结果会很不一样。
实际系统里还有基准电压误差、前端运放失调、电源纹波等,每一项都要在预算里占一个位置。我通常会把SAR ADC本身的静态误差控制在总预算的1/3以内,剩下的留给传感器、放大器和环境变化。经验法则是:如果系统最终目标是0.1%精度,ADC至少要选14位以上,并且静态指标不能太差。位数只是入场券,静态参数才是真正决定票价的。
3. 动态参数的正确打开方式:SNR、THD、SFDR与ENOB的关联
动态参数是SAR ADC评测里最有技术含量的一部分。用一句话概括:动态参数是拿一个已知的正弦波喂给ADC,然后看输出频谱里信号、噪声和谐波各占多少。很多人把SNR、SINAD、ENOB混在一起,其实它们各自在看不同的问题。
3.1 动态参数为什么必须带测试条件
数据手册里任何动态指标都必须附上一行测试条件:输入频率、输入幅度、采样率、基准电压、环境温度,还有推荐驱动电路。同一颗ADC,在1kHz输入和1MHz输入下测出来的SNR可能差好几个dB;在-1dBFS和-6dBFS输入下测出来的THD也可能完全不同。
原因在于SAR ADC内部的非线性、采样电路失真和时钟抖动都跟输入信号变化速率有关。频率越高,输入信号变化越快,采样保持电路的建立误差越明显;幅度越接近满量程,非线性越容易被激发出来,谐波就越大。
实际选型时,我总会去手册里找跟我的应用最接近的测试条件,而不是只看一个“最佳值”。如果我要采集20kHz以内的振动信号,就重点看手册中fin=20kHz附近的SNR和THD;如果我要做宽带数据采集,那要看fin接近奈奎斯特频率时的性能。拿一个低频测试条件来预估高频性能,通常会乐观很多。
3.2 SNR、SINAD、THD、SFDR各自在说什么
SNR是信号与噪声的比值,这里的噪声一般指除去直流和谐波后的总噪声。理想N位ADC的SNR理论值是6.02N+1.76dB。如果一颗16位ADC实测SNR是84dB,等于理论值98dB附近差了14dB,那说明噪声贡献远大于量化噪声。
SINAD是把谐波也拉进来一起算的“综合信号噪声失真比”。它和ENOB直接相关。THD是总谐波失真,通常算前2到9次谐波,反映信号链路的线性度。SFDR是信号跟最大杂散分量的比值,这个杂散可能是谐波,也可能是时钟泄漏、电源耦合引起的spur。
有个常见的误区:只看SNR不看THD。曾经有位同行跟我说他选的ADC SNR很好,结果做出来的音频产品听起来很“脏”。后来我让他去测THD,发现谐波大得吓人。SNR只管噪声,不管失真;如果输入信号幅度大、频率又高,THD可能把实际可用动态范围压得很低。SINAD才是综合反映“噪声+失真”的指标。
3.3 ENOB与有效分辨率:两个容易混的概念
ENOB叫有效位数,公式是ENOB=(SINAD-1.76)/6.02。它表示这颗ADC在特定输入条件下,实际等效于多少位理想ADC。举个例子:某16位SAR ADC在100kHz输入、-1dBFS条件下SINAD是82dB,那么ENOB=(82-1.76)/6.02≈13.3位。这时候如果软件里还按16位来宣传系统精度,就会被现场数据打脸。
另一个容易混淆的词是“有效分辨率”。不同厂商用法不完全一样,有人拿它指“无失码分辨率”,有人拿它指“输出噪声换算后的峰峰值分辨率”。这和ENOB不是一回事。无失码分辨率只说明每个码都能出,不代表交流性能好;峰峰值分辨率更多用于低速、高增益的测量场景,比如称重仪表。选型时如果对方拿“24位有效分辨率”跟SAR ADC的“16位ENOB”比,单位都不统一,很容易被误导。
我给自己定了一条规矩:凡是涉及交流信号处理,一律用ENOB;凡是涉及直流精密测量,才去关心无失码和峰峰值噪声。两种指标服务不同场景,不能混用。
3.4 FFT测试里的细节:相干采样、窗口和点数
动态参数实测离不开FFT。真正做过FFT测试的人都知道,结果好不好,一半取决于测试方法。最理想的做法是相干采样:让输入频率和采样率之比等于一个质数比,比如采样率1MSPS,采集8192点,输入频率设为1MHz×997/8192≈121704Hz。这样整段采样正好覆盖整数个信号周期,频谱泄漏最小。没有相干条件时,就要用汉宁窗或者平顶窗,但加窗之后幅值精度和频率分辨率都需要小心。
采样点数也很有讲究。点数太少,噪声底不平滑,SFDR的“最大杂散”可能被噪声突起误判;点数太多,测试时间变长,对信号源稳定性要求也更高。我一般用8192到65536点,既能看清谐波,又不会让测试太慢。FFT计算流程大致是:去直流、加窗、做FFT、找基波、找谐波和最大杂散,再用功率总和算SNR、THD、SFDR和SINAD。
def enob_from_sinad(sinad_db): return (sinad_db - 1.76) / 6.02 for sinad in [75.0, 80.0, 85.0, 90.0]: print(f"{sinad} dB -> {enob_from_sinad(sinad):.2f} bit")这段代码能帮你在拿到SINAD实测值时,快速换算ENOB。注意:如果手册只给SNR没给SINAD,别急着套公式,因为SNR不含谐波,算出来的ENOB偏高。用SINAD才算数。
4. 真实项目里的验证流程:从数据手册参数到实测判据
数据手册上的指标是厂家在理想测试环境下得到的,拿到自己板子上能不能复现,必须实测。这里分享一套我常用的SAR ADC评估流程,不一定复杂,但每一步都踩过坑。
4.1 测试前的准备:驱动、基准和电源比ADC本身更关键
第一次测ADC参数,最容易犯的错误就是把所有问题归结到ADC芯片上。其实评估板上四样东西决定了你能不能测出好结果:输入驱动、基准电压、电源和时钟。任何一个不给力,ADC的真实性能都出不来。
输入驱动要选低失真运放,带宽要足够。SAR ADC的采样电容在采样瞬间会产生电流冲击,运放如果没有足够的开环增益和摆率,建立时间长了,高频失真会非常明显。我常用的做法是查运放数据手册里的“0.001%建立时间”,对应16位精度差不多要建立起0.0015%的误差,不能只关心GBW。
基准电压源必须是低噪声、低温漂。基准噪声会直接叠加到转换结果上,等效成ADC噪声的一部分。给基准脚加一个高质量去耦电容,通常能显著改善SNR,但电容不能太大,否则基准源的环路带宽不够,动态响应会变慢。
4.2 静态参数实测:正弦波码密度法
测静态参数,很多人第一反应是“给直流电压,读输出码”。这方法不是不行,但很容易被噪声干扰:直流源本身有噪声,ADC输出码会在几个码之间跳,你很难判断真实传输函数的转折点。更靠谱的做法是正弦波码密度测试。
做法是:输入一个干净的、幅度接近满量程的低频正弦波,比如1kHz、-0.5dBFS。连续采集大量数据,统计每个输出码出现的次数。由于正弦波的概率密度是已知的反正弦分布,理论上每个码的计数可以换算成理想码宽。再把实测直方图和理想分布对比,就能反推出DNL和INL。
码密度法需要大量采样点,才能把每个码的计数统计准。16位ADC如果要看到LSB级细节,至少采集几百万点。测试时间会有点长,但比起DC扫描的反复读数,它更稳定、更可重复。码密度法得到的INL精度取决于信号源失真,所以信号源本身的THD要尽量低。
4.3 动态参数实测:FFT测量流程与判据
动态参数测试我会严格按相干采样来搭。测试条件是:
| 项目 | 推荐设置 | 说明 |
|---|---|---|
| 采样率 | 与目标应用一致 | 比如1MSPS |
| 输入频率 | 满足质数比 | 尽量接近目标应用频率 |
| 输入幅度 | -1dBFS~-0.5dBFS | 避免削波,又接近满量程 |
| 采样点数 | 8192~65536 | 点数多,噪声底更平 |
| 窗口 | 相干时不加窗,否则用汉宁窗 | 减少频谱泄漏 |
| 平均次数 | 至少5次 | 看重复性和稳定性 |
做完FFT后,我会先记录三个数:SNR、SFDR、SINAD,再换算ENOB。跟数据手册典型值对比时,我的判断标准是:如果实测SNR或SINAD比典型值差1dB以内,说明系统调得不错;差2dB以上,就要查前端、基准、时钟;差得更多,建议先回到评估板验证芯片本身有没有问题。
我第一次测16位SAR ADC时,实测SFDR比手册差了10dB,第一反应是芯片有问题。后来发现是给前端供电的LDO噪声太大,电源纹波耦合到输入端,在频域里生成了刺眼的spur。换了一个超低噪声LDO后,SFDR一下就回来了。这件事教会我:动态参数不合格,先别急着怀疑ADC。
4.4 常见“测不准”的现场修正经验
现场测试经常遇到几种“测不准”的情况。信号发生器本身失真大,会让THD虚高;这时候可以给信号源加带通滤波器,只保留干净的单频。输入电缆屏蔽不好,环境噪声会直接叠加,把SNR拉低;测试时尽量用短电缆,加屏蔽,并做好接地。
另一个容易忽略的是参考基准的接地。SAR ADC的基准地与模拟地之间如果处理不当,基准噪声会通过地回路串进转换结果。PCB设计时我习惯把基准去耦电容靠近基准脚,用独立过孔回模拟地,不要跟数字地混在一起。
如果测试结果还是不对,也别急着改硬件。先看采集到的原始波形,有没有削波、有没有直流偏移、有没有周期性毛刺。很多问题从时域波形一眼就能看出来,比如基准建立不足会导致每个转换周期末尾出现台阶,采样时钟抖动会导致边沿模糊。先判断问题方向,再动手调参数,效率会高很多。
5. 那些数据手册不会写清楚的坑:驱动、基准与时钟
数据手册会把ADC本身的指标写得明明白白,但ADC能不能发挥出这些指标,往往取决于数据手册里只有条件、没有详细解释的外部电路设计。我把这几类高频问题单独列出来,因为它们几乎每个项目都会遇到。
5.1 SAR ADC的输入不是纯阻性:运放选型和RC滤波
SAR ADC的输入端等效为一个开关电容:采样阶段开关闭合,内部电容直接连到输入引脚,瞬间抽走一部分电荷,然后开关断开。这个过程每秒发生很多次,对外部驱动来说,相当于一个动态负载。如果驱动能力不够,输入电压在采样瞬间就会被“拉歪”,导致转换结果出错。
很多工程师喜欢在ADC输入端加一个RC低通滤波,用来抗混叠和滤噪声。但RC的时间常数不能太大,否则在采样期间电容充不满。选R和C时,需要同时考虑运放输出阻抗、采样电容尺寸和采样时间。保守做法是参考评估板电路,厂家通常已经帮你调好了一组值。
运放选型上,除了带宽和噪声,还要看建立时间。SAR ADC的采样时间往往只有几百纳秒,运放必须在这段时间内把误差建立到1/2LSB以内。如果运放输出摆幅大、摆率不够,高频大信号测试时就会出现严重的非线性失真。
5.2 基准就是ADC的“尺子”:噪声、温漂和动态响应
SAR ADC的输出码本质上是输入电压和基准电压的比值。基准就像一把尺子,尺子本身不稳定,测出来的长度自然不准。基准噪声、温漂和动态响应都会直接通过性能指标反映出来。
低频时,基准的1/f噪声会导致输出码缓慢漂移,表现为直流测量噪声增大;高频时,基准宽带噪声会混入采样结果,拉低SNR。很多SAR ADC对基准引脚上的噪声非常敏感,所以基准输出端通常要加大电容滤波。但电容不能无限大,因为SAR ADC每次转换都会从基准吸取电流,基准源要能跟上这个动态负载,否则建立时间不够,结果也会偏。
我习惯查看基准源的输出噪声密度(nV/√Hz)和温度系数。对16位SAR ADC来说,基准温度系数一般要控制在5ppm/°C以内,噪声密度越低越好。如果基准噪声太大,就算ADC本身再好,系统有效位数也会被“尺子”拖下去。
5.3 时钟抖动对SNR的隐形腐蚀
SAR ADC可以内部生成转换时钟,也可以用外部时钟。外部时钟的抖动会直接影响采样时刻的准确性。数学上看,时钟抖动和输入信号变化率共同决定一个额外的噪声项;输入频率越高,同一个抖动造成的噪声越大。所以高频输入时SNR下降,很多时候不是ADC芯片不行,而是时钟“脚软”。
一个很直观的感觉是:做1kHz信号时,时钟抖动几乎看不出来;做1MHz甚至更高频率信号时,同样的时钟抖动会把SNR拉低好几个dB。所以设计宽带采集系统时,我会重点看时钟源的相位噪声和抖动指标,宁可多花点钱也要用低抖动晶振。
如果ADC内部有时钟,通常手册会给出内部时钟抖动的影响。这时外部只需提供转换触发信号,触发信号本身也不能有太大抖动。多通道同步采样时,触发信号的同步性同样会影响通道间相位一致性。
5.4 温度、电源纹波和PCB布局的影响
静态参数和动态参数都是在特定温度下测的。芯片温度升高后,内部比较器噪声、基准缓冲器失调、开关导通电阻都可能变化,导致实际性能下降。数据手册里通常会区分25°C典型值和全温范围最大值,后者才是系统设计时要用的数字。
电源纹波也是动态参数的“隐形杀手”。如果模拟电源上有开关频率的纹波,它会通过ADC的电源抑制比耦合到转换结果里,在FFT频谱上表现为固定频率的spur。要压住这类问题,除了选低噪声LDO、增加滤波,还要注意PCB布局,让模拟电源和数字电源尽量分开,避免数字噪声串进模拟区域。
PCB布局层面,SAR ADC的模拟输入、基准和时钟走线要短而粗,地平面要完整。采样瞬间的大电流需要低阻抗回路,地平面割裂会造成地弹,直接影响DNL和SNR。这些问题在低速、低频系统里可能不敏感,一上高速、高频就原形毕露。
6. 从参数到系统:几个我多年养成的判断习惯
讲完静态参数和动态特性,最后聊一点更“虚”但更实用的东西。很多项目选型失败,不是数据手册没看懂,而是指标选型的方法不对。
6.1 先做系统误差预算,再选ADC位数
我的顺序永远是:先算系统误差预算,再倒推ADC需要多少位、需要什么样的静态参数。比如一个温度采集系统,传感器本身误差0.2°C,前级放大电路误差0.1°C,留给ADC的误差只有0.05°C。把这0.05°C换算成满量程比例,再乘上LSB,就知道ADC要多少位、INL要控制在什么范围。
如果没有这一步,很容易被“16位”这种数字冲昏头。16位分辨率换算到5V满量程是76µV一个LSB,看起来很精细,但如果INL有10LSB,实际精度就只有13位左右。位数只决定了刻度多细,静态参数决定刻度准不准,两者都要放进预算里。
6.2 低频测量看静态参数,宽带信号看动态特性
选型时我会先问一个问题:这个信号是慢变信号还是快变信号?如果是压力、温度、应变这些低频信号,重点看静态参数:失调、增益、INL、噪声密度,ENOB反而不是最重要的。如果是振动、声学、通信中频信号,重点看动态特性:SNR、THD、SFDR、ENOB,静态参数里的失调和增益误差可以通过校准或交流耦合轻松处理。
有些芯片静态参数很好,但动态THD一般;另一些芯片动态性能很强,但DNL未必优秀。这两类芯片适合的场景完全不同,硬拿同一套指标去比,容易得出错误结论。我现在看到任何一份ADC选型对比表,都会先问一句:你比的是静态参数还是动态特性?比错维度,结论就可能反了。
6.3 用自己的测试平台积累数据手册之外的经验
数据手册给的是典型值,但实际工程需要的是“自己的经验值”。同一颗ADC在我常用的驱动电路、基准源和PCB布局下能测出什么水平,只有实测才知道。所以我建议每个长期做数据采集的团队,都搭一套固定的ADC评估平台,把常用的几颗芯片跑一遍,形成自己的横向对比库。
这套平台不一定要很贵,关键是稳定、可复现。信号源、滤波器、基准、电源、测试线缆都固定下来,这样测出来的数据才有可比性。以后再选型,直接拿自己平台的历史数据做对比,比翻各家数据手册效率高得多。
6.4 一个小习惯:永远留出性能余量
最后分享一个让我少走很多弯路的小习惯:选型时永远留出20%到30%的性能余量。比如系统需要ENOB 12位,我不选刚好12位的SAR ADC,而是选13位甚至14位;需要SFDR 80dB,我尽量选典型值85dB以上的芯片。原因很简单:系统里还有传感器、放大器、连接器、电源、温度和老化这些变量,ADC自己达标不代表整机达标。
这些年经手的SAR ADC项目多了以后,我越来越觉得,性能指标不是用来比拼数字的,而是用来管理风险的。把静态参数当成“准头”,把动态特性当成“保真度”,再结合系统预算和实测数据去做判断,标称位数才不会被白白浪费。希望这篇解析能让你下一次拿到数据手册时,多留一份心眼。