久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2222|回復: 16
收起左側

ADC濾波之滑動平均算法問題

[復制鏈接]
ID:322939 發表于 2021-12-3 17:06 | 顯示全部樓層 |閱讀模式
AD采集溫度使用滑動平均算法濾波發現當加熱時顯示溫度的數字變化不大與之實際溫度相差很大,當實際溫度在1百多度后,顯示才幾十度然后變化在1度左右變化就不動了。如果使用中位值平均法就沒問題,請各位大佬幫看看是那里的問題。多謝先!
#define N 12

unigned int  value_buf[N];
unigned char i = 0;
unigned int  temp=0;
unigned int filter(void)
{
   unigned char count = 0;
   unigned int sum = 0;

    value_buf[i++] = get_ad();
    if(i == N) {
        i = 0;    //先進先出
    }
    for(count = 0; count < N; count++)
{
        sum += value_buf[count];
    }
    return (sum / N);
}
void display(void)
{
  temp=filter();//給數碼 管分位顯示
............
...........
}
回復

使用道具 舉報

ID:313048 發表于 2021-12-3 18:07 | 顯示全部樓層
看一下是否因為sum += value_buf[count];這個數據越界了的原因。你可以把sum定義為long int試試
回復

使用道具 舉報

ID:624769 發表于 2021-12-3 19:18 | 顯示全部樓層
你的 i 是全局變量,你確定沒有其他地方(其他函數,其他for循環)用到 i 么?
回復

使用道具 舉報

ID:401564 發表于 2021-12-3 20:50 | 顯示全部樓層
NTC溫度變化的速度并不快的,用不著什么復雜算法
1秒/4次,累加再平均,基本是沒有問題的
非得要所謂的精度,那就用ADC中斷方式,66次ADC結果相加,減去最大和最小,除以64
什么數組都不需要
回復

使用道具 舉報

ID:322939 發表于 2021-12-4 08:59 | 顯示全部樓層
AUG 發表于 2021-12-3 18:07
看一下是否因為sum += value_buf[count];這個數據越界了的原因。你可以把sum定義為long int試試

我試過將sum改int型也不行,只是顯示數值比原來高一點
回復

使用道具 舉報

ID:322939 發表于 2021-12-4 09:01 | 顯示全部樓層
188610329 發表于 2021-12-3 19:18
你的 i 是全局變量,你確定沒有其他地方(其他函數,其他for循環)用到 i 么?

在原程序 i我是放在局部變量,其它地方沒用到的。
回復

使用道具 舉報

ID:322939 發表于 2021-12-4 09:06 | 顯示全部樓層
Y_G_G 發表于 2021-12-3 20:50
NTC溫度變化的速度并不快的,用不著什么復雜算法
1秒/4次,累加再平均,基本是沒有問題的
非得要所謂的精度, ...

我是用熱電偶檢測的,因為要檢測500度的高溫,NTC做不到的,熱電偶它的信號反應很快,波動較大,只能用算法做了
回復

使用道具 舉報

ID:322939 發表于 2021-12-4 09:07 | 顯示全部樓層
搞到我懷疑這算法例程到底靠不靠譜了?
回復

使用道具 舉報

ID:136119 發表于 2021-12-4 10:37 | 顯示全部樓層
你看這個你能用不  建立數據隊列 先進先出  每次進入一個數據 建立一個平均值
        #define ADDE_DataFlow  8        //建立數據流最大16

        typedef struct
        {
                u8 Sign;                      // 數據隊列位置標號
                u16 DataFlow[ADDE_DataFlow];  //記錄相關數據  
                u16 DataADC;                  //數據有效值
        } SAD_DataFlow ;
///////////////數據計數平均值///////////////
void DataFlowRecord(SAD_DataFlow* target ,u16 data)//記錄數據
{
        u16 temp_val=0;
        u8 t ;       
        target -> DataFlow [target->Sign] = data;
        target -> Sign++;       
        if(target -> Sign >= ADDE_DataFlow)
        {target->Sign = 0;}               
        for(t=0;t<ADDE_DataFlow;t++)
        {temp_val += target->DataFlow[t];}
  target->DataADC = temp_val/ADDE_DataFlow;
}
回復

