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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2101|回復: 11
打印 上一主題 下一主題
收起左側

單片機AD采樣,算術平均濾波后得到的數據出錯

[復制鏈接]
跳轉到指定樓層
樓主
ID:975927 發表于 2021-11-16 09:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請教各位大佬,我想用51單片機寫一個定時器每10ms進行一次AD采樣,對16次的采樣值進行算術平均濾波,采樣函數和濾波函數都應該在哪調用,中斷還是主函數?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:750420 發表于 2021-11-16 10:59 | 只看該作者
采樣函數和濾波函數均在主函數中調用,使用標記位的方式,在主函數中去檢測標記位是否被觸發,然后執行相應的函數即可
回復

使用道具 舉報

板凳
ID:546770 發表于 2021-11-16 11:43 | 只看該作者
濾波在主函數最好,ADC轉換完成一般也可以有個引腳觸發中斷,在這個中斷讀取轉換的值就好了,只要中斷里面不加延時函數一般都沒多大問題的。
回復

使用道具 舉報

地板
ID:401564 發表于 2021-11-16 13:05 | 只看該作者
在中斷中進行ADC數字量的累加和平均,最大值最多加到一個32位整型數據,256次以下的累加用不了多少時間的,平均后的數據存放到一個全局變量中,在主程序中通過這個全局變量來處理就可以
中斷中不能有延時,等待,浮點運算
回復

使用道具 舉報

5#
ID:975927 發表于 2021-11-16 13:46 | 只看該作者
本帖最后由 1027669350 于 2021-11-16 15:57 編輯
Y_G_G 發表于 2021-11-16 13:05
在中斷中進行ADC數字量的累加和平均,最大值最多加到一個32位整型數據,256次以下的累加用不了多少時間的,平 ...

不好意思,問一個低級的問題,我這樣寫數碼管是不會顯示的,能幫忙修改一下嗎
void main()
{
        adcs=0;
        Init();
        while(1)
        {
                display(2*value);
        }
}
//定時器中斷函數
void time0() interrupt 1
{
        
        TH0=(65536-9174)/256;      //重新裝入初值
  TL0=(65526-9174)%256;
        num++;
        myvalue=getad();
        sum+=myvalue;
     
        if(num==16)
        {
                value=sum/16;
        }
}
回復

使用道具 舉報

6#
ID:908826 發表于 2021-11-16 14:37 | 只看該作者
主函數里面吧,
回復

使用道具 舉報

7#
ID:624769 發表于 2021-11-16 16:42 | 只看該作者
我很好奇,你怎么會認為:“每10ms進行一次AD采樣,對16次的采樣值進行算術平均濾波,” 這個操作對“濾波”是最優解的?
我們撇開Hz率不講,舉個現實中的例子, 要統計地鐵的平均客流量, 是每天定時去采樣1小時,連續30天(共計30小時)來的準確,還是, 直接去連續統計24小時平均后來的準確?
回復

使用道具 舉報

8#
ID:975927 發表于 2021-11-16 16:52 | 只看該作者
188610329 發表于 2021-11-16 16:42
我很好奇,你怎么會認為:“每10ms進行一次AD采樣,對16次的采樣值進行算術平均濾波,” 這個操作對“濾波 ...

那我應該采用什么方法進行采樣和濾波呢,剛接觸這一方面,知道的太少了
回復

使用道具 舉報

9#
ID:885416 發表于 2021-11-16 17:13 來自手機 | 只看該作者
耗時時間短的操作在中斷里去做,耗時時間長的如計算在主函數做
回復

使用道具 舉報

10#
ID:624769 發表于 2021-11-16 17:22 | 只看該作者
1027669350 發表于 2021-11-16 16:52
那我應該采用什么方法進行采樣和濾波呢,剛接觸這一方面,知道的太少了

采樣不要用定時器間隔,直接連續采樣,計算可以參考地板。
回復

使用道具 舉報

11#
ID:401564 發表于 2021-11-16 17:29 | 只看該作者
1027669350 發表于 2021-11-16 16:52
那我應該采用什么方法進行采樣和濾波呢,剛接觸這一方面,知道的太少了

ADC采用中斷方式呀
我一開始沒有認真看,還以為你是采用ADC中斷模式
ADC采用中斷模式,128次ADC累加后,取平均值就行,我試過,去不去掉這個最大和最小值,對于結果影響并不大,可以說是沒啥效果以下是我STC8G的ADC,你參考一下
/*stc8g系列單片機ADC程序*/

