当前位置: 首页 > news >正文

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的代码,我们学到了工业级数据采集的一个经典套路:

  1. 硬件打底:用高采样率的16位SAR ADC保证基础性能和通道数。
  2. 算法提精度:通过“256点滑动累加不除”的过采样技术,将有效位数(ENOB)从16位提升至约19-20位,再结合算法扩展至24位存储。
  3. 场景适配:让用户在“16位高速”和“24位高精”之间灵活切换,一套硬件搞定两种需求。

下次当你抱怨ADC分辨率不够时,别急着改BOM换芯片,试试在固件里加上过采样和累加不除的算法,说不定你的16位ADC也能榨出24位的表现!

http://www.jsqmd.com/news/913015/

相关文章:

  • 别再重装系统了!LightDM报错‘Failed to Start’的5种修复方案与深度解析
  • Flutter Hero Animation 详解
  • 2026年Q2北京铝合金回收:北京溴化锂机组回收/北京电器回收/北京电子设备回收/北京电池回收/北京电线电缆回收/选择指南 - 优质品牌商家
  • 从MODBUS协议栈到你的代码:深入理解CRC-16校验的‘位反序’到底在干什么?
  • 高性能语音合成部署:基于Sherpa-Onnx的MeloTTS多语言模型转换与优化方案
  • 文泉驿微米黑终极安装指南:5MB轻量级中文字体跨平台快速部署
  • 【图像提取】基于数学形态学的数字视网膜图像血管提取 (DRIVE) 数据集分割附Matlab代码
  • 【AI搜索革命性差异指南】:3大核心维度拆解AI搜索与传统搜索的底层逻辑差异
  • 别只用来聊天!解锁BitoAI在VSCode中的5个高效编程场景(含代码规范检查与性能优化)
  • FastAdmin后台开发实战:手把手教你从零新增一个自定义管理页面(ThinkPHP6框架)
  • Simulink封装模块的‘隐藏关卡’:初始化命令与回调函数实战指南(避坑+案例)
  • 深入Windows消息循环:手把手教你用Unity拦截WM_SIZING实现自定义窗口控制
  • 【绿化】Fong投屏 一键手机投屏 多设备兼容超稳定
  • 给STM32CubeIDE新手的第一份保姆级环境搭建指南(含JRE安装、汉化、主题美化)
  • 如何让AI代理操作SCADA和PLC设备获取数据?实在Agent闭锁环实战解析
  • 给Kali 2022.1换张‘脸’:从默认主题到中文界面,一次搞定所有视觉和语言设置
  • COM3D2.MaidFiddler:5分钟掌握COM3D2女仆实时编辑器完整指南
  • 55个功能点解锁炉石传说新体验:HsMod全面优化指南
  • 如何选择工程信息平台?2026年5月推荐口碑好的服务项目人脉难寻痛点 - 品牌推荐
  • CSS View Transitions API 详解
  • 给测试新人的FOTA实战指南:从Tbox到整车,如何高效设计车载固件升级测试用例?
  • Realtek蓝牙鼠标卡顿?别急着换硬件,试试这个被忽略的Windows后台服务优化
  • 5分钟终结VC运行库安装难题:一站式解决方案深度解析
  • Lindy内容创作自动化:从零搭建抗衰减内容引擎的4层架构,含GitHub开源模板
  • Linux系统终极解决方案:Dislocker轻松访问BitLocker加密分区
  • 猫抓扩展终极指南:5步掌握浏览器资源嗅探与安全下载技巧
  • 大模型推理加速实战:VLLM 与 TensorRT-LLM 深度拆解——PagedAttention 如何让吞吐量提升 2.3 倍,量化与部署中的图优化又带来 40% 显存节省?
  • AMBA 总线接口访问明细
  • 手把手教你玩转CST材料库:导入厂家数据、创建自定义吸波材料全攻略
  • 合肥本地招聘为什么首选合肥直聘兔?本土优势+真实数据+落地案例详解 - drfdxr