news 2026/9/29 2:36:19

Σ-Δ ADC高精度采集:过采样、噪声整形与数字滤波

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Σ-Δ ADC高精度采集:过采样、噪声整形与数字滤波

1. 一个比较器凭什么给出24位读数

第一次把Σ-Δ调制器的框图铺在桌面上,我盯着中间那个只有一位输出的比较器看了很久。一个只能吐"高"或者"低"两种状态的器件,前后各挂几个积分器、比较器和数字逻辑,最后居然能报出24位的数据——只看框图的话,这事儿确实像是变戏法。等真正把ADC采样过程中的噪声账一笔一笔算清楚之后才发现,Σ-Δ压根没打算在模拟世界里变出精度,它做的事情是换了个思路:既然模拟电路做不出那么高的精度,那就让模拟电路只干最粗的活,把精细的部分全部推给数字域。

拿最常见的逐次逼近型(SAR)做对比会更清楚。SAR的工作方式是"一次问对":采样保持电路把输入电压冻住,然后从最高位开始一位一位地试,每一次试都要保证比较器的判决是准的,DAC的每一位权重是准的,参考电压是准的。这就像用一把刻度精确到微米的尺子去量东西,尺子本身必须足够准。Σ-Δ反过来,它用的是"问很多次、每次只问个大概,靠时间和统计把答案磨出来"的办法:输入信号被采样几万次甚至上百万次,每次比较器只需要回答"现在大了还是小了",单次的判决误差不但被容忍,甚至被主动利用——因为这些误差在频域上被搬到了一个你不关心的地方去了。

把这件事拆开,实际靠的是三个手段的配合:过采样、噪声整形、数字滤波与抽取。这三个词在手册里经常被并列写出来,但它们在系统里的地位并不平等。过采样是前提,噪声整形是核心,数字滤波器是收尾。少任何一个,这套结构都立不住。

一个我个人觉得挺贴切的类比:量化噪声就像一地沙子。Nyquist型ADC的做法是把沙子均匀铺满整块地板,你想在某个角落堆出高精度,就必须把整块地板的沙子都扫干净,也就是拼命提高比较器的位数。Σ-Δ的做法是先用一个斜坡把沙子往墙角扫(噪声整形),然后只用你要的那一小块地(数字滤波),剩下连沙子带地一起扔掉(抽取)。地板还是那点沙子,但你要的那块地上干净多了。

1.1 光靠过采样,收益其实少得可怜

很多人第一反应是"我多采几次平均一下不就准了吗",这话对,但收益低到让人绝望。对白噪声而言,N次不相关的采样求平均,噪声有效值只降低√N倍。换算成分贝,采样率提高4倍,信噪比提升6 dB,也就是多换来1个有效位。想从12位冲到24位,需要2的12次方也就是4096倍的过采样——如果原始采样率是1 MSPS,那就得跑到4 GSPS。这条路在功耗和工艺上根本走不通。

问题出在"白噪声"这个前提上。均匀采样下的量化噪声确实是近似均匀分布在0到采样率一半之间的,你提高采样率,噪声的总功率不变,只是被摊得更薄了,带内的那一份自然就少了。但摊薄的速度是线性的,而噪声密度降下来后带宽也同步变宽,两边一抵消,只剩下√N这点收益。

所以真正让Σ-Δ成立的不是过采样,而是下一个东西。

1.2 噪声整形才是那个真正的杠杆

噪声整形的核心思想是:不让量化误差直接出现在输出端,而是让它先绕着环路跑一圈再出来。在一阶调制器里,量化器产生的误差先被反馈回输入端,跟输入信号一起再进积分器,结果是误差在输出端变成了相邻两次采样之间的"差分"形式。这个差分在数学上就是一个高通滤波器,低频段的误差被压得很低,高频段的误差被抬得很高。

效果有多强?一阶调制器每把采样率翻一倍,带内信噪比提升9 dB;二阶是15 dB;L阶是 6L+3 dB。换句话说,二阶调制器采样率翻4倍能换到5个有效位,而单纯的过采样平均只能换1个。同样一份过采样成本,一个在打水漂,一个在滚雪球。

