
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 dBL阶是 6L3 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) / ((2L1) · OSR^(2L1))对一个真正的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 / ENOB6450.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 dB5个位。差别在于噪声整形这个环节在不在。所以选芯片的时候看到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·fdatasinc1、0.318·fdatasinc2、0.262·fdatasinc3、0.225·fdatasinc4的位置也就是说输出速率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 Hz60 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位数据听起来余量很大但噪声一旦从参考、激励或者地线上进来它在频域上和真实信号是重叠的数字滤波分不开。把参考的退耦、输入的对称性、地和时钟的干净程度这三件事做到位比事后调一百行滤波代码都有用。如果后面还要往上做可以考虑的扩展方向是把系统校准做成两点或多点标定把零点漂移和增益漂移分开处理再进一步针对温漂明显的场景引入片上温度传感器做查表补偿——这些都属于把已经稳定的码值用好前提还是前面那条信号链足够干净。