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

相关文章:

  • Kali Linux里crunch的隐藏玩法:不止生成密码,还能做数据脱敏和压力测试
  • 西湖区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 词达人自动化助手:3分钟完成30分钟词汇任务的智能解决方案
  • 面试必知的Java网络编程知识,让你脱颖而出
  • PUBG压枪难题终极解决方案:罗技鼠标宏开源项目深度解析
  • 【花雕学编程】Arduino BLDC 之智能导盲犬式跟随机器人
  • 如皋市26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • Python开发中的常见陷阱与最佳实践
  • 浦口区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 【算法篇】初识双指针
  • Veo 2与Sora、Pika真实对比测试:17项指标横向评测,这3个短板必须提前规避
  • 栖霞区26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 三步解锁原神私服:KCN-GenshinServer新手极速搭建指南
  • 从MySQL分区到OceanBase分区:迁移升级中的关键差异与平滑过渡方案
  • 家用扫地机器人技术发展路线汇总
  • 2026玻璃钢管道厂家实力TOP5盘点 多场景工程管材采购实用参考指南 - 资讯速览
  • 如何备份电脑所有数据?电脑数据备份全攻略!【图文讲解】3种方法让你轻松完成备份!
  • PADS老用户也容易踩的坑:详解VX2.7输出Gerber时阻焊层与钻孔图的特殊设置
  • 终极指南:3步搞定RTL8852BE驱动安装,让Linux Wi-Fi 6网卡满血复活
  • Windows 10/11 C盘告急?用mklink命令把VSCode扩展文件夹挪到D盘,实测有效
  • 搞定Xilinx CPRI IP核的时钟同步:从GT恢复时钟到外部PLL的保姆级配置指南
  • 避坑指南:在Linux服务器上为个人项目安装CUDA 11.1,如何避免污染系统环境?
  • Protobuf动态解析避坑指南:从Descriptor文件生成到DynamicMessage实战
  • 从实验室到街头:拥抱复杂性的研究范式变革与实战指南
  • 爆炸金属复合板厂家推荐:威海化机凭双工艺技术领跑高端防腐材料赛道 - 玖叁鹿
  • 别再凭感觉画线了!用这个在线工具5分钟搞定PCB电源线宽计算(附IPC-2152标准解读)
  • 别再为ImageNet发愁了!3GB的Mini-ImageNet数据集保姆级处理教程(附Python脚本)
  • Zotero插件市场:3步完成插件管理的终极指南
  • 除了禁用Domain Reload,Unity项目编译提速还有哪些靠谱选择?实测对比与避坑指南
  • 洛阳市涧西区 清洁收纳上门|维小达 日常保洁、开荒保洁、窗户保洁、收纳整理、暖气清洗、家电清洗等一站式清洁收纳服务 - 维小达科技