这就是为什么几乎所有常见的精密Σ-Δ器件都用二阶或更高阶的调制器:一阶结构要到OSR两千多才能勉强摸到16位,而二阶在OSR两百左右就够了,这个差距直接决定了芯片的时钟频率和功耗。

1.3 数字滤波器不是可选项,是必需品

紧接着的问题是,被整形到高频段的那些噪声去哪了?如果不管,它们会从数字输出端原封不动地漏出来,甚至因为抽取(decimation)过程混叠回带内,把好不容易压下去的低频噪声重新抬起来。所以抽取之前必须先滤波,把带外那一大堆噪声全部滤掉,然后再降采样。

这一步通常在片内由sinc滤波器(也叫CIC)加一级后置FIR完成。很多人调ADC的时候只关心"输出速率设多少",完全忽略滤波器类型这一项,结果就是噪声和工频抑制怎么都对不上手册曲线。后面我会专门拿一节讲这个滤波链。

把这三点串起来,Σ-Δ的完整链路就是:输入被高速过采样 → 调制器把量化噪声推向高频 → 数字滤波器砍掉带外噪声 → 抽取器降到目标输出速率。模拟域里做的是粗糙但快速的工作,数字域里做的是精确但慢速的工作,两边分工明确,各干各擅长的事。

2. 过采样只是开胃菜,噪声整形才是主菜

前面说了结论,这一节把账算清楚。推导不难,但把量化噪声当成一个随机信号来处理,是整个Σ-Δ理论的地基,这个假设一旦理解透了,后面高阶调制器、MASH结构、稳定性分析都能顺下来。

2.1 把量化误差当成白噪声,这个假设有多靠谱

一个N位量化器,输入是连续量,输出只能落在 2^N 个离散台阶上,台阶间距记为Δ。任意一次量化,误差 e 落在 ±Δ/2 之间。如果我们假设输入信号在台阶之间"跳来跳去"、跟量化误差本身不相关,那么可以把 e 建模成一个在 [-Δ/2, +Δ/2] 上均匀分布的随机变量,它的功率就是方差:

P_e = Δ² / 12

这个值经常被写成"量化噪声功率"。它跟采样率无关,只跟量化步长有关。这一点非常关键:你采样得再快,量化噪声总功率也纹丝不动,改变的只是它在频域上的分布密度。采样率为 fs 时,双边噪声功率谱密度在 0 到 fs/2 内是平的,值为 Δ²/(12·fs)(单边),单位是 V²/Hz。

这个假设在什么条件下成立?输入信号幅度足够大、变化足够快、跟采样时钟不同步的时候,它相当准。反过来,如果输入是接近直流的恒定电压,量化误差会呈现明显的周期性——这就是后面要讲的**空闲音(idle tone)**问题的根源,也是为什么很多精密ADC内部会主动注入一点抖动。

2.2 一阶调制器的差分方程与那条9 dB/倍频程的斜率

一阶调制器的结构很朴素:一个积分器、一个一位量化器(其实就是比较器)、一个一位DAC把输出反馈回输入端做减法。设输入为 x[n],量化误差为 e[n],输出为 y[n]。积分器在时域上就是累加,写出环路方程:

y[n] = x[n-1] + (e[n] - e[n-1])

写成Z域:

Y(z) = z⁻¹·X(z) + (1 - z⁻¹)·E(z)

信号传递函数 STF = z⁻¹,只是延迟了一个采样周期,幅度恒为1;噪声传递函数 NTF = 1 - z⁻¹。把 z = e^{j2πf/fs} 代进去,NTF的幅度是:

|NTF(f)| = 2·|sin(πf/fs)|

在低频段有 sin(x) ≈ x,所以 |NTF| ≈ 2πf/fs。噪声在低频被"拉低"到了接近零,在 fs/2 处达到最大值2。这就是噪声整形的全部秘密。

把这个幅度平方后乘上原来的噪声密度,再在信号带宽 fB 内积分,可以推出带内噪声功率:

IBN₁ = (Δ²/12) · π² / (3 · OSR³)

