按鍵開關(guān)是電子設(shè)備實現(xiàn)人機對話的重要器件之一。由于大部分按鍵是機械觸點,在觸點閉合和斷開時都會產(chǎn)生抖動。為避免抖動引起誤動作造成系統(tǒng)的不穩(wěn)定,就要求消除按鍵的抖動,確保按鍵每按一次只做一次響應(yīng)。隨著可編程邏輯器件的綜合性能的不斷提高,它已經(jīng)象單片機一樣。廣泛應(yīng)用在各種數(shù)字邏輯領(lǐng)域。用可編程邏輯器件直接獲取鍵盤信息也得到廣泛的應(yīng)用。這里提出用VHDL語言編程的有限狀態(tài)機的設(shè)計方法來實現(xiàn)按鍵的消抖,經(jīng)仿真分析和下載實現(xiàn),這種方法設(shè)計的消抖電路能夠很好地實現(xiàn)電路功能,進行快速按鍵時都能保證每按一次做一次的響應(yīng),且性能穩(wěn)定。
1 按鍵抖動產(chǎn)生原因分析
絕大多數(shù)按鍵都是機械式開關(guān)結(jié)構(gòu),由于機械式開關(guān)的核心部件為彈性金屬簧片,因而在開關(guān)切換的瞬間會在接觸點出現(xiàn)來回彈跳的現(xiàn)象。雖然只是進行了一次按鍵,結(jié)果在按鍵信號穩(wěn)定的前后出現(xiàn)了多個脈沖,如圖1所示。如果將這樣的信號直接送給微處理器掃描采集的話,將可能把按鍵穩(wěn)定前后出現(xiàn)的脈沖信號當(dāng)作按鍵信號,這就出現(xiàn)人為的一次按鍵但微處理器以為多次按鍵現(xiàn)象。為了確保按鍵識別的準(zhǔn)確性,在按鍵信號抖動的情況下不能進入狀態(tài)輸入,為此就必須對按鍵進行消抖處理,消除抖動時不穩(wěn)定、隨機的電壓信號。機械式按鍵的抖動次數(shù)、抖動時間、抖動波形都是隨機的。不同類型的按鍵其最長抖動時間也有差別,抖動時間的長短和按鍵的機械特性有關(guān),一般為5~10 ms,但是,有些按鍵的抖動時間可達到20 ms,甚至更長。所以,在具體設(shè)計中要具體分析,根據(jù)實際情況來調(diào)整設(shè)計。
2 按鍵消抖電路的設(shè)計
按鍵消抖一般采用硬件和軟件消抖兩種方法。硬件消抖是利用電路濾波的原理實現(xiàn),軟件消抖是通過按鍵延時來實現(xiàn)。在微機系統(tǒng)中一般都采用軟件延時的消抖方法。在用可編程邏輯器件FPGA/CPLD設(shè)計數(shù)字系統(tǒng)中,也可以用VHDL語言設(shè)計相應(yīng)的時序和邏輯電路,對按鍵信號進行處理,同樣可以達到消抖目的。本文利用Altera公司的可編程邏輯器件CPLD和QuartusⅡ,設(shè)計性能可靠的按鍵消抖電路。
2.1 按鍵消抖電路設(shè)計原理
按鍵消抖的關(guān)鍵是提取穩(wěn)定的低電平(或高電平)狀態(tài),濾除按鍵穩(wěn)定前后的抖動脈沖。在用基于VHDL語言的時序邏輯電路設(shè)計按鍵消抖電路時,可以用一個時鐘脈沖信號對按鍵狀態(tài)進行取樣,當(dāng)?shù)谝淮尾蓸拥降碗娖綍r,啟動延時電路,延時結(jié)束后,再對按鍵信號進行連續(xù)三次取樣,如果三次取樣都為低電平,則可以認為按鍵已經(jīng)處在穩(wěn)定狀態(tài),這時輸出一個低電平的按鍵確認信號,如果連續(xù)三次的取樣中,至少有一次是高電平,則認為按鍵仍處在抖動狀態(tài),此時不進行按鍵確認,按鍵輸出信號為高電平。
2.2 按鍵消抖電路設(shè)計
該控制電路采用VHDL語言的有限狀態(tài)機的設(shè)計方法來描述和實現(xiàn),其狀態(tài)轉(zhuǎn)換圖如圖2所示。
電路的復(fù)位信號Reset有效時,電路進入復(fù)位狀態(tài)S0,在S0狀態(tài)下時鐘信號CLK以一定的頻率采樣按鍵輸入信號Key_in,如果采樣到Key_in=‘1’則停留在S0狀態(tài),并繼續(xù)采樣按鍵輸入信號的狀態(tài),一旦采樣到輸入信號是低電平,即Key_in=‘0’,則轉(zhuǎn)入S1延時狀態(tài),進行消抖延時,當(dāng)延時結(jié)束時Delay_end=‘1’,則轉(zhuǎn)入在S2狀態(tài),在此狀態(tài)下時鐘信號CLK以一定頻率采樣按鍵輸入Key_in的狀態(tài),如果采樣到Key_in為高電平即Key_in=‘1’則轉(zhuǎn)回狀態(tài)S0,表示按鍵仍處在抖動狀態(tài),如果采樣到Key_in=‘O’,則轉(zhuǎn)入狀態(tài)S3;狀態(tài)S3,S4的轉(zhuǎn)換過程和條件跟S2相同,在S4狀態(tài)下,如果Key_in=‘0’則轉(zhuǎn)入S5狀態(tài),當(dāng)?shù)竭_狀態(tài)S5時.表示經(jīng)過S2,S3,S4三個連續(xù)狀態(tài)檢測按鍵輸入Key_in的狀態(tài)都為‘0’,則認為按鍵處在穩(wěn)定狀態(tài),并在S5輸出按鍵確認信號Key_confirm=‘1’。同時在狀態(tài)S5下時鐘信號CLK檢測按鍵輸入狀態(tài),當(dāng)檢測到按鍵輸入Key_in=‘0’,表示按鍵仍未釋放,則停留在S5繼續(xù)檢測按鍵輸入信號狀態(tài),如果檢測到Key_in=‘1’,表示按鍵已經(jīng)釋放,則轉(zhuǎn)回狀態(tài)S0,等待下一次按鍵操作。
3 按鍵消抖電路的仿真分析
消抖電路的仿真圖如圖3所示。當(dāng)復(fù)位信號Reset=‘0’時,狀態(tài)機Key處在S0狀態(tài),同時以CLK的時鐘頻率采樣按鍵輸入信號Din的狀態(tài),當(dāng)CLK第一次采樣到Din為低電平時,此時可能發(fā)生了按鍵操作,隨即狀態(tài)機Key進入S1消抖延時狀態(tài),當(dāng)延時結(jié)束時delay_end=‘1’(延時結(jié)束信號),跟接著狀態(tài)機KEY的S2,S3,S4連續(xù)三個狀態(tài)對按鍵輸入信號Din進行采樣,當(dāng)三個狀態(tài)下采樣到Din信號都是低電平,則轉(zhuǎn)入S5狀態(tài),并產(chǎn)生按鍵確認信號Key_confirm=‘1’,同時在S5狀態(tài)下等待按鍵釋放,在此狀態(tài)下當(dāng)CLK時鐘信號檢測到Din為高電平時轉(zhuǎn)回狀態(tài)S0。因按鍵釋放瞬間也會發(fā)生抖動,所以由波形圖可以看出,當(dāng)按鍵釋放瞬間由狀態(tài)S5轉(zhuǎn)回狀態(tài)S0,在S0狀態(tài)下,因按鍵抖動CLK時鐘又檢測到Din為低電平,隨即轉(zhuǎn)入S1進行消抖延時,經(jīng)過S1的消抖延時后,按鍵已經(jīng)穩(wěn)定,Din為穩(wěn)定的高電平,所以在狀態(tài)S2檢測到Din為高電平,則轉(zhuǎn)入S0狀態(tài),到此時完成一次按鍵的操作,等待下一次按鍵操作,如果沒有按鍵操作,即按鍵沒按下,則一直保持在狀態(tài)S0。
4 結(jié) 語
采用有限狀態(tài)機方法設(shè)計按鍵消抖電路,再根據(jù)按鍵的特性設(shè)定合適的延時時間(一般10 ms)后,通過仿真分析及實驗驗證,能夠起到很好的消抖效果,而且性能穩(wěn)定,能確保每一次按鍵操作,產(chǎn)生一次按鍵確認,可廣泛應(yīng)用于可編程邏輯器件的鍵盤掃描設(shè)計中。
參考文獻:
[1].CPLDdatasheethttp://www.dzsc.com/datasheet/CPLD_1136600.html.
來源:miaomi0次