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