其中 OSR = fs / (2·fB),即过采样率。注意这里 OSR 是三次方出现在分母上,取对数后就是 30·log₁₀(OSR),采样率每翻一倍就是 30×0.301 ≈9 dB。这就是那条经典的斜率。

顺便说一个容易被忽略的细节:这个公式里没有出现采样率本身,只有OSR,说明决定性能的是采样率与信号带宽的比值,而不是绝对的时钟频率。同样是1 MHz调制器时钟,做10 Hz带宽的称重和做10 kHz带宽的振动测量,两者能拿到的精度差了三个数量级。

2.3 阶数、过采样率与实际能拿到的位数

二阶调制器的NTF是 (1 - z⁻¹)²,低频处近似 (2πf/fs)²,带内噪声变成:

IBN₂ = (Δ²/12) · π⁴ / (5 · OSR⁵)

分母上的OSR是五次方,斜率变成15 dB/倍频程。推广到L阶:

IBN_L = (Δ²/12) · π^(2L) / ((2L+1) · OSR^(2L+1))

对一个真正的1位量化器(输出摆幅±Δ/2,满幅正弦功率为Δ²/8),信噪比可以直接算出来:

SNR₁ ≈ 30·log₁₀(OSR) − 3.4 dB SNR₂ ≈ 50·log₁₀(OSR) − 11.1 dB

下面这张表是把上面两式代进去算的结果,ENOB按 (SNR − 1.76)/6.02 折算。数字是理想值,实际器件里还要扣掉热噪声和1/f噪声的份额,所以只能当上限看。

过采样率 OSR一阶 SNR / ENOB二阶 SNR / ENOB
6450.8 dB / 8.1 位79.2 dB / 12.9 位
12859.8 dB / 9.6 位94.3 dB / 15.4 位
25668.8 dB / 11.1 位109.3 dB / 17.9 位
51277.9 dB / 12.7 位124.4 dB / 20.4 位
102487.0 dB / 14.2 位139.4 dB / 22.9 位

这张表能解释几个工程上的常见现象。第一,为什么市面上主流的精密Σ-Δ都是二阶或三阶起步——一阶结构要做到20位,OSR得奔着几十万去,时钟根本承受不了。第二,为什么很多音频Σ-Δ能轻松做到20位以上——音频信号带宽只有20 kHz左右,而调制器时钟可以跑到6 MHz以上,OSR动辄上百。第三,为什么Σ-Δ不适合做高速采集——同样的结构去测100 MHz带宽的信号,OSR掉到个位数,噪声整形带来的增益荡然无存。

顺带澄清一个经常被混淆的点:不少MCU的SAR型ADC带了"硬件过采样"功能,看起来也是在提高有效位数,但两者不是一回事。硬件过采样做的是平均,4倍采样换6 dB,也就是1个有效位;一阶Σ-Δ的4倍换18 dB,接近3个位;二阶换30 dB,5个位。差别在于噪声整形这个环节在不在。所以选芯片的时候看到"16位ADC + 硬件过采样"这类描述,别自动往"等效24位"上想,两者之间差了整整一层环路。

3. 高阶调制器为什么会"翻车"

盯着上面那张表往下看,很容易产生一个念头:既然每升一阶斜率就多6 dB,那做成五阶、六阶岂不是轻轻松松24位?实际动手做过的人都知道这条路走不通,问题出在稳定性上。

3.1 环路系数的稳定性边界在哪里

噪声整形本质上是一个负反馈环路,环路里还塞了一个强非线性环节(比较器)。二阶以下的NTF在单位圆上增益有限,环路行为可以分析;但阶数一上去,如果各级积分器的增益系数都取同一个值,环路增益就会在某个频率上急剧累积,量化器很容易进入**过载(overload)**状态——输入稍微大一点,积分器就被推到饱和,输出开始出现持续的、不可恢复的大幅度振荡,调制器直接失稳。

