news 2026/9/29 2:05:49

AD/DA选型:别只看分辨率,有效位数与信号链更关键

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AD/DA选型:别只看分辨率,有效位数与信号链更关键

1. 把"12位"当成"12位精度",是AD/DA选型里最贵的误会

前几天帮朋友看一块采集板的选型表,第一行写着"12位、1 MSPS、SPI接口",后面跟着价格和封装。我问他一句:这12位你打算用几位?他愣了一下说,不是写的12位吗。这个对话我经历过太多次了,AD/DA的选型过程里,大家最先看到的是位数,最后才想起来看的也是位数,但真正决定方案能不能落地的,恰恰是位数背后那一堆平时被跳过的参数含义。

这篇东西就是顺着"选型"这条线,把AD/DA芯片手册里那些看起来很唬人的参数一个个拆开,讲清楚它们各自在描述什么物理现象、在你的系统里会变成什么误差、以及选型时应该按什么顺序去看。适合正在做采集类、控制类、仪器类硬件方案的人,也适合刚接手硬件、被一堆指标名词堵住的新手。我不打算堆公式,能算的地方一定给出可抄的计算过程,不能算的地方就讲清楚经验边界在哪里。

先说一个我自己的判断标准:选AD/DA,从来不是选一颗芯片,而是选"芯片+驱动+基准+电源+布线"这一整套信号链。很多方案最后精度不够,问题根本不在ADC本身,而是在它前面那个运放或者旁边那个基准源上。理解参数含义的最大价值,就是让你在画板子之前就知道误差会从哪来。

1.1 选型表里最常见的三个盲区

第一个盲区是只看分辨率不看有效位数。分辨率是"这把尺子有多少格",有效位数是"这些格里有多少格是靠得住的"。一把100格的尺子,如果抖动能吃掉5格,那它实际只有95格可用。ADC同理,标称16位的芯片,实测有效位数(ENOB)常常只有13到14位,剩下的位被噪声吃掉了。

第二个盲区是只看ADC不看驱动和基准。ADC的输入不是理想的高阻,尤其是SAR型结构,输入是一个开关电容,每次采样都要从你的信号源"抢"一小包电荷。如果前级驱动能力不够,采样瞬间电压被拉下去还没恢复,转换出来的数就是错的。基准同理,基准的温漂直接变成增益误差,而且是整条曲线一起漂,后端再怎么校准都很难救。

第三个盲区是只盯典型值不看最大值和温度特性。手册里那个漂亮的INL典型值往往是25℃下的、最好批次的表现,而最大值和温漂系数才是你要在-40到85℃范围内长期依赖的东西。选型的保守程度,应该按最大值算,按典型值期待就行。

1.2 静态参数和动态参数:手册里其实是两套语言

AD/DA的参数大致分成两组,理解这两组的分工,手册就好读多了。

静态参数描述"输入某个固定电压时,输出码准不准",包括失调误差(Offset Error)、增益误差(Gain Error)、积分非线性(INL)、微分非线性(DNL),以及各自的温度漂移。它们决定了你的绝对精度和线性度。

动态参数描述"输入变化的信号时,芯片跟不跟得上、噪声有多大",包括信噪比(SNR)、信纳比(SINAD)、总谐波失真(THD)、无杂散动态范围(SFDR)、有效位数(ENOB)和建立时间。它们决定了你能测多快的信号、以及快速条件下精度还剩多少。

这两套语言经常互相打架。一颗静态指标极好的低速高精度ADC,动态上可能完全跑不动;一颗采样率很高的流水线ADC,INL可能一般。选型时先想清楚你的被测量是"缓变的直流类"还是"变化的交流类",再去侧重看哪一组参数,能省掉大量无效对比。

1.3 把"我要测多准"翻译成"我需要多少位"

位数不是拍脑袋定的,它是从需求反推出来的。举个简单的算法:假设你要测0到10V的电压,希望分辨到0.1mV,那么需要的量化级数是 10V / 0.1mV = 100000 级。2的16次方是65536,不够;2的17次方是131072,够。所以位数下限是17位。