使用道具 舉報

ID:139866 發表于 2021-12-4 11:36 | 顯示全部樓層
最近在研究卡爾曼濾波器,建議樓主可以試試,效果還不錯
回復

使用道具 舉報

ID:322939 發表于 2021-12-4 11:45 | 顯示全部樓層
yuyechenai 發表于 2021-12-4 10:37
你看這個你能用不  建立數據隊列 先進先出  每次進入一個數據 建立一個平均值
        #define ADDE_DataFlow  8 ...

這位大佬這個(target->...)是什么意思啊?你用的是STM32的吧?
回復

使用道具 舉報

ID:322939 發表于 2021-12-4 11:50 | 顯示全部樓層
天ノ憶 發表于 2021-12-4 11:36
最近在研究卡爾曼濾波器,建議樓主可以試試,效果還不錯

這算法也太復雜了,有時間再研究吧,多謝
回復

使用道具 舉報

ID:624769 發表于 2021-12-4 12:00 來自手機 | 顯示全部樓層
LAW1100 發表于 2021-12-4 09:01
在原程序 i我是放在局部變量,其它地方沒用到的。

你源程序里放在局部的話,聲明的時候不能在后面寫=0。
回復

使用道具 舉報

ID:136119 發表于 2021-12-4 12:04 | 顯示全部樓層
看起來指針不是熟悉 ,這就是一個調用過程
SAD_DataFlow  AD_DataFlow;  //聲明數據
unsigned int  M;                    /////////聲明
DataFlowRecord(&AD_DataFlow ,ADC_DATA);  //ADC_DATA 這個是AD獲取到的值
M=AD_DataFlow.DataADC      //獲取你想要的值  首次經過 ADDE_DataFlow 輪調用數據就會穩定

回復

使用道具 舉報

ID:160500 發表于 2021-12-4 12:33 | 顯示全部樓層
看這一點程序看不出什么問題。你這種局部變量又想保持其值的建議使用靜態變量,不容易出現其它地方誤用的情況
回復

使用道具 舉報

ID:401564 發表于 2021-12-4 12:41 | 顯示全部樓層
LAW1100 發表于 2021-12-4 09:06
我是用熱電偶檢測的,因為要檢測500度的高溫,NTC做不到的,熱電偶它的信號反應很快,波動較大,只能用算 ...

熱電偶和NTC一樣的了,它都是檢測溫度的
溫度變化都是沒有那么快的
難不成加熱器件是從0攝氏度1uS就加熱到了100攝氏度?
做溫度檢測控制,你至少有個溫度計吧,你可以用溫度計看一下,溫度變化真的不大的
烙鐵的PID控制都是秒級別的
所以,沒有必要什么復雜算法,累加再平均就行了
如果是非得要什么復雜算法,那至少,你得先累加平均,驗證主程序,所有的程序都對了之后,再去實現算法
回復

使用道具 舉報

ID:322939 發表于 2021-12-5 17:02 | 顯示全部樓層
多謝各位,我研究下,實在不行就用中位值濾波。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女一级a毛片免费观看97 | 日本成人福利视频 | 一级黄色片网址 | 免费的av| 亚洲福利一区二区 | 黄网站在线观看 | 91看片在线| 成人av观看 | 男女啪啪网址 | 亚洲一区视频在线播放 | 国产成人在线播放 | 日韩av网址在线观看 | 人人干人人干人人干 | 成人亚洲视频 | 亚洲一二三区精品 | 日韩中文视频 | 天堂网中文字幕在线观看 | 91免费小视频 | 久久九九99 | 91久久精品 | 国产乱码精品一品二品 | 日韩中文字幕av | 另类专区成人 | 国产中文在线 | 日韩和的一区二在线 | 日韩精品成人av | 日韩精品一区二区在线 | 日韩a视频| 日韩在线视频免费观看 | 成人免费视频网站在线观看 | 天堂av影院 | 亚洲精品一区二区三区中文字幕 | 色婷婷激情综合 | www.97zyz.com| 日韩欧美黄色 | 亚洲va国产日韩欧美精品色婷婷 | 久久精品高清视频 | 奇米四色在线观看 | 91一区二区| 欧美黄色片 | 欧美天堂|