所以实际的高阶调制器不是简单地串接积分器,而是要在各级之间插入权重系数,把NTF的幅度在整个频段上压住。工程上有一条相当好用的经验判据:NTF的最大幅度控制在1.5左右,量化器输入不要超过满量程的60%到70%。这条线是拿稳定性换来的,代价就是实际能用的输入动态范围被砍掉了一截,等效信噪比要往下扣几分贝。

常见的三种拓扑是CIFF(前馈)、CRFB(反馈)和CRFF(混合)。前馈结构的各级积分器只处理噪声不处理信号,摆幅小、对运放增益要求低,是我个人比较偏好的路线;反馈结构的信号要穿过每一级,积分器摆幅大,但系数的容差更宽松。选哪一种,主要看你的运放能做到多大直流增益、功耗预算有多少。

另外还有一条很实用的路子:把比较器换成多比特量化器。用3位或4位量化器,量化步长直接降一个数量级,噪声底噪更平,环路稳定性也大幅改善,代价是反馈DAC必须做到同样的精度——这就麻烦了,DAC的失配是非线性的,直接吃掉整个系统的线性度。解决办法是加一级动态元件匹配(DEM)或数据加权平均(DWA),把DAC失配误差在时域上打散成白噪声。多比特Σ-Δ在音频领域用得很多,在超低速精密测量里反而不常见,因为低速场景下用二阶单比特就够,没必要引入DAC失配这个新麻烦。

3.2 单环高阶和MASH,两条完全不同的路

另一条实现高阶整形的路线是MASH(多级噪声整形),做法是把几个一阶或二阶的小调制器级联起来:第一级的量化误差不丢掉,而是送给第二级继续整形,第二级的误差再送给第三级。最后用一个数字抵消网络把前面几级的量化噪声从输出里扣掉,只留下最后一级被高阶整形过的噪声。

MASH最大的好处是每一级都是低阶结构,本身绝对稳定,不需要小心翼翼地调系数。ADC厂商在需要兼顾稳定性和高阶整形的时候会选这条路。

但MASH有个代价:模拟各级之间的增益必须和数字抵消网络里的系数精确匹配。如果第一级积分器增益因为工艺偏差比设计值低了2%,这部分误差就会直接漏到输出端,把整形效果打折扣。所以MASH对模拟匹配的要求比单环高阶更苛刻,对温漂也更敏感。这也是为什么你会看到某些器件在数据手册里专门标出"增益误差漂移"这类看起来跟精度关系不大的参数——它确实会通过这条路影响噪声性能。

3.3 空闲音:一个不会出现在理论公式里的坑

前面所有推导都建立在"量化误差是白噪声"这个假设上。当输入是一个缓慢变化甚至恒定不变的电压时(比如称重传感器空载、温度探头稳定在室温),这个假设会直接崩掉。一位量化器在这种输入下会产生周期性输出序列,频谱上看就是一堆离散的尖峰,频率通常落在 fdata/N 这种位置。

你会在实际测试中遇到这样的现象:给输入端短路,输出码却在小范围里规律地跳,跳动的周期还挺稳定;改变输入电压,这些跳动的频率跟着变。这就是空闲音。它对于直流测量尤其讨厌,因为它的频率正好落在你关心的带宽里。

应对办法有两类。一类是抖动注入(dithering):主动在量化器前或反馈路径里加一点幅度很小的随机噪声,量级大概是量化步长的几分之一。这点噪声会稍微抬高本底噪声,但能把那些集中的尖峰打散成平坦的底噪,对直流测量的净效果是正面的。另一类是斩波(chopping):把输入信号的极性周期性反转,然后在数字端再翻回来,把1/f噪声和失调调制到斩波频率上,再用滤波器去掉。很多超低失调的精密Σ-Δ都同时用了斩波和抖动。

这一条在实际调试里值得留意:如果你测的是一个几乎不变的直流信号,看到码值有规律的小幅摆动但换个输入就没有了,先别怀疑PCB,先看看是不是空闲音,把滤波器类型或抖动开关调一下。

4. 数字滤波器这一半的功劳

模拟域把噪声推到了高频,但高频的那些噪声还在数字码流里。数字滤波器的作用就是把它们滤掉,然后把采样率降下来。这部分的选型往往比调制器更容易被忽视,因为它看起来只是几个寄存器设置,实际影响却非常直接。

