標題: 關于ADC濾波算法討論 [打印本頁]

作者: Y_G_G    時間: 2025-6-26 00:02
標題: 關于ADC濾波算法討論
最近在做一個USB充電顯示電流和電壓測試儀,主要是顯示輸入電壓和充電電流的ADC全部采用算術平均算法,怎么說呢,反正能用,也正常,但有點強迫癥
電壓總是會5.06v,5.05V,5.03V之類的之間跳動,電流總是會在506mA,500mA,503mA之類的來回跳動,雖然知道這是正,F(xiàn)象,但總感覺不爽
請問各位有沒有一個比較好的算法,就是能在精確度,顯示穩(wěn)定度之間相對均衡的算法,是否可以分享一下,不要代碼,我自己擼就行,就是單純的討論一下算法問題

作者: szb314    時間: 2025-6-26 08:42
綜藝節(jié)目,去掉一個最高分,一個最低分。。。當然還可以統(tǒng)計相同的數(shù)值出現(xiàn)最多的,第二多的。。。。然后看著辦吧
作者: 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
不知道,聽說算法都很燒腦,大學學過的什么傅立葉算法等等我現(xiàn)在看著就感覺腦子里有個攪拌機,攪得一團混亂
作者: zyftank    時間: 2025-6-26 10:52
用軟件的方法基本是在做無用功
作者: powerdruy    時間: 2025-6-26 10:55
可以試試一階低通濾波,但是影響響應速度,想要響應和收斂都有比較好的表現(xiàn),還是卡爾曼濾波
作者: powerdruy    時間: 2025-6-26 10:56
hi等你 發(fā)表于 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數(shù)值跳動的范圍,看看峰峰值大概多大。
看一下只采集一個通道數(shù)據(jù)跳不跳,也有可能是通道切換的時候采樣保持電容串擾了。
增加 ADC 的采樣時間,轉換時間是固定的 12個 ADC 時鐘
先檢查自己的硬件,STC的ADC本身是很小跳動的,你有大跳動,檢查你的電源紋波、參考電壓紋波、輸入信號紋波。12位ADC、2.5V參考,分辨率是0.61mV,你示波器看看你的電路上述參數(shù)的紋波,就會明白為什么跳動。
使用1/16 IIR濾波: v= ((v << 4) - v + v_new) >> 4;

作者: chfmx    時間: 2025-6-27 14:12
angmall 發(fā)表于 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
采用大于還是小于來平滑,大于就加一點,小于就小一點,一次加減多少自己決定。
作者: wannenggong    時間: 2025-6-28 10:47
對于單片機ADC的各種濾波算法在AI軟件中提問可以獲得很多資料,個人感覺ADC采集端口串聯(lián)1K電阻后加104電容濾波的方法挺有效的,建議樓主試試看。
作者: coody_sz    時間: 2025-6-28 18:00
使用一階數(shù)字低通濾波,可以極大抑制波動、
作者: m182892    時間: 2025-6-28 19:54
chfmx 發(fā)表于 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 位變?yōu)?80,80 減去 5 得 75,75 加上 3 為 78,78 右移 4 位約為 4.875,取整后v最終變?yōu)?4 。
作者: 風158    時間: 2025-6-28 22:01
我以前做adc的時候,也遇到過adc輸出結果變化較大的情況。上網(wǎng)查了一下可能與輸入阻抗不匹配有關,于是減小信號輸入端電阻,輸入端增加濾波電容,再經8次算術平均后就能得到較穩(wěn)定的輸出結果。
作者: aayon1979    時間: 2025-6-29 21:56
取一定次數(shù)采集,去掉最高和最低,其余的取平均值
作者: jianuli    時間: 2025-6-30 18:31
同問,我用電池供電電壓也跳來跳去
作者: glinfei    時間: 2025-7-1 08:39
算數(shù)平均有好多種算法,可以用加權平均或移動平均等等
作者: 622323wjl    時間: 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數(shù)值跳動的范圍,看看峰峰值大概多大。 看一下只采集一個通道數(shù)據(jù)跳不跳,也有可能是通道切換的時候采樣保持電容串擾了。 增加 ADC 的采樣時間,轉換時間是固定的 12個 ADC 時鐘 先檢查自己的硬件,STC的ADC本身是很小跳動的,你有大跳動,檢查你的電源紋波、參考電壓紋波、輸入信號紋波。12位ADC、2.5V參考,分辨率是0.61mV,你示波器看看你的電路上述參數(shù)的紋波,就會明白為什么跳動。 使用1/16 IIR濾波: v= ((v << 4) - v + v_new) >> 4;




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1