單片機(jī)的消抖
軟件消抖:如果按鍵較多,常用軟件方法去抖,即檢測(cè)出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,產(chǎn)生5ms~10ms的延時(shí),讓前沿抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后,也要給5ms~10ms的延時(shí),待后沿抖動(dòng)消失后才能轉(zhuǎn)入該鍵的處理程序
可以在去抖程序里加入檢測(cè)松手程序例如 …… …… if(!key) //檢測(cè)鍵盤(pán)是否按下 delay()://去抖延時(shí)一般是50ms if(!key)//再次檢測(cè)鍵盤(pán)是否按下 ×××++: //這里寫(xiě)數(shù)碼管加"1"程序 while(key);//加入寫(xiě)句,目的是等待key變?yōu)樵瓉?lái)的狀態(tài)才會(huì)執(zhí)行下一條指令!
1、按鍵在按下的時(shí)候、由于機(jī)械連接的不穩(wěn)定,導(dǎo)致剛剛被按鍵連通的電路中出現(xiàn)電平抖動(dòng)。 2、在某些情況下,例如系統(tǒng)受到外部震動(dòng),也會(huì)在按鍵電路中出現(xiàn)電平抖動(dòng),但這種抖動(dòng)不是控制者所希望的操作,如果沒(méi)有防抖動(dòng)程序,那么系統(tǒng)會(huì)因這種不希望出現(xiàn)的干擾而錯(cuò)誤動(dòng)作。 3、為了避免系統(tǒng)誤判,可以編寫(xiě)防抖動(dòng)程序。程序流程的文字說(shuō)明如下(假設(shè)按鍵按下后,低電平送到單片機(jī)): (1)是否有低電平輸入(按鍵電路按鍵被按下了嗎)?如果是,到(2)步執(zhí)行;不是,繼續(xù)執(zhí)行(1) (2)延時(shí)等待(可以使用定時(shí)器或非定時(shí)器都可以),然后執(zhí)行(3)步 (3)是否有低電平輸入?是的話(huà),執(zhí)行后面的其他程序;不是,則跳轉(zhuǎn)到(1)步執(zhí)行 4、說(shuō)明:干擾抖動(dòng)的持續(xù)時(shí)間很短,為了防止(1)中的低電平是系統(tǒng)內(nèi)的干擾抖動(dòng),則延時(shí)等待一會(huì),然后判斷是否真的按鍵按下。
并聯(lián)電容消抖:
用10K的上拉電阻與按鍵串聯(lián),然后按鍵并聯(lián)一個(gè)去抖電容,以用來(lái)消除按鍵的機(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*根號(hào)RC R=10K,C選0.1uF,電容的充放電時(shí)間約20ms,大于抖動(dòng)時(shí)間,可將抖動(dòng)濾除掉 通常電容C選取0.01uF~1uF
硬件消抖2:在鍵數(shù)較少時(shí)可用硬件方法消除鍵抖動(dòng)。下圖所示的RS觸發(fā)器為常用的硬件去抖。
圖中兩個(gè)“與非”門(mén)構(gòu)成一個(gè)RS觸發(fā)器。當(dāng)按鍵未按下時(shí),輸出為1;當(dāng)鍵按下時(shí),輸出為0。此時(shí)即使用按鍵的機(jī)械性能,使按鍵因彈性抖動(dòng)而產(chǎn)生瞬時(shí)斷開(kāi)(抖動(dòng)跳開(kāi)B),中要按鍵不返回原始狀態(tài)A,雙穩(wěn)態(tài)電路的狀態(tài)不改變,輸出保持為0,不會(huì)產(chǎn)生抖動(dòng)的波形。也就是說(shuō),即使B點(diǎn)的電壓波形是抖動(dòng)的,但經(jīng)雙穩(wěn)態(tài)電路之后,其輸出為正規(guī)的矩形波。這一點(diǎn)通過(guò)分析RS觸發(fā)器的工作過(guò)程很容易得到驗(yàn)證。
評(píng)論