4.1 为什么第一级一定是sinc而不是一个陡峭的FIR

按理说理想滤波器应该是砖墙响应,但Σ-Δ数字滤波链的第一级几乎清一色用sinc(也叫CIC,级联积分梳状滤波器)。原因很实在:功耗和面积。第一级要处理的输入是调制器输出的高速一位码流,采样率可能是几百kHz到几MHz,如果在这里跑一个几百阶的FIR,乘法器的功耗会失控。而sinc滤波器只需要累加器,没有乘法,用纯数字逻辑就能跑,而且它的零点位置天生就落在抽取后的采样率整数倍上,正好能把抽取过程会混叠的那些频段压住。

sinc滤波器的阶数(常见的是sinc3、sinc4)直接决定了抑制能力和建立时间。频率响应写出来是:

|H(f)| = | sin(πMf/fs) / (M·sin(πf/fs)) |^L

零点是周期性的,每间隔 fdata = fs/M 就出现一个。这个性质带来两个直接后果:一是对落在零点上的干扰抑制极强,二是通带下降得很快。-3 dB带宽大约在 0.443·fdata(sinc1)、0.318·fdata(sinc2)、0.262·fdata(sinc3)、0.225·fdata(sinc4)的位置,也就是说输出速率10 SPS、用sinc3的时候,信号带宽只有2.6 Hz左右。

这是个很容易踩的坑。有人把输出速率设到10 SPS,然后抱怨"为什么我5 Hz的信号幅度掉了好几个dB"。答案是sinc3的通带根本撑不到5 Hz。想要更宽的通带就得提输出速率,但输出速率一提,工频抑制和解调噪声全都变了,参数之间是绑在一起的。

4.2 建立时间与多通道切换的隐藏成本

sinc滤波器是有限冲激响应结构,长度是 L×M 个调制器时钟周期。这意味着每次输入发生跳变(包括多路复用器切通道),输出需要大约L个转换周期才能完全建立到最终值。sinc3需要约3个周期,sinc4需要约4个。

这条在单通道连续测量时感觉不到,在多通道轮询采集时就是致命的。假设你设了10 SPS,用sinc3,四个通道轮流采,那么每个通道实际上每0.4秒才被更新一次,而每次切换后的前三个转换结果都是无效的,必须丢弃。也就是说每个通道真正有效的更新率只有 0.4 × 4 = 1.6 秒一次。很多人以为"10 SPS × 4通道 = 每通道2.5 SPS",实测发现数据对不上、通道间串扰严重,根源都在这里。

正确的做法分两种。第一种是切换后丢弃L个转换结果,这是最保险的;第二种是提高输出速率、多采几次再平均,用带宽换通道数。还有一种更彻底的办法:给每个通道配独立的Setup寄存器,让ADC在不同通道间自动切换滤波配置——但这并不能绕过建立时间,只是让配置管理更方便。

另外,如果系统对延迟敏感(比如闭环控制、过流保护),也要把这段建立时间算进去。sinc3在10 SPS下的群延迟大概是零点几秒量级,对任何需要毫秒级响应的场合都不合适。这种场景下应该考虑SAR型或者带快速滤波通道的混合型器件。

4.3 50 Hz和60 Hz的凹陷是"顺手"做出来的

sinc滤波器零点周期性的特点有一个非常漂亮的应用:工频抑制。只要把输出速率设成10 SPS,零点就出现在10、20、30、40、50、60 Hz……工业环境的50 Hz和60 Hz干扰正好都踩在零点上,抑制可以做到80 dB以上,完全不用额外设计模拟陷波器。

不过要澄清一点:50和60这两个频率的公约数是10,所以只有10 SPS(以及5、2、1 SPS这些)能让两者同时落在零点。如果设成20 SPS,零点在20、40、60、80 Hz,60 Hz被压住了但50 Hz不在零点上,抑制就差很多。有些器件标注的"同时抑制50 Hz和60 Hz"模式,实际做法是在sinc之后再串一级短FIR或平均滤波器,用它的零点把50 Hz补上,具体效果要看手册里的滤波器响应图。

