嵌入式开发中SAR与ΔΣ ADC选型指南:从原理到实战应用

📅 2026/6/19 3:58:25
嵌入式开发中SAR与ΔΣ ADC选型指南:从原理到实战应用
1. 项目缘起为什么ADC选型是嵌入式开发的“隐形战场”在嵌入式系统开发里ADC模数转换器的选型常常是一个容易被轻视却又在项目后期频繁“爆雷”的环节。很多工程师尤其是刚入行的朋友可能会觉得不就是把电压信号变成数字量吗找个分辨率够的、速度够的ADC芯片照着数据手册接上线程序里调通DMA和中断不就完事了我早期做项目时也这么想直到在一个电池管理项目上栽了跟头。当时为了省成本给一个需要监测多节锂电池电压的板子选了一颗12位SAR ADC采样率、通道数都满足要求。结果系统一上电发现测得的电压值总是在跳噪声很大导致电量估算严重不准。折腾了好几周排查了电源、布局、软件滤波最后才发现问题根源是ADC的积分非线性误差在电池电压范围的两端特别大而我们的采样点恰好落在了这个“坑”里。那次经历让我深刻意识到ADC选型绝不是看几个关键参数那么简单它是一场在性能、成本、功耗和系统复杂度之间的精密权衡。今天我们就来彻底聊聊这个话题。面对市面上主流的SAR逐次逼近型和ΔΣ增量-累加型也称Sigma-Delta两大架构的ADC在嵌入式系统里到底该怎么选这不仅仅是看“16位”还是“24位”的数字游戏而是要深入到信号特性、系统需求、甚至是PCB布局能力的综合考量。无论是你用STM32、GD32的内置ADC还是外挂独立的高性能ADC芯片这篇文章希望能帮你建立起一套清晰的选型逻辑避开我当年踩过的那些坑。2. 核心架构对决深入理解SAR与ΔΣ的工作原理与本质差异选型的第一步是抛开参数表真正理解这两种架构是如何工作的。这决定了它们天生的“性格”和擅长领域。2.1 SAR ADC追求速度的“快枪手”SAR ADC的工作原理很像我们用天平称重。假设你有一个未知重量的物体和一套标准砝码对应ADC的参考电压Vref。SAR ADC内部有一个数模转换器和一个比较器。转换开始时它先尝试最大的砝码MSB位为1即Vref/2通过DAC产生这个电压与输入电压比较。如果输入电压更大这个“1”就保留并加上下一个砝码Vref/4如果更小这个“1”就清零然后尝试下一个砝码。如此“逐次逼近”直到试完所有位LSB。这个过程决定了SAR的几个关键特性转换速度与分辨率直接矛盾一次N位的转换严格需要N个时钟周期加上少许采样和稳定时间。你想从12位提升到16位转换时间几乎成比例增加。因此SAR ADC在高分辨率下很难做到高速通常16位以上、每秒兆次采样MSPS级别的芯片就非常昂贵了。对采样保持电路要求极高在转换的这N个周期内输入信号必须保持绝对稳定哪怕有微小的变化都会导致比较结果错误产生巨大的误差。这就是为什么SAR ADC前端必须有一个高性能的采样保持电路并且对输入信号的驱动能力即信号源阻抗有严格要求。很多工程师忽略这点直接用单片机IO口驱动高阻抗传感器然后接入ADC结果精度惨不忍睹。功耗与速度线性相关它的核心电路比较器、DAC、逻辑在每个转换周期都在高速工作功耗基本上随采样率线性增长。在需要间歇性高速采样的低功耗应用中这不太友好。常见误解澄清很多人看到“SAR”会联想到合成孔径雷达SAR的图像噪点这完全是两回事。ADC领域的SAR是逐次逼近寄存器的缩写其噪声主要来源于比较器的抖动、DAC的失配等表现为白噪声和微分非线性误差而不是图像上的斑点噪声。2.2 ΔΣ ADC精雕细琢的“艺术家”ΔΣ ADC的工作思路则截然不同。它不追求一次转换就搞定而是采用“过采样”和“噪声整形”的巧妙方法。你可以把它想象成一个高精度的“积分统计员”。它以一个远高于目标采样率即奈奎斯特频率的速率例如256倍、512倍对输入信号进行超高速采样1位ADC其实就是比较器。然后通过一个复杂的数字滤波器通常是Sinc滤波器对这些海量的1位数据进行抽取和平均最终输出一个高分辨率如24位、但输出速率较低的结果。这个过程赋予了ΔΣ ADC独特的优势用速度换精度它天生就能轻松实现16位、24位甚至32位的高分辨率因为高分辨率来自于数字滤波和平均而不是像SAR那样依赖精密模拟元件的匹配。在低速高精领域如电子秤、温度测量ΔΣ几乎是垄断性的选择。对前端抗混叠滤波要求极低由于过采样有用的信号带宽被限制在很低的频率而高频的噪声和干扰被“噪声整形”推到了更高的频率。因此你只需要一个非常简单的RC滤波器有时甚至不需要就能满足抗混叠要求而SAR ADC则需要一个陡峭的滤波器来防止高频信号混叠到低频带宽内。优异的线性度它的非线性误差通常很小因为核心精度取决于时钟的稳定性和数字滤波器的性能而不是模拟元件的绝对精度。当然它的代价也很明显建立时间当你切换ΔΣ ADC的输入通道时内部的数字滤波器需要一段时间来“稳定”到新的电压值这个建立时间可能长达几十甚至几百毫秒。这意味着它极不适合多通道快速轮询的场景。如果你用ΔΣ ADC以1kHz的速率轮询8个通道很可能读到全是错误数据。功耗相对固定它的调制器和数字滤波器通常持续工作功耗对输出数据率的依赖性不如SAR那么强但在极低输出速率下其能效可能不如间歇工作的SAR ADC。特性维度SAR ADCΔΣ ADC核心原理逐次逼近二进制搜索过采样噪声整形数字滤波分辨率中高8-18位常见极高16-32位常见速度高可达数MSPS低通常10 kSPS高速ΔΣ另论多通道轮询非常适合转换周期短非常不适合建立时间长前端驱动要求高需低阻抗源要求低可直连高阻抗传感器抗混叠滤波要求高需陡峭滤波器要求极低简单RC即可功耗趋势随采样率线性增长相对固定与输出率关系较小典型应用高速数据采集、电机控制、超声、通信高精度测量、传感器温度、压力、称重、音频注意这里讨论的是经典的低速高精ΔΣ ADC。现在也有高速ΔΣ ADC但其原理和设计更为复杂通常用于特定领域如音频不在一般嵌入式系统首选之列。3. 关键参数深潜数据手册上那些你必须读懂的“潜台词”看懂架构只是第一步接下来要面对密密麻麻的数据手册参数。我见过太多人只盯着“分辨率”和“采样率”这是远远不够的。3.1 分辨率与有效位数数字背后的真相分辨率如12位、16位是ADC输出代码的位数它决定了理论上的量化电平数量如12位对应4096个电平。但有效位数才是真正体现ADC精度的指标。ENOB有效位数的计算公式通常与信噪比和失真有关ENOB (SINAD - 1.76) / 6.02。其中SINAD是信号对噪声和失真比。一个标称16位的ADC其ENOB可能只有14位。这意味着最低的2位基本上是在随机跳动是噪声。选型时一定要在目标带宽和采样率下查看数据手册给出的ENOB典型值而不是只看分辨率。实操心得对于STM32F系列内置的12位ADC在高速采样下其ENOB可能只有10位甚至更低。如果你的应用需要10位以上的稳定精度可能需要降低采样率、使用过采样、或者考虑外置ADC芯片。3.2 采样率与吞吐率别被峰值速度迷惑采样率是ADC核心转换电路的能力。但系统吞吐率才是你实际能得到数据的速度。对于多通道ADC吞吐率会受到通道切换时间、结果读取时间如果是SPI/I2C接口的影响。比如一颗ADC标称1MSPS但切换通道需要额外1us通过SPI读取16位数据需要1us那么四通道轮询的实际吞吐率可能只有1 / (1us 1us 1us) ≈ 333kSPS每通道。对于ΔΣ ADC更要关注输出数据率它通常远低于调制器的过采样频率。数据手册会明确给出不同滤波模式下的ODR。3.3 误差分析精度杀手在哪里误差是精度的反面必须逐一排查偏移误差整个转换曲线的平移。可以通过校准单点或两点在软件中轻松消除。增益误差转换曲线斜率的偏差。同样可以通过校准消除。微分非线性每个实际码宽与理想1 LSB的偏差。DNL 1 LSB会导致失码即某些数字输出代码永远不会出现。这是ADC的硬伤无法通过校准消除。好的ADC其DNL应在±0.5 LSB以内。积分非线性实际转换曲线与理想直线的最大偏差。INL反映了ADC的整体线性度我的电池项目坑就出在这里。INL误差通常不是均匀的可能在量程的两端或中间出现凸起或凹陷。噪声包括热噪声、量化噪声等它决定了ADC在输入信号不变时输出值的抖动范围。通常用RMS噪声或峰峰值噪声来表示。查看数据手册时不要只看“典型值”一定要看“最大值”条件。例如INL在25°C时可能是±2 LSB但在整个工作温度范围-40°C到85°C可能恶化到±5 LSB。你的系统是否能在整个温度范围内容忍这个误差3.4 基准电压源精度大厦的基石ADC的精度天花板很大程度上取决于它的基准电压源。无论ADC本身多好如果基准电压在漂移、在波动一切精度都是空谈。内部基准像STM32、ESP32等MCU内置的ADC通常也提供内部基准电压。方便但精度和温漂通常较差例如STM32的内部基准精度可能在±10mV量级温漂几十ppm/°C。仅适用于对精度要求不高的场合。外部基准这是高精度应用的必备。选型时关注初始精度出厂时的误差。温漂单位通常是ppm/°C。这是影响系统全温度范围精度的最关键指标之一。一个10ppm/°C的基准在温度变化60°C时会产生600ppm0.06%的误差。噪声基准源自身的输出噪声。负载调整率当ADC从基准源抽取电流时基准电压的稳定能力。强烈建议在PCB布局上将基准源芯片尽可能靠近ADC的VREF引脚并用一个高质量的电容如钽电容或X7R陶瓷电容进行去耦电容的接地端到芯片地引脚的回路要尽可能短。4. 嵌入式场景实战选型从需求倒推解决方案理论说再多不如看实战。我们结合几个典型场景来演练一下选型决策过程。4.1 场景一多路传感器巡检温度、压力、电池电压需求描述一个工业数据采集器需要轮询16路传感器热电偶、4-20mA压力变送器、电池电压每路每秒采样10次即每通道10 SPS要求精度在0.1%以内。需求拆解速度16通道 * 10 SPS 总体吞吐率160 SPS要求极低。精度0.1%相对精度假设满量程5V则要求误差小于5mV。对于5V量程需要至少log2(5V / 5mV) ≈ 10位的有效分辨率。考虑到误差和裕量12位ADC的ENOB需要接近11位。多通道需要快速轮询。信号特性传感器输出可能是高阻抗热电偶或电流信号需转压。决策分析架构选择速度要求很低但精度要求较高且需要多通道轮询。ΔΣ ADC的建立时间问题在此成为致命伤切换通道后需要等待数十毫秒稳定。SAR ADC是更合适的选择其快速的逐次转换特性非常适合多通道扫描。分辨率与精度选择一款16位的SAR ADC可以轻松满足0.1%的精度要求16位对应约0.0015%的理论分辨率留有充足裕量对抗噪声和误差。集成与外置很多高端MCU如STM32H7系列内置的16位ADC可能已能满足要求。但需要仔细核查其数据手册在低采样率下的INL、DNL和噪声指标。如果内置ADC不达标则需要外置如ADI的AD768916位、8通道SAR ADC。前端电路对于高阻抗热电偶必须使用运算放大器构成缓冲器电压跟随器进行阻抗变换再送入ADC。对于4-20mA信号使用精密采样电阻转换为电压后同样可能需要缓冲。配置要点使用MCU的定时器触发ADC转换保证采样间隔精确。启用DMA将多通道转换结果自动搬运到内存数组降低CPU开销。为每一路通道在软件中做偏移和增益校准两点校准以消除系统误差。4.2 场景二音频信号采集或振动分析需求描述采集麦克风信号进行音频分析或采集振动传感器信号进行FFT频谱分析信号带宽20kHz动态范围要求高。需求拆解速度根据奈奎斯特定理采样率至少需40kSPS。通常选择44.1kSPS或48kSPS甚至更高以满足抗混叠滤波器的滚降需求。精度/动态范围音频需要较高的信噪比和动态范围通常要求16位或以上。信号特性交流信号可能包含直流偏置。决策分析架构选择这是一个经典的“中高速、中高精度”应用。SAR ADC可以达到这个性能如1MSPS16位但功耗和成本可能较高。而ΔΣ ADC在此领域有独特优势许多音频编解码器芯片内部使用的就是过采样ΔΣ调制器它能提供优异的动态范围和信噪比并且内置了数字高通滤波器以去除直流偏置。因此优先选择集成音频编解码器或专门的音频ΔΣ ADC。关键参数关注信噪比和总谐波失真加噪声。对于音频96dB以上的SNR和-90dB以下的THDN是比较好的指标。抗混叠虽然ΔΣ ADC对抗混叠要求低但对于20kHz带宽在ADC前端放置一个简单的单极点或双极点RC低通滤波器截止频率略高于20kHz仍然是良好的设计实践可以抑制带外高频噪声。4.3 场景三电机相电流采样FOC控制需求描述用于永磁同步电机矢量控制需要同步采样三相电流控制频率20kHz即采样周期50us。需要高速度和高线性度。需求拆解速度极高。需要在50us内完成多路电流的采样、转换和数据处理。留给ADC的转换时间可能只有几微秒。精度对绝对精度要求不一定极高8-12位可能足够但对线性度和差分非线性要求极高因为FOC算法对电流测量的相对精度非常敏感DNL过大会导致转矩脉动。同步性多路采样需要高度同步以准确计算空间矢量。决策分析架构选择SAR ADC是唯一可行的选择。只有SAR ADC才能提供亚微秒级的转换时间满足高速控制环路的需求。ΔΣ ADC的建立时间使其完全无法胜任。集成方案现代电机控制专用的MCU如STM32F3/F4/G4系列TI的C2000系列都集成了多个高速12位SAR ADC并且支持双/三采样保持器和注入组功能。这是关键常规组 vs 注入组常规组用于按顺序轮询注入组可以被高优先级事件如定时器触发打断常规序列立即对指定通道采样。在FOC中通常用注入组来同步采样三相电流。双采样保持器允许ADC在转换上一个通道结果的同时对下一个通道进行采样极大提高了吞吐率。基准与滤波电机驱动环境噪声大。必须使用低噪声、高PSRR的基准源并在电流采样电阻到ADC输入之间设计可靠的模拟滤波电路通常是一阶RC以抑制PWM开关噪声。滤波器的截止频率需仔细计算不能影响控制带宽。配置示例以STM32 HAL库为例// 配置ADC规则组和注入组 hadc1.Init.ScanConvMode ADC_SCAN_ENABLE; hadc1.Init.ContinuousConvMode DISABLE; // 禁用连续由定时器触发 hadc1.Init.DiscontinuousConvMode DISABLE; hadc1.Init.ExternalTrigConv ADC_EXTERNALTRIGCONV_T3_TRGO; // 定时器3触发 hadc1.Init.ExternalTrigConvEdge ADC_EXTERNALTRIGCONVEDGE_RISING; hadc1.Init.NbrOfConversion 3; hadc1.Init.NbrOfDiscConversion 0; // 配置注入组通道 ADC_InjectionConfTypeDef sConfigInjected; sConfigInjected.InjectedNbrOfConversion 3; sConfigInjected.InjectedSamplingTime ADC_SAMPLETIME_3CYCLES; sConfigInjected.ExternalTrigInjecConv ADC_EXTERNALTRIGINJECCONV_T3_TRGO; sConfigInjected.ExternalTrigInjecConvEdge ADC_EXTERNALTRIGINJECCONVEDGE_RISING; sConfigInjected.AutoInjectedConv DISABLE; sConfigInjected.InjectedDiscontinuousConvMode DISABLE; // ... 为sConfigInjected.InjectedChannel赋值三相电流对应的ADC通道 HAL_ADCEx_InjectedConfigChannel(hadc1, sConfigInjected); // 启动注入组转换 HAL_ADCEx_InjectedStart_IT(hadc1);5. 硬件设计与软件调优让ADC发挥百分百实力选对了芯片只成功了三分之一。硬件设计和软件配置同样关键。5.1 PCB布局布线数字与模拟的战争糟糕的布局是ADC性能的“头号杀手”。核心原则是分割与守护。电源分割使用磁珠或0Ω电阻将模拟电源AVDD和数字电源DVDD在电源入口处分开。即使它们最终来自同一个LDO也要在PCB上进行物理分割。地平面处理推荐使用单点接地或分区接地。将PCB的接地层划分为模拟地和数字地仅在一点通常是ADC芯片下方通过磁珠或0Ω电阻连接。确保模拟部分的所有地回路都流入模拟地数字部分流入数字地。去耦电容在每一路电源引脚AVDD, DVDD, VREF到其对应的地引脚之间放置一个10uF的钽电容或陶瓷电容和一个0.1uF的陶瓷电容。小电容0.1uF尽可能贴近芯片引脚3mm大电容可以稍远。这是吸收不同频率噪声的关键。信号走线ADC的模拟输入线要远离任何数字信号线尤其是时钟线和数据线。如果必须交叉应垂直交叉。模拟输入线尽量短并用地线包围guard ring进行屏蔽。对于高阻抗模拟信号源考虑使用“驱动-屏蔽”技术用运算放大器的输出驱动电缆的屏蔽层以减少漏电流影响。5.2 参考电压电路设计如前所述基准源是根本。除了选型布局上基准源芯片同样需要严格的去耦。VREF到ADC的走线要短而粗减少寄生电阻和电感。可以在VREF引脚增加一个额外的、低ESR的电容如1uF来进一步滤除噪声。5.3 软件层面的精度提升技巧硬件是基础软件则能锦上添花。过采样与抽取对于带宽远低于采样率的信号如直流或慢变信号可以使用过采样来提升有效分辨率。例如一个12位ADC通过16倍过采样并进行4位右移平均理论上可以将分辨率提升到14位同时降低噪声。STM32的ADC硬件支持过采样功能可以灵活配置。数字滤波对于工频干扰50/60Hz可以使用软件陷波滤波器。对于宽频噪声可以使用移动平均、一阶低通滤波等。但要注意滤波会引入相位延迟在控制系统中需谨慎。校准偏移校准短接ADC输入到地或已知的零电平读取大量样本取平均得到偏移值后续采样减去此值。增益校准输入一个已知的、接近满量程的精确电压读取ADC值。根据理论值和实测值计算增益系数。校正值 (理论值 / 实测值) * 原始采样值。许多MCU的ADC模块内置了自校准功能用于校正内部电容阵列的误差上电后应首先执行。触发与定时对于周期性采样务必使用硬件定时器触发ADC而不是在软件循环中延时启动。这能保证采样间隔的绝对精确对后续进行数字信号处理如FFT至关重要。6. 常见问题与调试指南从现象定位根源即使设计再小心调试阶段也难免遇到问题。这里是一些典型症状和排查思路。问题一ADC读数不稳定跳动大噪声大排查电源用示波器查看AVDD和VREF引脚是否有毛刺或纹波重点检查开关电源的开关噪声。尝试改用线性稳压器LDO供电。排查基准基准电压是否稳定温漂是否在预期内排查信号源信号源阻抗是否过高尝试在ADC输入端并联一个电容如0.1uF到地看读数是否稳定。如果稳定了说明驱动能力不足需要加电压跟随器。排查地线模拟地是否受到了数字地噪声的污染检查单点连接是否可靠。软件滤波是否未做任何滤波尝试增加采样次数做平均。问题二ADC读数有固定偏差误差大执行校准首先进行偏移和增益校准。检查输入电路分压电阻的精度是否足够运放电路是否存在失调电压测量实际电压用高精度万用表测量ADC输入引脚的实际电压与ADC读数换算的电压对比确定误差来源是前端电路还是ADC本身。问题三多通道采样通道间相互串扰检查采样时间ADC对每个通道采样时需要时间给内部采样保持电容充电。如果采样时间设置太短电容未充满会导致读数不准且受上一通道电压影响。增加ADC_SampleTime参数在STM32中可能是采样周期数。检查通道切换顺序某些ADC在切换通道时如果从高电压切换到低电压或反之由于内部开关的电荷注入效应可能会影响读数。尝试调整通道扫描顺序或在切换后插入一个短暂的延迟或 dummy conversion。问题四使用DMA传输时数据错位或丢失检查缓冲区大小DMA缓冲区是否足够大是否发生了溢出检查数据对齐ADC是12位数据但MCU是32位总线。DMA传输时数据是右对齐还是左对齐ADC_DataAlign配置需要与读取数据的代码对齐方式匹配。检查DMA和ADC启动顺序正确的顺序通常是初始化ADC和DMA - 启动DMA - 启动ADC。如果先启动ADC转换完成的数据可能无法触发DMA。调试ADC问题示波器是最好用的工具。观察电源、基准、输入信号的波形很多时候问题就一目了然。耐心地、系统地逐一排除可能的原因从电源和接地这类根本问题查起往往比反复修改代码更有效。记住一个稳定的ADC系统是精密模拟设计和严谨数字处理的共同结晶。