
做硬件和嵌入式开发的迟早会被一个问题拦住同样是ADC芯片为什么有的数据手册上写着16位、1MSPS价格还很亲民有的却标着24位最大采样率却只有几千赫兹更让人困惑的是明明后者的位数更高厂商反而会在前端给你加一堆“必须注意的RC滤波电路”。这个问题的根源多半就是标题里那两大派系在较劲SAR ADC和Sigma-Delta ADC。这两种ADC架构几乎占了市面上中高精度数据采集的一大半江山。理解它们的区别不仅仅是看懂参数表更是从根上决定了你前端电路怎么设计、数据后处理怎么做、系统延迟能压到多低、甚至PCB该怎么布局。这篇文章就围绕这个主题把两种架构从原理差异到实际落地一次性聊透顺便把采样周期、有效位数、前端RC滤波、数据漂移、时钟抖动这些高频踩坑点都串进去。全程没有任何AI味儿就是一个硬件工程师的实战笔记。1. 两种ADC架构的底层逻辑一个暴力求解一个曲线救国1.1 SAR ADC逐次逼近用时间换分辨率的实用派SAR ADC全称Successive Approximation Register逐次逼近寄存器型ADC。它的工作方式特别像“猜数字”。主持人心里想了一个1024以内的数你每次猜一个数主持人只告诉你是大了还是小了你根据反馈不断收窄范围最多猜10次一定能命中。SAR ADC内部就是这样一个过程只不过“主持人”换成了一个比较器加一个电容DAC阵列“反馈”来自逻辑控制电路。具体到电路上一次转换开始前采样开关闭合输入电压给内部的电容阵列充电这个过程叫采样或跟踪。采样结束后开关断开SAR逻辑先把最高位设成1也就是让DAC输出二分之一参考电压比较器拿输入电压和这个值一比输入大就保留最高位为1否则清掉改为0。接着再看次高位每比较一次就确定一位最终把所有位都确定完一次转换就结束了。这里有个很关键的点SAR ADC是“一次性”转换完的采样完成后N位转换只需要N个比较周期。所以在同等工艺和时钟频率下SAR能轻松做到几MSPS甚至几十MSPS的采样率。12位SAR两三个微秒就能转完一轮这种“即采即出”的延迟特性让它在电机控制、电源监测、高速数据采集这些对实时性有硬性要求的场合几乎是不可替代的。分辨率方面SAR内部电容阵列的匹配精度直接决定了DNL和INL。想要做到16位以上对晶圆工艺的要求就非常高这也是为什么高分辨率SAR芯片的价格会明显上探。同时因为内部采样电容和比较器的噪声底摆在那里SAR的实际有效位数往往比标称位数低一到两位这个后面细聊。1.2 Sigma-Delta ADC过采样加噪声整形拿计算换分辨率Sigma-Delta ADC的做事方式完全不一样。它不追求一次转换出结果而是用极高的采样率对输入信号反复量化再用数字滤波器把堆积海量采样数据里蕴含的精度“榨”出来。它的核心结构是Sigma-Delta调制器加数字抽取滤波器。调制器本质上是一个带反馈的环路输入信号和反馈信号相减后的误差经过积分器累积再由一个低精度的量化器通常只有1位也就是一个比较器量化量化结果反馈回去跟输入再次求差。这个环路的神奇之处在于它可以把量化噪声“整形”到高频段带内噪声被大幅压低高频噪声反而变大了。随后数字抽取滤波器把高频噪声滤掉同时把数据率降下来输出的就是高分辨率、低速率的数字码流。拿一句人话总结SAR是“模拟硬扛”一个周期比一次Sigma-Delta是“算力换精度”大量采样外加数字滤波用计算能力把分辨率堆上去。这就是为什么它做到24位、32位都很常见因为低位量化器对模拟精度的要求被极大放宽了。但代价也很明显第一每输出一个最终数据都要等待数字滤波器的群延迟数据率低实时性差第二调制器对时钟抖动比较敏感因为采样时钟的抖动会被直接折叠进噪声整形环路第三数字滤波器占硅片面积和功耗芯片整体功耗通常高于同精度的SAR。1.3 一张表看懂两者的核心差异对比维度SAR ADCSigma-Delta ADC核心原理逐次逼近比较N位只要N个时钟周期过采样加噪声整形数字滤波降频分辨率常见8到16位高则18位主流16到24位高端32位采样率几百kSPS到几十MSPS通常几十SPS到几MSPS分辨率越高越慢延迟一个转换周期出数据几乎零延迟数字滤波器带来ms级群延迟输出数据率等于采样率前级可直连等于采样率除以过采样率低得多抗混叠需求需要较强模拟抗混叠滤波过采样天然抑制带外混叠前级RC只需防EMI和电荷注入功耗相对低可关断唤醒相对高尤其数字滤波器启动时典型场合电机控制、电源控制、高速采集、医疗超声称重、温度、应变测量、音频、高精度传感器前端2. 参数表背后的真实差距有效位数、延迟、前端滤波一个都不能漏2.1 有效位数与信噪比标称16位为什么不等于真16位数据手册上写16位指的是它输出的数字分辨率而不是它实际“能用”的精度。真实性能要看ENOB有效位数它由SNDR信号加噪声加失真的信噪失真比换算而来ENOB (SNDR - 1.76) / 6.02。也就是说如果你测一个接近满量程的正弦波看输出频谱里信号和噪声失真总和的比值再换回去才算数。SAR ADC的ENOB主要受限于三样东西比较器噪声、DAC电容阵列的失配、以及参考电压的噪声。前者是热噪声很难完全消除中者是工艺决定匹配差一点INL就难看后者考验电路设计参考源的纹波会直接调制进转换结果。所以一颗标称16位的SAR典型ENOB做到13位到14位已经算不错了。Sigma-Delta ADC的路径稍有不同。它的小位数量化器对元件失配不敏感但比较依赖调制器环路的稳定性和数字滤波器的字长。前端的参考电压噪声、基准缓冲器噪声同样会直接折算进输入如果前端供电纹波太大24位Sigma-Delta读出末位数字乱跳一点都不奇怪。选型的时候别光看“最高分辨率”一定要关注数据手册给的ENOB和SNDR测试条件最好是在你实际信号的带宽内去看。注意数据手册里标称的SNDR通常是差分输入、满量程附近、特定采样频率下测出来的。你用单端输入、信号很弱、采样率改高以后ENOB可能掉得怀疑人生。实际项目里按标称值的60%到70%去预估系统性能是比较稳妥的做法。2.2 采样率与系统延迟为什么Sigma-Delta控不了闭环如果你要做一个动态响应要求极高的电流环或者一个需要逐周期判断过流的电源监视器SAR ADC几乎是唯一选择。因为它的数据更新延时约等于一个转换周期几微秒内你就能拿到新数据。而Sigma-Delta必须等数字滤波器的群延迟这个延迟通常是输出周期的好几倍到几十倍中低速SD芯片动辄几个毫秒拿来跑闭环就是灾难。Sigma-Delta的数字抽取滤波器大多是sinc结构sinc滤波器的群延迟差不多是滤波器抽头数除2对应到时间上就是几个输出周期。比如你用64倍过采样率调幅式sinc3滤波器延迟可能达到输出周期的几倍。这个特性在称重传感器这类0.1Hz带宽的场合不是问题但在音频、电机位置环这种要求微秒级反应的地方就用不了。具体到STM32这类MCU的内置ADC很多人会忽略它其实是SAR结构。默认情况下它可以在采样时钟驱动下逐个周期转换配合DMA还能连续搬运数据。有些高级系列支持三重模式可以让三个ADC核同步采样或交替采样等效采样率能翻三倍这也是SAR架构的典型打法。实时性要求高的时候别绕远路走外置SD内置SAR开个定时器触发采样配合DMA中断效率很高。2.3 抗混叠滤波器设计SAR和SD的前级RC是天壤之别理论上任何离散采样系统都有混叠风险信号带宽内的频率成分如果高于奈奎斯特频率都会被折叠回带内。SAR的采样率不高不低奈奎斯特频率就在忙带附近所以前级必须放一个比较强的模拟抗混叠滤波器通常是二阶甚至三阶有源低通。否则稍高频的噪声落进来会直接叠加在信号上抬低信噪比。Sigma-Delta ADC的优势在这时候就体现了。因为调制器以几十倍甚至更高倍数的采样率工作信号带宽远低于奈奎斯特频率混叠到带内的噪声能量被大幅压缩。实际项目中Sigma-Delta前级的RC滤波器往往不是为了抗混叠而是为了抑制射频干扰和EMI同时给调制器内部的开关电容采样网络提供一个稳定的电荷源泉。这里有个细节很多人踩坑给SD ADC前级加RC时R不能太大、C不能太小否则调制器的采样电流会在RC上产生纹波反而把纹波调制成带内噪声。这个RC的时间常数最好根据输入阻抗和数据手册的推荐来选我做过一个项目参考电压前端想当然加了个几十千欧的限流电阻结果末位噪声直接炸了最后把R降到几百欧才恢复正常。具体RC计算逻辑放在第3章仔细说。3. 落地实操前端RC、数字滤波与PCB布局的细微差别3.1 前端RC滤波设计SAR关注建立时间SD关注电荷吸收SAR ADC输入端是一个开关电容网络采样瞬间会有一个很大的电流尖峰灌到外部电路。为了在采样窗口内让内部电容稳定到目标电压外部必须提供一个足够大的电荷池。最常用的做法是加一个RC低通R不要太大C取个几纳法到几十纳法让外部电容电容远大于内部采样电容。工程上有个经验公式要让采样电压建立到1/2 LSB以内需要的建立时间大约是τ的ln(2^(N1))倍。比如16位ADCln(2^17)≈11.78也就是说需要差不多12个RC时间常数才能建立到半个LSB以内。如果你信号源阻抗很大RA一高τ就大采样窗口不够测出来的结果就是直流偏了交流信号则表现为高频分量衰减和相位误差。所以SAR前级要么用低输出阻抗的运放驱动要么用足够大的外接电容把高频电荷需求顶住。Sigma-Delta ADC输入端的开关电容网络同样需要电荷但它平均电流比同速率的SAR小得多因为过采样率拉高了采样频次每个周期采的小电容电量被摊薄了。它的前端RC设计焦点不在建立时间而在两点一是不要让RC形成大的时间常数从而对带内信号产生衰减RC截止频率通常要选在信号带宽的几十倍以上二是RC参数要和调制器输入阻抗匹配避免输入偏置电流在电阻上产生直流误差。如果要对信号带宽做严格限制在后级加有源滤波器更可控。3.2 数字后处理均值滤波、滑动平均与sinc滤波器怎么选SAR输出走完模拟链路之后软件上做后处理几乎是必须的。最常见的是均值滤波采集N次取平均白噪声会按根号N的倍数压低信噪比提升约3dB每两倍。比如采集32次取平均相当于信噪比提高7.5dB有效位数约加1.25位。本质就是数字过采样。但这招对付不了工频干扰这类确定性噪声因为它不像白噪声那样均值为零且不相关。对付50Hz工频最好是整周期采样求平均或者用滑动平均滤波加陷波只要窗口时间恰好是工频周期的整数倍。另一个实用技巧是使用中值滤波剔除粗大误差但中值滤波对高斯噪声的抑制效果不如均值所以粗大误差多的用中值噪声主导的用均值两者结合效果更好。用C语言实现一个滑动平均缓冲队列代码量不大但要注意数组长度保持2的幂次这样取平均值可以用右移代替除法省下单片机宝贵的周期。Sigma-Delta内部已经做了sinc抽取滤波输出频率低、噪声低一般不需要再做深度滤波。如果你在MCU里再叠一层滑动平均就要注意采样周期会被拉长动态响应变差。实际做法是对SD数据做轻度均值比如8次均值换取额外一点稳定性如果输出已经每秒钟只有几个数据再做长窗滤波意义不大反而让迟滞更严重。3.3 PCB布局三条铁律时钟线、电源噪声、地平面一个都不能少ADC相关的PCB布局首要问题是时钟抖动。SAR的转换时钟和Sigma-Delta的调制器时钟一旦带上抖动等效于在采样时刻上叠加了随机误差直接表现为噪底抬高。时钟线要尽量短最好是专用净空走线参考地平面完整不要跨分割线。如果使用外部晶体或晶振负载电容要按手册选准温度漂移也要看。然后是电源噪声问题。模拟电源AVDD和数字电源DVDD必须分开走再单点汇合。ADC的参考电压引脚对噪声最敏感SAR尤其明显建议用LDO单独供电输出端并一个低ESR的钽电容加瓷片电容。数字电路产生的开关噪声很容易通过地弹耦合到模拟地所以ADC下方不要走数字信号线AGND和DGND尽量用星型拓扑在ADC底部单点连接。磁珠加在AVDD的电源走线上是值得的磁珠能阻断高频开关噪声但注意别把DC压降算错了。地平面处理是很多新手翻车的地方。有些工程师在板子上硬生生把地平面切了一条缝觉得这是“模拟部分”和“数字部分”隔离结果ADC反而性能更差。因为电流总是找最小阻抗路径地上有个缝就相当于给回流电流制造了绕行路径形成一个大环路天线EMI和噪声全进来了。正确的做法是整个地平面保持完整模拟器件和数字器件分区放置ADC的模拟地引脚用最短过孔回到地平面数字地引脚也直接打孔让回流路径最短。4. 常见问题排查这些坑我基本都踩过4.1 ADC数据漂移与环境温漂先查基准别急着怪芯片用高分辨率SD ADC做传感器采集时发现输出值一会儿往上飘一会儿往下飘温度一变就更明显这种情况大概率不是ADC本身的问题而是参考电压在漂。很多MCU内置ADC用内部参考温漂系数轻松超过50ppm/℃换来末位的跳动就是几十个LSB。解决办法是用外部精密基准带温度稳定性的那种比如电压基准源同时基准输出端要加一个缓冲器驱动能力要足够。还有一个隐蔽问题分压电阻的温漂。两个电阻阻值都在变如果温漂系数不一致分压比例就随温度变化表现出来也是“数据漂移”。用0.1%精度、25ppm温漂的薄膜电阻或者通过软件校准拟合温度曲线都是常见对策。再就是参考电容漏电如果基准引脚外部去耦电容质量差漏电流大了以后基准电压会缓慢拉低轻度表现为数据随时间漂移。排查手段是先测基准电压是不是稳定再用热风枪局部加热疑似器件观察数据变化趋势很快能把元凶揪出来。4.2 DMA数据紊乱通道配置和缓冲对齐是重灾区GD32E230这类国产MCU的ADC做DMA多通道扫描采样经常出现数据错位、首通道数据丢失等问题。多数情况不是芯片有问题而是配置疏忽。首先是DMA缓冲区的数据宽度要和ADC数据寄存器宽度匹配ADC数据寄存器是16位的半字DMA如果配成8位字节数据就会拆成高字节和低字节读出来的序列完全错位。其次多通道扫描模式下DMA缓冲区大小必须是通道数的整数倍而且一轮采样开始时的第一个数据可能来自上一次扫描残留的通道处理时最好在软件里丢弃前N组数据。另一个容易忽略的是循环模式和重复采样的组合。如果开了循环模式DMA每次循环都从相同地址写起如果你的代码在同一周期内读了缓冲区又刚好被DMA覆盖就会出现时序竞态。稳妥的做法是使用DMA双缓冲或者在中断里置一个标志主循环检查标志后再读取缓冲区。实在不行就在每轮扫描结束时触发一次DMA传输完成中断通过软件拷贝到另一个变量。注意MCU复位后ADC的偏置电流和校准寄存器尚未稳定直接开启DMA连续转换会出现第一帧数据变成0xFF或某个固定值的情况。把ADC初始化之后的第一次转换结果丢弃或者等100微秒再启动DMA这个小习惯能省去很多排查时间。4.3 STM32三重模式与注入通道的读取时机STM32高级系列的三重模式ADC允许三个ADC模块同时采样或者按交替打拍的方式让等效采样率翻倍。这个功能很多人在用但读取数据时的坑也不少。常规模式下规则通道的数据放在通用规则数据寄存器里但DMA搬运的是各ADC自己的工作寄存器所以要搞清楚映射关系。注入通道有一个容易踩坑的点注入通道转换完成后并不是自动更新到某个“共享寄存器”而是有自己的注入数据寄存器而且读取它时如果没有处理好标志位可能读到的是上一次转换留在那里的旧值。我的习惯配置是开启注入通道结束中断在中断里立刻把数据读走如果图省事用轮询一定要在启动转换前先清标志转换完成后等标志置位再读。对于微分模式注入通道可以配合定时器触发做无时基偏移的同步采样这在三相电机电流拍照中非常实用。4.4 DNL与INL的仿真与评估思路用斜坡法还是正弦法评估ADC线性度最直接的办法是给一个高精度的慢速斜坡信号把输入从0慢慢扫到满量程记录每个输出码对应的采样个数统计每个码的宽度理想的码宽是总采样数除以总码数。把实测码宽和理想码宽做差就是DNL。把DNL累积起来得到的就是INL。这个方法直观但对信号源要求极高斜坡的非线性误差会直接混进INL里实际不太容易做好。更靠谱的评估方式是用正弦波做码密度测试。正弦波信号容易做得很纯净统计每个输出码在正弦幅值概率分布下应出现的采样次数和实测计数对比可以反推DNL和INL。这个方法的难点在信号源的幅度和频率得精确知道而且采样点要尽量随机分布在信号周期的各个相位上避免锁定在固定位置。仿真阶段可以先用理想数据源加高斯噪声验证你的评估代码本身没写错再来测实际ADC不然容易把代码bug当成芯片问题去查。5. 说到底怎么选我的原则很简单先看信号带宽和系统延迟要跑控制环信号频率又是几kHz以上的直接选SAR别犹豫要测的是直流或低频缓变信号对精度和抗干扰要求苛刻的Sigma-Delta是更合适的答案。再看通道数和成本。SAR做多通道扫描很容易切换通道几乎零代价因为一次转换完事你可以把多个通道挂同一个ADC上轮询。Sigma-Delta每个通道背后都有个数字滤波器切换通道后要等滤波器刷新连续多通道扫一遍既不快也不便宜所以它在高精度单点测量场景下才划算。拿到一款具体ADC后我个人会先做三件事第一翻数据手册里的ENOB和SNDR曲线看看它不是只在某个采样率下好看而是在实际用的采样率下还剩多少余量第二算一下前端RC和采样电容的建立时间特别是SAR很多问题都出在“芯片明明可以驱动电路跟不上”第三把参考电压的噪声和温漂当成独立器件去评估因为ADC精度再高也架不住参考源在拖后腿。这些习惯没一次是白费的。做数据采集这行把架构选型吃透比盲目追求位数有意义得多。