但这只是理论下限。我一般会在这个结果上加2到3位余量,因为噪声、基准漂移、温漂都会吃掉有效位。也就是说,需求算出来17位,我会去看20位以上的芯片,或者接受17位但把基准和驱动做得很扎实。反过来,如果算出来只要11位,你就不必为12位还是16位纠结,把预算放到驱动运放和基准上,收益大得多。

这里有个换算关系值得背下来:理想ADC的信噪比 SNR = 6.02N + 1.76 dB。12位对应约74 dB,16位对应约98 dB,24位对应约146 dB。反过来,ENOB = (SINAD - 1.76) / 6.02。手册上如果写了SINAD是92 dB,那么实际有效位数就是(92-1.76)/6.02 ≈ 15位。这个公式我几乎每次选型都会用,它把"动态指标"和"位数"这两个概念直接打通了。

另外一个常用数字是LSB的大小,它是所有误差的度量单位:满量程2.5V的16位ADC,1 LSB = 2.5V / 65536 ≈ 38.1 µV;满量程5V的12位ADC,1 LSB = 5V / 4096 ≈ 1.22 mV。看到手册里写"失调误差±2 LSB",你可以立刻换算成实际电压,判断这个误差在你的系统里能不能接受。

2. 数据手册的正确翻法:先看哪几页,后看哪几页

我见过很多人打开手册直接从第一页开始往下读,读到Register Map已经晕了。AD/DA手册其实是有阅读顺序的,而且顺序错了会浪费大量时间。我的习惯是分三遍看,每一遍只看一类信息,看完再决定这颗芯片要不要继续。

2.1 第一遍只看极限参数和推荐工作条件

第一遍只看Absolute Maximum Ratings和Recommended Operating Conditions。这一步不是看性能,是看"这颗芯片能不能活在我的板子上"。重点确认几件事:模拟供电范围、数字供电范围、基准输入范围、模拟输入允许的电压区间(很多ADC输入不能超过AVDD,也不能低于地,超了会触发内部钳位二极管,漏电流会污染你的高阻信号源)、工作温度范围、以及封装的热阻。

这一步经常直接筛掉一批型号。比如你的板子只有3.3V和5V两路电源,而某颗ADC需要独立的2.5V模拟供电且对电源噪声敏感,那你就得评估多一路LDO的成本。又比如你需要测一个带负压的传感器信号,而ADC是单极性输入,那要么加电平搬移,要么换双极性输入的型号,这是架构级别的决定,越早发现越好。

还有一个容易被忽略的点:输入端的ESD保护结构。很多ADC输入端内部有到AVDD和到地的二极管,它们确实能救命,但也会带来nA到µA级的漏电流。如果你的信号源内阻是几百kΩ(比如某些传感器分压),这个漏电流就会变成可观的失调电压。手册里通常只在输入特性表里给一行"Input Leakage Current",但它的影响要看你的源阻抗。

2.2 第二遍抓关键指标:INL、DNL、SNR、ENOB

第二遍才看性能表,而且只看和你需求相关的那几行。我通常按这个顺序抓:

  • INL(积分非线性):实际转换曲线偏离理想直线的最大程度,单位LSB。它决定你的绝对精度天花板,而且INL是没办法用软件校准消除的(因为每个码的偏差不一样)。要求高精度时,INL要按最大值看,并按温度曲线评估。
  • DNL(微分非线性):相邻码之间的步长偏差。只要DNL小于±1 LSB,就能保证没有丢码(No Missing Codes),这是很多控制系统(尤其是闭环控制、伺服反馈)的硬要求。DNL超过1 LSB时,某个输入区间可能永远输出同一个码,控制环路会在那里卡住。
  • SNR / SINAD:折算噪声和失真的总水平,配合6.02N+1.76的公式直接得到ENOB。
  • Offset / Gain Error及温漂:决定系统是否需要出厂校准,以及校准后能撑多宽的温区。

