▼關(guān)注公眾號: 工程師看海▼
本文來自看海的四代目徒弟:XJIE
https://blog.csdn.net/NANY_ying?type=blog
https://github.com/xiaojie25
大家好,這個文檔,是為了幫助大家快速入門數(shù)字濾波器在單片機上的實現(xiàn)。當然,大家在閱讀完之后可能還會有一些疑問,大家可以自行去查閱資料。
上節(jié)課我們在STM32F103C8T6上實現(xiàn)了頻率計的功能,我們在上次的基礎(chǔ)上進行下一步的操作。
首先,關(guān)于數(shù)字濾波器分為FIR和IIR兩種(如果不明白,需要去查閱資料),在這里我們關(guān)心我們怎么得到我們想要濾波器的參數(shù)。
我們打開matlab。
在命令行窗口中輸入filterDesigner。
我現(xiàn)在想設(shè)計一個IIR的低通濾波器,他的截止頻率是10Hz,巴特沃斯型,這里的采樣頻率需要根據(jù)我們之前上課的時候設(shè)計的ADC的采樣頻率一致(250Hz)
這個濾波器設(shè)計器有很多的功能,這個留給大家探索。
依次點擊目標->生成c頭文件
直接點擊生成,(記住自己保存在哪里了),然后我們找到我們保存STM32CubeMX生成的.ioc文件,接下來把剛剛生成的文件保存在如圖所示的文件中。
我們用記事本打開fdacoefs.h文件,他會告訴我們還需要添加一個.h文件
我們找到這個文件,也復(fù)制到這個文件夾下。
到這里基本的參數(shù)有關(guān)的生成以及,文件的移動已經(jīng)完成了。接下來我們開始代碼的操作。
(本文來自看海的四代目徒弟:XJIE
https://blog.csdn.net/NANY_ying?type=blog
https://github.com/xiaojie25)
在main.c中包含剛剛我們添加的這兩個文件。然后編譯這個工程。
右鍵這個fdacoefs.h文件。打開它
我們把里面的4個數(shù)組都剪切到mian.c中。
我們先定義兩個結(jié)構(gòu)體,用來記錄我們的濾波器的參數(shù)。
其中,Biquad是各個節(jié)(這個數(shù)字濾波器的知識)中的參數(shù),IIRFilter是整個濾波器的結(jié)構(gòu)體,然后我們在代碼合適的地方寫下這兩個函數(shù)。
IIRFilter_Init是對濾波器的初始化,就是把我們剛剛生成的參數(shù)填入我們定義的濾波器,
IIRFilter_Process是有數(shù)據(jù)來的時候,對數(shù)據(jù)進行濾波。
先定義一個iir濾波器并對其進行初始化。
我們把ADC采集到的電壓通過濾波器濾波,我們來看看效果吧!
我左邊給的是5Hz的信號,右邊給的是15Hz的信號,都是100mVpp,由于低通濾波的截至頻率是10Hz,因此5Hz的信號通過了濾波器,而15Hz的信號被濾波器衰減。
By the way,整個代碼對初學者來說可能不是這么好理解,這是對你們的一個挑戰(zhàn)也是機遇
本文來自看海的四代目徒弟:XJIE
https://blog.csdn.net/NANY_ying?type=blog
https://github.com/xiaojie25
更多Multisim與運算放大器的學習內(nèi)容!
盡在《運放秘籍》
【淘寶】https://e.tb.cn/h.hchV7elOIgvyGd8?tk=QEVgVt9nBw6 CZ321 「運放秘籍第一部_運算放大器Multisim仿真課程_工程師看海運放教程」
點擊鏈接直接打開 或者 淘寶搜索直接打開
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.