标题: 关于ADC滤波算法讨论 [打印本页]

作者: Y_G_G    时间: 2025-6-26 00:02
标题: 关于ADC滤波算法讨论
最近在做一个USB充电显示电流和电压测试仪,主要是显示输入电压和充电电流的ADC全部采用算术平均算法,怎么说呢,反正能用,也正常,但有点强迫症
电压总是会5.06v,5.05V,5.03V之类的之间跳动,电流总是会在506mA,500mA,503mA之类的来回跳动,虽然知道这是正常现象,但总感觉不爽
请问各位有没有一个比较好的算法,就是能在精确度,显示稳定度之间相对均衡的算法,是否可以分享一下,不要代码,我自己撸就行,就是单纯的讨论一下算法问题

作者: szb314    时间: 2025-6-26 08:42
综艺节目,去掉一个最高分,一个最低分。。。当然还可以统计相同的数值出现最多的,第二多的。。。。然后看着办吧
作者: zyftank    时间: 2025-6-26 09:26
换个测量工具,用TI的INA3221测量
作者: zhuls    时间: 2025-6-26 09:41
我也曾做过类同的,采用的的“算法”就是采样20次,去掉2个高值、2个低值,余下平均即可。

记得有个大佬写的一本书《匠人手记》,其中有介绍10多种滤波算法,你可以找来借鉴一下。
作者: hi等你    时间: 2025-6-26 09:56
别人怎么做我不知道,我会在单片机ad那个脚加个小电容,隔半秒或一秒读取一次再去显示
作者: cyi8    时间: 2025-6-26 09:57
不知道,听说算法都很烧脑,大学学过的什么傅立叶算法等等我现在看着就感觉脑子里有个搅拌机,搅得一团混乱
作者: zyftank    时间: 2025-6-26 10:52
用软件的方法基本是在做无用功
作者: powerdruy    时间: 2025-6-26 10:55
可以试试一阶低通滤波,但是影响响应速度,想要响应和收敛都有比较好的表现,还是卡尔曼滤波
作者: powerdruy    时间: 2025-6-26 10:56
hi等你 发表于 2025-6-26 09:56
别人怎么做我不知道,我会在单片机ad那个脚加个小电容,隔半秒或一秒读取一次再去显示

你这个,只适合低速变化的信号,对于需要高速实时采样比如无人机,就不适用了
作者: angmall    时间: 2025-6-26 11:04
注意接地,注意VREF电压和噪声,有独立AVCC的注意AVCC电压和噪声
10位的ADC和12位的ADC的不同。5V下10位的ADC分辨率一位是4.88mV,12位是1.22mV,有可能你的电路有大于1mV小于4mV的纹波或者噪声,导致10位的结果不跳动而12位的跳动。
可以观察一下ADC数值跳动的范围,看看峰峰值大概多大。
看一下只采集一个通道数据跳不跳,也有可能是通道切换的时候采样保持电容串扰了。
增加 ADC 的采样时间,转换时间是固定的 12个 ADC 时钟
先检查自己的硬件,STC的ADC本身是很小跳动的,你有大跳动,检查你的电源纹波、参考电压纹波、输入信号纹波。12位ADC、2.5V参考,分辨率是0.61mV,你示波器看看你的电路上述参数的纹波,就会明白为什么跳动。
使用1/16 IIR滤波: v= ((v << 4) - v + v_new) >> 4;

作者: chfmx    时间: 2025-6-27 14:12
angmall 发表于 2025-6-26 11:04
注意接地,注意VREF电压和噪声,有独立AVCC的注意AVCC电压和噪声
10位的ADC和12位的ADC的不同。5V下10位的 ...

你好,可以问下1/16 IIR滤波: v= ((v << 4) - v + v_new) >> 4,具体是怎么得到的?

作者: dalaoshi    时间: 2025-6-27 23:36
采用大于还是小于来平滑,大于就加一点,小于就小一点,一次加减多少自己决定。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1