新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于單片機(jī)按鍵的抖動(dòng)與消抖

關(guān)于單片機(jī)按鍵的抖動(dòng)與消抖

作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
單片機(jī)的程序中,如果涉及到按鍵,一般都會(huì)看到幾行注釋著“消抖”的代碼。
比如下面這一段:

if((KeyV|0xc3)==0xff){//無鍵按下
return 0;
}
mDelay(10);//延時(shí),去鍵抖
KeyV=P3;
if((KeyV|0xc3)==0xff){//無鍵按下
return 0;
}

關(guān)于其作用與目的,有如下解釋:
按鍵在按下時(shí)會(huì)產(chǎn)生電平的變化,通常是由高電平變?yōu)榈碗娖?,而且這一過程也不是瞬間完成的,按鍵按下之后,電平會(huì)有一段不穩(wěn)定變化的時(shí)間。一般情況下,我們的程序讀取這個(gè)電平變化并做相關(guān)的動(dòng)作。但由于機(jī)械按鍵的局限性,當(dāng)系統(tǒng)受到外力而產(chǎn)生抖動(dòng)或其它動(dòng)作時(shí),也可能使系統(tǒng)內(nèi)部產(chǎn)生電平變化(通常這種變化持續(xù)的時(shí)間非常短),這種現(xiàn)象稱之為按鍵的“抖動(dòng)”。
這種“抖動(dòng)”顯然不是我們期望出現(xiàn)的,一旦程序中沒有針對(duì)它進(jìn)行特殊處理,這種隱患很可能導(dǎo)致系統(tǒng)執(zhí)行我們不希望出現(xiàn)的動(dòng)作。進(jìn)而可能釀成一場(chǎng)悲劇。避免按鍵“抖動(dòng)”的操作就稱之為“消抖”。
目前,單片機(jī)的消抖主要分為軟件消抖和硬件消抖。
其中,軟件消抖增加軟件資源,但不增加硬件成本;硬件消抖反之。
現(xiàn)在普遍采用的是軟件消抖的方式。

軟件消抖具體的操作思路是:
當(dāng)監(jiān)聽到按鍵被按下時(shí),不立刻執(zhí)行相關(guān)的操作,而進(jìn)行一定時(shí)間的延時(shí)(通常是50ms),之后再次檢測(cè)按鍵是否被按下,如果此時(shí)按鍵仍然被按下,則判定按鍵確實(shí)被按下了(因?yàn)椴徽撌钱惓G闆r導(dǎo)致的抖動(dòng)還是正常情況下按鍵被按下產(chǎn)生的電平變化都會(huì)在這一段時(shí)間內(nèi)過去,緊接著的電平將會(huì)是穩(wěn)定的),然后進(jìn)行按鍵被按下之后所需要的操作,否則判定按鍵未被按下,繼續(xù)監(jiān)聽按鍵狀態(tài)。
實(shí)際上,以上所說的軟件消抖的方法在真正的軟件中應(yīng)用的不多,只是在練習(xí)的時(shí)候使用。真正的應(yīng)用上,會(huì)在可能產(chǎn)生抖動(dòng)的那一段時(shí)間內(nèi)等間隔多次監(jiān)聽按鍵狀態(tài)(電流狀態(tài)),等到數(shù)次(可以是連續(xù)5次)電流平穩(wěn)了才確定按鍵被按下。按鍵被放開時(shí)采取同樣操作。這樣才不會(huì)產(chǎn)生誤差,例如在延時(shí)的時(shí)候出現(xiàn)按鍵按下并放卡的情況會(huì)被漏過。

硬件消抖的思路則是采用相關(guān)手段去除最初產(chǎn)生的那不穩(wěn)定的電平變化,只輸出后面穩(wěn)定的電平。
具體的實(shí)現(xiàn)方法有以下兩種:

法1:
用10K的上拉電阻與按鍵串聯(lián),然后按鍵并聯(lián)一個(gè)去抖電容用以消除按鍵的機(jī)械抖動(dòng)。電容的計(jì)算方法如下:電容的容值是根據(jù)機(jī)械按鍵的觸點(diǎn)抖動(dòng)頻率而定,一般機(jī)械按鍵的抖動(dòng)頻率為100Hz左右,當(dāng)按鍵閉合抖動(dòng)時(shí)接觸時(shí)間在毫秒級(jí),根據(jù)電容放電的時(shí)間t=0.7×√RCR=10K,C選0.1μF,電容的充放電時(shí)間約20ms,大于抖動(dòng)時(shí)間,可將抖動(dòng)濾除掉。通常電容C選取0.01μF~1μF.

法2:
在鍵數(shù)較少時(shí)可用硬件方法消除按鍵抖動(dòng)。下圖所示的RS觸發(fā)器為常用的硬件去抖。


圖中兩個(gè)“與非”門構(gòu)成一個(gè)RS觸發(fā)器。當(dāng)按鍵未按下時(shí),輸出為1;當(dāng)按鍵按下時(shí),輸出為0.此時(shí)即使用按鍵的機(jī)械性能,使按鍵因彈性抖動(dòng)而產(chǎn)生瞬時(shí)斷開(抖動(dòng)跳開B),按鍵不返回原始狀態(tài)A,雙穩(wěn)態(tài)電路的狀態(tài)不改變,輸出保持為0,不會(huì)產(chǎn)生抖動(dòng)的波形。也就是說,即使B點(diǎn)的電壓波形是抖動(dòng)的,但經(jīng)雙穩(wěn)態(tài)電路之后,其輸出為正規(guī)的矩形波。這一點(diǎn)通過分析RS觸發(fā)器的工作過程很容易得到驗(yàn)證。



評(píng)論


技術(shù)專區(qū)

關(guān)閉