程佳佳
摘 要 按鍵被廣泛用于基于CPLD/FPGA的數(shù)字電路系統(tǒng)設(shè)計(jì)中,機(jī)械式按鍵開關(guān)在按鍵操作時(shí)經(jīng)常會(huì)出現(xiàn)抖動(dòng)現(xiàn)象,如果不進(jìn)行消除將會(huì)造成電路系統(tǒng)的誤操作?;诖私榻B了采用VHDL語(yǔ)言有限狀態(tài)機(jī)的方法實(shí)現(xiàn)消抖的電路系統(tǒng)的工作原理、編程思路,并進(jìn)行了硬件驗(yàn)證,消抖效果良好,性能穩(wěn)定,可廣泛用于CPLD/FPGA的按鍵電路中。
關(guān)鍵詞 按鍵消抖 電路仿真 VHDL 狀態(tài)機(jī)
中圖分類號(hào):TP274 文獻(xiàn)標(biāo)識(shí)碼:A
0引言
按鍵開關(guān)是電子設(shè)備實(shí)現(xiàn)人機(jī)對(duì)話的重要器件之一。而大多數(shù)按鍵都采用機(jī)械觸點(diǎn)的方式。因此其最大的缺陷就在于在觸點(diǎn)閉合和斷開瞬間會(huì)伴隨一連串的隨機(jī)抖動(dòng),這些抖動(dòng)往往會(huì)造成電路的誤動(dòng)作,而使整個(gè)系統(tǒng)工作異常。因此在具有按鍵開關(guān)的電路系統(tǒng)中,尤其是在密碼鎖等精確度要求高的電路中,需要加入按鍵消抖模塊,確保按鍵每按一次只做一次響應(yīng)。
1按鍵消抖方案
按鍵消抖一般采用硬件和軟件消抖兩種方法。硬件消抖是利用電路濾波的原理實(shí)現(xiàn),軟件消抖是通過(guò)按鍵延時(shí)來(lái)實(shí)現(xiàn)。目前。隨著EDA技術(shù)的廣泛應(yīng)用,更多采用軟件消抖,主要采用延時(shí)的原理。本文將介紹兩種在可編程邏輯器件FPGA/CPLD設(shè)計(jì)數(shù)字系統(tǒng),基于VHDL語(yǔ)言設(shè)計(jì)的按鍵消抖方法。
1.1計(jì)數(shù)器型消抖
此方法的基本思想是:通過(guò)計(jì)數(shù)的方法來(lái)測(cè)量高電平的持續(xù)時(shí)間,若時(shí)間小于N(計(jì)數(shù)器模值)個(gè)時(shí)鐘周期則認(rèn)為是抖動(dòng)產(chǎn)生的毛刺,則從消除毛刺的角度來(lái)設(shè)計(jì)。因此設(shè)置當(dāng)按鍵開關(guān)按下key_in=1,計(jì)數(shù)器以時(shí)鐘上升沿開始計(jì)數(shù),計(jì)數(shù)值持續(xù)加1;若key_in=0時(shí),計(jì)數(shù)器清零。只有當(dāng)計(jì)數(shù)值為N,keyout=1,而且計(jì)數(shù)器進(jìn)入保持狀態(tài),其余情況下keyout=0。即抖動(dòng)產(chǎn)生的毛刺作用不可能使計(jì)數(shù)器有輸出,這樣防抖動(dòng)目的就得以實(shí)現(xiàn)。而且在本方法中,clk的時(shí)鐘周期與N可以根據(jù)按鍵抖動(dòng)時(shí)間由設(shè)計(jì)者自行設(shè)定。
從波形圖上我們看到(如圖2),此方案不僅消除了按鍵抖動(dòng)產(chǎn)生的毛刺即窄脈沖,也可以將干擾、噪音等其他尖峰波濾除,但遇到脈寬大于N個(gè)clk時(shí)鐘周期的干擾、噪音等時(shí)會(huì)有輸出從而產(chǎn)生誤操作。
1.2狀態(tài)機(jī)消抖
此方法的主要編程思路:因?yàn)榘存I消抖的關(guān)鍵是提取穩(wěn)定的低電平(或高電平)狀態(tài),濾除按鍵穩(wěn)定前后的抖動(dòng)脈沖。因此可以用一個(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)為高電平。
由于按鍵抖動(dòng)的時(shí)間一般為5到10ms,因此時(shí)鐘信號(hào)clk可以使用200Hz的周期信號(hào)(周期為5ms),即5ms采樣一次按鍵信號(hào),若采樣到低電平,則進(jìn)行消抖延時(shí);當(dāng)連續(xù)兩次采樣到的按鍵信號(hào)都為低電平時(shí),認(rèn)為按鍵穩(wěn)定的按下。在按鍵穩(wěn)定按下后,采樣到按鍵為高電平時(shí),認(rèn)為按鍵釋放。
從波形圖上我們可以看出,此方法可以實(shí)現(xiàn)消抖,而且經(jīng)驗(yàn)證,性能穩(wěn)定。
2結(jié)束語(yǔ)
本文介紹了兩種基于VHDL語(yǔ)言的按鍵消抖方法,并且將相應(yīng)程序下載到CPLD芯片中進(jìn)行硬件測(cè)試,確保能夠?qū)崿F(xiàn)消抖。當(dāng)然,按鍵消抖方法多種多樣,作者在此也重在將相應(yīng)編程消抖思路提供給VHDL語(yǔ)言及CPLD/FPGA器件應(yīng)用中遇到類似問(wèn)題的初學(xué)者,能提供給他們更多的工程經(jīng)驗(yàn)。endprint