按鍵輸入檢測軟件抗幹擾方法
按鍵是我們最常見到的人機交互部件之一,在我們工作生活中随處可見,比如我們家裏常用的各種家用電器,工作中用的各類儀器儀表,以及各類IT産品,許多都是通過按鍵來進行操作的。因此,按鍵輸入的處理,也是我們在嵌入式系統設計的時候,經常要遇到的。雖然按鍵輸入的處理看起來非常簡單,理想化的按鍵就相當于一個開關,我們隻需檢測開關是否導通,就能判斷按鍵是否按下。但是,實際應用中如果這麽處理,就會出現各種問題,比如明明隻按了一下,處理器卻檢測到按了好幾下;或者有時明明沒有按下,處理器卻檢測到按下了。這是剛接觸嵌入式系統的工程師們經常遇到的問題。
這是什麽原因呢?我們來做個實驗。如圖1所示,我們将一個按鍵的B端接地,A端接電阻R上拉到電源,然後檢測A端的電平狀态。
圖1
那麽當按鍵狀态爲按下時,我們可以在A端檢測到低電平;當按鍵狀态爲放開時,我們可以在A端檢測到高電平。在理想情況下,我們隻需要檢測A端電平的上升沿和下降沿,就可以檢測到按鍵的按下和放開瞬間,并進行處理。但是實際情況又是如何呢?我們将A端接到邏輯分析儀,并用8Mbps的采樣率進行采樣,我們會發現實際情況并不是那麽理想,如圖2所示,我們會看到,有的時候在按鍵放開的瞬間,A端電平并不是立即變爲高電平,而是高低電平來回變化了幾次。
圖2
原來,在實際中,按鍵的按下和放開,并不是理想狀态的開和關。在按下和放開的瞬間,有時候會産生抖動,導緻狀态在瞬間來回變化幾次。而在按鍵狀态保持的過程中,也有可能會受到脈沖幹擾,導緻按鍵狀态瞬間的變化。
因此,在我們爲客戶定制産品方案中,智研電子開發團隊的工程師們都需要加入抗幹擾處理,用于消除按鍵抖動和脈沖幹擾。常用的按鍵抗幹擾方法可分爲硬件處理和軟件處理兩種。硬件處理方法需要增加額外的抗幹擾電路,我們這裏專門來讨論一下軟件處理的方法。
常用的按鍵軟件處理方法是:通過設置IO的邊沿中斷來檢測按鍵的狀态變化,在進入中斷後,再延時一段時間後,再次對按鍵狀态進行檢測,根據檢測狀态來判斷按鍵是否有效,以此來達到過濾抖動和脈沖幹擾的目的。但是這種方法也有弊端,就是如果這個延時的時間過短,則不能很好的濾除幹擾,如果這個時間過長,則會造成中斷處理的時間過長,造成軟件進程的阻塞,甚至造成其它中斷信号的丢失。
在這裏智研電子軟件開發工程師爲大家介紹一種新的按鍵軟件抗幹擾的方法,既不需要增加額外的硬件成本,又避免了常用軟件按鍵處理的缺點,能夠以更小的處理器開銷,更靈活有效地濾除按鍵幹擾。該方法實現步驟描述如下:
步驟1:硬件電路如圖1所示,我們每隔一個固定的時間間隔T對按鍵A端進行一次電平檢測,并用變量key的最低3bit來記錄最近3次的檢測結果。bit0爲當前次的檢測結果,0表示低電平,1表示高電平。每次檢測先将變量key左移一位,并将除最低3bit之外的全部bit全部置零,然後用bit0記錄下當前檢測結果。
步驟2:對檢測結果進行處理。根據檢測結果key的值可分爲一下8種情況:
1key = 0b000時,爲檢測到按鍵按下保持狀态,可進行累加計時,并根據計時時間進行按鍵長按判斷和處理。
2key = 0b001時,爲檢測到按鍵狀态由按下變放開瞬間,此時不作處理,以防止幹擾。
3key = 0b010時,爲檢測到按鍵狀态由按下變放開後短時間内(小于T)又變成按下,認爲該次按鍵狀态變化無效,作幹擾處理,賦值key = 0b000。
4key = 0b011時,爲檢測到按鍵狀态由按下變放開後,經過時間T後,再次檢測到按鍵放開狀态,說明該次按鍵狀态變化有效,并進行按鍵放開處理。
5key = 0b100時,爲檢測到按鍵狀态由放開變按下後,經過時間T後,再次檢測到按鍵按下狀态,說明該次按鍵狀态變化有效,并進行按鍵按下處理。
6key = 0b101時,爲檢測到按鍵狀态由放開變按下後短時間内(小于T)又變成放開,認爲該次按鍵狀态變化無效,作幹擾處理,賦值key = 0b111。
7key = 0b110時,爲檢測到按鍵狀态由放開變按下瞬間,此時不作處理,以防止幹擾。
8key = 0b111時,爲檢測到按鍵放開保持狀态,不作處理。
備注:檢測時間間隔T值的選取規則爲大于按鍵抖動時間和脈沖幹擾時間,小于要求的按鍵響應時間的二分之一。
由于該方法隻需每隔時間T進行一次檢測和判斷,因此比常用的中斷延時檢測可以節省中斷處理時間的開銷,并且因爲檢測間隔時間T可以靈活設置,并在檢測結果處理裏将可能遇到的情況都作了處理,因此能更好地濾除幹。在我們長期的工程實踐應用中,取得了很好的效果。
<<廣州智研電子科技有限公司>>電子電路産品開發/結構方案設計/快速生産打樣
聲明:轉載或者引用本文内容請注明來源及原作者;版權歸www.gzzydesign.com網站所有;