这里有个实操心得:先看最大值,再看典型值,最后看测试条件。手册的性能表下面通常有一行小字写着测试条件,比如"AVDD=5V, VREF=4.096V, fS=200 kSPS, TA=25°C"。换个基准电压、换个采样率,那些数字全都会变。我见过有人拿200 kSPS条件下的SNR去评价一颗在1 MSPS下工作的ADC,最后实测差了好几个dB,就是没看测试条件。

2.3 第三遍才看时序图和接口描述

第三遍看时序图和寄存器描述。这一步决定软件能不能顺利跑起来。要确认的东西包括:转换周期和采集窗口的时间分配、串行时钟的最高频率、片选信号的保持要求、数据位宽和数据格式(二进制原码还是补码、MSB在前还是LSB在前)、是否有独立的转换状态引脚或者BUSY信号。

时序图里最容易被跳过的是"采集时间"(Acquisition Time)与"转换时间"(Conversion Time)的划分。SAR ADC的一个完整周期是"采集 + 转换",采集窗口在时序图上是明确标出来的。如果你的驱动电路在采集窗口内没把输入电容充满,转换结果就会偏低,而且这个误差和信号幅度相关,看起来就像非线性——但实际上是你自己的驱动没做够。这个坑我在第4节会专门展开。

3. 一次完整的选型推演:从传感器指标到具体型号

前面讲的是阅读方法,现在把它跑一遍。我拿一个真实做过的场景来推:一个压力传感器,满量程输出0到50 mV,输出阻抗中等,需要测量精度达到满量程的0.02%,也就是10 µV左右的分辨能力,信号带宽约2 kHz,采样率希望达到100 kSPS,用单路SPI读取。

3.1 先定满量程和增益分配

传感器输出只有50 mV,而ADC的输入范围通常是0到2.5V或0到5V,直接接上去等于浪费了98%的码空间。所以必须加增益。增益怎么分配是有讲究的:

  • 增益取50倍,把50 mV放大到2.5V,正好用满ADC输入范围;
  • 基准取2.5V,和满量程对齐,这样1 LSB直接对应 2.5V / 65536 ≈ 38.1 µV(16位),折算到传感器输入端就是 38.1 µV / 50 ≈ 0.76 µV;
  • 单级增益50倍对运放来说偏高,带宽和稳定性都紧张,我一般拆成两级(比如10倍 + 5倍),或者选带内置PGA的ADC。

这里要注意,增益不是越大越好。增益越大,前级运放自身的失调和噪声也被放大得越厉害,而且容易把后面ADC的输入推到饱和。我的经验是单级增益尽量不超过20倍,超过就拆级或者用仪表放大器。

3.2 噪声预算:把所有噪声折算到同一个点

这一步是很多人不做、但做完之后选型思路会彻底改变的环节。方法是把所有噪声源都折算到"传感器输入端",然后做均方根合成。

假设选了一颗16位SAR ADC,手册标称SNR 92 dB,基准2.5V。先算ADC自身的噪声折合到ADC输入端的有效值:

  • 满量程正弦的RMS = 2.5V / (2√2) ≈ 0.884 V
  • ADC噪声RMS = 0.884 / 10^(92/20) ≈ 22.2 µV

基准源选一颗噪声3 µVrms/V的型号,2.5V下约7.5 µVrms。前级运放如果选通用型,输入折合噪声约10 nV/√Hz,带宽按10 kHz算,噪声RMS ≈ 10 nV × √10000 ≈ 1.0 µVrms,经过50倍增益后变成50 µVrms——注意这个数已经比ADC本身的22 µV还大了。

噪声源折算到ADC输入端 (µVrms)折算到传感器输入端 (µVrms)
ADC自身(SNR 92 dB)22.20.44
基准源电压噪声7.50.15
前级运放(10 nV/√Hz,10 kHz)50.01.00
合成(均方根)55.21.10

