ARTICLE DETAIL

资讯详情

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

SAR ADC与Sigma-Delta ADC的区别:从原理到选型与PCB布局

SAR ADC与Sigma-Delta ADC的区别:从原理到选型与PCB布局 做嵌入式这些年每次项目里冒出一个“要采个电压/电流/温度”的需求最后基本都会落到同一个问题上ADC 到底怎么选而这个问题再往下走一步十有八九会撞上你看到的这个标题——“SAR ADC 和 Sigma-Delta ADC 的区别”。这两个词要是搜出来的资料全是原理框图、数学公式看完基本等于没看该不会选还是不会选。我这篇不打算把张量推导搬过来就从一个硬件/嵌入式工程师的视角把这两种最常见的 ADC 架构掰开揉碎告诉你它们各自在“怎么干活”、关键参数差在哪、做选型和画板子的时候到底要注意什么。不管你是刚接触 ADC 的学生还是在调 STM32、GD32、S32K312 这类 MCU 内置 ADC 的工程师这篇文章都能给你一套能直接上手的判断方法和避坑经验。先说结论性的一句SAR ADC 是“采样速度快、精度适中、多通道轮流测”的代表Sigma-Delta ADC 是“速度慢、精度极高、适合单通道或低频高分辨率测量”的代表。大多数 MCU 内部集成的是 SAR而称重、音频、精密传感器前端用的往往是 Sigma-Delta。两者没有谁全面碾压谁只有谁更适合当前场景。下面我按“原理—参数—选型—PCB—实战排查”一路讲下来。1. 从原理说起两种 ADC 到底在“怎么干活”很多人把 ADC 当成一个黑盒子输入模拟电压输出数字码。真正开始做设计之后你会发现盒子里面的工作方式直接决定了你在外部电路上要花多少心思。所以先花点篇幅把原理讲清楚。1.1 SAR ADC拿“天平”称电压一步步逼近SAR 全称 Successive Approximation Register逐次逼近型。它的内部核心由采样保持电路、比较器、数模转换器DAC和逐次逼近寄存器组成。工作方式特别像你小时候用天平称东西先放一个最大的砝码看是重了还是轻了再换小一号的砝码一步步逼近真实重量。具体到一个 12 位 SAR ADC 的转换过程采样保持电路先把输入电压“冻结”在内部电容上然后从最高位MSB开始SAR 逻辑依次把每一位设为 1让内部 DAC 产生一个对应的比较电压和采样到的输入电压比较。比较结果如果输入电压更大这一位就保留 1否则拉回 0。就这样从最高位一路试到最低位12 位就要比较 12 次得到最终数字码。用伪代码表示大概是这样result 0 for bit in [11, 10, ..., 0]: candidate result | (1 bit) dac_output candidate * Vref / (1 12) if vin dac_output: result candidate // else 保持 result 当前值继续下一位这种架构最大的特点是一次转换只需要 N 个比较周期N 是位数因此能做到很高的采样率。一个 12 位 SAR 在 1MHz 时钟下轻轻松松做到几十 kSPS 到几 MSPS。MCU 里集成的 ADC比如 STM32 的 12 位 ADC、S32K312 的 ADC基本都是 SAR 架构原因就是它能在“合理精度 高采样率 多通道切换”之间取得一个很好的平衡。SAR ADC 的精度瓶颈在于电容阵列的匹配精度、比较器的噪声和失调、DAC 的建立精度。尤其是内部电容阵列既要保证面积不能太大又要做到比特位之间的比例精确所以高性能的 SAR 通常会用分段式电容阵列等工艺技巧。这也是为什么同样是 16 位 SAR不同厂家的芯片价格能差出好几倍。1.2 Sigma-Delta ADC用“速度”换“精度”把噪声挤到高频去Sigma-Delta 的思路和 SAR 完全不一样。它内部是一个模拟调制器加一个数字抽取滤波器核心思想是两件事过采样和噪声整形。先说过采样。假设你采样 1000 个点把它们求平均噪声是随机的、服从正态分布的那平均之后噪声会被压到原来的约 1/31.6。这是“过采样 平均”的基本逻辑很多新手以为 Sigma-Delta 只是“采很多次求平均”其实这只是其中一半。更关键的是噪声整形。Sigma-Delta 调制器里有一个积分器和一个反馈环路它会把量化噪声往高频方向“推”。低频段也就是我们关心的信号频段噪声被大幅压低高频段噪声被抬高。之后数字抽取滤波器上场把高频噪声滤掉留下干净的低频信号。这就是它能在低带宽下实现 16 位、24 位甚至更高有效位数的原因。打个比方SAR 是拿一把刻度尺直接量尺子刻度有多精细测量就能到多精细Sigma-Delta 是把同一段距离用一把不那么精细的尺子反复量很多遍再靠统计和处理把误差压到极小。所以 Sigma-Delta 天生适合低速、高分辨率的场景比如温度测量、称重传感器、音频采集。你去看那些 24 位的 ADC 芯片ADS1232、HX711、CS5532 之类几乎全是 Sigma-Delta 架构。过采样率OSROver Sampling Ratio是 Sigma-Delta 最核心的调节参数。OSR 越高有效位数越高但输出数据率越低。这个关系后面讲参数的时候细说这里只需要记住一句话Sigma-Delta 的“高精度”是用“低速度”换来的。2. 速度、精度、延迟与功耗核心参数差异原理看明白了接下来要落到参数对比。选 ADC 时你最先看的就是速度、精度、延迟这三样再加上功耗因为很多产品对功耗有硬指标。2.1 采样率与有效位数谁更快谁更准SAR ADC 的采样率范围很宽。普通 MCU 内置的 12 位 SAR 能跑几十 kSPS 到 5 MSPS独立的高性能 SAR 芯片能做到几十 MSPS 甚至 100 MSPS 以上。精度方面常见的是 8 到 18 位并且在高采样率下有效位数会掉。Sigma-Delta ADC 的输出数据率通常很低从每秒几次到几千次不等取决于你配置的 OSR。但是精度可以做到 16 到 24 位而且低位数的“有效位数”非常扎实。比如用 ADS1256 配置 24 位模式、30 SPS 输出时ENOB有效位数能做到 20 位以上这在 SAR 架构里是不可想象的。衡量 ADC 实际性能时不要只看标称位数要看 ENOB。一个 16 位的 SAR 在最高采样率下可能实际只有 12 位有效精度一个 24 位 Sigma-Delta 在低速率下确实能拿到 20 位有效精度。ENOB (SNR - 1.76) / 6.02其中 SNR 是实测信噪比单位 dB。架构典型采样率典型标称精度典型 ENOB典型应用SAR100 kSPS ~ 10 MSPS8 ~ 18 bit10 ~ 14 bit电机电流、电源监控、示波器前端Sigma-Delta1 SPS ~ 100 kSPS16 ~ 32 bit16 ~ 22 bit称重、RTD、音频、精密仪器2.2 延迟特性Sigma-Delta 的“软肋”必须提前知道延迟这个概念很多人会忽略但它往往是最容易让你现场抓狂的一个参数。SAR 是“采一次出一次”从启动转换到得到结果只需要 N 个时钟周期加上采样时间也就微秒级。这意味着你可以频繁地切换通道每个通道都能很快得到一个新的有效值。多通道数据采集系统、高速控制环路用的都是 SAR因为它的延迟低响应快。Sigma-Delta 不一样。前面说了调制器产生的是一长串比特流数字抽取滤波器要想滤除高频噪声、得到高分辨率结果必须等足够多的采样点“积满”才能算出一个输出。它是“采一堆算一次”。这带来两个问题第一单次转换的等效延迟大往往要几十毫秒甚至几百毫秒第二如果你在多个通道之间轮流切换每次切换之后滤波器里的旧数据不会立刻清空新通道的数据要经过一个“冲刷”过程才能稳定。我踩过一个特别典型的坑用一颗 24 位 Sigma-Delta ADC 做多通道温度采集每个通道隔几秒切换一次结果第一、第二个数据总是明显偏大后面才正常。后来查资料才知道那是数字滤波器在切换瞬间仍保留上一通道的数据需要若干次输出周期后才会完全收敛到新通道的真实值。解决办法很简单要么每个通道切换后丢弃前几次读数要么用一个专门的多路复用方案让每个通道在滤波器里“驻留”足够长的时间。2.3 功耗与面积电池供电场景下 SAR 更“随心”功耗上SAR 有明显优势。它不需要像 Sigma-Delta 那样让积分器和调制器一直跑SAR 的功耗和采样率基本成正比——你采得越快耗电越多采得慢就很省。很多 MCU 的低功耗模式就是靠降低 ADC 采样率来实现的。Sigma-Delta 的调制器在工作时需要持续供电功耗并不随输出数据率线性下降即使你只需要 10 SPS 的输出调制器也得一直跑着。当然Sigma-Delta 里的模拟电路规模不大整体功耗一般也就是毫安级别对电池供电的称重设备来说完全可接受但如果你在做超低功耗的传感器节点圈定功耗预算的时候要留这块的余量。芯片面积方面MCU 内部集成的 SAR 面积小这也是为什么 SAR 是 MCU ADC 的主流。Sigma-Delta 因为要放数字滤波器和较复杂的模拟调制器面积更大很少集成在通用 MCU 内部更多是作为独立芯片出现。3. 工程选型实操什么场景该选谁原理和参数都过了一遍这里给几个最典型的应用场景判断方式。这套方法我用了很多年基本不会翻车。3.1 场景一多通道、中高速采集闭眼选 SAR如果你要做电机三相电流采样、开关电源环路、电池管理系统里的多串电芯电压采集或者任何“同时要盯很多路信号 每路都要有够快的刷新率”的需求选 SAR。原因很简单SAR 的采样时间和转换时间都在微秒级规则通道 注入通道的扫描模式可以一轮一轮地转圈采样。STM32 的 ADC 有个“规则通道扫描模式”F103 的 ADC 支持最多 16 个外部通道轮流转换。S32K312 的 ADC 也差不多通过配置规则通道列表和注入通道优先级可以在一次触发里把多路信号全部采完。在这种场景里直接选 MCU 内置的 12 位 SAR 通常就够了基本不用外挂独立 ADC。常见的坑是通道扫描模式下前一个通道的采样残余会影响后一个通道。解决办法是确保每个通道的采样时间足够长尤其是源阻抗高的时候。3.2 场景二高精度、低带宽测量Sigma-Delta 的优势区温度、压力、称重、pH 值、音频信号这类信号的共同点是变化很慢但你又希望分辨到很小很小的变化。此时 12 位 SAR 往往不够用——比如 3.3V 满量程下12 位 SAR 的 1 LSB 是 0.8mV而称重传感器满量程输出可能只有 10mV你拿 12 位 SAR 去测几乎什么都看不出来。这种时候 Sigma-Delta 的价值就体现出来了。一个 24 位 Sigma-Delta即便只有 16 位有效精度1 LSB 也能到微伏级别。配上仪表放大器测个微小的应变变化绰绰有余。我用过一颗很典型的芯片ADS12568 通道、24 位、最大 30 kSPS 输出但真正达到高有效位数的配置是 10 SPS 上下。这个芯片做多路温度采集很舒服唯一的注意点就是前面说的切换延迟。3.3 场景三传感器前端与驱动电路决定成败的往往在外围选完 ADC 架构麻烦才刚开始。很多工程师把 ADC 当理想器件结果数据出来后一塌糊涂其实问题出在 ADC 前端的驱动和滤波上。SAR ADC 在采样瞬间内部采样电容会从外部电路“拉走”一小股电荷这个瞬态电流会在源阻抗上产生一个电压跌落。如果源阻抗太高采样电容还没充满电就已经开始转换了结果就是读数偏低或跳动。解决办法有两个一是把采样时间sampling time设长一点让电容有足够时间充满二是在 ADC 输入脚加一个运放做缓冲用低输出阻抗的运放去驱动 ADC。RC 滤波里的 R 不能选太大就是这个道理。Sigma-Delta 的前端通常需要加 RC 低通滤波主要目的是抑制调制器开关切换产生的电荷注入毛刺以及抗混叠。但这个 RC 的带宽要和信号带宽匹配。很多人直接把滤波器截止频率做到很低结果有用信号被衰减了测量反而不准。一般来说RC 截止频率取信号带宽的 5 到 10 倍比较合理然后配合 OSR 去抑制带外噪声。4. 从原理到 PCB时钟、电源与布局的 3 个要点原理和选型都定下来了接下来就是画板子。ADC 电路对 PCB 布局的敏感程度远超一般数字电路。很多“ADC 数据漂移”“ADC 采样值跳变”的诡异问题根源都在布局上。4.1 时钟抖动被你忽略的“隐形噪声源”所有 ADC 都需要一个采样时钟来触发采样保持。对 SAR 来说采样时刻的不确定性直接影响采到的电压准确性对 Delta-Sigma 来说调制器时钟的抖动会直接转化为输入参考噪声。这个影响在高频信号和高精度场景下尤其明显。量化一个例子如果输入信号是一个 1kHz、幅值为满量程的正弦波采样时钟的 RMS 抖动为 1ns那么由抖动引入的信噪比大约是SNR_jitter ≈ -20 * log10(2 * π * f_in * t_jitter)代入 f_in 1kHz、t_jitter 1ns2 * π * 1000 * 1e-9 ≈ 6.28e-6SNR_jitter ≈ -20 * log10(6.28e-6) ≈ 104dB看起来很高似乎无所谓。但如果你采的是 1MHz 信号同样的抖动2 * π * 1e6 * 1e-9 ≈ 6.28e-3SNR_jitter ≈ -20 * log10(6.28e-3) ≈ 44dB这就已经明显不够用了直接限制整体信噪比。所以在做 ADC 电路时采样时钟尽量用晶振或高质量的时钟源别拿普通的 RC 振荡器去触发高精度 ADC。MCU 内部 ADC 的时钟源一般也用 PLL尽量别用精度极差的内部低速 RC。4.2 电源噪声与参考电压ADC 的“尺子”不稳什么都白搭ADC 测量本质上是把输入电压和参考电压做比较。参考电压是那把“尺子”尺子自己都是抖的测量结果不可能稳。给 ADC 供电和给参考电压供电的 LDO我一般会选低噪声、高 PSRR 的型号。模拟电源和数字电源之间加磁珠或π型滤波数字地模拟地单点连接。参考电压引脚旁边必须放高质量的去耦电容通常是一个 10µF 钽电容并联一个 0.1µF 陶瓷电容并且要尽量靠近芯片的 REF 引脚。说一个实际的排查经验某次用 16 位 SAR 采集电压数据低 2 位一直在跳稳定不下来。查遍了信号链没发现问题最后用示波器去看参考电压引脚发现上面叠了一个几十 mV 的毛刺频率和板上 DC-DC 的开关频率一致。后来在参考电压和 ADC 的 REF 之间加了一级 RC 滤波毛刺压下去了数据立马稳定。4.3 PCB 布局三个实操点回路、分区、铺地模拟信号最敏感的就是它的“回路面积”。ADC 采样瞬间电流要从信号源流经采样电容再返回信号源这个回路面积越大拾取的电磁干扰就越多。所以布局上信号源和 ADC 输入脚之间的走线要短滤波电容要靠近 ADC 输入脚让高频充电电流的回路尽可能小。第二点是模拟区和数字区的物理分区。数字部分的高速翻转会产生地弹噪声如果模拟电路和数字电路混在一起这个噪声会通过地平面耦合到模拟信号里。实际操作中我一般把 ADC、模拟前端、参考电压放在板子的一个区域数字接口和 MCU 放在另一侧两者之间用铺地铜皮隔离不跨越分割。第三点是地平面。尽量保证 ADC 下面有一块完整的地平面不要走数字线穿过模拟区域。如果板子上有 DC-DC开关节点和电感要离 ADC 和模拟前端远一点磁性元件的辐射干扰很难靠滤波完全消除只能靠物理距离。5. 常见问题与排查技巧实录最后分享一组我在实际项目中遇到的高频问题按“现象—原因—解决办法”列出来之后你也可以拿它当排查清单用。5.1 ADC 数据漂移、跳动停不下来这应该是最常见的问题。我在多个项目里遇到过原因各不相同但排查顺序是有规律的。先看参考电压是否有毛刺再看采样时钟是否干净然后用示波器看 ADC 输入引脚的波形是否存在高频毛刺或充电反冲最后检查软件里是否每次转换之间留了足够的采样时间。软件滤波永远是最后一步不是第一步。很多新手上来就用 C 语言写一个均值滤波函数把跳动的数据“磨平”这掩盖了真实问题。如果硬件上有隐患滤波只是把故障延后到“数据看着正常但实际不准”的状态。滤波的正确用途是滤除白噪声和工频干扰不是替硬件擦屁股。一般的软件滤波思路有三种滑动平均适合噪声为正态分布的场合中值滤波适合有偶发尖峰干扰的场合一阶低通y[n] alpha * x[n] (1 - alpha) * y[n-1]适合缓慢变化的信号。参数 alpha 根据时间常数选择比如你希望滤波器时间常数为 5ms采样周期为 1msalpha 大约是 1 - exp(-1/5) ≈ 0.181。具体实现的时候注意用定点数避免浮点开销。5.2 多通道数据串扰第一个通道总是异常SAR ADC 的常见问题。STM32 使用扫描模式时如果某个通道的源阻抗特别高而 ADC 的采样时间配置得太短采样电容没充满就开始转换结果就会偏小甚至影响到下一通道。解决办法就是按前面说的加大采样时间。Sigma-Delta 的常见问题则刚好相反是“上一个通道的残留没洗干净”。切换通道后数字滤波器输出的是新旧数据混合的结果需要等几个输出周期才能稳定。处理办法是切通道后丢弃前几个转换结果或者在硬件上每个通道配一个独立的滤波链路。5.3 读 ADC 结果不正确可能不是硬件问题C2000 系列 MCU 的 ADC 有数字校准功能带 OFFTRIMoffset trim寄存器。CLA控制律加速器直接读结果寄存器时读到的可能是尚未应用 OFFTRIM 校正的原始值而不是 CPU 读到的经过偏移修正的值。如果你用 CLA 做控制算法直接拿原始值会导致静态误差。解决方法是访问经过校正的结果寄存器或者在 CLA 的代码里手动减去 OFFTRIM 偏移。另一个容易踩的坑是 DMA 传输时数据紊乱。GD32/STM32 上用 ADC DMA如果缓冲区长度、数据对齐和 DMA 配置不一致典型的现象是采出来的数据顺序错乱或者数组里一半是上一轮的数据。检查顺序DMA 外设地址是否指向 ADC 数据寄存器、内存地址是否对齐到 16 位、传输长度是否等于缓冲区元素个数、DMA 是否配置成循环模式。还有一点经常被忽略ADC 校准完成后第一次转换结果要丢弃。5.4 一个基础计算输入 1V 时 ADC 到底读出多少这类问题经常有新手问。以 12 位 ADC、参考电压 3.3V 为例理论上读出的数字值为adc_value vin / Vref * 4096 1.0 / 3.3 * 4096 ≈ 1241注意很多 MCU 的内置 ADC 满量程对应的数字值是 4095即 2^12 - 1所以更严格一点adc_value vin / Vref * 4095 1.0 / 3.3 * 4095 ≈ 1240这个值受参考电压精度影响很大。如果参考电压实际是 3.28V读值就会变成 1248。这就是为什么高精度场景下需要外部精密参考电压源而不是直接拿 MCU 的供电当 Vref。写在最后SAR 和 Sigma-Delta 没有高低之分只有合不合适。我自己的经验是凡是信号变化快、需要实时响应的无脑选 SAR凡是信号慢、要求分辨率高的无脑选 Sigma-Delta中间地带看延迟和功耗预算。真正拉开项目差距的往往不是 ADC 芯片本身而是你为它配的供电、参考源、前端滤波和 PCB 布局。最后再分享一个我个人习惯的小技巧新板子回来先别急着跑复杂逻辑直接在 ADC 引脚上接入一个已知电压比如用精密稳压源输出精确的 1.000V然后连续采 1000 次数据看均值和峰峰值。这一分钟不到的测试能帮你把参考电压误差、采样时序、电源噪声、布局问题一次性暴露出来省下后面调系统时的无数个深夜。希望这篇文章能让你在选 ADC 的时候心里更有底。
返回列表