娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年09月20日(星期五)

正在發生

2018年09月20日 | stm32f407之數字濾波(操作寄存器)

發布者:神光騎士 來源: eefocus關鍵字:stm32f407  數字濾波  操作寄存器 手機看文章 掃描二維碼
隨時隨地手機看文章

數字濾波


為了對stm32f4的ADC和DAC有更多的了解,我決定做一個實用性比較強的實驗。就是數字濾波實驗,利用stm32f4的DAC可以產生噪聲的特點,利用它的一路DAC產生疊加噪聲的信號作為原始信號。然后用ADC測量,把結果經過濾波處理后用DAC的另一通道把結果輸出,用雙蹤示波器觀察。



一階慣性濾波器及其數字化


一階慣性濾波器的傳遞函數為:



利用一階差分法離散化,可以得到一階慣性數字濾波算法:


其中T為采樣周期,為濾波時間常數。T和必須根據信號頻譜來選擇。



編程實現:


a.     設定一個1024點正弦波表,用DAC1疊加噪聲輸出


b.     配置定時器6更新頻率為1M


c.     DAC的時鐘為TIM6更新事件,1024點,頻率大概為0.5M


d.     在TIM6的更新中斷中啟動一次AD轉換


e.     AD轉換中斷中做濾波處理,然后把數值送DAC2,啟動一次DAC2




程序:



[plain] view plaincopy

/************************************  

    標題:數字濾波實驗  

    軟件平臺:IAR for ARM6.21  

    硬件平臺:stm32f4-discovery  

    主頻:168M  

  

    描述:用DAC1產生一路疊加了噪聲的信號  

          用ADC通道11測量上面產生的信號  

          對ADC的測量結果進行濾波處理  

          用DAC2把濾波后的結果輸出  

      

    author:小船  

    data:2012-02-17  

*************************************/  

  

#include   

#include "MyDebugger.h"  

#include "sintable.h"   

  

/*********變量聲明********/  

uint16_t Y0, Y1;//濾波器輸出值  

float T = 0.000001;//采樣周期  

float C = 0.00003; //濾波常數  

  

/*********函數聲明********/  

void timer6_Init(void);  

void ADC3_IN11_Config(void);  

void DAC_channel2_Config(void);  

void Generate_SinSignal_with_Noise(void);  

  

void main ()  

{     

  

  SCB->AIRCR = 0x05FA0000 | 0x400;  //中斷優先級分組 搶占:響應=3:1  

   

  MyDebugger_Init();  

   

  ADC3_IN11_Config();  

  Generate_SinSignal_with_Noise();  

  DAC_channel2_Config();    

  timer6_Init();   

  

  while(1)  

  {  

  };  

}  

  

/**************************************  

  函數名:timer6_Init  

  參數:無  

  返回值:無  

  功能:設置定時器6更新頻率為1M  

        定時器6更新事件為DAC1、2時鐘  

        更新中斷啟動ADC檢測  

**************************************/  

void timer6_Init(void)  

{  

  /***定時器設置***/  

  RCC->APB1ENR |= (1<<4);//打開TIM6時鐘  

  TIM6->PSC = 0;   

  TIM6->ARR = 83;  //使得更新事件頻率為1m  

  TIM6->CR2 |=  0x00000020;//更新事件輸出  

  TIM6->DIER |= 1; //使能中斷  

  TIM6->CR1 |= 1; //開始計時  

}  

  

/**************************************  

  函數名:Generate_SinSignal_with_Noise  

  參數:無  

  返回值:無  

  功能:用DAC1產生一路疊加了噪聲的信號  

***************************************/  

void Generate_SinSignal_with_Noise(void)  