合成后的噪声是55.2 µVrms,折算到传感器输入端是1.10 µVrms。按峰峰值约等于6.6倍有效值的经验换算,峰峰噪声约7.3 µV。传感器满量程50 mV,那么有效分辨能力约 50 mV / 7.3 µV ≈ 6850 级,也就是约12.7位。

结论很扎心:买了16位的ADC,实际只拿到12到13位,而且主要瓶颈不是ADC,是那颗运放。

3.3 怎么把性能捡回来

既然知道瓶颈在驱动,改法就明确了。换一颗低噪声运放,把输入折合噪声压到3 nV/√Hz,同时把前级带宽从10 kHz限制到2 kHz左右(信号带宽只要2 kHz,多出来的带宽全是白送的噪声):

  • 运放噪声 ≈ 3 nV/√Hz × √(1.57 × 2000) ≈ 0.17 µVrms
  • 经50倍增益后 ≈ 8.4 µVrms
  • 重新合成:√(22.2² + 7.5² + 8.4²) ≈ 24.9 µVrms
  • 折算到输入端约 0.50 µVrms,峰峰约3.3 µV
  • 有效分辨 ≈ 50 mV / 3.3 µV ≈ 15000 级,约13.9位

从12.7位提升到13.9位,代价只是一颗运放的差价和两个滤波电容。这就是"理解参数含义"带来的直接收益。

如果还想要更多位数,可以考虑过采样加数字平均。噪声近似白噪声时,采样率提高4倍、平均后信噪比改善约6 dB,也就是多1位有效位。13.9位在过采样16倍后能到14.9位左右,但前提是噪声确实是白的、且没有明显的干扰峰,这一点实测时要用频谱确认,不能想当然。

3.4 采样率、通道数和吞吐量的三方拉扯

采样率这条线也常被误解。SAR ADC的手册标的是"吞吐率"(Throughput Rate),它已经包含了采集和转换时间。如果你用8通道多路复用,那么每个通道实际拿到的速率是总吞吐率除以通道数再打折扣——因为通道切换后需要额外的建立时间。

比如一颗标称1 MSPS的16位SAR,单通道转换周期1 µs,其中采集时间可能只有200 ns。8通道轮询时,如果每个通道切换后只给200 ns建立时间,高阻信号源根本来不及稳定。我的做法是把采集时间人为拉长,比如把每通道周期做成5 µs,8通道就是8×5=40 µs,等效每通道25 kSPS。这个折中必须提前算进需求,否则板子做出来才发现速率不够,就只能改硬件。

如果用ΔΣ型ADC做多通道采集,问题更明显。ΔΣ的Sinc滤波器需要完整的建立周期,切换通道后往往要丢弃前2到3个转换结果才稳定。很多应用笔记会给出"每通道需要n个转换周期"的经验值,选型时一定要翻开这一页看。

4. 手册上写得清楚、实际却最容易翻车的几个参数

下面这几个坑,几乎每个做采集板的人都会踩至少一次。它们的共同特点是:手册里确实写了,但写得很含蓄,不看推导过程很难意识到严重性。

4.1 输入驱动:开关电容输入和建立时间

SAR ADC的输入端等效成一个开关加一个采样电容,采样阶段电容接入你的信号源,转换阶段断开。假设内部采样电容(含寄生)约30 pF,采集时间200 ns。要把电压建立到 1/2 LSB 的精度(16位下约 1/2^17),需要的时间常数个数是 ln(2^17) ≈ 11.8个。于是:

  • 允许的总RC时间常数 ≤ 200 ns / 11.8 ≈ 17 ns
  • 若等效电容取30 pF,则允许的源阻抗 ≤ 17 ns / 30 pF ≈ 566 Ω

也就是说,信号源的等效输出阻抗必须控制在500Ω以内,否则采样还没建立完成就开始转换了。这就是为什么高阻信号源(几十kΩ的传感器分压、光敏电阻、某些电化学电极)不能直接接SAR ADC,必须加缓冲运放。

