当前位置: 首页 > 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.gsyq.cn/news/1424325.html

相关文章:

  • 高性能语音合成部署:基于Sherpa-Onnx的MeloTTS多语言模型转换与优化方案
  • 文泉驿微米黑终极安装指南:5MB轻量级中文字体跨平台快速部署
  • 别只用来聊天!解锁BitoAI在VSCode中的5个高效编程场景(含代码规范检查与性能优化)
  • 给Kali 2022.1换张‘脸’:从默认主题到中文界面,一次搞定所有视觉和语言设置
  • CSS View Transitions API 详解
  • Realtek蓝牙鼠标卡顿?别急着换硬件,试试这个被忽略的Windows后台服务优化
  • 手把手教你玩转CST材料库:导入厂家数据、创建自定义吸波材料全攻略
  • 合肥本地招聘为什么首选合肥直聘兔?本土优势+真实数据+落地案例详解 - drfdxr
  • RVC-WebUI:5分钟掌握AI语音克隆的完整指南
  • 2026年美国DOE认证检测机构权威排行一览:IEC60825检测、加州CEC认证、欧盟ERP认证、激光CE认证选择指南 - 优质品牌商家
  • Ubuntu 18.04下Tesla M40显卡驱动安装避坑实录:从‘NVIDIA-SMI失败’到‘Above 4G Decoding’的正确姿势
  • Flutter GoRouter 路由导航详解
  • 网盘直链解析终极指南:一键解锁高速下载体验
  • 如何快速解锁QQ音乐加密文件:qmcdump音频解密工具终极指南
  • 2026年横评10款降AI率工具:一键锁定高效助手! - 降AI小能手
  • 179、运动控制中的行业标准:机器人安全标准ISO 10218
  • 告别PuTTY!Win10/Server 2019自带的OpenSSH客户端,这样用才顺手
  • 【Agent智能体10 | 反思设计模式-AI数据分析的可视化实战】
  • 别再死磕Vivado了!用VSCode写ZYNQ代码,效率翻倍的保姆级配置指南
  • 多 Agent 对证循环协作架构:Hermes + Claude Code + Codex 三角色工作流实战
  • WarcraftHelper魔兽争霸III优化工具:5分钟解锁游戏全部潜力,告别老旧限制
  • Arm CCI-550/CCI-500地址通道带宽异常分析与优化
  • 这6个动作让python selenium爬虫规避检测
  • 【Claude NPV分析权威指南】:20年财务AI专家首曝大模型估值新范式,3步精准测算项目真实价值
  • Linux服务器内存升级避坑指南:手把手教你用dmidecode查清空余卡槽和兼容参数
  • 180、运动控制中的行业标准:CNC标准ISO 841
  • 哪些25-30万五座SUV车型值得选?2026年5月推荐TOP5评测家用空间案例适用场景 - 品牌推荐
  • dto 转entity方法
  • 抖音下载神器终极指南:一键获取无水印视频的完整教程
  • 银河麒麟V10系统下,用vsftpd搭建FTP服务器的保姆级避坑指南