STM32F407之數字濾波

2021-06-21 01:45:12 字數 3174 閱讀 8479

為了對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 plain

copy

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

軟體平台: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 ()  

;  }  

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

函式名:timer6_init  

引數:無  

返回值:無  

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

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

更新中斷啟動adc檢測  

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

void timer6_init(void)  

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

函式名:generate_sinsignal_with_noise  

引數:無  

返回值:無  

功能:用dac1產生一路疊加了雜訊的訊號  

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

void generate_sinsignal_with_noise(void)  

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

函式名:adc3_in11_config  

引數:無  

返回值:無  

功能:用adc通道11測量上面產生的訊號  

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

void adc3_in11_config(void)  

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

函式名:dac_channel2_config  

引數:無  

返回值:無  

功能:用dac2把濾波後的結果輸出  

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

void dac_channel2_config(void)  

void tim6_dac_irqhandler(void)  

if(tim6->sr)  

}  void adc_irqhandler(void)  

}輸出的訊號:

用ad測量後不經過濾波直接輸出:

經過濾波的輸出:

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

STM32F407之了解程式設計環境

前文再續,書接上一回,前面我們建立了乙個資料夾,用來存放我們的工程,有建了三個資料夾,現在,分別解析一下這三個資料夾裡放的是什麼東西。inc資料夾裡放的是標頭檔案,一共六個,以後我們自己的標頭檔案也可以放到這裡來。stm32f4xx.h 包含了stm32f4的暫存器結構體的定義 類似於c51的reg...

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...

STM32F407上除錯freeRTOS問題

是在正點原子的阿波羅stm32f429開發板上的例子改來的,他們的編譯沒有問題,我編譯時出現如下問題 定位到出錯的地方,是 再追 configmax syscall interrupt priority 的定義是 define configmax syscall interrupt priority...