还有一个细节值得留意:sinc零点是很窄的。以10 SPS、sinc3为例,要在50 Hz处获得80 dB抑制,凹陷宽度往往只有正负0.5 Hz到1 Hz。如果电网频率偏离标称值(比如实测49.8 Hz),抑制能力会断崖式下降。对精度要求特别高的场合,要么选择更宽凹陷的滤波器模式,要么干脆在模拟前端加一级针对性的RC或有源陷波。

选择滤波器类型的时候,可以按这个思路走:先确定要抑制什么干扰、需要多大信号带宽,再反过来选输出速率和滤波器阶数。顺序反过来做,基本都要返工。

5. 参考电压、时钟和输入前端:把24位打回16位的三个真凶

理论算得再漂亮,落到板子上还是要面对现实。我见过太多项目,芯片手册写着24位无噪声分辨率,实测连16位都稳不住,然后开始怀疑芯片是假的。绝大多数时候,问题不在芯片,而在这三件事上。

5.1 参考电压不是"接上就行",它就是量尺的刻度

Σ-Δ的转换结果是输入与参考的比值。参考电压上的任何噪声、漂移、温漂,都会1:1地搬到输出上。手册里标的那些漂亮噪声指标,全部是在理想的参考源条件下测出来的。

举个具体数字。假设用一个增益128的配置测桥式传感器,满量程差分电压是10 mV,参考是2.5 V。参考上如果有10 µV的噪声,等效到输入端就是 10 µV / 128 ≈ 78 nV——这已经比ADC本身的噪声大了。参考源选型不当,直接就把前端的高精度葬送了。

这里有一个非常实用的技巧:比例式(ratiometric)测量。如果传感器和参考源共用同一路激励,那么激励的噪声和漂移会同时出现在分子和分母上,一阶近似下直接抵消。桥式称重传感器、RTD恒流激励测量都属于这类。这也是为什么很多精密ADC推荐用外部参考而不是内部参考——不是为了指标更高,而是为了能和激励源共源。如果实在要用内部参考,那至少要把参考的退耦电容按手册要求配齐,并且走独立的走线回到模拟地。

还有一个常见错误:参考的退耦电容和模拟电源的退耦电容并排放在一起,共用一段地线。电源上的纹波会通过共地阻抗耦合进参考,问题在示波器上看不出来,只能从频域噪声谱上体现。正确的做法是参考的退耦网络单独打一个过孔回模拟地平面,物理上离电源的退耦网络远一点。

5.2 时钟抖动在高OSR下要不要紧

很多讲Σ-Δ的资料都会强调"因为过采样,对时钟抖动不敏感",这话基本成立,但容易让人放松警惕。抖动的等效误差电压正比于信号在采样时刻的斜率。因为输入被高频过采样,每个采样点之间的信号变化很小,所以单次采样由抖动引起的误差确实远小于Nyquist型ADC。这是Σ-Δ在音频和精密测量中受欢迎的原因之一。

但另一种情况需要注意:开关时钟如果不干净,问题就不在采样时刻,而在电荷转移是否完成。Σ-Δ的输入采样网络是开关电容结构,每个时钟周期都要完成一次电荷转移。如果时钟边沿上叠着明显的过冲或振铃,开关的导通时间就会不稳定,电荷转移不充分,结果是增益误差随频率变化、非线性变差、噪声抬升。这类问题的表现是"PSRR很差、电源一动噪声就变",但根源在时钟。

实操上我会做两件事:一是调制器时钟走线尽量短,远离PWM、DC-DC的开关节点,必要时用地线包起来;二是如果MCU提供时钟输出给外部调制器,先确认这个输出的抖动指标,别默认它和晶振一样干净。分频出来的时钟往往比晶振本身差很多。

5.3 输入前端和PCB:一份可以直接照做的清单