还有一个反直觉的细节:不要直接在ADC输入端并大电容。很多人想用一个大电容"稳住"输入电压,结果发现运放振荡了。原因是运放驱动容性负载时相位裕度急剧下降,容易自激。正确做法是用一个小的隔离电阻(比如22到100Ω)串在运放输出和电容之间,或者在反馈回路里做补偿。这个隔离电阻又会增加源阻抗,所以要在建立时间和稳定性之间取平衡。

注意:ADC输入端加RC低通是好事,但电阻值要按上面的建立时间要求算,电容值要和运放的容性负载能力匹配,两者都不能凭感觉填。

4.2 基准源:ADC的隐形天花板

基准电压源是整条信号链的"尺子",尺子本身不准、不稳,后面全是白搭。我按四个维度看基准:

  • 初始精度:常见0.05%到0.1%。0.05%的2.5V基准意味着1.25 mV的初始偏差,对16位ADC来说就是约33 LSB的增益误差。这个误差是线性的,可以用单点或两点校准消除。
  • 温漂:常见单位ppm/°C。3 ppm/°C的基准,在50℃温变下会产生 3e-6 × 2.5V × 50 ≈ 375 µV 的漂移,约等于10 LSB。这个漂移也是增益性质的,如果系统性温漂大,必须在全温区做校准,或者做比率式测量。
  • 噪声:单位常写成µVrms/V。它直接叠加到ADC的噪声预算里,前面算过,7.5 µVrms在16位系统里是可观的。
  • 负载调整率与输出阻抗:ADC的基准输入在转换瞬间会抽取电流尖峰,基准输出阻抗高的话电压会瞬间塌陷,表现为转换结果抖动。所以基准旁边必须有合适的去耦,通常是0.1 µF加1到10 µF的组合,放在基准引脚旁边,而且是独立走线,不能和数字部分的电源共用。

这里分享一个很实用的技巧:能做比率式测量就做比率式。如果传感器的激励源和ADC的基准来自同一个电压(比如同一个基准驱动的电桥),那么激励电压的漂移和基准的漂移会互相抵消,测量结果对基准的绝对精度不敏感。这是很多称重、应变、桥式传感器方案精度能做上去的核心原因,也是"参数含义"理解到位之后能想出来的架构级优化。

4.3 多路切换:串扰、电荷注入和建立时间

多通道采集的误差来源有三个:通道间的串扰、开关电荷注入、以及切换后的建立不足。

串扰的典型表现是:通道A加满量程信号,通道B悬空或者接小信号,读B的时候会看到A的影子。原因是多路开关的寄生电容把A的电压耦合到B上。降低串扰的办法是:相邻通道测量之间留足够的空闲时间、降低源阻抗、在输入前加RC滤波、以及避免让大信号通道和小信号通道紧挨着切换。

电荷注入是开关断开瞬间把一小包电荷倒进采样节点,表现为固定的失调偏移。它在不同通道上可能大小不同(因为源阻抗不同),所以看起来像通道间的一致性误差。解决办法是每个通道都用同样的驱动结构,保持源阻抗一致。

还有一个很容易忽略的点:未使用的通道要接地或接到中等电位,不要悬空。悬空的输入会漂到不确定的电平,通过寄生耦合影响正在转换的通道,而且可能触发输入保护结构,带来额外漏电流。

4.4 数字侧:SPI时序、数据格式和状态引脚

