基于VHDL語言的按鍵消抖電路設(shè)計(jì)及仿真
按鍵開關(guān)是電子設(shè)備實(shí)現(xiàn)人機(jī)對(duì)話的重要器件之一。由于大部分按鍵是機(jī)械觸點(diǎn),在觸點(diǎn)閉合和斷開時(shí)都會(huì)產(chǎn)生抖動(dòng)。為避免抖動(dòng)引起誤動(dòng)作造成系統(tǒng)的不穩(wěn)定,就要求消除按鍵的抖動(dòng),確保按鍵每按一次只做一次響應(yīng)。隨著可編程邏輯器件的綜合性能的不斷提高,它已經(jīng)象單片機(jī)一樣。廣泛應(yīng)用在各種數(shù)字邏輯領(lǐng)域。用可編程邏輯器件直接獲取鍵盤信息也得到廣泛的應(yīng)用。這里提出用VHDL語言編程的有限狀態(tài)機(jī)的設(shè)計(jì)方法來實(shí)現(xiàn)按鍵的消抖,經(jīng)仿真分析和下載實(shí)現(xiàn),這種方法設(shè)計(jì)的消抖電路能夠很好地實(shí)現(xiàn)電路功能,進(jìn)行快速按鍵時(shí)都能保證每按一次做一次的響應(yīng),且性能穩(wěn)定。
1 按鍵抖動(dòng)產(chǎn)生原因分析
絕大多數(shù)按鍵都是機(jī)械式開關(guān)結(jié)構(gòu),由于機(jī)械式開關(guān)的核心部件為彈性金屬簧片,因而在開關(guān)切換的瞬間會(huì)在接觸點(diǎn)出現(xiàn)來回彈跳的現(xiàn)象。雖然只是進(jìn)行了一次按鍵,結(jié)果在按鍵信號(hào)穩(wěn)定的前后出現(xiàn)了多個(gè)脈沖,如圖1所示。如果將這樣的信號(hào)直接送給微處理器掃描采集的話,將可能把按鍵穩(wěn)定前后出現(xiàn)的脈沖信號(hào)當(dāng)作按鍵信號(hào),這就出現(xiàn)人為的一次按鍵但微處理器以為多次按鍵現(xiàn)象。為了確保按鍵識(shí)別的準(zhǔn)確性,在按鍵信號(hào)抖動(dòng)的情況下不能進(jìn)入狀態(tài)輸入,為此就必須對(duì)按鍵進(jìn)行消抖處理,消除抖動(dòng)時(shí)不穩(wěn)定、隨機(jī)的電壓信號(hào)。機(jī)械式按鍵的抖動(dòng)次數(shù)、抖動(dòng)時(shí)間、抖動(dòng)波形都是隨機(jī)的。不同類型的按鍵其最長抖動(dòng)時(shí)間也有差別,抖動(dòng)時(shí)間的長短和按鍵的機(jī)械特性有關(guān),一般為5~10 ms,但是,有些按鍵的抖動(dòng)時(shí)間可達(dá)到20 ms,甚至更長。所以,在具體設(shè)計(jì)中要具體分析,根據(jù)實(shí)際情況來調(diào)整設(shè)計(jì)。
2 按鍵消抖電路的設(shè)計(jì)
按鍵消抖一般采用硬件和軟件消抖兩種方法。硬件消抖是利用電路濾波的原理實(shí)現(xiàn),軟件消抖是通過按鍵延時(shí)來實(shí)現(xiàn)。在微機(jī)系統(tǒng)中一般都采用軟件延時(shí)的消抖方法。在用可編程邏輯器件FPGA/CPLD設(shè)計(jì)數(shù)字系統(tǒng)中,也可以用VHDL語言設(shè)計(jì)相應(yīng)的時(shí)序和邏輯電路,對(duì)按鍵信號(hào)進(jìn)行處理,同樣可以達(dá)到消抖目的。本文利用Altera公司的可編程邏輯器件CPLD和QuartusⅡ,設(shè)計(jì)性能可靠的按鍵消抖電路。
2.1 按鍵消抖電路設(shè)計(jì)原理
按鍵消抖的關(guān)鍵是提取穩(wěn)定的低電平(或高電平)狀態(tài),濾除按鍵穩(wěn)定前后的抖動(dòng)脈沖。在用基于VHDL語言的時(shí)序邏輯電路設(shè)計(jì)按鍵消抖電路時(shí),可以用一個(gè)時(shí)鐘脈沖信號(hào)對(duì)按鍵狀態(tài)進(jìn)行取樣,當(dāng)?shù)谝淮尾蓸拥降碗娖綍r(shí),啟動(dòng)延時(shí)電路,延時(shí)結(jié)束后,再對(duì)按鍵信號(hào)進(jìn)行連續(xù)三次取樣,如果三次取樣都為低電平,則可以認(rèn)為按鍵已經(jīng)處在穩(wěn)定狀態(tài),這時(shí)輸出一個(gè)低電平的按鍵確認(rèn)信號(hào),如果連續(xù)三次的取樣中,至少有一次是高電平,則認(rèn)為按鍵仍處在抖動(dòng)狀態(tài),此時(shí)不進(jìn)行按鍵確認(rèn),按鍵輸出信號(hào)為高電平。
評(píng)論