差分输入端的RC网络是另一处高频出问题的地方。Σ-Δ的输入是开关电容负载,开关瞬间会向信号源抽取电荷。如果源阻抗太高,电荷来不及补充,采样值就偏了。经验做法是:

  • 差分输入端各串一个电阻,两个阻值尽量一致(用0.1%的配对电阻),通常在几十欧到几百欧之间;阻值越大抗干扰越好,但会引入热噪声和建立误差,要权衡
  • 差分电阻之间跨接一个电容,与串联电阻构成低通,截止频率设在调制器时钟频率的几分之一以下,主要作用是压掉进入采样网络的高频干扰
  • 两个输入端的共模电容尽量小或者不加,否则会破坏共模抑制的对称性
  • 如果源阻抗本来就低(比如应变片直接接),RC可以省,但走线必须短且对称

地平面方面,模拟地和数字地我用单点连接的方式处理,交汇点选在ADC芯片下方,而不是在板子边缘随便找一处。ADC的模拟输入走线要远离SPI时钟线和DC-DC的开关节点,最好走内层,上下都有地平面夹着。差分对走等长,不要为了绕开一个过孔就牺牲对称性。

还有一个特别容易忽略的点:共模电压范围。Σ-Δ的差分输入有严格的共模限制,尤其是带PGA的时候,PGA的输入端共模范围会随增益变化而收窄。传感器输出的共模电压如果偏出这个范围,输出码会直接贴到满量程或者出现非线性,但表面上看不出来是共模问题。调试时用万用表量一下两个输入端对地的实际电压,比看波形更有用。

6. 从称重传感器到稳定读数:一次完整的落地

前五节讲的都是原理,这一节把它装成一套能跑起来的流程。我拿"24位Σ-Δ + 桥式称重传感器"这个最典型的组合来做例子,其他场景(热电偶、RTD、压力)的配置逻辑基本一致,改的只是增益和激励方式。

6.1 选型时先看哪几个参数

打开一款精密Σ-Δ的手册,会看到一张巨大的表格,行是输出速率、列是增益,单元格里是RMS噪声。这张表是选型时最该看的东西,但要看懂它得先明白一件事:表格里的噪声是有效值,而工程上关心的是峰峰值。两者之间大致差6.6倍,换算成位数差2.7位:

峰峰分辨率 ≈ log₂(满量程 / (6.6 × V_rms)) 有效分辨率 ≈ log₂(满量程 / V_rms)

举例来说,满量程差分范围取10 mV,某个配置下RMS噪声25 nV,那么有效分辨率是 log₂(10 mV / 25 nV) = log₂(400000) ≈ 18.6位,峰峰分辨率约15.9位。这个数字听上去跟"24位"差很远,但这就是真实可用的无噪声位数。厂家标24位是指输出数据字的宽度,不是无噪声位数,这两者的区别值得在选型阶段就搞清楚,否则后期做精度预算时会出大问题。

除了噪声表,还要看的几个参数:

参数关注点
输出速率范围下限决定能压多低的带宽,上限决定多通道轮询的可行性
滤波器类型sinc3还是sinc4,直接影响建立时间和50/60 Hz抑制档位
增益档位与共模范围高增益下共模范围收窄,要和传感器输出摆幅对得上
参考输入范围决定能不能做比例式测量,能否与激励共源
校准能力是否支持内部零标度/满标度校准,有没有系统校准通道
输入缓冲/激励电流源高阻信号源必须开缓冲,桥式测量需要稳定激励

6.2 配置与读码的最小可行流程

下面这段是伪代码,用一款常见的24位Σ-Δ(SPI接口)作为模板,流程上对所有同类器件都适用。

