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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2470|回復: 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();//給數碼 管分位顯示
............
...........
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
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
什么數組都不需要
回復

使用道具 舉報

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

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

使用道具 舉報

6#
ID:322939 發表于 2021-12-4 09:01 | 只看該作者
188610329 發表于 2021-12-3 19:18
你的 i 是全局變量,你確定沒有其他地方(其他函數,其他for循環)用到 i 么?

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

使用道具 舉報

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

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

使用道具 舉報

8#
ID:322939 發表于 2021-12-4 09:07 | 只看該作者
搞到我懷疑這算法例程到底靠不靠譜了?
回復

使用道具 舉報

9#
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;
}
回復

使用道具 舉報

10#
ID:139866 發表于 2021-12-4 11:36 | 只看該作者
最近在研究卡爾曼濾波器,建議樓主可以試試,效果還不錯
回復

使用道具 舉報

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

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

使用道具 舉報

12#
ID:322939 發表于 2021-12-4 11:50 | 只看該作者
天ノ憶 發表于 2021-12-4 11:36
最近在研究卡爾曼濾波器,建議樓主可以試試,效果還不錯

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

使用道具 舉報

13#
ID:624769 發表于 2021-12-4 12:00 來自觸屏版 | 只看該作者
LAW1100 發表于 2021-12-4 09:01
在原程序 i我是放在局部變量,其它地方沒用到的。

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

使用道具 舉報

14#
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 輪調用數據就會穩定

回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

17#
ID:322939 發表于 2021-12-5 17:02 | 只看該作者
多謝各位,我研究下,實在不行就用中位值濾波。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频欧美视频 | 中文字幕亚洲精品 | 成年人精品视频在线观看 | 91视频导航 | 理论片87福利理论电影 | 精品欧美一区二区精品久久久 | 中文亚洲字幕 | 国色天香成人网 | 国产高清一区二区 | 一级国产精品一级国产精品片 | 久久久久久成人 | 国内精品一区二区 | 日韩在线中文 | 精品1区2区| 色综合久久久久 | 色av一区二区 | 国产一级特黄真人毛片 | 欧美日韩在线免费 | 色爱综合网 | 第一区在线观看免费国语入口 | 99精品国产一区二区青青牛奶 | 天天爱天天操 | 国产www.| 日韩久久网 | 欧美日韩在线视频一区 | 日本免费网| 中文字幕免费视频 | 日韩伦理一区二区 | 人人九九精 | 五月天婷婷久久 | 欧美国产日本一区 | 久久视频精品 | 三级成人在线观看 | 看片网站在线 | 日韩精品二区 | 国产999精品久久久 精品三级在线观看 | 久草福利| 欧美日韩在线免费 | 成人久久久 | 毛片综合 | 二区在线视频 |