#include "Stc8g.h"
#include "Stc8g_Adc.h"
#define         ADC_P10 0x80
#define         ADC_P11 0x81
#define         ADC_P12 0x82
#define         ADC_P13 0x83
#define         ADC_P14 0x84
#define         ADC_P15 0x85
#define         ADC_P16 0x86
#define         ADC_P17 0x87
#define         ADC_P1f 0x8f
#define     ADC_COUNT 128
/*需要在主程序使用以下變量,可以在變量聲明前加上 extern 來聲明,就可以直接調用了*/
//──────────────────────────────────────────────────────────────────────────────────

unsigned char                          ADC_LINE;                //ADC通道記錄
unsigned long int                 ADC_AN7;                //ADC0數據
unsigned long int                 ADC_ANf;                //ADCf數據                  
//──────────────────────────────────────────────────────────────────────────────────
void Stc8g_Adc_int()//stc8gadc初始化
{
        unsigned int i;
        P1M0=0;
        P1M1=0x80;                //p1.7用作ADC端口       
        ADC_CONTR=0x80;//打開adc電源
        ADCCFG=0x2f;        //設定ADC轉換結果保存格式       
        for(i=10000;i>0;i--);            //延時
        ADC_LINE=ADC_P1f;
        ADC_CONTR=ADC_CONTR|0x40;        //啟動ADC
        EADC=1;
}
//──────────────────────────────────────────────────────────────────────────────────
void Adc_Isr() interrupt 5                         //Adc中斷函數
{

static unsigned char                          count7;                        //ADC通道6轉換次數記錄
static unsigned char                          countf;                        //ADC通道f轉換次數記錄,內部參考電壓通道
static unsigned long int                 ADC_DATA7;                //ADC0數據,累加
static unsigned long int                 ADC_DATAf;                //ADCf數據,累加               
ADC_CONTR=ADC_CONTR&0xdf;                  //清除中斷標志位
                //──────────────────────────────────────────────────────────────────────────
                if(ADC_LINE==ADC_P1f)                                                          //檢測觸發ADC中斷的通道
                        {  
                                if(countf>=ADC_COUNT)                                         //檢測ADC轉換次數
                                        {
                                                 ADC_ANf=ADC_DATAf/ADC_COUNT;          //取平均值
                                                 ADC_DATAf=0x00;                                          //清除ADC累加結果
                                                 countf=0x00;                                          //清除ADC轉換次數記錄
                                        }
                                ADC_DATAf+=ADC_RES*256+ADC_RESL;                //ADC結果累加
                                countf++;                          
                                ADC_CONTR=ADC_LINE=ADC_P17;                                //選擇下一個ADC通道
                        }
                //──────────────────────────────────────────────────────────────────────────
                else if(ADC_LINE==ADC_P17)
                        {  
                                if(count7>=ADC_COUNT)
                                        {
                                                 ADC_AN7=ADC_DATA7/ADC_COUNT;
                                                 ADC_DATA7=0x00;
                                                 count7=0x00;
                                        }
                                ADC_DATA7+=ADC_RES*256+ADC_RESL;       
                                count7++;                                                          
                                ADC_CONTR=ADC_LINE=ADC_P1f;
                        }
                //──────────────────────────────────────────────────────────────────────────                  
ADC_CONTR=ADC_CONTR|0x40;                                                                //啟動ADC
}

回復

使用道具 舉報

12#
ID:123289 發表于 2021-11-18 15:02 | 只看該作者
采樣在中斷中進行,計算在主程序是進行。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线视频一区二区 | 欧美精品一区在线 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美国产一区二区 | 日批免费在线观看 | 国产美女一区二区 | 国产精品久久久久久久7电影 | 99久久免费观看 | 操久久 | 日韩不卡一二区 | 三级在线观看 | 亚洲国产黄色av | 成人欧美一区二区三区黑人孕妇 | 国产91久久久久久久免费 | 久久69精品久久久久久久电影好 | 日韩1区| 国内精品视频免费观看 | 国产日韩欧美在线观看 | 久久人体视频 | 欧美亚洲成人网 | 欧美男人天堂 | 欧美影院 | 毛片99 | 欧美精品一区二区三区在线 | 老子午夜影院 | 亚洲高清久久 | 日韩在线播放视频 | 国产99久久久国产精品下药 | 国产精品福利久久久 | 亚洲国产一区视频 | 欧美成人一级视频 | 国产农村妇女精品一二区 | 日本一区二区高清视频 | aaaaa毛片 | 久久精品国产亚洲 | 免费黄色av网站 | www在线视频 | 欧美一级网站 | 久久久www | 久久久一区二区 | 久草资源在线视频 |