/* 第一步:复位与通信确认 */ adc_write(REG_MODE, MODE_RESET); delay_ms(5); /* 等基准和内部电容阵列建立 */ uint16_t id = adc_read(REG_ID, 2); if ((id & 0xFFF0) != EXPECTED_ID) { /* 通信都不通,后面全是白忙,先查SPI模式、CS时序、时钟极性 */ return -1; } /* 第二步:配置通道(正端AIN0,负端AIN1) */ adc_write(REG_CH0, CH_EN | CH_SETUP(0) | CH_P(0) | CH_N(1)); /* 第三步:配置Setup——增益128、外部基准、sinc4、10 SPS、缓冲开 */ uint32_t cfg = CFG_GAIN_128 | CFG_REF_EXT | CFG_FILT_SINC4 | CFG_FS_10SPS | CFG_BUF_ON; adc_write(REG_CFG0, cfg); /* 第四步:校准。务必在最终配置下定型后做,改任何一项都要重来 */ adc_write(REG_MODE, MODE_CAL_ZERO); wait_rdy(); /* 等状态寄存器RDY位置起 */ adc_write(REG_MODE, MODE_CAL_FULL); wait_rdy(); /* 第五步:连续转换 + 读码 */ adc_write(REG_MODE, MODE_CONT_CONV); for (;;) { if (!(adc_read(REG_STATUS, 1) & STATUS_RDY)) continue; int32_t raw = (int32_t)adc_read(REG_DATA, 3); if (raw & 0x800000) raw -= 0x1000000; /* 补码扩展到32位 */ process(raw); }

这段代码里有几个地方是新手最容易出错的。第一,校准必须在最终配置下做,如果先校准再改增益或滤波器,之前那组校准系数就废了。第二,读数据要靠状态寄存器的RDY位判断,不要用延时估算,因为抽取周期跟调制器时钟是异步的。第三,判符号位的时候注意位宽,24位数据左对齐和右对齐的处理方式不同,搞错了就得到一堆莫名其妙的正数。

6.3 出问题时的排查顺序

读数不稳、噪声大、码值跳,几乎每个做这块的人都会经历。我把自己常用的排查顺序列出来,从上往下走,命中率很高:

现象优先检查项
噪声比手册差一个量级参考退耦是否独立、激励是否共源、输入RC是否对称
通道间串扰明显切换后有没有丢弃L个转换周期,Setup配置是否串了
码值随机跳大空闲音、电源纹波、SPI时钟串扰进模拟走线
增益档位一调就废共模电压超出该增益下的允许范围,或输入缓冲未开
工频干扰抑制不达标输出速率是否踩在sinc零点上,电网频率是否偏离标称
上电初期数据不可信基准建立时间与内部校准未完成,延时不够
长时间漂移参考温漂、激励源温漂、电阻失配温漂,检查是否做了比例式

后处理这块我只建议做两点:一是剔除突变野值(用中值或者与上一值的偏差阈值判断),二是如果确实需要更平滑再上一阶IIR低通,但时间常数别设得太大,否则动态响应会被拖垮。Σ-Δ本身已经把带宽内的噪声平均得很干净了,再去堆复杂的数字滤波,往往只是在掩盖前面的模拟问题。

我个人在这个环节最大的体会是:不要指望靠数字端补救模拟端的缺陷。24位数据听起来余量很大,但噪声一旦从参考、激励或者地线上进来,它在频域上和真实信号是重叠的,数字滤波分不开。把参考的退耦、输入的对称性、地和时钟的干净程度这三件事做到位,比事后调一百行滤波代码都有用。

如果后面还要往上做,可以考虑的扩展方向是:把系统校准做成两点或多点标定,把零点漂移和增益漂移分开处理;再进一步,针对温漂明显的场景引入片上温度传感器做查表补偿——这些都属于把已经稳定的码值用好,前提还是前面那条信号链足够干净。

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

BaiduPCS-Go 上手:在终端里管理百度网盘

BaiduPCS-Go 上手:在终端里管理百度网盘 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go 你有一台笔记本或服务器,需要把本地文件批量…

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

MIPI时钟非单调性问题解析与工程解决

/* 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:33:45

PCIe Gen5 EDSFF NVMe SSD参考设计深度解读:信号完整性与散热功耗

做企业级存储的同行,最近两年应该都绕不开EDSFF这四个字母。我花了大半个周末,把OCP发布的《PCIe Gen5 EDSFF NVMe SSD参考设计》文档完整过了一遍,一边看一边对照自己之前调试Gen4盘、U.2盘的实际经验,发现这份文档的价值不在于它…

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

C++推箱子游戏开发实战:EasyX实现地图、逻辑与交互

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

作者头像 李华