{  

  /***GPIO設置***/  

  RCC->AHB1ENR |= (1<<0); //打開GPIOA時鐘  

  GPIOA->MODER |= 0x00000F00;//PA4、5模擬模式  

  GPIOA->PUPDR &= 0xfffff0ff;//無上拉無下拉     

    

  /***DAC設置***/  

  RCC->APB1ENR |= (1<<29); //使能DAC時鐘  

  DAC->CR &= 0xffff0000;  

  /*  

  使能DMA堵塞中斷  

  使能通道1觸發  

  疊加噪聲  

  */  

  DAC->CR |= ( (1<<13) | (1<<2) | 0x00000040 | 0x00000800);    

  NVIC->IP[54] = 0xA0;  

  NVIC->ISER[1] |= (1<<(54-32));  

   

  /***DMA設置***/  

  RCC->AHB1ENR |= (1<<21); //使能DMA1時鐘  

  DAC->CR &= ~(1<<12);//DAC dma發送模式除能  

  DMA1_Stream5->CR &= 0xFFFFFFFE; //除能DMA1_Stream5  

  while(DMA1_Stream5->CR & 0x00000001);//確保DMA可以被設置   

  DMA1->HIFCR |= 0x000004f0;//傳送前清空DMA1_Stream5所有中斷標志   

  DMA1_Stream5->PAR = (uint32_t)&DAC->DHR12R1;//設置外設地址  

  DMA1_Stream5->M0AR = (uint32_t)SinTable; //設置內存地址  

  DMA1_Stream5->CR |= 0x0002800;//16位數據  

  DMA1_Stream5->NDTR = 1024; //設置dma傳輸數據的數量  

  /*  

    設置dma通道7,即DAC1  

    優先級Medium  

    傳輸方向內存到外設  

    內存遞增模式  

    循環模式  

  */  

  DMA1_Stream5->CR |= ( 0x0e000000 | 0x00010000 | (1<<6)  

                        | (1<<10) | (1<<8) );   

    

  DMA1_Stream5->CR |= 1; //DMA數據流5使能  

    

  DAC->CR |= (1<<0);   //DAC通道1使能  

  

  DAC->CR |= (1<<12);//DAC dma發送模式使能  

}  

  

/**************************************  

  函數名:ADC3_IN11_Config  

  參數:無  

  返回值:無  

  功能:用ADC通道11測量上面產生的信號  

***************************************/  

void ADC3_IN11_Config(void)  

{  

    /***GPIO設置***/  

  RCC->AHB1ENR |= (1<<2); //打開GPIOC時鐘  

  GPIOC->MODER &= 0xfffffff3;//PC1模擬模式  

  GPIOC->MODER |= 0x0000000C;  

  GPIOC->PUPDR &= 0xfffffff3;//無上拉無下拉     

    

  /***ADC3設置***/  

  RCC->APB2ENR |= (1<<10); //使能ADC3時鐘  

  ADC3->SQR1 = 0x00000000;//轉換一個通道  

  ADC3->SQR3 = 0x0000000B;//第一個通道為ADC3_in11  

  ADC3->CR1 &= 0x00000000;   

  ADC3->CR2 &= 0x00000000;    

 //單次轉換  

  ADC3->CR1 |= (1<<5);//使能轉換完成中斷  

  NVIC->IP[18] = 0xc0;  

  NVIC->ISER[0] |= (1<<18);   

}  

  

/**************************************  

  函數名:DAC_channel2_Config  

  參數:無  

  返回值:無  

  功能:用DAC2把濾波后的結果輸出  

***************************************/  

void DAC_channel2_Config(void)  

{  

  /***DAC設置***/  

  RCC->APB1ENR |= (1<<29); //使能DAC時鐘  

  DAC->CR &= 0x0000ffff;  

  /*  

  使能通道2觸發   

  配置為軟件觸發  

  */  

  DAC->CR |= ( (1<<18) | (0x00380000) );   

    

  DAC->CR |= (1<<16);   //DAC通道2使能  

}  

  

void TIM6_DAC_IRQHandler(void)  

{  

  if( DAC->SR & (1<<13) )  

  {  

    MyDebugger_LEDs(red, on);//亮紅燈指示DAC1的DMA傳輸數據錯誤  

    DAC->SR &= ~(1<<13);   

  }  

    

  if(TIM6->SR)  

  {      

    ADC3->CR2 |= (1<<0);   //開啟AD轉換    

    ADC3->CR2 |= (1<<30); //規則通道轉換開始  

      

    TIM6->SR &= ~(0x0001);   

  }  

}  

   

void ADC_IRQHandler(void)  

{  

  if( ADC3->SR & (1<<1))  

  {  

    Y0 = (uint16_t)( (float)(( T / C ) * ADC3->DR) //濾波公式  

                      + (float)(( 1 - T / C ) * Y1) );  

    Y1 = Y0;  

    DAC->DHR12R2 = Y0;  //DAC2輸出濾波后的結果  

    DAC->SWTRIGR |= (1<<1);  

      

    ADC3->SR &= ~(1<<1);  

  }  

}  

輸出的信號:




用AD測量后不經過濾波直接輸出:




經過濾波的輸出:


結論:經過濾波后,很好地把噪聲濾除了,但相位有一定的滯后,幅值會變小。


關鍵字:stm32f407  數字濾波  操作寄存器 引用地址:stm32f407之數字濾波(操作寄存器)

上一篇:stm32f407之CAN控制器(操作寄存器)
下一篇:STM32一個Timer輸出4路不同頻率、可調占空比的PWM

推薦閱讀