数字接口的问题看起来简单,实际调试时最耗时间。几个高频坑:

  • 时钟极性和相位(CPOL/CPHA)配错:表现为读到的数据整体移位或者全是0x00/0xFF,看波形立刻就能发现,但如果是"偶尔错一位"就更隐蔽,通常是时钟边沿采样位置在临界位置,线稍微长一点就出错。
  • 转换期间片选被拉高:部分ADC要求CS在整个转换周期保持有效,中途拉高会中断转换或者读回无效数据。
  • 数据格式搞错:很多高精度ADC默认输出二进制补码(Two's Complement),而你以为是无符号原码。这个小差别会让小信号读数全部偏移半个量程。

一段我常用来做补码转换的代码,可以直接抄:

/* 24位补码数据转有符号32位 */ int32_t adc_raw_to_signed(const uint8_t *buf) { int32_t v = ((int32_t)buf[0] << 16) | ((int32_t)buf[1] << 8) | ((int32_t)buf[2]); if (v & 0x800000) { v -= 0x1000000; /* 负数:减去2^24 */ } return v; }

再给一个噪声预算的计算脚本,改几个参数就能算自己的方案:

import math snr_db = 92.0 # ADC手册SNR vref = 2.5 # 基准电压 gain = 50.0 # 前级增益 adc_fs_rms = vref / (2 * math.sqrt(2)) adc_noise = adc_fs_rms / (10 ** (snr_db / 20)) # Vrms ref_noise = 3e-6 * vref # 3 uVrms/V op_noise = 3e-9 * math.sqrt(1.57 * 2000) * gain # nV/rtHz 折到ADC端 total = math.sqrt(adc_noise**2 + ref_noise**2 + op_noise**2) in_noise = total / gain lsb_in = 0.050 / (2 ** 16) # 传感器端1LSB print(f"ADC噪声 {adc_noise*1e6:.2f} uVrms") print(f"输入折合噪声 {in_noise*1e6:.3f} uVrms") print(f"等效位数 {math.log2(0.050 / (6.6 * in_noise)):.2f} bit")

这类脚本我一般直接粘在项目文档里,方案评审的时候现场改参数,比争论"这颗芯片够不够"有效得多。

5. DAC选型是另一套逻辑,别把ADC的经验直接搬过来

很多人做完ADC选型,转头做DAC就照抄同一套指标,结果发现踩的坑完全不一样。DAC是"输出"器件,它的误差出现在输出端,而且直接影响被控对象,所以关注点要换。

5.1 建立时间、压摆率和毛刺脉冲

DAC的关键动态参数是建立时间(Settling Time),通常定义为输出从一次码跳变后进入并保持在某一个误差带内(±0.5 LSB或±1 LSB)所需的时间。它和压摆率(Slew Rate)是两回事:压摆率决定输出能多快爬升,建立时间决定爬到位之后能不能稳住。大跳变时先受压摆率限制,接近目标值时受运放稳定性和建立特性限制。

还有一个ADC用户很少关心的参数:毛刺脉冲(Glitch Impulse),单位nV·s。它是DAC在码跳变瞬间因为内部开关不同步而产生的尖峰能量。对慢速控制应用无所谓,但如果你用DAC做波形发生器、或者驱动一个对尖峰敏感的执行器,这个参数就很关键。R-2R结构的DAC毛刺通常比电流舵结构小,选型时可以按结构做初筛。

5.2 输出形式:电压输出、电流输出,以及后级运放的选择

DAC分电压输出和电流输出两类。电压输出型内部带输出缓冲,接上去就能用,但输出范围和驱动能力有限;电流输出型(常见是电流舵结构)需要外接一个跨阻放大器(I/V转换),灵活度更高,但整个环路的稳定性、噪声、失调都要你自己设计。

这里有个参数经常被忽略:输出放大器的失调和噪声会被直接叠加到DAC输出上,而且它是直流性质的,无法通过"多取几次平均"消掉。所以对电流输出型DAC,后级运放的失调电压和温漂必须和DAC的精度同量级。选16位DAC却配一颗失调几百µV的通用运放,等于白花钱。

举个具体数字便于感受:12位DAC配2.5V基准,1 LSB ≈ 610 µV。这个量级下通用运放的失调还勉强可接受。但如果是16位DAC配2.5V基准,1 LSB ≈ 38 µV,运放的失调就必须控制在这个量级附近才合理。

5.3 上电状态与复位行为,这是安全设计的一部分

DAC的上电输出状态是我在控制系统里最在意的参数。有的DAC上电后输出0V,有的是中间值,有的取决于引脚配置。如果你的DAC输出接的是一个功率驱动级,上电瞬间输出到中间值可能意味着执行器突然动作,这是安全设计要避免的。

我的处理方式有三种:一是选带明确上电复位(POR)行为、且可配置为0V输出的型号;二是在DAC输出到驱动级之间加一级使能控制,系统初始化完成前把驱动级关断;三是在DAC输出脚加一个下拉电阻,把上电初期的电平"钉"住。三种方式通常要叠加使用,不能只靠一种。

另外DAC的参考电压来源也要注意:如果DAC基准和ADC基准共用同一颗芯片,那么输出和采集之间存在比率关系,做闭环控制时这条关系能帮你抵消一部分基准漂移;但前提是基准的输出驱动能力够,不要在重载下被拉塌。

6. 板子回来之后:怎么验证你选的芯片到底行不行

选型阶段的所有推导,最终都要用实测确认。我一般按"先静态、后动态、再系统"的顺序做验证,避免一上来就陷进复杂的频谱分析里。

6.1 最小验证板怎么搭

验证板不需要和最终产品一样,但有几件事必须做到位,否则测出来的数据没有参考价值。

  • 模拟电源用独立的LDO,不要和数字部分共用一路,即便最终产品要共用,验证阶段也要先分开,先确认芯片本身的极限性能。
  • 基准源按数据手册推荐的去耦配置,走线尽量短,测量点直接放在基准引脚上。
  • 输入的信号源用低失真的信号发生器,或者干脆用一个高精度DAC自己产生测试波形,做一个采集加回放的环路。
  • 数字接口的线尽量短,SPI时钟先降到最低速跑通,再逐步提速,观察数据什么时候开始出错。

6.2 三种实测手段:直方图、FFT和噪声统计

直方图法测DNL和INL:给ADC输入一个缓慢变化、幅度略微超出满量程的三角波或正弦波,采集大量样本,统计每个码出现的次数。理论上每个码出现的次数应该相等,实际次数与平均次数的偏差就是DNL;把DNL累加就得到INL。注意样本量要足够,16位系统建议至少采集百万级样本,否则统计本身就有误差。

FFT法测ENOB:输入一个接近满量程的单频正弦,采样后用FFT分析,取前若干次谐波和噪声的总能量,算出SINAD,再用ENOB = (SINAD - 1.76) / 6.02。这里有两个细节:一是采样频率和信号频率要尽量做相干采样(整数个周期),否则要加窗抑制泄漏;二是要确认信号的纯度高于ADC几个dB,否则你测的是信号源的失真。

噪声统计法:把输入端短接到一个已知的稳定电平(通常是基准的一半),采集几千到几万个点,算有效值和峰峰值,再折算成有效位数。这是最快的验证手段,五分钟就能判断"低几位抖动是否正常"。我的经验是:低3到5位跳动是正常的;如果低8位都在跳,那要么是噪声预算有问题,要么是基准或驱动出问题了。

6.3 常见异常现象与排查顺序

调试阶段的时间大部分花在这里,我把自己踩过的整理成表,按"先查最简单的"排了顺序。

现象可能原因排查顺序
读数全部为0或满量程输入超范围、负压、驱动级未上电先用万用表量ADC输入脚实际电压
低几位大幅跳动(超过10 LSB)基准噪声、驱动不足、数字耦合短接输入再测,若仍跳则查基准和电源
读数随温度整体漂移基准温漂、运放失调温漂加热/制冷静置对比,分别测基准脚电压
通道间串扰切换建立不足、开关寄生耦合单通道连续采,再开多通道对比
高码区非线性变差驱动级接近饱和、基准负载调整率不足检查驱动输出余量,测转换瞬间基准电压
SPI读到固定值CPOL/CPHA错、CS时序错、寄存器未生效用逻辑分析仪抓完整一帧,包括CS
提高采样率后精度下降采集窗口不足、驱动建立不够降低采样率对比,若变好则是建立问题

这张表我基本每次调试都会拿出来过一遍,能省掉很多"凭感觉改代码"的时间。

7. 一份我在用的选型清单与操作备忘

写到这里,把整套思路压缩成一份可以直接对照的清单。每次做选型我都会把这十条过一遍,能提前暴露大部分风险。

7.1 下单前必须回答的十个问题

  1. 被测量的满量程、带宽、源阻抗分别是多少?源阻抗超过几百欧的,缓冲运放必须安排。
  2. 需求分辨率换算成位数是多少?在这个基础上加了几位余量?
  3. 静态精度靠INL还是靠校准保证?INL的最大值在全温区是多少?
  4. 系统噪声预算算过了吗?主要贡献者是ADC、基准还是驱动?
  5. 采样率和通道数的乘积,算上建立时间后还剩多少余量?
  6. 基准的初始精度、温漂、噪声三项,各自折算成多少LSB?
  7. ADC输入的驱动能否在采集窗口内建立到1/2 LSB?
  8. 数字接口的时序要求、数据格式、状态引脚,软件侧都确认过了吗?
  9. 如果是DAC,上电输出状态可控吗?对执行器有没有风险?
  10. 供货、封装、温度等级、是否处于生命周期末期,都查过了吗?

7.2 几个容易被忽略、但影响很大的细节

先买评估板。这是我花了几年时间才养成的习惯。原厂评估板的价值不在于它的电路有多好,而在于它能让你用最低成本确认"这颗芯片在我手里能不能跑出手册的性能"。如果评估板都跑不出来,八成是自己设计的问题;如果评估板能跑出来,那就有明确的对照参考。选评估板时看三件事:官方固件和上位机软件是否齐全、是否引出所有关键测试点、是否和你要用的封装一致。

注意输入保护对高阻源的影响。前面提过一次,这里再强调:ADC输入端的保护二极管漏电流可能在nA量级,看似微不足道,但当你的源阻抗是100 kΩ时,1 nA就是100 µV,对16位系统来说是2.6 LSB的固定偏差。高阻信号源加缓冲是唯一稳妥的做法。

电源的去耦不是形式主义。模拟供电引脚旁边放0.1 µF加1 µF,位置要紧贴引脚;基准去耦用低ESR的电容;模拟地和数字地在芯片下方单点连接。这些做法手册里都写了,但真正照着做的人不多。我见过太多"换了三颗芯片都没解决噪声"的案例,最后发现是去耦电容离引脚5 mm、走线绕了半圈。

留出校准通路。不管你现在觉得精度够不够,都给系统留一个可以外接标准源做校准的接口,或者至少留一个可编程的增益/失调修正系数。产品在温度和批次上的表现很难完全预判,有校准通路就有后路。

我自己这些年做采集类项目,最深的体会是:选型这件事的难度不在参数表本身,而在"把参数翻译成误差、把误差翻译成系统影响"这一步。刚开始做的时候我也喜欢比参数、比价格,后来才慢慢明白,真正决定成败的往往是那颗看起来不起眼的驱动运放和那颗基准,而不是ADC的位数。把噪声预算算一遍、把建立时间算一遍,很多纠结自然就有了答案,剩下的就是老老实实按手册把板子画好、把验证做扎实。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 2:05:16

1.8V/2.8V/3.3V/5V电平转换:门限、选型与调试避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 2:05:01

Python+OpenCV车牌识别实战:从HSV定位到NCC字符匹配

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 2:04:34

DDR4结构与寻址:从Bank Group到地址映射的硬件调试指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 2:04:31

TensorFlow花卉识别实战:5类数据集迁移学习与MobileNetV2微调

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 2:04:01

BUCK电路从原理到实测:电感选型、同步整流与环路补偿

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华