LabVIEW FPGA番外篇:實驗66-FPGA數(shù)字去抖濾波器基本原理與編程實現(xiàn)

1、概述
????????本節(jié)實驗給出的FPGA示例VI展示了如何在FPGA中使用LabVIEW編程實現(xiàn)數(shù)字去抖動濾波器。當繼電器或機械開關閉合時或者編碼器受到電磁干擾時,這個FPGA去抖數(shù)字濾波器程序可以非常方便的清除可能包含的額外脈沖(反彈)等機械或者電磁噪聲,消除抖動,提高輸入信號的準確性,便于后續(xù)算法處理。
2、操作理論
????????在工業(yè)或其他電磁噪聲環(huán)境中采集數(shù)字信號時,每當信號改變狀態(tài)時,通常會看到采集的數(shù)字信號出現(xiàn)一些跳變翻轉(zhuǎn)(反彈)。這些反彈顯示為接近數(shù)字信號實際轉(zhuǎn)換的額外脈沖。在處理脈沖計數(shù)的數(shù)字信號(例如正交編碼值)時,最好在處理信號之前避免這些反彈或消除它們。這種類型的過濾或處理通常稱為去抖動,因為它可以消除數(shù)字信號中的反彈。
????????下面的圖1顯示了一個典型的數(shù)字信號,帶有一些反彈和相應的采樣數(shù)據(jù)。Unfiltered Sampled 行顯示的數(shù)據(jù)由數(shù)字輸入通道采集,該通道以定義的采樣時鐘對信號進行采樣。注意:在采樣時鐘的下一個時鐘周期之前,未過濾的采樣數(shù)據(jù)不會看到信號的變化。這意味著根本不會觀察到兩個時鐘周期之間任何非常短的脈沖。在采樣數(shù)據(jù)中可以觀察到在一個時鐘周期內(nèi)發(fā)生的信號中的短反彈。

????????數(shù)字信號去抖動的常用算法是處理原始(未過濾)采樣數(shù)據(jù),并且僅在采樣數(shù)據(jù)在定義的時間段內(nèi)保持不變時才通過狀態(tài)變化。任何比濾波器時間常數(shù)短的脈沖都將被移除并且不會通過。圖2顯示了相同的信號,即使用兩個采樣時鐘周期的時間常數(shù)的原始(未濾波)采樣數(shù)據(jù)和去抖動(濾波)數(shù)據(jù)。為了避免在我們的信號中計算額外的脈沖,在狀態(tài)變化傳遞到輸出之前,通過尋找在至少兩個時鐘周期內(nèi)保持相同狀態(tài)的脈沖來過濾采樣數(shù)據(jù)。使用去抖動過濾器去除未過濾采樣數(shù)據(jù)中存在的額外短脈沖(反彈)。

3、LabVIEW FPGA 實現(xiàn)
????????使用LabVIEW FPGA可以很容易地實現(xiàn)這種去抖動算法。圖3中顯示的算法將新輸入信號與當前輸出信號進行比較,并尋找狀態(tài)變化。一旦輸入信號改變狀態(tài),算法就會開始從0開始遞增計數(shù)器,并且只要輸入與輸出保持不同,就會繼續(xù)計數(shù)。當計數(shù)器超過限制(過濾時間常數(shù)-'Cycles to Filter')時,它會將新的輸入值傳遞給輸出并將計數(shù)器重置為0。如果在計數(shù)器超過時間常數(shù)之前輸入更改回原始狀態(tài),計數(shù)器重置為 0,算法等待輸入信號再次改變狀態(tài)。

????????FPGA去抖動過濾器 VI設置為可重入,以便它可以并行用于多個數(shù)字輸入信號。LabVIEW FPGA程序框圖里面的每個VI副本都會在FPGA上生成一個單獨的算法副本。本節(jié)實驗提供的LabVIEW FPGA項目瀏覽器,如圖4所示,包括FPGA去抖動過濾器子VI和一個展示如何使用此過濾器的范例程序,雙擊打開,對應的程序框圖,如圖5所示。