通常AVR芯片包括flash,eeprom,fuse,lockbits,user signature等幾個非易失的內容需要在編程時燒錄到芯片中,其中fuse部分是只有外部的編程器可以進改寫,應用程序本身是無法更改的。在進行ISP燒錄過程中,用戶希望使用點一個按鈕這樣單一的動作來完成燒錄,這就要求能把幾個不同部分的擦出、燒寫、比較的動作合成在一起來完成。可以使用ELF格式來完成...
此前大眾發布了一款純電動車ID.3,但是這款車型只在歐洲銷售,面對全球市場,大眾即將推出的是一款 SUV 車型——大眾 ID.4。日前,外媒在奧地利阿爾卑斯山拍攝到一組大眾 ID.4 的諜照。 和 ID.3 一樣,ID.4 也同樣來自于 MEB 平臺。大眾汽車集團及其眾多子公司未來推出的各種基礎的電動車都將基于 MEB 平臺打造。而像保時捷Taycan 和其他高端...
9月19日,由中國電子視像行業協會主辦,中國電子視像行業協會激光電視產業分會承辦的第二屆全球激光顯示技術與產業發展論壇在北京舉行。在論壇上,中國工程院院士許祖彥通過音頻方式發表致辭,許祖彥指出,激光顯示是唯一全面滿足超高清顯示國際標準BT.2020的顯示技術,下一代顯示產業的主流就是激光顯示。許祖彥認為,激光顯示具有亮度高、方向性好、單色...
據深圳特區報報道,昨日下午,福田區人民政府與華為技術有限公司簽署戰略合作框架協議。此舉也標志著雙方將在新型智慧城區、數字民生、數字經濟等領域開啟合作新篇章。根據框架協議,福田區與華為技術有限公司將建立“全領域、全過程、全鏈條、全周期、全天候”戰略合作伙伴關系,充分發揮華為在品牌、技術以及服務等優勢,結合福田區在應用場景、政策資金...

史海拾趣

問答坊 | AI 解惑

電子工程師必備基礎知識手冊---共10篇

首先要說明的是,這是轉載的文章,放在這里是想跟大家一起學習一下。         我在咱們論壇搜了一下文章名字,論壇好像還沒有這篇文章,但也有可能我搜索的不夠細致。如果論壇已有這個文章,請管理員刪除此貼。 &n ...…

查看全部問答∨

PWM

大家隨便看看 高手過路 小弟菜鳥一個…

查看全部問答∨

Motorola公司110W開關電源設計詳細實例

從需求到實現,結合實際工程需求,很難的詳細設計實例…

查看全部問答∨

無線模塊ACI6210

誰做過無線模塊ACI6210,能不能給個使用說明書,最好給個例子。本人十分感謝, …

查看全部問答∨

AT89C2051串口通訊,設備的協議上寫的停止位是1/2,我應該怎樣設置?

/* 晶振11059200,波特率9600,誤差最精確 */ void initUart(void) {     TMOD |= 0x20;     SCON  = 0x50;     TH1   = 0xfd;     TL1   = 0xfd;     TR ...…

查看全部問答∨

誰知道STM32控制電機的參考方案什么時候出來?

                                 我很關心這個,望幫忙看看,廣告上說4季度的,…

查看全部問答∨

關于編程

板主! 在中斷服務程序中,是不是判斷語句有一定的限制!為什么我的程序總是不執行有標記的那條判斷語句? #pragma vector = TIMERA0_VECTOR // Timer A0 interrupt service routine __interrupt void Timer_A (void) { //P1OUT ^= 0x01; ...…

查看全部問答∨

【問TI】 請問如何在C6000上面實現加密

請問如何在C6000上面實現加密.以前對AVR芯片進行過加密,對于6000系列的芯片,求教了…

查看全部問答∨

疑問,芯片型號后面的IQC,EQC……

買芯片時,發現同一個型號,比如說LM3S1150的,還有好多種,什么LM3S1150-IQC50-A2 ,LM3S1150-IBZ50-A2 ,LM3S1150-IBZ50-A2T ,LM3S1150-EQC50-A2 ……之間有什么區別嗎?希望高手解釋下哈!謝謝了!…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 旬邑县| 新野县| 新巴尔虎右旗| 苍南县| 聂拉木县| 贵定县| 黔东| 丽江市| 台山市| 顺平县| 利川市| 宝鸡市| 阜宁县| 若尔盖县| 霞浦县| 华亭县| 绥中县| 东源县| 卓尼县| 黄冈市| 长武县| 家居| 长宁区| 新化县| 广南县| 酒泉市| 姚安县| 磴口县| 乾安县| 莲花县| 牟定县| 邯郸县| 义乌市| 于都县| 南平市| 邹平县| 湘潭县| 韶山市| 石台县| 农安县| 宁武县|