先说个我自己踩过的坑。几年前做一台电子秤的验证板,用的是一款标称 24 位的 Σ-Δ ADC,数据手册上写着"24 位无失码、21.7 位有效分辨率"。板子焊回来通电,读数末几位一直在跳,换算到称重上大概有 ±3 g 的抖动,而按手册的噪声表,静态下应该只有 0.2 g 左右。折腾了两天,最后发现罪魁祸首是我给基准源随手用的一颗普通 LDO,它的噪声和温漂直接把整条链路的精度锁死在 18 位以下。那颗 ADC 本身一点问题都没有。
这件事让我彻底明白:Σ-Δ ADC 的高精度不是"买一颗 24 位芯片"就自动到手的。它是过采样、噪声整形、数字滤波、基准源、模拟前端、PCB 布局、数据后处理这一整套东西合起来的结果,任何一环掉链子,那多出来的几位就永远只是纸面数字。这篇东西我想把 Σ-Δ 高精度模数转换的完整链条拆开讲一遍:它凭什么能做到 24 位甚至 32 位,理论极限在哪,实际电路会被什么卡住,以及写代码和布板时那些真正会咬人的细节。偏工程实操,刚接触 Σ-Δ 的和已经用过几款高精度 ADC 的,应该都能捞到点东西。
1. 先把用词理清楚:Σ-Δ 既做模数,也做数模
1.1 "数模转化"这个说法覆盖了两个方向
Σ-Δ 是一种调制架构,不是某种器件的专属。它既可以用在 ADC 里(模拟转数字),也可以用在 DAC 里(数字转模拟)。所以"Σ-Δ ADC 的高精度数模转化"这句话,严格来说混合了两件事:Σ-Δ ADC 干的是模数转换,把连续的模拟电压变成数字码;而"数模转换"是反方向。这不是吹毛求疵,我见过不少刚入门的朋友在选型时把两个方向搞混,结果买回来一颗 DAC 才发现要做的是采集。
不过这个混淆也不算离谱,因为 Σ-Δ 在两个方向上用的是同一套数学:过采样、噪声整形、数字滤波。Σ-Δ DAC 内部也是一位码流在跑,只不过噪声整形挪到了数字域做,最后用一个模拟低通把 1 位码流还原成平滑波形。理解了 ADC 侧的噪声整形,DAC 侧基本就通了,只是把"量化噪声"换成"截断噪声"而已。
所以下面主线讲 ADC,顺带说明 DAC 侧为什么沿用同样的思路,这样整个图景才完整。
1.2 奈奎斯特路线和 Σ-Δ 路线:两种完全相反的思路
SAR(逐次逼近)ADC 的哲学是"一次就问清楚"。它靠一组权重精确的电容阵列,在一个采样周期内把输入电压逼近量化成 N 位。要 16 位,你就得让电容阵列匹配到 1/65536 的精度,这是工艺上硬碰硬的挑战,芯片面积和成本随位数陡增。
Σ-Δ 的哲学反过来——用粗糙的器件,做精细的活。它的量化器只有 1 位,本质就是个比较器,不需要任何匹配。精度不靠器件的绝对精度换,而是靠时间的冗余换:把一个采样点摊成几千上万个调制周期,再在数字域把这些粗糙的判断统计成一个精确的结果。
代价自然是速度。SAR 一个时钟出一个样,Σ-Δ 要 OSR 个调制周期才出一个样。所以 Σ-Δ 的地盘是"慢而准":称重、温度、压力、应变、电化学分析、直流电压电流精密测量。音频也算它的地盘,因为音频信号带宽只有 20 kHz,放在 ADC 的世界里已经算很慢了。
| 对比项 | SAR ADC | Σ-Δ ADC |
|---|---|---|
| 典型分辨率 | 8~18 位 | 16~32 位 |
| 采样率 | 数十 kSPS ~ 数 MSPS | 数 SPS ~ 数百 kSPS |
| 量化器位数 | 多位(需匹配) | 1 位(无需匹配) |
| 对基准源要求 | 高,直接决定精度 | 极高,直接决定精度上限 |
| 抗混叠滤波 | 必须陡峭,需高阶模拟滤波器 | 过采样天然放松要求,前端 RC 即可 |
| 延迟 | 极低(几个时钟) | 高(建立时间长,多通道扫描更明显) |
| 典型场景 | 电机控制、快速采样、通用测量 | 称重、传感器、音频、精密直流 |
这张表里我最想强调的一行是"抗混叠滤波"。很多从 SAR 转到 Σ-Δ 的人会习惯性地在输入端堆一个复杂的有源滤波器,其实没必要——过采样本身就是一种抗混叠手段,前端往往只要一个几十欧姆加几纳法的 RC 就够了,多加反而引入噪声和失调。这个后面还会细说。
2. 过采样与噪声整形:高精度到底从哪来
2.1 过采样把量化噪声摊薄了多少
先讲个基础事实:一个 N 位量化器,量化噪声的总功率是固定的,等于 Δ²/12,其中 Δ 是最小量化台阶。关键在于,这个总功率在频域上是怎么分布的。
如果采样率是 fs,那么量化噪声均匀地摊在 0 到 fs/2 这一整段上。信号只占其中 0 到 fb 这一段。于是落在信号带内的噪声功率就是:
Nq = (Δ²/12) × (2·fb/fs)
把 fs 提高,也就是让 fs ≫ 2·fb,带内噪声就按比例下降。定义过采样率 OSR = fs/(2·fb),则带内噪声降为原来的 1/OSR,信噪比改善:
SNR 改善量 = 10·log10(OSR)
换算成直观的数字:OSR 每翻一倍,SNR 涨 3 dB,也就是有效位数涨 0.5 位。想从 16 位升到 24 位需要 48 dB,靠单纯过采样得让 OSR 翻 2^16 倍,完全不现实。所以过采样只是第一根柱子,真正扛活的是噪声整形。
2.2 一阶调制器:把噪声"搬"到没人的地方
一阶 Σ-Δ 调制器的结构简单到可以用一段话说清:一个积分器、一个 1 位量化器、一个 1 位 DAC,DAC 的输出反馈回去和输入相减。环路这样绕一圈之后,输入信号和量化噪声走的是不同的传输路径:
- 信号从输入端到输出,传递函数是 STF = z⁻¹,基本上是原样通过;
- 量化噪声从量化器注入,到输出的传递函数是 NTF = 1 − z⁻¹。
关键在于 NTF = 1 − z⁻¹ 这个表达式。它在直流处(z = 1)等于零,在 fs/2 处最大。这就是噪声整形:噪声在低频被压得很低,被"推"到了高频。而高频那部分噪声,正好落在我们后面要丢弃的频段里。
一阶整形的带内噪声功率近似是:
Nq = (Δ²/12) × (π²/3) × (1/OSR³)
和纯过采样比,多出来一个 1/OSR² 的因子,反映到信噪比上就是每翻倍 OSR 涨 9 dB,也就是 30·log10(OSR) 这一项。完整的一阶公式:
SNR = 6.02N + 1.76 − 5.17 + 30·log10(OSR)
二阶、三阶的推导思路一样,只是把积分器级联起来,NTF 变成 (1 − z⁻¹)² 或 (1 − z⁻¹)³。结果列在下表里,都是理想情况下的值。
| 阶数 | NTF | 带内噪声系数 | SNR 公式 | OSR 翻倍的收益 |
|---|---|---|---|---|
| 1 阶 | (1−z⁻¹) | π²/3 | 6.02N + 1.76 − 5.17 + 30log(OSR) | +9 dB |
| 2 阶 | (1−z⁻¹)² | π⁴/5 | 6.02N + 1.76 − 12.9 + 50log(OSR) | +15 dB |
| 3 阶 | (1−z⁻¹)³ | π⁶/7 | 6.02N + 1.76 − 21.5 + 70log(OSR) | +21 dB |
代入几组数感受一下。取 1 位量化器、2 阶调制器、OSR = 256:
SNR = 6.02×1 + 1.76 − 12.9 + 50×log10(256) = −5.12 + 50×2.408 = 115.3 dB
换算成有效位数 ENOB ≈ (115.3 − 1.76)/6.02 ≈18.9 位。用这么一个"1 位量化器"就做出接近 19 位的分辨率,这就是噪声整形的威力。
2.3 理论公式为什么不能当真
这里有个必须泼的冷水:上面那套公式只是理想模型,它假设积分器是理想的、量化器没有热噪声、时钟没有抖动、基准绝对干净。真实芯片里,这些假设一条都不成立。
先看热噪声。开关电容积分器的采样电容会产生 kT/C 噪声。取采样电容 10 pF、室温 300 K:
Vn = √(kT/C) = √(4.14×10⁻²¹ / 10×10⁻¹²) ≈ 20.3 µV rms
若满量程是 ±2.5 V(正弦幅度 2.5 V,有效值 1.768 V),则 SNR = 20·log10(1.768/20.3µV) ≈ 98.8 dB,约16.1 位。想把有效位数往上推,就得加大采样电容或者降低信号带宽——因为 kT/C 噪声是全带宽的,输出数据率越低,带外那部分被滤得越干净,等效输入噪声就越小。这解释了为什么同一个 ADC 在 10 SPS 下有 21 位有效分辨率,在 10 kSPS 下只剩 17 位。
再看时钟抖动。采样时刻的抖动 t_jitter 会通过 2π·f_in·t_jitter 转化成幅度误差,信噪比损失约 −20·log10(2π·f_in·t_jitter)。输入频率 1 kHz、抖动 10 ps 时,这一项高达 144 dB,根本不是瓶颈;但当输入信号频率升到 100 kHz,同样的 10 ps 抖动只剩 104 dB。所以——
注意:Σ-Δ 用于直流和低频精密测量时,时钟抖动通常不是主要限制;一旦你的信号带宽上到几十上百 kHz,抖动和运放建立时间就会变成天花板,这时候 AD 位数的意义会大幅缩水。
还有运放的有限增益。积分器里的运放如果开环增益只有 80 dB,那它的"虚地"就有残留误差,积分不完整,噪声整形的零点会偏移,低频噪声压不下去。这也是为什么高精度 Σ-Δ 前端运放的指标单列一页。
3. 从 1 位码流到 24 位数据:抽取滤波器的门道
3.1 Sinc3 为什么是工业测量的默认选择
调制器输出的是 fs 速率下的一串 1 位码流,数据率高达几 MHz,没人想要这个东西。把它变成有用的 24 位数据,靠的是数字抽取滤波器。最常见的是 Sinc 滤波器,也叫 CIC 滤波器,本质上是一个滑动累加器加抽取。
先看它的频率响应。Sincᵏ 滤波器在输出数据率 fdata 的整数倍处有传输零点。这个特性带来一个非常实用的结果:只要你把输出数据率设成 50 Hz,零点就落在 50、100、150、200 Hz……正好把工频 50 Hz 及其所有谐波全部吃干净。这就是为什么精密称重和工业仪表默认选 Sinc3——它对 50 Hz 和 60 Hz 的抑制可以做到 100 dB 以上,比任何模拟陷波器都干净。
不同阶数的取舍很明确:
| 滤波器 | 带外抑制 | 建立时间 | 输出噪声 | 适用场合 |
|---|---|---|---|---|
| Sinc1 | 弱(约 −13 dB/倍频程) | 1 个转换周期 | 最低 | 要求快速切换、信号本身很干净 |
| Sinc2 | 中 | 2 个转换周期 | 中 | 通用 |
| Sinc3 | 强 | 3 个转换周期 | 略高 | 工业现场、有工频干扰 |
| Sinc4 | 更强 | 4 个转换周期 | 更高 | 强干扰但允许慢速 |
| 宽带 FIR / 平顶型 | 通带平坦、阻带陡 | 长 | 视配置 | 需要平坦幅频响应的交流测量 |
阶数越高,抑制越强,但建立时间也越长,同时通带内的滚降越明显、输出噪声越大。这不是一个"越高越好"的选择题。
3.2 建立时间这笔账,多通道扫描时最容易算错
Sinc3 的建立时间是 3 个转换周期。假设你设的输出数据率是 10 SPS,一个转换周期是 100 ms,那么一次完整建立要 300 ms。如果你用 4 通道扫描,每切换一次通道都要重新建立,那么 4 个通道完整轮一遍的实际时间是 4 × 300 ms = 1.2 s,等效每通道的数据率只有 0.83 SPS,而不是你设的 10 SPS。
这个坑我在一个温度巡检项目上踩过。当时按 10 SPS × 8 通道算,以为每 100 ms 能拿到全部 8 通道的数据,结果实际刷新周期接近 2.4 s,上位机的曲线明显一卡一卡的。后来换成了内部带单周期稳定(single-cycle settling)模式的配置,代价是噪声比 Sinc3 高几个 dB,但对温度这种慢变量完全够用,刷新周期直接降回 100 ms 量级。
提示:选型时先确认器件是否支持单周期稳定或"零延迟"滤波器模式。如果手册上写"settling time: 3/fdata",多通道应用的吞吐量就得按 (通道数 × 3/fdata) 来算,别按 1/fdata。
3.3 宽带模式和低噪声模式不是一回事
很多高精度 Σ-Δ 器件会提供两套路径:一条是 Sinc 系低噪声路径,一条是宽带 FIR 路径。前者输出噪声更低,但通带滚降大,幅频响应在接近 fdata/2 的地方就掉下去了,做交流幅值测量会有明显的幅度误差;后者通带平坦、群延迟恒定,适合做谐波分析和音频。
选哪条,取决于你要的是"准"还是"平"。测直流和慢变量选低噪声路径,测交流幅值和谐波选宽带路径。用错路径的典型症状是:测一个 20 Hz 的正弦,幅值读数比真值低了 3% 到 5%,你还以为是传感器的问题。
4. 电路设计:几道锁死精度的硬件天花板
4.1 基准源:精度的上限由它锁死
ADC 的输出码本质上是 Vin/Vref 的比值,再乘满量程。这意味着基准源上的任何误差都会 1:1 地传到结果里。基准差 100 ppm,测量结果就差 100 ppm;基准有 1 µV 的噪声,读数里就有 1 µV 的噪声,跟 ADC 自己的噪声本底直接叠加。
所以我选基准源的时候,会按下面的顺序卡指标:
- 初始精度:决定系统增益的系统误差,可以校准掉,优先级最低。
- 温度系数:校准之后还会随温度漂,如果现场温度变化 ±20 ℃,用一颗 10 ppm/℃ 的基准,光这一项就是 ±200 ppm 的漂移,直接吃掉 13 位。精密场合至少要 5 ppm/℃ 以内,要求高的上 1~2 ppm/℃ 的埋入式齐纳或带曲率补偿的带隙。
- 低频噪声(0.1~10 Hz):这个最容易被忽略。噪声是随机的,校准不掉。常见的高精度基准低频噪声在 1~10 µVpp 量级,如果你的满量程是 2.5 V,10 µVpp 对应 4 ppm,已经接近 18 位的极限了。选基准时要看噪声密度,不只看初始精度。
- 长期漂移和迟滞:焊接、温度循环会让基准"记住"应力,产生几十 ppm 的迟滞。板子做弯曲、螺丝拧太紧都会引入这个误差。
还有一点是负载调整率和驱动能力。如果基准还要给别的东西供电(比如传感器激励),那负载电流变化会直接调制基准电压。正确做法是基准输出单独走一路到 ADC 的 REF 引脚,中间不要挂任何其他负载,REF 引脚旁边放 0.1 µF 加 10 µF 的组合去耦,10 µF 用低 ESR 的,别用高 ESR 的钽电容。
4.2 输入前端:开关电容输入电流带来的隐性增益误差
Σ-Δ ADC 的输入端通常是开关电容结构:调制时钟每个周期把采样电容切到输入端充一次电,再切到积分器放电。对外的表现就是输入电流,而且这个电流和输入电压成正比:
I_in ≈ C_s × Vin × fmod
举个例子。采样电容 C_s = 2 pF,调制时钟 fmod = 1 MHz,输入 2.5 V:
I_in = 2×10⁻¹² × 2.5 × 10⁶ =5 µA
如果信号源的内阻是 100 Ω,那平均压降就是 5 µA × 100 Ω = 500 µV。满量程 5 V(差分 ±2.5 V)时,这是 100 ppm 的误差——直接把你从 20 位打回 14 位左右。更麻烦的是它是信号相关的,本质是增益误差而不是失调,简单减个零点根本修不掉。
所以前端设计有两条铁律:
- 源阻抗要低。要么信号源本身阻抗就很低(比如直接接低阻桥式传感器),要么前面加一级运放缓冲。分压网络后面直接接 Σ-Δ 输入,是很常见的错误。
- RC 要小。前端那个抗混叠 RC,电阻值不要贪大。常见配置是每路串 20~100 Ω,差分之间跨一个 1~10 nF 的电容。串阻太大,除了加剧上面的增益误差,还会让采样电容在半个时钟周期内充不满,产生非线性。
抗混叠本身的要求反而不高。Σ-Δ 的过采样把混叠区推到了很高的频率,前端 RC 的作用主要是限制高频噪声进入调制器被折返回来,所以截止频率放在调制时钟的频段以下就行,不需要精确设计。我一般按 1/(2πRC) ≈ 1~5 MHz 来配。
4.3 时钟、电源与地
调制时钟的质量直接关系到噪声整形的结果。如果是外部提供调制时钟的器件,时钟源的抖动要按前面 2.3 节那套算;如果是内部时钟,就重点关注它的抖动指标。另外,如果多片 ADC 需要同步采样,必须共用同一个主时钟,不能用各自内部时钟,否则通道间的采样时刻会有固定但未知的偏差。
电源方面,高精度模拟供电和数字供电要分开走,模拟部分用 LDO 而不是开关电源直供。如果非要用开关电源,中间至少加一级 LDO 或者 π 型 LC 滤波。模拟电源的纹波会通过电源抑制比的有限性渗进信号,形成和开关频率相关的杂散。
地的处理上我倾向于单点接地 + 完整地平面的组合:模拟和数字各自有一块完整的地平面,在 ADC 下方通过一个短而宽的连接汇合。不要在地平面上开槽去"分割"地,那样只会把回流路径切得七零八落,反而增加辐射和串扰。ADC 的 AGND 和 DGND 引脚要各自就近接到自己那片地上,再在芯片附近汇合。
去耦电容的位置比容值更重要。每个电源引脚旁边必须有一个 0.1 µF,引脚到电容的走线越短越好,过孔直接打在焊盘边上。整体上再配 1~10 µF 的储能电容,放在稍远的位置也没关系。
4.4 工业现场:端口保护与隔离
工业现场的传感器线缆动辄几米到几十米,感应雷、浪涌、静电都会顺着线缆进来。Σ-Δ ADC 的输入是高阻抗、低电压的,非常脆弱。保护要做,但保护器件本身会破坏精度,这里有个平衡。
可以这样分层:
- 第一层,气体放电管或压敏电阻:放在接线端子处,泄放大能量,响应慢但能力强。
- 第二层,TVS 二极管:放在限流电阻之后,响应快,钳位残压。
- 第三层,限流电阻 + RC:限制进 ADC 的电流,同时和 ADC 输入电容组成低通。
最大的坑在于TVS 的漏电流。一个普通的 TVS 漏电流可能在几十 nA 到几 µA 量级,而且随温度指数上升。如果你的信号源阻抗是几 kΩ(比如分压后的高压测量),那么 1 µA 的漏电流就是几 mV 的误差,20 位精度直接没了。解决办法是选低漏电流的器件(nA 级),并且把限流电阻放在 TVS 和 ADC 之间,同时保证 TVS 那一侧的节点阻抗足够低。
如果现场地电位差大,或者有强共模干扰,前端直接上隔离调制器更省心:调制器在隔离栅的模拟侧,输出的 1 位码流通过数字隔离器送到 MCU,MCU 侧用硬件滤波器解调。CMOS 隔离调制器现在是这类应用的主流方案,共模抑制和可靠性都比隔离放大器方案好。
5. 软件侧:配置顺序、DMA 与后处理
5.1 配置顺序错了,读数就不对
Σ-Δ 器件的寄存器配置有个隐性的顺序依赖,顺序错了会得到看着正常但实际错误的数据。我通常按这个顺序走:
- 时钟与分频:先确认调制时钟来源和频率,算清楚 fmod 和各个配置的合法性范围。
- 基准选择与增益:确定内部还是外部基准,PGA 增益是多少。增益和基准一起决定满量程,两个都要定死。
- 通道与输入配置:选差分还是单端,选缓冲开还是关,斩波开还是关。
- 滤波器配置:选 Sinc 阶数还是宽带 FIR,设输出数据率,设单周期稳定模式。
- 校准:内部零标度校准(把输入短路测失调)、满标度校准(接基准测增益)。
- 触发与中断:配数据就绪信号、DMA 请求。
第 5 步的校准很容易被跳过。手册上给的失调和增益系数是典型值,芯片之间会有差异。出厂前跑一次内部校准,能把失调从几百 µV 压到几 µV 量级,代价只是几百毫秒。
另外有个小细节:改完滤波器配置后必须丢弃前几个样本。滤波器内部还有残存数据,新配置生效后头 1~3 个转换周期输出的是混着旧配置的垃圾。我在调试时吃过这个亏,改了数据率之后头几帧数据一直不对,还以为是自己算法有问题,其实是没丢样。
5.2 DMA 双缓冲:连续采集不掉点的关键
连续采集最怕的是数据溢出。转换完成中断里再去读寄存器,一旦有更高优先级中断插进来,或者代码里有个稍长的函数,数据就被覆盖了。用 DMA 是标准解法,而**双缓冲(double buffer)**是更进一步的做法。
在 STM32 这类带 DMAMUX 的 MCU 上,典型做法是把 DMA 配成循环模式,缓冲区分成 A、B 两块,配置传输完成中断在 A 满时触发,半传输中断在 B 满时触发。CPU 一直在处理"上一块"数据,DMA 在写"当前块",两边互不干扰。这样即使主循环偶尔被拖长,只要不超过半个缓冲区的采集时间,就不会丢点。
如果是对外部 Σ-Δ 调制器输出的 1 位码流做解调(STM32H7 的 DFSDM 外设就是干这个的),思路是一样的:DFSDM 负责滤波抽取,DMA 负责搬运结果。做闭环验证的时候,可以同时用 DDS 生成一路已知频率和幅度的正弦波作为激励,采集回来后做 FFT 看信噪比和失真,比用信号发生器手动调要方便得多,也更容易复现。
5.3 后处理:滤波、平均与浮点精度的隐形损失
采集回来的原始数据一般还要做一层软件处理。最简单的是滑动平均,但它有个代价:等效噪声带宽下降的同时,阶跃响应也变慢了。移动平均 N 点,等效噪声带宽约降到原来的 1/N,SNR 理论上改善 10·log10(N),但响应延迟也变成 N 个采样周期。N 取太大,系统响应会变得很迟钝。
如果工频残余还是明显,可以用软件陷波滤波器,但要注意陷波器对中心频率的精确度非常敏感。50 Hz 的陷波器如果实际工频偏到 50.05 Hz,抑制深度会从 60 dB 掉到 20 dB 以下,还不如不用。这种情况下正确做法是回到硬件层,把 ADC 的输出数据率调成 50 Hz 整,靠 Sinc 滤波器的天然零点去抑制,比软件陷波稳得多。
还有一个特别隐蔽的坑:浮点累加精度。如果你用 float32 去累加一百万个样本求平均,累加器的尾数会随着和值的增大而不断丢精度,最终结果可能有百分之几的偏差。这不是数学理论问题,是我实实在在遇到过的——一条"平均后反而更不准"的诡异曲线,查到最后是数据类型的问题。正确做法是用 double 累加,或者直接整数累加最后再除,或者用 Kahan 求和补偿。用 Python、Julia 做离线分析时同理,别默认 float 就够用,高精度场景该上高精度类型就上。
5.4 用 ENOB 和噪声直方图验证真实性能
手册给的有效位数是在特定条件下的典型值,不能直接当成你的系统的性能。真要验证,用一个简单的方法:把输入端短接到一个稳定的中点电压(不是接地,用两个等值电阻分压到 Vref/2,中间并联大电容),采集一万个点,然后:
- 算这组数据的标准差,这就是系统的输入等效噪声(RMS)。用满量程除以噪声再取对数,就是实际的动态范围。
- 画直方图,看分布形状。正态分布说明是白噪声,环境噪声占主导;如果看到明显的离散峰或者双峰,说明有确定性干扰,比如开关电源的谐波或者数字信号的串扰,这时候靠软件滤波是治标不治本。
- 用
ENOB = (SNR − 1.76)/6.02换算。
这个测试做起来只要十分钟,但它能立刻告诉你系统当前的真实水平,以及问题出在噪声还是干扰上。我一般在新板子第一次上电必做这一项,比盯着读数跳动猜有效得多。
6. 实测排错:让有效位数凭空掉一半的几个坑
6.1 常见现象与根因对照
| 现象 | 常见根因 | 排查方法 |
|---|---|---|
| 读数末位快速跳动 | 热噪声、基准噪声、前端电阻热噪声 | 短接输入测噪声,与手册值对比;降低输出数据率看是否改善 |
| 读数缓慢漂移(分钟级) | 基准温漂、运放失调温漂、热电偶效应 | 恒温箱里跑长时间曲线;热风枪局部加热定位元件 |
| 读数有周期性波动 | 工频串扰、开关电源纹波、斩波频率谐波 | 直方图看分布;改输出数据率到 50 Hz;示波器看电源纹波 |
| 多通道互相影响 | 通道建立时间不足、采样电容电荷注入、模拟开关漏电 | 降低扫描速率看是否改善;加大切换后的丢弃样本数 |
| 接近满量程时非线性变差 | 前端运放输出摆幅不足、基准驱动能力不够、保护器件导通 | 缩小输入范围测试;查运放的轨到轨余量 |
| 不同板子读数不一致 | 基准初始误差、布局差异、焊接应力 | 出厂校准;检查基准焊接和 PCB 应力 |
6.2 案例一:缓慢漂移,最后是基准在"呼吸"
前面提过的那台电子秤,症状是零点在十几分钟里漂了大约 30 个码值。最初我怀疑是传感器,换了传感器没变化;怀疑是运放,换了低温漂运放,漂移量只降了 10%。
后来用热风枪逐块区域轻微加热,发现温度一落在基准源那颗芯片上,读数立刻跳。换了一颗低温漂、低噪声的基准,漂移量降到 3 个码值以内。再往后查,还有一小部分漂移来自 PCB——基准芯片贴着板边,板子被螺丝拧紧后产生的应力让基准输出了几 ppm 的偏移。把它往板子中间挪了两厘米,同时改了固定方式,残余漂移就基本看不出来了。
这个案例里最关键的一步不是换芯片,而是用局部加热把漂移源从一堆可能性里定位出来。如果你手头没有热风枪,用棉签蘸一点酒精点在可疑元件上,看读数的阶跃响应,效果差不多,而且更温和。
6.3 案例二:多通道串扰,其实是电荷注入
另一个项目是 8 通道的应变采集。发现通道 1 接大信号、通道 2 接小信号时,通道 2 会跟着通道 1 变化,串扰量大约 0.05%。
一开始我以为是模拟开关的通道隔离度不够。查手册发现隔离度在 120 dB 以上,不应该是这个量级。后来想明白了:问题在于采样电容在通道切换时的电荷分配。上个通道的采样电容上残留的电荷,会和当前通道的源阻抗重新分配,产生一个和上一通道电压相关的误差。
解决办法是把切换后的建立时间留够,并在软件里丢弃每个通道切换后的前几个样本。我把丢弃样本数从 1 个改成 3 个,串扰量降到了测量噪声以下。代价是每个通道的有效数据率下降了,但在这种多通道轮询的场景下完全可接受。
提示:多通道 Σ-Δ 采集里,"切完通道丢掉前几个样本"几乎是必备操作。别指望模拟开关的隔离度能解决一切,电荷注入是物理层面的东西。
7. 选型对照:什么时候该用 Σ-Δ,什么时候别硬上
把上面的内容收拢一下,形成几条可以拿去做决策的判断标准。
该用 Σ-Δ 的场合:
- 信号是直流或低频(带宽几 Hz 到几 kHz),需要 18 位以上的分辨率。
- 前端信号本身很微弱,比如热电偶、应变片、光电二极管、电化学电极。
- 现场有工频干扰,希望能靠数字滤波硬扛掉 50 Hz 和它的谐波。
- 系统对延迟不敏感,允许几十到几百毫秒的建立时间。
不该用 Σ-Δ 的场合:
- 需要几十 kSPS 以上的采样率,比如电机电流环、快速保护、振动分析。这时候 SAR 或者流水线 ADC 更合适。
- 需要多通道严格同时采样。Σ-Δ 的多通道通常是轮询的,通道间有固定的时间偏差;如果一定要同步,得每个通道配一个独立的调制器。
- 对延迟极其敏感的闭环控制回路,Σ-Δ 的群延迟会直接影响环路相位裕度。
- 信号频率已经很高,比如几十 kHz 以上的交流幅值测量,此时时钟抖动和运放建立时间会啃掉你大部分的理论位数。
顺带说一个中间路线:现在不少 MCU 的 SAR ADC 支持硬件过采样,可以在 ADC 内部做多次采样累加再抽取,配合均值滤波能提升几个有效位。这解决不了 kT/C 和基准的限制,但对 12 位提升到 14~15 位这种需求来说,比自己外面加运放做积分电路划算得多。选型时值得看一眼手册里有没有这个功能。
最后再聊一个实操层面的体会。Σ-Δ 高精度转换这件事,真正难的部分从来不是理解噪声整形的数学——那部分看两页推导就懂了,公式也不复杂。难的是把它落到一块具体的板子上,并且知道每一个误差项是从哪儿来的、量级是多少、能不能被校准掉。
我的习惯是每做一版新板子,都按下面的顺序过一遍:先把输入端短接到中点,测本底噪声和直方图,确认 ADC 和基准这一层是干净的;再接入信号源,测增益和失调误差,做一次两点校准;然后放到恒温环境里跑一小时,看漂移;最后再上真实传感器。这个过程大概要花一整天,但它能在项目早期就把基准、前端、布局这些深水区的问题暴露出来,比后期在整机上排查要省掉太多时间。
还有一个小技巧值得试:把 ADC 的输出数据率故意设成两个不同的值(比如 10 SPS 和 1000 SPS),分别测噪声。如果噪声随数据率按理论预期变化,说明你看到的是热噪声,属于正常;如果两者差不多,那多半是有确定性干扰耦合进来了,这时候去翻电源和布局,比在软件里加滤波有用得多。