十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

24位Sigma-Delta ADC设计实战:从噪声整形到精密测量

24位Sigma-Delta ADC设计实战:从噪声整形到精密测量 1. 项目概述为什么24位Sigma-Delta ADC是精密测量的基石做电子设计这些年我接触过不少ADC架构逐次逼近型SAR、流水线型、积分型都用过但如果让我选一种对“精度”二字诠释得最彻底的架构那一定是Sigma-DeltaΣ-Δ型。24位的Σ-Δ ADC不是简单的“分辨率高一点”它在原理上就和别的ADC拉开了代差。你拿到一块24位Σ-Δ ADC芯片比如ADS1232、AD7190、CS5532这些第一感觉往往是“这玩意儿怎么这么慢”“配置怎么这么啰嗦”但真正用起来、把精度做出来之后你会发现前面那点麻烦全是值得的。Sigma-Delta这个词拆开看就是“求差Sigma”和“积分Delta”实际上它的核心理念是“用时间换精度”。传统SAR ADC是直接用电压比较器逐位逼近每一位都靠硬件电路硬怼做到16位已经很吃力做到20位以上成本就失控了。Σ-Δ则完全不同它用极低的分辨率常常只有1位去做极高速度的采样再用数字滤波把高频噪声削掉靠“过量程采样 噪声整形”这两个手段硬生生把有效位数推到20位以上。这就好比拿一把短尺子量身高量不准但如果你快速量一万次再取平均结果反而比一把长尺子还准。这个架构对很多场景来说是刚需。称重传感器出来的信号满量程也就几毫伏到十几毫伏你要分辨出其中十万分之一的重量变化普通ADC根本做不到——因为信号直接被电路噪声淹没了。温度采集、应变测量、精密电流检测、电池内阻分析只要牵涉到微小信号的高精度量化24位Σ-Δ ADC都是绕不开的选择。包括音频领域的高保真录音24位/96kHz甚至更高规格的ADC底层基本都是Σ-Δ架构这也是为什么录音棚设备里这块芯片的身影无处不在。这篇文章我不打算给你抄数据手册而是想从一个实际项目使用者的角度带你完整过一遍24位Σ-Δ ADC的选型逻辑、原理拆解、硬件布线要点、寄存器配置流程以及我在实际调试中踩过的坑。无论你是刚准备接触精密测量的新手还是已经在用这类芯片想进一步榨干性能的老手这篇内容应该都能给你一些参考。2. 核心设计思路噪声整形与过采样是如何把精度“挤”出来的2.1 过采样笨办法背后的数学逻辑要说清楚Σ-Δ ADC的精妙得先回到奈奎斯特定理。理论上采样率只要大于信号最高频率的两倍就能无失真重建信号比如你要采一个1kHz的信号采样率只要超过2kHz就行。但这里有个隐藏问题量化噪声是均匀分布在整个频带里的。如果你的信号带宽就是0到1kHz噪声也摊在这1kHz里那信噪比就取决于你ADC的位数——12位ADC的理想信噪比大约是74dB16位大约是98dB想提高到24位的水平理论146dB直接堆硬件位数是不现实的。于是Σ-Δ架构走了另一条路我不做高位数采样我做高倍数过采样。假设我采样率是信号带宽的256倍那么量化噪声还是均匀分布但只有落在信号带宽内的那部分噪声会进入最终结果。换句话说过采样相当于把噪声“摊薄”了每提高4倍的采样率信噪比提升6dB相当于白赚1位分辨率。这就是过采样的基本原理。单纯过采样只能把你从12位推到15位左右没法到24位。真正的杀招在于噪声整形。2.2 噪声整形把噪声赶到你看不见的地方Sigma-Delta调制器内部有一个积分器和一个反馈环路它做的事情非常反直觉它不直接对输入信号做量化而是对“输入信号与量化结果之差”不断进行积分然后对积分结果做1位量化连续比较器输出0或1。从频域上看这个1位量化器的量化噪声并没有均匀分布在整个频带而是被积分器的频率响应“整形”到了高频段——低频段噪声被大幅压低高频段噪声反而被抬高了。这意味着什么呢你的信号是低频的传感器信号、音频信号基本都是噪声主要被推到几十倍于信号频率以上的高频段。这时再做一次数字低通滤波把高频噪声全部干掉留下来的信噪比就非常可观了。这就是“Sigma-Delta”这个名字的由来Sigma积分把差值累加起来Delta差值让环路不断修正误差。实际芯片内部还有多种拓扑比如二阶、三阶甚至更高阶的调制器阶数越高噪声整形效果越好但环路稳定性的设计难度也越大。第一代24位Σ-Δ ADC大多用二阶或三阶调制器加上128倍甚至256倍的过采样率现在很多芯片已经能做到五阶调制器配合多级噪声整形MASH结构比如ADS131系列就是典型的多通道高精度方案。2.3 数字抽取滤波器最后一道关卡调制器输出的是一串高速的1位数据流比如2.048MHz的位流后面接的数字抽取滤波器Decimation Filter要做两件事一是低通滤波把整形到高频的噪声滤掉二是降采样把高速位流变成低速的、并行的24位数据也就是你通过SPI/I2C读出来的东西。抽取滤波器的类型直接决定了输出数据的建立时间和纹波特性。常见的类型包括Sinc³滤波器也叫sinc3或FIR2和线性相位FIR滤波器。Sinc³滤波器的特点是阻带衰减快对工频干扰抑制效果好但建立时间长FIR滤波器建立时间短但阻带特性一般。ADS1256、AD7190这些芯片的寄存器里都提供了滤波器模式选择我之前做多路切换测量时就吃过这个亏——选的Sinc³滤波器导致通道切换后要等很久数据才稳定后来换成FIR模式才把多通道扫描速度提上来。这块后面细讲。所以24位Σ-Δ ADC的本质是用1位量化器做粗量化靠高速反馈环路把误差一点点“磨”掉再靠数字滤波把代价转移到高频段的噪声彻底清理掉。理解这三层逻辑之后再看数据手册里的采样率、滤波器模式、有效分辨率这些参数你就能对得上号了。3. 硬件设计实操从选型到PCB布局的完整要点3.1 选型看懂数据手册里真正重要的参数市面上24位Σ-Δ ADC芯片不少但选型不能只看“24位”这个数字。新手最容易犯的错误就是拿分辨率当精度实际上芯片手册里写的是“无噪声分辨率”或“有效分辨率”这个数字往往要比24位低2到4位。比如ADS1232标称24位但无噪声分辨率在10SPS输出速率下约20.2位AD7190在4.7SPS下能到23位无噪声分辨率差距非常大。还有一个关键参数是增益误差和温漂。对于称重、应变这类桥式传感器应用前端一般要接可编程增益放大器PGA增益误差直接影响测量精度。便宜的芯片增益误差可能到0.1%温漂200ppm/°C贵一些的能做到0.02%以内。如果你的产品工作温度范围很宽这比分辨率更重要。带宽和输出速率也要对得上。24位Σ-Δ ADC的輸出速率范围通常在几SPS到几十kSPS之间输出速率越高有效分辨率越低因为更多高频噪声进入了带宽。以AD7190为例4.7SPS时无噪声分辨率高达23位到了4800SPS就只有16位左右了。所以你在选型时要先想清楚到底是追求极低速率的极致精度还是需要一定速度下的可靠位数。推荐几款我用过觉得不错的ADS1232/ADS1234TI出品专为称重传感器设计内置PGA增益最高128倍带桥式传感器激励源外围电路极简是电子秤方案的首选。AD7190/AD7192ADI的经典款24位Σ-Δ增益1到128可调带内部温度传感器和斩波稳定性能稳定适合精密仪器。CS5532Cirrus Logic家的老将24位动态范围很宽很多老式称重仪表还在用便宜但功耗偏高。MCP3561Microchip出的性价比高带内部基准和振荡器适合成本敏感的项目。3.2 PCB布局24位精度绝不是芯片单独能办到的事很多人在软件上调了半天噪声还是降不下去最后发现问题是硬件布局。24位Σ-Δ ADC对电源、地平面、参考电压的敏感度远超想象我总结几个高频翻车点第一模拟地和数字地必须单点连接。很多芯片手册里都写了AGND和DGND要分开处理最终在某个点汇合但具体怎么汇合很多人搞错。我现在的做法是把数字部分和模拟部分的GND在底层单独铺铜然后用0Ω电阻或磁珠在ADC芯片正下方单点连接。注意这个连接点要靠近芯片的GND引脚距离越短越好。第二参考电压是精度的命脉。你的ADC是24位的如果参考电压本身噪声很大、温度漂移大那你量出来的数据就是“假精密”。基准源的选型优先级甚至要高于ADC芯片本身。我常用的ADR4525这类基准源初始精度0.02%温漂2ppm/°C和一个便宜的稳压管完全是两个世界。基准源输出端一定要加至少10μF的钽电容和0.1μF的陶瓷电容并联去耦而且这两个电容要尽量靠近VREF引脚。第三电源去耦要狠。Σ-Δ ADC的数字部分和模拟部分往往是同一个芯片内部分开的电源域外部的AVDD和DVDD尽量单独供如果不能至少要在DVDD引脚上加一个小磁珠隔离数字开关噪声。每对电源引脚对地都要有0.1μF和10μF双电容位置别超过3mm。第四输入走线要“护送”。从传感器到ADC输入的差分走线要等长、紧贴下方尽量保证完整的地平面远离任何开关节点。很多开关电源的干扰不是通过电源传导进来的而是通过空间耦合到输入走线上然后直接被ADC放大128倍这种情况下软件滤波再强都救不回来。3.3 前端信号链不要低估传感器激励和滤波我见过有人把ADS1232直接接到称重传感器上不加任何滤波和缓冲然后用起来发现数值跳得厉害。虽然Σ-Δ ADC本身的抗混叠要求比SAR ADC低很多——因为过采样率很高混叠风险小——但如果你在传感器和ADC之间加入RC滤波还是能显著改善性能的。RC滤波的截止频率怎么选一个实用的经验值设置在输出数据速率的1/2到1/4之间。比如你用10SPS的输出速率那RC滤波器的截止频率设在2到5Hz比较合适这样能把带外噪声和工频干扰在进入PGA之前就衰减掉。电阻选几百欧姆电容选0.1μF到1μF组合起来时间常数就对了。另外桥式传感器的激励源也要注意。如果用的是芯片内置的激励源如ADS1232的AVDD直接供电那激励电压的稳定性和噪声会直接影响输出。便宜的电子秤方案无所谓但精密测量时建议用外部低噪声基准源给桥路供电。4. 软件驱动与数据读取完整实操流程4.1 初始化寄存器从复位到稳定工作的完整时序我用ADS1232和AD7190这两款为例因为它们寄存器配置的思维路径代表了大多数24位Σ-Δ ADC的用法。先说ADS1232它其實没有传统的SPI寄存器而是用引脚电平控制增益和数据速率模式选择通过一个PDWN引脚和速率选择引脚来设置控制方式非常简洁。如果你用ADS1232初始化就是拉高PDWN上电等待稳定后发送25个SCLK脉冲复位然后再开始读数据。AD7190就复杂一些它用的是标准SPI接口寄存器包括通信寄存器、模式寄存器、配置寄存器、数据寄存器等。我给出一个我项目里验证可用的初始化序列增益设置为64倍输出数据速率设为50SPS带50Hz工频陷波// 复位发送连续40个高电平SCLK spi_write(0xFF); spi_write(0xFF); spi_write(0xFF); spi_write(0xFF); spi_write(0xFF); // 配置寄存器0x10选择通道AIN1AIN1-增益64无斩波 // 默认配置值即可重点在模式寄存器的数据速率 spi_write(0x10); // 写通信寄存器指向配置寄存器 spi_write(0x00); // 配置寄存器高字节 spi_write(0x18); // 配置寄存器低字节通道AIN1增益64 // 设置模式寄存器选择连续转换模式输出速率50SPS // 这里需要查表50SPS对应FS[9:0]的一个具体值 spi_write(0x08); // 写通信寄存器指向模式寄存器 spi_write(0x04); // 模式寄存器高字节连续转换选择内部时钟 spi_write(0x20); // 模式寄存器低字节高位 spi_write(0x0B); // 模式寄存器低字节低位FS[9:0] 0x20B配置完成后不能立刻读数据因为滤波器需要时间建立。实际操作中我通常是持续读取DOUT/RDY引脚等它变低表示转换完成然后再去读数据寄存器。注意每次读数据之前必须清空通信寄存器的读指针否则数据错位读出来全是乱的。4.2 数据读取校验与转换应对二进制补码和符号扩展24位Σ-Δ ADC输出的数据通常是二进制补码格式而SPI或者GPIO模拟读取时接收到的往往是3个字节MSB在前。你需要把这三个字节拼成一个int32_t再进行符号扩展否则负值会变得非常大。拿ADS1232举例它输出的是24位二进制补码直接读三字节后组装成int32_t然后检查最高位如果为1就补上高8位的1代码是这样uint8_t b0, b1, b2; int32_t raw; b2 read_byte(); // MSB b1 read_byte(); b0 read_byte(); // LSB raw ((int32_t)b2 16) | ((int32_t)b1 8) | b0; // 符号扩展如果第23位为1说明是负数 if (raw 0x800000) { raw | 0xFF000000; }转换完成后物理量的换算公式是实际电压 (raw / 2^23) × VREF / PGA_Gain这里有个容易踩的坑ADS1232的满量程输入范围是±0.5×VREF/PGA_Gain也就是说数据范围并不是对称的±1×VREF。你用上面的公式计算时raw的范围实际上是-2^23到2^23-1对应的输入范围正是-0.5×VREF到0.5×VREF增益为1时。如果你直接用raw除以2^24那满量程就对不上了。我最早用ADS1232时在这个换算上绕了很大的弯子最后翻了数据手册里的Transfer Function那张图才搞明白。4.3 校准偏移误差和增益误差的最后修正Σ-Δ ADC虽然精度高但随温度变化会产生偏移和增益漂移这时候就需要校准。很多芯片提供片内校准功能比如AD7190支持系统校准和内部零标校准你在初始化后可以执行一次内部零标校准来消除偏移量再执行一次系统满量程校准来消除增益误差。校准的过程其实很简单对零输入通道做一次转换把得到的偏移值存下来对满量程参考输入做一次转换把增益值存下来。后面每次实际测量都从原始数据中扣除偏移量再除以实际增益与理想增益的比值。我这里给一个软件校准的简化思路typedef struct { int32_t offset; float gain; } calibration_t; calibration_t cal_zero() { calibration_t result; // 将输入端短接到GND执行一次转换 result.offset read_adc(); // 对参考电压输入执行一次转换 set_input_to_vref(); int32_t vref_reading read_adc(); result.gain (float)(vref_reading - result.offset) / FULL_SCALE; return result; } float adc_to_voltage(int32_t raw, calibration_t cal) { return (raw - cal.offset) * VREF / (cal.gain * FULL_SCALE); }我在做高精度温度采集时还会额外做两点校准因为单一偏移校准在温度跨度大的场景不够用。如果你的系统对精度要求很高建议在出厂前做一次“低温常温高温”三点校准把校准系数表存进EEPROM这样就能补偿大部分温漂误差。5. 常见问题与排查技巧实录5.1 问题一数据读出来全是0xFF或0x00这个几乎可以确定是通信时序问题。我遇到过的案例里70%是SPI极性配置错误——24位Σ-Δ ADC通常需要CPOL0、CPHA1也就是第二个边沿采样但很多MCU的SPI外设默认是CPHA0就会导致数据的每一位都错开半个时钟周期读出来的数据自然全是乱码。解决办法是先用逻辑分析仪抓一下SCLK、MOSI、MISO的时序确认数据在哪个边沿采样然后对应调整SPI配置。如果不用硬件SPI用GPIO模拟时序反而更可控——我在一些低功耗项目里就直接用GPIO翻转来读ADS1232虽然慢但非常稳。5.2 问题二读数跳变严重尤其是数字最后几位这里要区分两种情况跳动范围在±2个LSB以内属于正常噪声可以通过多次采样平均降低如果跳动范围达到几十甚至上百个LSB那大概率是外部干扰或者参考电压的问题。排查顺序是先短接ADC输入端看读数是否稳定如果稳定说明问题在传感器或者前端电路如果不稳定说明问题在ADC电源或参考电压。实测中我发现一个高概率毛病参考电压电容离VREF引脚太远导致参考电压上叠加了数字开关噪声这时候无论怎么改软件滤波都白搭把电容挪近一点就解决了。5.3 问题三滤掉50Hz工频干扰后数据反而更差很多24位Σ-Δ ADC提供50Hz/60Hz陷波功能但如果你把输出数据速率设成50SPS并开启陷波却发现数据反而变差可能是因为你同时使用了Sinc³滤波器而数据建立时间不够。Sinc³滤波器要对整三个采样周期做卷积如果传感器信号在转换期间有变化输出就会出现过冲或振荡。我碰到过用AD7190做动态称重一直怀疑是机械振动导致数据波动最后才发现是滤波器模式选错了——改成FIR模式后数据立刻稳定。动态测量场景优先选FIR滤波模式静态测量才适合用Sinc³。5.4 常见问题速查表现象可能原因排查顺序读数全0或全1SPI时序错误、片选信号异常检查SPI极性和相位抓时序波形数据跳变几LSB正常噪声、传感器激励噪声短接输入测试检查激励源质量数据跳变几百LSB地环路、开关电源噪声耦合检查AGND/DGND单点连接加强输入端RC滤波读数随温度漂移明显参考电压温漂、输入偏置电压换低温漂基准源做两点校准通道切换后数据要等很久抽取滤波器建立时间过长考虑用FIR模式或降低切换频率输出数据出现周期性毛刺数字时钟耦合到模拟输入检查时钟走线是否靠近模拟输入加屏蔽5.5 一个值得分享的调试技巧如果你在调试过程中不确定问题出在硬件还是软件最简单有效的办法是直接给ADC输入端加一个精确的直流电压然后看转换结果是否和预期吻合。可以用一节干电池串联精密电阻分压得到一个小电压比如1.000V用100k和10k分压得到约0.0909V配合PGA增益就能验证整个链路。这个方法比凭空猜问题要高效得多。我每次调试新板子都会做这个“点检”基本能在十分钟内判断硬件链路是否健康。6. 项目实战思考从“能跑”到“跑得准”的关键跨越最后想聊聊这个项目给我的一些体会。24位Σ-Δ ADC这类芯片第一次接触会觉得难——寄存器多、时序长、参数复杂但其实这些都不是真正的难点。真正的难点在于你能否建立一套“信号链思维”从传感器出来的微伏级信号经过激励、滤波、放大、量化、滤波、校准每一环都在影响最终结果任何一环的瑕疵都会被后续的放大倍数放大。我见过很多工程师把大量时间花在调算法上结果波形还是抖最后发现是基准源选错了换了一个好基准源之后一切问题迎刃而解。反过来也有人一上来就买最贵的芯片和基准源但PCB布局一塌糊涂该出的精度一样出不来。这中间的平衡需要在实际项目中慢慢摸索。如果让我给新手一个具体的起步方案我会说第一块板子不要追求极致性能先把ADS1232或者MCP3561这类低成本的芯片跑起来用电池供电输入短接测底噪再测一个精确电压把“读数”到“电压”的换算彻底搞通。然后逐渐引入外部干扰、长导线、开关电源这些“真实世界”的变量看数据怎么变理解每个变量对精度的影响。这样一套流程下来你对24位Σ-Δ ADC的认知会比看十遍数据手册都深刻。我自己的项目里最终做出来的设备达到了0.01%的精度指标参考电压用的是ADR4525PGA增益64倍输出速率50SPS软件里做了滑动平均加两点校准。整个过程没有用到什么黑科技全是扎扎实实的硬件布局和软件校准但这恰恰是精密测量最实在的经验——精度不是某一颗芯片给的而是整个信号链共同决定的。
返回列表