找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 670|回复: 19
收起左侧

关于ADC滤波算法讨论

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

使用道具 举报

ID:807591 发表于 2025-6-26 08:42 | 显示全部楼层
综艺节目,去掉一个最高分,一个最低分。。。当然还可以统计相同的数值出现最多的,第二多的。。。。然后看着办吧
回复

使用道具 举报

ID:74687 发表于 2025-6-26 09:26 | 显示全部楼层
换个测量工具,用TI的INA3221测量
回复

使用道具 举报

ID:69038 发表于 2025-6-26 09:41 | 显示全部楼层
我也曾做过类同的,采用的的“算法”就是采样20次,去掉2个高值、2个低值,余下平均即可。

记得有个大佬写的一本书《匠人手记》,其中有介绍10多种滤波算法,你可以找来借鉴一下。
回复

使用道具 举报

ID:996773 发表于 2025-6-26 09:56 | 显示全部楼层
别人怎么做我不知道,我会在单片机ad那个脚加个小电容,隔半秒或一秒读取一次再去显示
回复

使用道具 举报

ID:1121801 发表于 2025-6-26 09:57 | 显示全部楼层
不知道,听说算法都很烧脑,大学学过的什么傅立叶算法等等我现在看着就感觉脑子里有个搅拌机,搅得一团混乱
回复

使用道具 举报

ID:74687 发表于 2025-6-26 10:52 | 显示全部楼层
用软件的方法基本是在做无用功
回复

使用道具 举报

ID:108361 发表于 2025-6-26 10:55 | 显示全部楼层
可以试试一阶低通滤波,但是影响响应速度,想要响应和收敛都有比较好的表现,还是卡尔曼滤波
回复

使用道具 举报

ID:108361 发表于 2025-6-26 10:56 | 显示全部楼层
hi等你 发表于 2025-6-26 09:56
别人怎么做我不知道,我会在单片机ad那个脚加个小电容,隔半秒或一秒读取一次再去显示

你这个,只适合低速变化的信号,对于需要高速实时采样比如无人机,就不适用了
回复

使用道具 举报

ID:155507 发表于 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;
回复

使用道具 举报

ID:1155465 发表于 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,具体是怎么得到的?
回复

使用道具 举报

ID:283954 发表于 2025-6-27 23:36 | 显示全部楼层
采用大于还是小于来平滑,大于就加一点,小于就小一点,一次加减多少自己决定。
回复

使用道具 举报

ID:281828 发表于 2025-6-28 10:47 | 显示全部楼层
对于单片机ADC的各种滤波算法在AI软件中提问可以获得很多资料,个人感觉ADC采集端口串联1K电阻后加104电容滤波的方法挺有效的,建议楼主试试看。
回复

使用道具 举报

ID:1034262 发表于 2025-6-28 18:00 | 显示全部楼层
使用一阶数字低通滤波,可以极大抑制波动、
回复

使用道具 举报

ID:56665 发表于 2025-6-28 19:54 | 显示全部楼层
chfmx 发表于 2025-6-27 14:12
你好,可以问下1/16 IIR滤波: v= ((v > 4,具体是怎么得到的?

将变量v左移 4 位(相当于乘以 16),然后减去自身v,再加上新值v_new,最后将结果右移 4 位(相当于除以 16),并将最终结果重新赋值给v 。例如,假设v初始值为 5,v_new为 3,v左移 4 位变为 80,80 减去 5 得 75,75 加上 3 为 78,78 右移 4 位约为 4.875,取整后v最终变为 4 。
回复

使用道具 举报

ID:343102 发表于 2025-6-28 22:01 | 显示全部楼层
我以前做adc的时候,也遇到过adc输出结果变化较大的情况。上网查了一下可能与输入阻抗不匹配有关,于是减小信号输入端电阻,输入端增加滤波电容,再经8次算术平均后就能得到较稳定的输出结果。
回复

使用道具 举报

ID:146782 发表于 2025-6-29 21:56 | 显示全部楼层
取一定次数采集,去掉最高和最低,其余的取平均值
回复

使用道具 举报

ID:777834 发表于 2025-6-30 18:31 来自触屏版 | 显示全部楼层
同问,我用电池供电电压也跳来跳去
回复

使用道具 举报

ID:844772 发表于 2025-7-1 08:39 | 显示全部楼层
算数平均有好多种算法,可以用加权平均或移动平均等等
回复

使用道具 举报

ID:1137639 发表于 2025-7-1 10:02 | 显示全部楼层
注意接地,注意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;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表