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

资讯详情

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

SAR ADC高精度数据采集实战:原理、采样电路与校准

SAR ADC高精度数据采集实战:原理、采样电路与校准 做高精度数据采集的工程师早晚都会碰到SAR ADC。无论是电桥称重、电机电流采样、振动监测还是便携式仪器逐次逼近型ADC几乎是无处不在的主力方案。很多人觉得选一颗24位的ADC就能得到24位精度实际做出来一测有效位数可能只有16位。这篇文章把我这些年用SAR ADC做High-Precision Data Acquisition的实践、调试和踩坑经验整理出来围绕SAR ADC的原理、采样电路设计、驱动配置、校准和滤波几个环节展开适合正在调ADC采样链路、做数据采集板或者准备选型的工程师参考。1. 先理解SAR ADC一个二进制搜索的天平1.1 为什么叫SAR不是合成孔径雷达SAR这个词在不同领域撞车很严重。做遥感的人说到SAR想到的是Synthetic Aperture Radar合成孔径雷达通过卫星或者无人机发微波对地面成像。做数据采集的人说到SAR指的是Successive Approximation Register逐次逼近寄存器。这完全是两码事。这篇文章只讨论后者但网上搜SAR ADC的时候很容易带出大量雷达回波数据、SAR原始回波仿真、星载SAR参数之类的结果大家别被带偏。逐次逼近型ADC的核心思想最早可以追溯到水银延迟线时代的逐次比较技术但真正在集成电路里大规模落地还是靠电荷再分配型电容DAC的成熟。现代一颗16位到24位的SAR ADC内部就是采样保持电路、比较器、SAR逻辑和电容型DAC这几个部分。没有复杂到让人劝退却对周边电路极其敏感。1.2 逐次逼近的采样过程逐次逼近的过程很像用天平称重。假设被测电压相当于一个未知重量的物体SAR ADC内部的DAC电容阵列相当于砝码组比较器就是判断“重了还是轻了”的手。第一次比较把1/2满量程的电压和输入比如果输入更大最高位记为1否则记为0。第二次根据这个结果在1/4满量程或者3/4满量程上继续比逐位确定下一比特。N位的SAR ADC只需要N次比较就能完成一次转换所以它天然具备转换延迟低、速度快、功耗省的优点。这里面有个细节容易被忽略现代SAR ADC的电容阵列既当采样电容又当DAC使用。采样阶段输入信号对电容阵列充电转换阶段电容阵列把这些电荷重新分配配合比较器逐位逼近。电容阵列的匹配精度直接决定了INL和DNL这就是为什么同一颗ADC在出厂后还要做校准尤其是高位产品前台校准几乎是标配。1.3 SAR ADC的家族定位在速度和精度之间卡位ADC家族里SAR ADC的位置很微妙。和Delta-Sigma ADC相比SAR的转换是“即时”的没有流水线延迟也没有数字滤波器的群延迟非常适合多通道复用一个ADC、逐点采样、闭环控制这些场景。Delta-Sigma的优势在极高分辨率和低频高精度牺牲的是速度。SAR则能在16位到24位的区间里做到几百kSPS乃至几MSPS比如24位SAR ADC也能跑到1MSPS以上这个区间基本是SAR一家的天下。SAR ADC的功耗和采样率基本呈线性关系不像流水线ADC有固定功耗所以在电池供电、便携式高精度采集设备上非常友好。理解了这几点后面讨论电路设计、选型、校准心里就有谱了。2. 高精度数据采集的第一道坎供电、基准与输入电路很多人觉得ADC精度取决于分辨率其实在真实系统里比分辨率更早暴露问题的是供电、基准和输入驱动。做过20位ADC的工程师都有体会如果参考电源和模拟供电做得不干净板卡底噪会直接吃掉好几个有效位。2.1 20位ADC对电源精度和基准的要求20位ADC的理论最低有效位是1/1048576满量程对应1LSB的电压在5V基准下只有4.77uV。这个量级意味着参考电源上哪怕出现几十微伏的纹波都能在转换结果里看到明显跳码。所以高精度SAR ADC的基准不能直接拿开关电源输出接上去至少需要一级低噪声LDO再加一个高精度低温度漂移的基准源。很多分立方案会用ADR4525、REF5025这类基准关键指标是初始精度、温漂1ppm/摄氏度级别、噪声峰峰值尽量低。如果板子上同时有开关电源和ADC数字电路和模拟电路尽量分电源域。给ADC的模拟电源AVDD通常还要串磁珠或者PI滤波把MHz级开关纹波压下去。我自己试过同样的样板把开关电源的3.3V直接给模拟部分24位ADC的峰峰值噪声大约能到十几微伏换成LDO加PI滤波之后峰峰值能压到几微伏以内。这一点在ADC测试板上尤其重要。有个容易被忽略的坑是基准输入引脚的旁路电容。高精度基准输出往往不能直接驱动大电容有些基准源对容性负载有限制搞不好会自激。正确的做法是基准源输出到ADC的REF引脚之间放一个小电阻比如10欧姆再接一个1uF到10uF的低ESR电容形成一个低通网络同时避免基准源直接驱动大电容。2.2 输入驱动与采样钳位电路的阻容值怎么选SAR ADC输入端通常有一个采样开关和内部电容阵列。外部必须加RC钳位电路也就是串联电阻和接地电容用来抑制输入源的输出阻抗、滤除高频噪声、给采样电容在极短采样窗口内快速充电。阻容值选不好轻则有效位数下降重则出现幅值误差。阻值的下限是驱动放大器的稳定性和静电防护要求上限是采样建立时间。一个常用的简化估算采样时间t_sample至少需要给采样电容充电到0.5LSB以内的误差。建立时间大约等于7到9倍时间常数时间常数由外部源阻抗、串联电阻和总输入电容共同决定。比如你外部串联22欧姆内部采样电容看到的总电容可能是几十pF到几百pF那么时间常数大概在几纳秒到几十纳秒。要求建立到1/2^20精度需要ln(2^20)13.9个时间常数还要考虑余量。ADC数据手册通常会给出最小采样时间配合外部RC仿真再把实际代码跑一遍看码值稳定性。比较常见的外置RC组合是20到50欧姆串联电阻、1nF到几nF并联电容。电容太大会拖慢RC响应太小滤不掉噪声。注意电容要用C0G/NPO等低介质吸收的陶瓷电容不要用X7RX7R的电压特性和介质吸收在精密ADC面前都很致命。驱动放大器方面运放的输出必须能在采样瞬时提供足够大的瞬态电流带宽和压摆率都要考虑。对20位SAR ADC通常要选低噪声、低失真的运放做RC驱动很多工程师直接用ADC手册推荐的配套运放这是最稳的做法。自己做选型时我习惯看运放数据手册里的输出阻抗曲线而不是只看带宽指标因为ADC采样瞬间的电流需求很陡输出阻抗如果在中频段抬起来建立时间会明显变差。2.3 降低板卡底噪ADC测试绕不开的一道坎ADC测试里最让人头疼的不是程序而是底噪。一块板子如果底噪太差用频谱分析看FFT噪底比手册典型值高出一大截。我踩过几个坑总结下来主要是这几类数字信号线在模拟区域附近乱跑产生串扰。特别是SPI的SCLK边沿很陡容性耦合到输入走线或者参考走线上就麻烦了。电源去耦不足。每个模拟电源引脚附近都要放一颗100nF低ESL电容大电容可以共用一个10uF到22uF的X7R或钽电容并注意摆放位置。地回路不干净。不要盲目用“一刀切”分割模拟地和数字地最终要在合适位置单点汇接返回电流路径不能横穿模拟输入区域。测试时没有用屏蔽罩。环境里的电磁干扰会直接被高输入阻抗的ADC采样到特别是在输入悬空或高阻端接时。实际操作中我一般在输入前端预留一个RC组合的位置屏蔽罩也留好。测试时先用短路输入看噪声码分布再逐步接入信号源定位噪声来源。比如把输入短接到地如果ADC输出码的散布依然很大说明噪声来自板内部如果把信号源接上之后噪声明显增大就要怀疑信号源本身或者共模干扰。这个方法比直接上FFT更直觉也更容易定位。3. 嵌入式场景下的ADC实战多通道、DMA与定时器触发独立SAR ADC芯片之外MCU内置ADC的应用更普遍。STM32、GD32、S32K312这些平台上的ADC本身大都是SAR架构很多高精度采集场景其实是用MCU内置ADC加外部调理电路实现的。这里的实战经验更集中也更容易踩坑。3.1 多通道扫描循环采样DMA的配置思路STM32和GD32的SAR ADC要做多通道循环采样最省CPU的方式就是扫描模式加DMA循环模式。配置时有一堆顺序容易搞错先把通道排序寄存器设置好比如规则序列里填上IN0、IN1、IN2再把ADC通道采样时间统一设置好多通道切换时如果采样时间不同转换结果会串味。然后设置ADC为连续转换开启扫描最后配置DMA为循环模式数据宽度要按ADC分辨率设置比如12位右对齐时数据是16位的但是只用低12位。很多初学者犯的错误是只开DMA不设置循环模式一轮采完DMA就停了看起来只有前几次数据有效。另一个是SCAN模式下连续转换没有关闭EOC中断导致中断频繁CPU被拖死。正确做法是使用DMA传输完成中断不要在EOC上打断。如果做的是16位的外部SAR ADC通过SPI读取同样可以用DMA接收。这时要注意SPI帧格式和ADC转换完成标志的配合。有些ADC需要每次转换完成后主机发起读操作如果DMA自动连续读可能读到上一次的旧数据。更好的做法是用ADC的转换完成信号触发一个GPIO再由定时器或外部中断启动SPI DMA读取保证每次读到的都是最新一次转换结果。3.2 DMA数据与手动轮询不一致的排查有人会碰到一个问题ADC用手动读数据寄存器的时候值很稳定切到DMA采集后数组里出现一些“乱跳”的值或者规律性地变化。这个现象我遇到过好几次常见原因有几个数据右对齐和左对齐没对应上DMA按照字长度搬数据结果低12位和高位放反了。没有等转换完成就读数据尤其是用了连续转换DMA可能在数据寄存器更新到一半时把旧值搬走。解决方法是确保DMA搬运时机和数据更新时序匹配或者使用双重缓冲并检查数据有效性位。多通道扫描时第一个通道的结果可能来自上一次转换的残余电荷尤其是通道切换后第一次转换需要多丢弃一次。这个在4通道扫描循环里很典型数组开头那一个值经常异常。排查思路先关掉DMA单通道手动触发打log看原始寄存器值再开一个通道的DMA看看最后再加第二个通道。逐级增加变量比直接看一堆数组蒙圈快得多。还有一次我遇到的神奇现象是DMA拿到的一串数据每隔N个点就重复一遍查了半天发现是ADC的DMA地址没有递增一直写到同一个缓冲区。这在Cortex-M平台上容易发生因为外设DMA请求的地址寄存器配置错了增量模式没开。检查DMA配置时一定要确认外设地址固定内存地址递增数据宽度一致。3.3 定时器触发ADC与FOC电流采样窗口电机控制FOC里电流采样要求在PWM周期内精确的时刻触发通常用定时器更新事件或TRGO信号触发ADC。这样做的核心原因是为了避开PWM开通关断时产生的共模噪声尖峰让采样窗口落在电流纹波的中心位置。用定时器触发而不是软件触发能保证最小抖动。配置上STM32用TIM1/TIM8等高级定时器的TRGO触发ADC需要在定时器里设置触发输出模式ADC里选择外部触发源。GD32类似。S32K312上也有PTC和TRGMUX做触发路由思路一致只是寄存器名和配置工具不同。FOC采样的时间窗口很有讲究。一般来说采样时刻要在PWM下桥臂导通且开关动作完成之后至少要留出1微秒到2微秒的稳定时间。如果ADC采样时间太短、输入RC太大采到的电流可能是错误的。调试时可以故意把触发时刻前后移动几次观察电流波形是否有毛刺毛刺出现的位置就是PWM噪声活跃区。还有一个容易被忽略的点定时器触发ADC时ADC的采样时间不能设置得太短。有些工程师为了追求高采样率把采样周期压到极限结果输入电容还没建立完成转换结果带着前一个周期的残留电荷。这个在FOC里表现为电流波形有周期性台阶不是随机噪声很容易被误判为电机本身的问题。3.4 一个实用的ADC值滤波函数后处理滤波往往也决定采集质量。最常用的三种滑动平均、中位值滤波、一阶低通。滑动平均适合过采样降噪但会钝化突变中位值滤波适合剔除尖峰干扰一阶低通在需要平滑且计算量小的场合很好用。我给出一个整数一阶低通的写法避免浮点运算int16_t adc_lowpass(int16_t new_val, int16_t *state, uint16_t alpha) { // alpha范围0-1024alpha越大响应越快 int32_t tmp (int32_t)new_val * alpha (int32_t)(*state) * (1024 - alpha); *state (int16_t)(tmp 10); return *state; }alpha取64时相当于时间常数和采样周期有关实测对工频噪声有一定抑制。注意不要盲目用低通滤波削弱真实信号尤其是高速闭环控制系统里滤波带来的滞后可能让控制环不稳定。我的原则是能通过布局和采样窗口解决的噪声尽量不从软件滤波解决。滑动平均也分两种普通平均值和加权平均。对ADC采样我比较推荐先做中位值滤波去掉尖峰再做滑动平均压白噪声。这个组合对付工业现场的电磁干扰特别有效代价是多花一点RAM。如果MCU资源紧张可以只做一阶低通效果也够用。4. 校准、信噪比与有效位数从指标到真实精度高精度数据采集里最常被误解的指标就是有效位数。一颗芯片上印着24位不代表你系统里真的有24位有效精度。这个差距就是理论和工程的距离。4.1 SNR、SINAD与ENOB怎么算信噪比SNR是信号能量和所有噪声能量之比但真正决定有效位数的是SINAD也就是包含谐波失真在内的信噪失真比。换算公式是ENOB (SINAD - 1.76) / 6.02。举例来说一颗标称24位的SAR ADC如果SINAD实测只有100dBENOB16.3位实际可用精度就是16位级别。很多产品宣传页写“24位ADC”没有写SINAD。选型时一定看数据手册里的SINAD或ENOB同时看测试条件——输入频率越高SINAD往往越差。数据手册上的指标常常是在极低输入频率下测出来的真实系统里要打折扣。比如我测试过一颗标称18位的SAR ADC在1kHz输入时SINAD是98dBENOB约16位把输入频率提高到50kHzSINAD掉到92dBENOB只剩15位。这个差异不是芯片坏了而是采样保持电路的孔径抖动和比较器带宽在起作用。所以评估ADC能不能用一定要拿自己实际用的信号频率去测而不是只盯最大采样率。4.2 模拟前台校准到底在做什么SAR ADC内部电容阵列制造时会有失配导致DNL、INL和失调误差。现代高精度SAR内部通常会集成自校准逻辑上电后或者接到校准指令后在模拟前端对电容阵列充放电用比较器测出每个权重电容的实际偏差然后写进校准寄存器。这个过程叫模拟前台校准analog foreground calibration。它是在正常转换前做的一次性校准做完之后转换结果精度显著提升。需要注意的是校准期间不能进行正常采样所以很多ADC上电后都要等校准完成再启动采样否则前几个转换值不准。前台校准这个词对应的是后台校准background calibration。后台校准在正常转换过程中持续或间歇进行不需要打断采样但实现复杂、成本高。对大多数系统前台校准已经足够只要每次上电后稍微等一下再采集就行。我自己调试一颗24位SAR ADC时发现上电后立刻采样前几十个点偏差明显。后来看手册才发现校准完成位没查校准没结束就开始转换了。这个坑特别容易踩尤其是用现成驱动库的时候配置函数可能只做了基本的初始化没有等待校准标志。4.3 系统层面的增益与失调校准如果是自己搭的SAR ADC方案外部校准也很常见。做法是输入一个精密的接近满量程的已知电压采集后计算增益系数输入地或者中点电压计算失调系数。然后用软件在每次转换结果上做线性修正。这种两点校准能修正增益误差和失调但修正不了INL的非线性。实操中我会在批量板上做两点校准。比如HX717这类用于称重的24位SAR ADC校准系数可以直接写入芯片也可以用MCU修正。校准流程是先让系统输入零位读取AD值记为offset再输入一个标准砝码或者精密电压读取AD值记为gain_raw标准物理量记为gain_ref。那么任意测量值value的修正公式是value_corrected (value_raw - offset) * gain_ref / (gain_raw - offset)代码里用整数运算和Q格式避免浮点过重。校准完再测一遍中间点看线性度。如果还是偏差明显就要怀疑INL、温度漂移或者输入电路而不是继续堆校准点。校准的温度特性也值得注意。很多芯片的失调和增益系数会随温度变化出厂校准只能保证常温下的精度。如果设备工作范围宽最好在关键温度点重新标定或者选择温漂系数足够低的ADC和基准。对高精度工业变送器来说温漂往往最后变成系统瓶颈比噪声还难处理。4.4 过采样为什么不是万能药提高采样率再做平均确实能降低白噪声有效位数大约每4倍采样率提升1位。但过采样只能改善随机噪声对确定性误差——比如INL、参考电压漂移、固定频率干扰——没有太大作用。如果一个1kHz的干扰信号完整包含在采样带宽里单纯平均很难完全消掉需要配合频谱搬移或抖动技术。所以我的建议是先用硬件把底噪和失真压到合理范围再用过采样把有效位补上来。顺序反了软件工作量会成倍增加效果还不理想。有一种情况过采样确实很有效ADC自身白噪声占主导且没有明显的固定频率干扰这时把采样率提高4倍再取平均ENOB基本可以提升1位。但如果噪声里有大量50Hz工频及其谐波平均窗口不是整周期的话反而可能让误差更大。工程上我喜欢先采一段长数据做FFT看看噪声频谱结构再决定用哪种滤波或过采样策略。5. SAR ADC家族怎么选型从HX717到MCU内置ADC最后一个实操问题真的需要外置SAR ADC吗怎么挑这个问题没有标准答案但有几个判断维度几乎不变。5.1 专用高精度芯片双通道24位ADC与称重/精密测量HX717这类双通道24位ADC近几年在称重和便携式精密测量上很流行。它内置了低噪声PGA、可调增益双差分输入通道适合应变桥、称重传感器。24位分辨率加上低漂移特性配合内部校准逻辑让MCU可以轻松实现高精度称重。选它的理由是外围简单、成本可控、开发快尤其适合电子秤、工业变送器。但不是所有精密测量都需要24位。很多时候18位、20位的SAR ADC在速度和精度上更平衡比如单通道1MSPS级别的SAR ADC用于振动分析、便携式采集卡就比24位Delta-Sigma更合适。这里面有个常见误区以为分辨率越高越好。实际上如果你的传感器信号本身只有10位信噪比后面接24位ADC只是把噪声量化得更精细并不会提高真实精度。系统精度由整条链路最弱的一环决定ADC分辨率只是其中一环。5.2 MCU内置ADC与独立SAR ADC的取舍内置ADC的优势是BOM少、PCB简单、同步触发方便尤其FOC场景定时器触发内置ADC几乎是标配。缺点是供电和PCB布局已经固定模拟性能上限不高很多MCU内置12位ADC实际有效位数在10.5位到11.5位之间做高精度称重或者高分辨率数据采集就不够了。这时候外置SAR ADC的优势就出来了独立电源、独立基准、独立PCB区域可以专门优化来获得更高的SINAD和ENOB。代价是增加成本和面积还要处理模拟前端驱动。选型逻辑很简单需求目标是几位的有效分辨率采样率是多少通道数多少能否接受外部基准和驱动。如果目标是11位有效位MCU内置就够目标是16位以上老老实实上外部SAR ADC。还有一个实际考虑是开发效率。MCU内置ADC省事但调试PGA、基准、外部驱动一样不少外置SAR ADC看起来多一个芯片但很多是完整信号链方案反而可以更快出原型。我一般建议板上预留两种位置先用MCU内置ADC跑通功能如果精度不够再切换独立SAR ADC方案验证。5.3 常见SAR ADC产品形态与参数对比常见的SAR ADC大多通过SPI输出有单通道、多通道、单端、差分输入之分。下面这几类形态可以帮助定位类型典型分辨率采样率典型应用场景普通精密SAR16位100kSPS-1MSPS工业采集、传感器测量高速高精度SAR18位/20位1MSPS以上振动分析、频谱测量超精密低功耗SAR24位数十kSPS-1.5MSPS称重、精密仪器、电池供电设备MCU内置SAR12位/16位与MCU主频相关电机控制、常规采集、FOC选型时除了看分辨率核心还要看SINAD、INL、参考电压灵敏度、输入阻抗、采样保持时间。这几个参数直接决定你系统最后长什么样。还有一个容易被忽略的指标是输入共模范围差分输入SAR ADC的共模电压如果不在规定范围内线性度会明显恶化。设计前端运放时需要先把共模点算清楚。5.4 一个容易混淆的问题SAR ADC与雷达SAR不是一回事写到这里把之前的混淆再强调一次如果你看到poSAR、SAR原始回波仿真数据、星载SAR数据那是合成孔径雷达的资料不要拿来当成逐次逼近ADC的参考。英文缩写相同领域完全不同。做数据采集的搜资料时就写Successive Approximation Register ADC或者SAR ADC no drama能少走很多弯路。我自己这几年做高精度采集最大的体会是先用示波器和FFT把板卡底噪摸清楚再谈算法和校准。很多精度问题最后都出在物理层面的布局和电源上而不是ADC本身。希望这套经验对正在做SAR ADC相关项目的朋友有点帮助。
返回列表