16位ADC不够用?别急着换芯片!教你用“过采样+滑动平均”榨出24位极致精度

发布时间:2026/5/30 0:48:04

16位ADC不够用?别急着换芯片!教你用“过采样+滑动平均”榨出24位极致精度 http://www.z-linear.com前言在数据采集项目中我们经常会遇到一个尴尬的境地测温度、测微小应变时16位ADC的分辨率显得捉襟见肘信号稍微一抖最低两位就在狂跳但要是直接上24位Σ-Δ ADC又往往面临采样率太低、价格太贵、或者通道数不够的问题。难道除了换硬件就没有别的路了吗当然有今天我们就结合ZLinear DABL7606 数据采集卡的固件源码来深度拆解一种工业界常用但新手常觉神秘的“黑科技”——软件过采样与精度扩展。看看它是如何在硬件仅为16位ADC的情况下硬生生“算”出24位有效分辨率的一、理论基础分辨率是怎么“凭空”变出来的在深入代码前我们先得搞懂一个底层逻辑增加1位有效分辨率ENOB需要4倍的采样率。根据信号处理理论ADC的量化噪声是均匀分布在0到FS/2^N之间的。如果我们把采样率提高4倍即2倍过采样量化噪声就会分布在更宽的频带内而我们感兴趣的信号带宽内的噪声就会减半即信噪比SNR提升约6dB相当于增加了1位分辨率。数学推导表明每增加1位分辨率需要4倍的过采样率增加4位需要4^4 256倍过采样率。也就是说如果我们有一个16位、最高采样率100KSPS的ADC我们只要以256KSPS的速率去采样然后对256个连续点求平均理论上就能得到一个20位分辨率的稳定数据二、产品实战DABL7606的“16位变24位”魔法理论听懂了工程上怎么落地我们来看看DABL7606 数据采集卡是怎么做的。DABL7606的核心ADC是经典的AD7606这是一款原生16位、8通道同步采样的SAR ADC。但在官方的规格和上位机中它赫然标着“16bit/24bit双模式”。这24位是怎么来的答案就在它的过采样滤波算法中。根据《7606代码分析》文档DABL7606的过采样策略非常巧妙1. 256点滑动平均滤波固件并没有简单粗暴地丢弃旧数据而是采用了256点滑动平均。这意味着ADC依然在以高速如100KSPS连续采样每次新数据进来就在历史累加和中减去最老的一个点加上最新的一个点。技术亮点文档指出这种256点滑动平均能带来信噪比提升 ~24dB这正好约等于增加了4位的有效分辨率16 4 20位。2. 24位精度扩展累加不除这是整个算法最精妙的一步很多人做平均滤波时习惯最后除以256右移8位这样数据又变回了16位宽度虽然稳定性好了但分辨率并没有真正提升。DABL7606的代码怎么做的它只累加不除c// 代码片段来自《7606代码分析》 _uadc.getAdcFilter24[i] sumTotal; // 24位累加和保留累加带来的位宽增长16位数据累加256次数据位宽会增长 log2(256) 8位因此sumTotal变成了一个24位的整数通过保留这个24位累加和它把过采样带来的低频分辨率提升实打实地保留在了数据位宽里。3. 24位数据的物理量换算拿到这24位累加和后如何换算成实际的电压值代码中给出了精确的转换公式c// 以±10V量程为例 int32 adc24 (int32)_uadc.getAdcFilter24[i] - 8388608; // 减去中点值 (2^23) _modbus._inputReg.adc_uV_Data24[i] adc24 / 0.8388608 / 10; // 转换为 μV (微伏)8388608是 2 的 23 次方即24位有符号数的中点相当于0V对应的数字量。除以0.8388608 / 10实际上是将满量程10V映射到微伏级别实现了极高的微观电压分辨能力。最终结果存入adc_uV_Data24供上位机读取。三、权衡天下没有免费的午餐既然过采样这么好为什么不让所有通道都开到24位模式狂采呢因为带宽过采样的代价是牺牲信号带宽。256次累加相当于一个极低截止频率的低通滤波器。正如DABL7606用户手册中展示的波形图35K采样率工频干扰信号细节清晰可见。1K采样率信号轮廓还在但高频细节明显丢失。在24位高精度模式下DABL7606的输出数据率会大幅降低它只适合测量温度、静态压力、缓慢变化的直流信号等低频微变信号。如果你要测电机振动kHz级别必须切回16位高速模式。四、总结与启发通过剖析DABL7606的代码我们学到了工业级数据采集的一个经典套路硬件打底用高采样率的16位SAR ADC保证基础性能和通道数。算法提精度通过“256点滑动累加不除”的过采样技术将有效位数ENOB从16位提升至约19-20位再结合算法扩展至24位存储。场景适配让用户在“16位高速”和“24位高精”之间灵活切换一套硬件搞定两种需求。下次当你抱怨ADC分辨率不够时别急着改BOM换芯片试试在固件里加上过采样和累加不除的算法说不定你的16位ADC也能榨出24位的表现

相关新闻