楊 偉(浙江諸暨技師學(xué)院 312000)
?
單片機(jī)按鍵消抖技術(shù)及其擴(kuò)展應(yīng)用
楊 偉
(浙江諸暨技師學(xué)院 312000)
摘要:由于機(jī)械觸點(diǎn)的彈性作用,按鍵開關(guān)存在一個(gè)抖動(dòng)的特性,如果不作處理這個(gè)抖動(dòng)會(huì)給系統(tǒng)帶來(lái)一些不穩(wěn)定的因素,甚至是錯(cuò)誤的結(jié)果,為了不產(chǎn)生這種現(xiàn)象就必須采取相應(yīng)的消抖措施。本文就消抖技術(shù)作相關(guān)介紹,并舉一實(shí)例作為消抖技術(shù)擴(kuò)展應(yīng)用的說(shuō)明。
關(guān)鍵詞:按鍵抖動(dòng);消抖;單片機(jī);擴(kuò)展應(yīng)用
在使用單片機(jī)搭建有人機(jī)交互的系統(tǒng)時(shí)需要用到鍵盤,通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān),當(dāng)機(jī)械觸點(diǎn)斷開、閉合時(shí),電壓信號(hào)切換。系統(tǒng)對(duì)鍵盤的輸入(邏輯0或1)進(jìn)行準(zhǔn)確采樣,避免錯(cuò)誤輸入是非常有必要的。理想的鍵盤輸入特性如圖1所示:按鍵沒(méi)有按下時(shí),輸入為邏輯1,一旦按下則輸入立刻變?yōu)檫壿?,松開時(shí)輸入則立刻變?yōu)檫壿?。
圖1 理想鍵盤輸入特性
圖2 實(shí)際鍵盤輸入特性
然而實(shí)際的鍵盤受制造工藝等影響,其輸入特性不可能如圖1完美。由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開時(shí)也不會(huì)一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動(dòng),抖動(dòng)時(shí)間的長(zhǎng)短由按鍵的機(jī)械特性決定,一般為5ms~10ms。單片機(jī)工作時(shí)間都是納秒與毫秒級(jí)別,當(dāng)按鍵按下時(shí),在觸點(diǎn)即將接觸到完全接觸這段時(shí)間里,鍵盤的通斷狀態(tài)很可能已經(jīng)改變了多次。即在這段時(shí)間里,鍵盤輸入了多次邏輯0和1,也就是輸入處于失控狀態(tài)。如果這些輸入被系統(tǒng)響應(yīng),則系統(tǒng)暫時(shí)也將處于失控狀態(tài),這是我們要盡量避免的。在觸點(diǎn)即將分離到完全分離這段時(shí)間也是一樣的。實(shí)際鍵盤的輸入特性如圖2所示:
鍵盤在輸入邏輯轉(zhuǎn)換時(shí),實(shí)際上是產(chǎn)生了瞬時(shí)的高頻干擾脈沖。為確保CPU對(duì)鍵的一次閉合僅作一次處理,必須去除鍵抖動(dòng)。即在鍵閉合穩(wěn)定時(shí)讀取鍵的狀態(tài),并且必須判別到鍵釋放穩(wěn)定后再作處理。目的在于消除干擾,以達(dá)到接近圖1所示的理想輸入特性。
有兩個(gè)階段可以設(shè)法消除此干擾:1、在鍵盤信號(hào)輸入系統(tǒng)之前(系統(tǒng)外);2、鍵盤信號(hào)輸入系統(tǒng)以后(系統(tǒng)內(nèi))。
在信號(hào)輸入系統(tǒng)之前將抖動(dòng)干擾消除,可以節(jié)省系統(tǒng)資源,提高系統(tǒng)對(duì)其他信號(hào)的響應(yīng)能力,這就是硬件消抖。
1.1基本RS硬件消抖
用兩個(gè)“與非”門構(gòu)成一個(gè)RS觸發(fā)器,利用基本RS鎖存器的記憶作用消除開關(guān)觸點(diǎn)振動(dòng)所產(chǎn)生的影響。開關(guān)S每切換一次,輸出端只有一次翻轉(zhuǎn),不存在抖動(dòng)波形。
1.2電容濾波消抖
使用RS鎖存器消抖只適用于單刀雙擲開關(guān),實(shí)際應(yīng)用當(dāng)中常用的鍵盤多是兩個(gè)接線端的按鍵。對(duì)此類按鍵的常用硬件消抖方法為在按鍵上并聯(lián)電容,利用電容放電延時(shí)平波,再經(jīng)過(guò)施密特反相器調(diào)整,就能夠得到?jīng)]有毛刺的脈沖波。
1.3中斷法消抖
每個(gè)按鍵都外接到外部中斷口上,當(dāng)有按鍵按下時(shí),引起單片機(jī)的中斷。此種方法的好處在于不用在主程序不斷循環(huán)查詢,只要有中斷再去做相應(yīng)處理,不足之處在于一個(gè)單片機(jī)的中斷源是相當(dāng)寶貴的,所以很少有人采用這種方法。
如前所述,若采用硬件消抖電路,那么N個(gè)鍵就必須配有N個(gè)防抖電路。因此,當(dāng)按鍵的個(gè)數(shù)比較多時(shí),硬件防抖將無(wú)法勝任。在這種情況下,可以采用軟件的方法進(jìn)行防抖。軟件消抖的實(shí)質(zhì)在于降低鍵盤輸入端口的采樣頻率,將高頻抖動(dòng)略去,即檢測(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)入該鍵的處理程序。
一般程序代碼如下:
if(value == 0) //一旦檢測(cè)到鍵值
{ Delay(); //延時(shí)20ms,有效濾除按鍵的抖動(dòng)
if(value == 0) //再次確定鍵值是否有效
{ …… //執(zhí)行相應(yīng)處理
}
}
在實(shí)際應(yīng)用中軟件消抖技術(shù)并不單純運(yùn)用在按鍵上,也可運(yùn)用于其他地方,以使程序運(yùn)行更加合乎我們的要求,如下面二種情況:
1)在某些情況下,例如系統(tǒng)受到外部震動(dòng),也會(huì)在按鍵電路中出現(xiàn)電平抖動(dòng),但這種抖動(dòng)不是控制者所希望的操作,如果沒(méi)有防抖程序,那么系統(tǒng)會(huì)因這種不希望出現(xiàn)的干擾而錯(cuò)誤動(dòng)作。
2)為了避免系統(tǒng)誤判,可以編寫防抖動(dòng)程序。
下面就第一種情況(在行程控制系統(tǒng)中)采用這種技術(shù),看看能否提高系統(tǒng)性能,更好的實(shí)現(xiàn)功能,彌補(bǔ)常用方法的不足!
以一個(gè)簡(jiǎn)單的工控項(xiàng)目來(lái)舉例說(shuō)明,項(xiàng)目要求:上電后,一個(gè)普通電機(jī)控制一個(gè)滑塊從左邊往右邊推,最右邊有一個(gè)行程開關(guān),滑塊碰到行程開關(guān)后,電機(jī)停止,運(yùn)動(dòng)結(jié)束。
轉(zhuǎn)化成單片機(jī)編程思路 :用1個(gè)IO口輸出,高電平時(shí)電機(jī)運(yùn)動(dòng),低電平時(shí)電機(jī)停止。另1個(gè)IO口作輸入,檢測(cè)行程開關(guān)的電平狀態(tài),如果發(fā)現(xiàn)是高電平說(shuō)明還沒(méi)碰上行程開關(guān)感應(yīng)器,如果發(fā)現(xiàn)是低電平就說(shuō)明碰上了感應(yīng)器,此時(shí)就可以發(fā)出停止電機(jī)的命令。
思路一:直接判斷行程感應(yīng)器的電平狀態(tài),一旦發(fā)現(xiàn)低電平,就認(rèn)為電機(jī)已經(jīng)碰到了行程開關(guān),馬上停止電機(jī)。
這種思路的優(yōu)點(diǎn)是響應(yīng)及時(shí),但缺點(diǎn)是太靈敏,抗干擾能力非常差,在工控環(huán)境里,當(dāng)電機(jī)正在行進(jìn)的過(guò)程中,如果受到電源的波動(dòng)或者外來(lái)的毛刺信號(hào)干擾,行程開關(guān)的輸入信號(hào)可能會(huì)讀取到瞬間的低電平,導(dǎo)致單片機(jī)誤判斷,提前把電機(jī)停止了,電機(jī)還沒(méi)碰到行程開關(guān)就草率停機(jī)。
思路二:在判斷行程感應(yīng)器的電平狀態(tài)時(shí),加入了軟件的抗干擾處理(即軟件消抖技術(shù)),一旦發(fā)現(xiàn)低電平,一個(gè)計(jì)時(shí)器開始計(jì)時(shí),在計(jì)時(shí)的期間,如果發(fā)現(xiàn)出現(xiàn)高電平就馬上把計(jì)時(shí)器清零,如果一直是低電平,并且期間沒(méi)有出現(xiàn)高電平,就認(rèn)為是穩(wěn)定的低電平,此時(shí)判定是碰到了行程開關(guān)。
這種思路的優(yōu)點(diǎn)是增加了抗干擾處理,幾乎能百分百保證電機(jī)碰到了行程開關(guān)才停機(jī),不會(huì)有第一種思路的誤判了。
缺點(diǎn)是因?yàn)樵谲浖垢蓴_環(huán)節(jié)增加了一小段延時(shí),而這一小段的延時(shí),會(huì)導(dǎo)致電機(jī)碰到行程開關(guān)后沒(méi)有馬上停止,滑塊繼續(xù)往右運(yùn)動(dòng)一小段時(shí)間才停止,這樣因?yàn)橛袘?yīng)力存在,系統(tǒng)運(yùn)行時(shí)間長(zhǎng)了容易把右邊的限位機(jī)械結(jié)構(gòu)壓壞擠壞。
思路三:本思路是結(jié)合了前面兩種的優(yōu)點(diǎn),在判斷行程感應(yīng)器的電平狀態(tài)時(shí),當(dāng)發(fā)現(xiàn)是低電平時(shí)(哪怕是干擾時(shí)出現(xiàn)的瞬間低電平),電機(jī)馬上暫停(暫停和停止的概念不一樣,雖然電機(jī)都是沒(méi)有轉(zhuǎn)),當(dāng)發(fā)現(xiàn)是高電平時(shí),電機(jī)繼續(xù)運(yùn)行,什么時(shí)候才認(rèn)為碰到行程開關(guān)?當(dāng)?shù)碗娖较袼悸范菢舆B續(xù)持續(xù)低電平的時(shí)間超過(guò)某個(gè)值時(shí),才認(rèn)為碰到了行程開關(guān)。 在此判斷低電平的小延時(shí)期間,電機(jī)是處于暫停的狀態(tài)(沒(méi)有轉(zhuǎn)),所以不會(huì)過(guò)沖擠壓右邊的行程限位機(jī)構(gòu)。
這種思路優(yōu)點(diǎn)是既能及時(shí)響應(yīng),又增加了行程開關(guān)檢測(cè)的抗干擾處理,又不會(huì)讓電機(jī)過(guò)沖擠壓右邊的行程開關(guān),第三種思路能夠更好的實(shí)現(xiàn)功能,并能有效防止干擾!
傳統(tǒng)單片機(jī)系統(tǒng)大多是串行處理,只能并行處理一些中斷程序。對(duì)于這樣的系統(tǒng),只能采用單純軟件或硬件消抖,但都不那么完美。在實(shí)際的應(yīng)用中,為了提高系統(tǒng)的穩(wěn)定性和可靠性,往往是在硬件消抖技術(shù)的基礎(chǔ)上再適當(dāng)應(yīng)用軟件消抖技術(shù),這樣能更好的滿足系統(tǒng)的需要。
參考文獻(xiàn)
[1]邢遠(yuǎn)秀,陳姚節(jié). 鍵盤消抖電路的研究與分析[J].中國(guó)科技信息,2008(1):67-68.
[2] 楊立宏. 基于單片機(jī)的一種消抖方法及應(yīng)用[J].無(wú)線互聯(lián)科技, 2014(07):166
[3] 印健健.基于C語(yǔ)言的抗干擾消抖按鍵程序設(shè)計(jì)[J].數(shù)字技術(shù)與應(yīng)用2015(08):185
[4] 張松林.單片機(jī)按鍵防抖方法的淺析[J].科技創(chuàng)新導(dǎo)報(bào)2010(28):56
The technique of single chip microcomputer and its extension application
Yang We
(Zhuji Zhejiang Technician College,312000)
Abstract:Due to the flexibility of the role of mechanical contact,button switch are the characteristics of a jitter,if not treated the jitter will bring some unstable factors system,even wrong results,in order not to cause this phenomenon must take corresponding jitter elimination measures.In this paper,the elimination of shaking technology for the relevant introduction,both as an example of an example of the application of the technology to eliminate chattering.
Keywords:key jitter;jitter;single chip microcomputer;extended application