題 引
GD32H7系列作為國內首家M7內核MCU一經問世,迅速在國內市場得到了廣泛應用,其強大的功能滿足了客戶的多重需求。H7新增的IO口硬件濾波功能,曾在客戶干擾測試中發揮了重要作用,提高了客戶系統程序的魯棒性,讓客戶產品更具競爭能力。
“硬件濾波這么好用的功能,是不是引腳上來了什么妖魔鬼怪的干擾都能濾除呢?”帶著這個問題,我們來一看究竟。
H7簡介
2023年5月11日業界領先的半導體器件供應商兆易創新GigaDevice (股票代碼 603986) 正式推出中國首款基于Arm? Cortex?-M7內核的GD32H737/757/759系列超高性能微控制器。
GD32H7系列MCU采用基于Armv7E-M架構的600MHz Arm? Cortex?-M7高性能內核,憑借支持分支預測的6級超標量流水線架構,以及支持高帶寬的AXI和AHB總線接口,可實現更高的處理性能。內置了高級DSP硬件加速器和雙精度浮點單元(FPU),以及硬件三角函數加速器(TMU)和濾波算法加速器(FAC),大幅減輕了內核的負擔并有助于提升處理效率。
GD32H7可廣泛用于數字信號處理、電機變頻、電源、儲能系統、無人機、音頻視頻、圖形圖像等各類應用。得益于超高主頻以及大存儲容量,該系列MCU也適用于機器學習和人工智能等諸多高端創新場景。
IO口濾波功能介紹
GD32H7通過配置GPIOx_IFTP寄存器,可以為每個GPIO引腳選擇輸入濾波的類型。對于配置為通用數字輸入引腳(GPIO)的情況下,濾波的方式可以是僅同步到CK_AHB或通過采樣窗口兩種方式來進行,本文介紹采樣窗口濾波方式。
濾波原理:對信號的采樣獲得3個樣本或6個樣本,在輸入濾波類型寄存器中(GPIOx_IFTP)有詳細的描述。每次采樣周期由GPIOx_IFL寄存器中的過濾采樣頻率(FLPRDx)位指定。三個或六個連續采樣周期組成一個采樣窗口,當采樣窗口采樣的數據保持相同時,輸入的變化將傳遞給MCU。
官方案例分析
GD官方用戶手冊中給了一個案例,圖中Tsp表示一個采樣點周期,Tsw表示6個采樣點組成的一個采樣窗口周期。圖中上方是輸入的GPIO信號,下方是濾波后的GPIO輸入信號。可以看到,濾波后的信號和濾波前的信號有延遲,時長約為1個Tsw。A部分是干擾信號,由于A部分高電平的持續時間小于Tsw,所以濾波后的信號可以看到A部分的干擾會被濾除掉。
結合上方講的原理,H7 IO口濾波又是怎么具體工作的呢?實際上,濾波過程就是一個滑動濾波的過程,濾波的算法不是求樣本均值,而是采樣點全為一(零)則輸出為一(零),如果不為全相同,則參考采樣窗口第一個采樣的點值作為輸出。
我們看圖中左側第一個紅框,假如濾波從此刻開始(下方紅色箭頭表示隨時間向右滑動,CK_AHB上升沿采樣),采樣的數據為1 1 0 0 0 0,不全相同,則參考第一個采樣點過濾器輸出為1。采樣窗口向右滑動一個采樣周期,采樣的數據為1 0 0 0 0 0,參考第一個采樣點過濾器輸出為1。再滑動一個采樣周期,采樣的數據為0 0 0 0 0 0,輸出為0。當滑動到綠框位置時,采樣的數據為0 0 0 0 0 1,1為干擾,過濾器輸出為0,成功過濾掉A部分干擾,濾波再往右移動一個采樣周期,0 0 0 0 1 0,過濾器輸出為0,再次過濾掉A部分干擾。以此類推,讀者可以計算出結果,從而可以看到A高電平干擾最后都被濾除掉了。
實際操作
已知某外部中斷引腳上會出現高電平噪聲致使程序非必要地跳轉到中斷服務子程序中,經示波器觀察噪聲高電平持續時間不大于1us,AHB總線頻率fCK_AHB=300MHz。如何濾除掉這些噪聲呢?通過上述的學習,將GPIO口“濾波時間”設置為1us左右就可以將相應的噪聲濾除了。那么可以做如下配置和程序設計:
(1)寄存器操作
GPIOx_IFTP寄存器的IFTP0[1:0]=10,表示有6個采樣點;
GPIOx_IFL寄存器的FLPRD0=30,
采樣周期Tsp=2×FLPRD0×TCK_AHB=60×TCK_AHB。
(2)采樣周期計算
采樣寬度為:
Tsw=6×Tsp=6×2×FLPRD0×TCK_AHB=6×2×TCK_AHB;
根據fCK_AHB=300MHz,采樣周期為:
Tsp=60×TCK_AHB=0.2us
采樣窗口的持續時間為:Tsw=6×Tsp=1.2us
(3)程序設計
程序假定使用PA0引腳做中斷,在PA0引腳外部中斷GPIO基礎配置之上添加IO口濾波配置程序即可:
gpio_input_filter_set(GPIOA,GPIO_ISPERIOD(30),GPIO_IFTYPE_6_SAMPLE,GPIO_PIN_0)。
(4)濾波結果
這樣設置6個采樣點,采樣周期為0.2us。采樣窗口Tsw為1.2us,GPIO引腳上持續時間小于1us的噪聲就可以被濾掉了。實際上,也可以設置采樣窗口Tsw為1us,具體設置讀者可以參考上述步驟設置寄存器進行配置。同時也注意,濾波有延遲,MCU會延時1.2us左右之后再響應中斷,注重實時性的研發方案要注意這種情況。
本文小結
本質上講實際上只要干擾的電平(也可以說是突然變化的電平)持續時間小于采樣窗口,才會被過濾掉。那么問題來了,如果信號電平突然發生變化(1變0或0變1),變化后的電平持續時間大于采樣窗口會被濾除掉嗎?答案是不會,也就是說IO口是個硬件,沒有思考能力,如果變化的電平持續時間大于采樣窗口,它不會認為是干擾。所以實際項目中一定要根據要根據要濾除的波形設定好采樣窗口大小,否則濾波會失敗。
還記得文章開始提出的問題嗎?
H7 GPIO濾波的使用有一定特點:
(1)待濾除噪聲的持續時間必須小于有效信號的持續時間;也就是輸入信號必須是窄脈沖(相對采樣窗口而言),才能獲得較為穩定的濾波效果。
(2)實時性方面,濾波會帶來一定的延時(因為只有滿足“采樣窗口”全1 or 0樣本條件,才會輸出實際變化信號)。