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

开了 16 倍过采样,数据还是跳?别怪 ADC,看看你的信号有没有“呼吸”

摘要:ADC 开了过采样,数据依然跳动或不准?因为你把“过采样”当成了“滤波”。本文解决的是:如何用噪声或抖动(Dithering)把 12 位 ADC 变成 14 位分辨率。


一、问题描述(Bug 现场)

场景 1:

我有一个稳定的 1.650V 电压。

不开过采样:读数是 2048。

开了 16 倍过采样:读数还是 2048。

我想看到 2048.5,看不到。

场景 2:

我有一个变化的电压。

不开过采样:数据乱跳。

开了 16 倍过采样:数据平滑了。

但我不知道这到底是滤波还是精度提高了。


二、核心原理(一句话讲透)

过采样解决的不是“跳动”,而是“分辨率”。

1. 什么是 12 位 ADC 的死穴?

12 位 ADC 的最小单位是1 LSB

假设参考电压 3.3V:

1 LSB = 3.3V / 4096 ≈ 0.8 mV

ADC 天生看不见比 0.8mV 更小的变化。

2. 过采样是怎么“造”出小数点的?

过采样利用噪声,让信号在20482049之间来回跳。

  • 跳 50 次 2048,跳 50 次 2049。

  • 加起来除以 100。

  • 结果 = 2048.5

这就是 13 位、14 位分辨率。

3. 反直觉真相

如果你的信号太干净(像电池电压),过采样完全没用。

因为没有噪声,信号永远不会跳变,永远是 2048。


三、工程级解决方案(直接照抄)

方案 1:给信号加点“呼吸”(推荐)

如果信号是一条直线,你必须人为制造抖动。

怎么做:

在 ADC 输入前端,叠加一个微小的正弦波​ 或三角波(幅度 1~2 LSB)。

硬件做法:

  • 用一个 GPIO 产生 PWM,经过 RC 滤波,接到 ADC 输入端。

  • 这就是Dithering(抖动)​ 技术。

方案 2:软件注入抖动(快速验证)

不想改硬件?用代码骗 ADC。

// 伪代码:软件注入抖动 for (int i = 0; i < 16; i++) { // 故意切换 GPIO 产生一点串扰噪声 GPIO_Toggle(PIN_NOISE); delay_us(1); ADC_Start(); sum += ADC_GetValue(); } result = sum >> 4; // 右移 4 位 = 16 倍

方案 3:区分“过采样”和“滤波”

如果你只是想让数据平滑(不想提高分辨率):

直接用均值滤波:

// 这是滤波,不是过采样 avg = (val1 + val2 + ... + val16) / 16;

区别:

  • 滤波:去掉毛刺,数据更稳,但还是整数。

  • 过采样:得到小数,分辨率更高。


四、什么时候不能用?(避坑)

  1. 信号是直流(DC)

    电池电压、基准电压。别用过采样,没用。

  2. 信号变化很快

    电机电流。过采样会导致数据滞后。

  3. 精度要求不高

    只想看个大概。别用,浪费 CPU。


五、总结 Checklist

  • [ ] 我想提高的是“分辨率”(看小数),还是“稳定性”(去抖动)?

  • [ ] 我的信号上有噪声吗?如果没有,我打算加 Dither 吗?

  • [ ] 我能接受采样率降低 16 倍吗?

  • [ ] 我是不是把“均值滤波”误当成“过采样”了?


💡一句话总结

过采样是为了“看清小数点后面的世界”,不是为了“消灭毛刺”。


References

  • STM32 AN2668 – Oversampling techniques with STM32 ADC

  • Analog Devices MT-001 – Taking the Mystery out of Oversampling


如果你曾经为了追求高精度而盲目开过采样,欢迎在评论区交流。

原创文章,转载请注明出处。

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

相关文章:

  • 泉山区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 新沂市26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • Kali Linux里crunch的隐藏玩法:不止生成密码,还能做数据脱敏和压力测试
  • 避坑指南:在Ubuntu 24.04上搞定Madagascar地震数据处理软件(附22.04差异点)
  • 西湖区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 2026大提花面料定制厂家面料工艺实测牛津布面料现货厂家原料与成品综合性能测评分析 - 栗子测评
  • 论文精读:过去十年计算机视觉与深度学习在作物生长管理中的核心技术方法
  • 词达人自动化助手:3分钟完成30分钟词汇任务的智能解决方案
  • 告别云平台迷茫:用STM32CUBEMX和广和通L610,5分钟搞定腾讯云IoT设备属性上报
  • 面试必知的Java网络编程知识,让你脱颖而出
  • 耗时3小时的部署,这个Hermes部署包5分钟搞定
  • 别再为gradle下载慢发愁了!手把手教你用腾讯镜像源搞定UniApp安卓原生插件开发环境
  • 如东县26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • PUBG压枪难题终极解决方案:罗技鼠标宏开源项目深度解析
  • 峡江县26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 【花雕学编程】Arduino BLDC 之智能导盲犬式跟随机器人
  • 浦口区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 从Pwn到实战:用IDA Pro和Ghidra手把手分析CTF二进制逆向题(附解题脚本)
  • 【西游劫:第三篇】 API 路由设计详解
  • 如皋市26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • Python开发中的常见陷阱与最佳实践
  • 微信聊天记录永久保存指南:揭秘开源备份工具的核心技术
  • 【算法篇】初识双指针
  • 【省去繁琐配置】Hermes 本地 AI 助手部署,Windows 快捷安装包实操避坑指南(含安装包)
  • 医用超声图像后处理中的帧率算法:原理、优化与实践
  • AGI编码争霸:Claude Opus 4.8登顶,GPT - 5.6本周或发布,谁能笑到最后?
  • Veo 2与Sora、Pika真实对比测试:17项指标横向评测,这3个短板必须提前规避
  • 深入vsomeip:从Unix Domain Socket看高性能IPC如何实现(附Wireshark抓包分析)
  • 栖霞区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 润州区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化