• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種實時性強并且可移植的按鍵消抖方法*

      2015-11-23 02:35:17胡傳志沈建華李躍華
      關鍵詞:實時性毛刺按鍵

      胡傳志,沈建華,李躍華

      (1.南通大學計算機科學與技術學院,南通 226019;2.華東師范大學)

      一種實時性強并且可移植的按鍵消抖方法*

      胡傳志1,2,沈建華2,李躍華1

      (1.南通大學計算機科學與技術學院,南通 226019;2.華東師范大學)

      延時消抖方法是嵌入式系統(tǒng)中常見的按鍵消抖方法,其通過延時程序跳過抖動態(tài),該方法雖然可行,但既不具備實時性,也不具備可移植性。針對這種情況,提出了一種新的按鍵消抖方法,該方法通過一個累乘算法來有效識別按鍵抖動態(tài)和穩(wěn)定態(tài)的區(qū)別,達到消除抖動影響的目的。實驗結果表明,該方法不僅實時性強而且具備可移植性。

      嵌入式系統(tǒng);按鍵消抖;抖動態(tài);穩(wěn)定態(tài);實時性

      引 言

      在嵌入式系統(tǒng)中,按鍵消抖是一個常見問題,延時消抖方法是教科書上常提到的一種按鍵消抖方法。延時消抖方法的原理是通過調用一個延時程序跳過抖動態(tài),從而達到消抖的目的。這種方法有兩個致命的缺點:一是延時期間CPU一直被延時程序占用,長達幾十ms,這對于實時性要求很高的嵌入式系統(tǒng)來說無異于死機;二是延時程序通過指令周期的累加來實現(xiàn)延時,而不同系統(tǒng)的指令周期是不同的,所以該方法不具備可移植性。

      為了克服延時消抖的缺點,有人提出了定時器中斷消抖方法,該方法的原理和延時消抖其實是一樣的,也是通過延時跳過抖動態(tài),區(qū)別在于使用定時器取代延時程序。雖然通過定時器延時解決了實時性的問題,但是定時器的配置和使用在不同系統(tǒng)中是不同的,所以依然沒有解決可移植性的問題。

      本文提出了一種新的按鍵消抖方法,與上述兩種方法不同,該方法不是機械地跳過抖動態(tài),而是設法識別按鍵的抖動態(tài)和穩(wěn)定態(tài),從而避開抖動影響。因為該方法的核心是通過一個累乘算法來識別抖動態(tài)和穩(wěn)定態(tài),所以將該方法命名為累乘消抖方法。

      1 按鍵信號分析

      按鍵是嵌入式系統(tǒng)中常用的輸入單元,常見的電路形式如圖1所示。

      按下按鍵SW,按鍵值(即keyin端電平)由高變低;松開按鍵,keyin端電平由低變高,即在keyin端出現(xiàn)一個負脈沖,如圖2所示。

      圖1 按鍵電路單元

      圖2 理想的按鍵信號

      這樣,系統(tǒng)通過讀取keyin端電平來識別按鍵狀態(tài),一個負脈沖代表一次按鍵。然而,實際中,在按下按鍵和松開按鍵的瞬間,由于觸點的彈性作用而引發(fā)電信號不穩(wěn)定,導致在這兩個瞬間都會有非常短暫(10ms左右,取決于按鍵的機電特性)的抖動毛刺存在,如圖3所示(為便于討論,將按鍵的狀態(tài)分為前沿抖動態(tài)、穩(wěn)定按下態(tài)、后沿抖動態(tài)和穩(wěn)定松開態(tài))。

      圖3 實際的按鍵信號

      盡管抖動時間非常短暫,但是對于指令周期ns級的微控制器來說還是漫長的,以至于在微控制器看來就不是一個負脈沖,而是很多個負脈沖,從而導致一次按鍵被誤認為多次按鍵。按鍵消抖就是為了消除抖動影響,對于一次按鍵,只讓系統(tǒng)看作一次。延時消抖的原理是通過延時程序跳過抖動態(tài),本文介紹的累乘消抖方法的原理是有效地識別當前按鍵所處狀態(tài),然后根據(jù)不同的按鍵狀態(tài)做相應的處理。

      2 累乘消抖方法

      2.1 抖動態(tài)和穩(wěn)定態(tài)的區(qū)別

      累乘消抖方法的關鍵是識別抖動態(tài)和穩(wěn)定態(tài)的區(qū)別。由圖3可知,抖動態(tài)是頻繁的1、0跳變;穩(wěn)定態(tài)或者一直為0(穩(wěn)定按下態(tài)),或者一直為1(穩(wěn)定松開態(tài))。抖動態(tài)的特征是變化,穩(wěn)定態(tài)的特征是不變,基于這點,只要設計出一個能夠區(qū)別變化量和不變量的算法,就可以識別出抖動態(tài)和穩(wěn)定態(tài)。

      如圖3所示,在一次按鍵過程中,按鍵依次經歷了前沿抖動態(tài)、穩(wěn)定按下態(tài)、后沿抖動態(tài)和穩(wěn)定松開態(tài)。其中,前沿抖動態(tài)是變化的,期間按鍵值keyin不會一直為0,會有若干次跳變回1;穩(wěn)定按下態(tài)是不變的,期間按鍵值一直為0;后沿抖動態(tài)是變化的,期間按鍵值不會一直為1,會有若干次跳變?yōu)?;穩(wěn)定松開態(tài)是不變的,期間按鍵值一直為1。

      兩種“變化”都表現(xiàn)為“不一直”,兩種“不變”都表現(xiàn)為“一直”。按鍵狀態(tài)分析見表1。

      表1 按鍵狀態(tài)分析

      設計一種算法,如果能夠區(qū)別“不一直”和“一直”,那么問題便迎刃而解。借助邏輯乘運算的“全真才真,有假則假”的特點可以輕松解決這個問題。

      2.2 累乘算法

      在等待按鍵按下時,如果檢測到有低電平,則緊接著連續(xù)讀取按鍵信號N次。如果處于剛按下時的抖動態(tài),這N次讀取可能發(fā)生在毛刺的底部(低電平),也可能發(fā)生在毛刺的頂部(高電平),當N不是太小時,能夠保證其中至少會有一次發(fā)生在毛刺的頂部。如果對這N次按鍵值是否為0進行累計邏輯乘操作,那么結果為假。如果是處于穩(wěn)定的按下態(tài),這N次讀取都為低電平,則對這N次按鍵值是否為0進行累計邏輯乘操作,結果為真。

      在等待按鍵松開時,如果檢測到有高電平,緊接著連續(xù)讀取按鍵信號N次。如果處于剛松開時的抖動態(tài),這N次讀取可能發(fā)生在毛刺的頂部(高電平),也可能發(fā)生在毛刺的底部(低電平),當N不是太小時,能夠保證其中至少會有一次發(fā)生在毛刺的底部。如果對這N次按鍵值是否為1進行累計邏輯乘操作,則結果為假。如果是處于穩(wěn)定松開態(tài),這N次讀取都為高電平,對這N次按鍵值是否為1進行累計邏輯乘操作,結果為真。

      至此可以給出一個算法,在N次循環(huán)中,將按鍵值與期望值進行比較,將它們是否與期望值相等的邏輯結果用邏輯乘運算作累計,根據(jù)累計值來判別按鍵狀態(tài),鑒于累計、邏輯乘這兩個關鍵要素,將此算法命名為累乘算法,描述如下:

      算法分析:從循環(huán)條件可以看出,對于抖動態(tài),是不會將循環(huán)執(zhí)行到底的,在第一次沒有讀到期望值時,就否定了循環(huán)條件。對于穩(wěn)定態(tài),一直讀到的都是期望值,退出循環(huán)的原因是計數(shù)次數(shù)已到。退出循環(huán)后的累計值Andup若為假,即為抖動態(tài),若為真,即為穩(wěn)定態(tài)。

      2.3 累乘消抖方法

      基于累乘算法識別按鍵狀態(tài),建立的按鍵消抖程序如下:

      程序分析:靜態(tài)布爾變量Pressed記錄按鍵的狀態(tài),假表示松開,真表示按下。當按鍵處于穩(wěn)定按下態(tài)時,返回真,其他狀態(tài)返回假。通過一個不超過COUNT次的循環(huán)檢測來判別抖動態(tài)和穩(wěn)定態(tài),尚未達到COUNT次但因為Andup為假而退出循環(huán)的是抖動態(tài);達到了COUNT次而退出循環(huán)的是穩(wěn)定態(tài),此時Andup為真。

      循環(huán)次數(shù)COUNT的設置很重要,COUNT值太小,可能導致判斷不準確;取值太大,則會浪費。浪費只會發(fā)生在穩(wěn)定態(tài),在抖動態(tài)是不存在浪費的,因為一旦沒有讀到期望值就導致Andup值為假,從而否定了循環(huán)條件。只有在穩(wěn)定態(tài),直到COUNT次才退出循環(huán),總共循環(huán)COUNT次。COUNT次循環(huán)相對于延時消抖里的幾十ms來說,可以說是完全釋放了CPU,大大提高了系統(tǒng)的實時性。另外,該方法不涉及指令周期和定時器等底層硬件,所以完全具備可移植性。

      3 實驗與分析

      本文以Tiva C LaunchPad為實驗平臺驗證累乘消抖方法的可行性和實時性。在將算法實例化之前,首先要考慮的就是COUNT的取值問題,因為COUNT的取值決定了算法的可行性和實時性。

      3.1 COUNT取值方法

      COUNT取值太小的話,不能保證在次數(shù)很少的循環(huán)累乘中一定能讀到抖動態(tài)的某次逆跳變,所謂逆跳變指前沿抖動態(tài)的跳回1,以及后沿抖動態(tài)的跳回0??赡艹霈F(xiàn)這樣的情況,前沿抖動時恰巧每次讀取都發(fā)生在0處,后沿抖動時恰巧每次讀取都發(fā)生在1處。這樣就導致把抖動態(tài)誤認為穩(wěn)定態(tài),從而使算法失去了可行性。COUNT取值太大的話,又會在穩(wěn)定態(tài)的循環(huán)累乘中浪費大量CPU時間,從而使算法損失了實時性。

      實驗中,依次取COUNT值為20、10、2。同時,為了記錄每次循環(huán)累乘的執(zhí)行情況,在循環(huán)累乘的一開始添加一條語句,將循環(huán)計數(shù)器n通過串行口輸出到上位機的串口終端程序,這樣便可以清楚地看到每次循環(huán)累乘都執(zhí)行了幾次。不到COUNT次的是抖動態(tài),到了COUNT次的是穩(wěn)定態(tài)。特別要注意每次抖動態(tài)的循環(huán)次數(shù),目的是了解大概幾次就可以讀到逆跳變。這為盡量縮小COUNT提供了依據(jù),縮小COUNT就等于提高實時性。

      當COUNT=20時,按鍵靈敏,證明可行,其中隨機一次按鍵,串口記錄的執(zhí)行情況見表2。

      表2 COUNT=20時串口記錄的執(zhí)行情況

      第1次循環(huán)累乘,循環(huán)體執(zhí)行了2次,在第2次時讀到了逆跳變,說明是抖動。第2次循環(huán)累乘,循環(huán)體執(zhí)行了3次,在第3次時讀到了逆跳變,說明是抖動。第3次循環(huán)累乘,循環(huán)體執(zhí)行了20次,一直沒有讀到逆跳變,說明是穩(wěn)定態(tài)。第4次循環(huán)累乘,循環(huán)體執(zhí)行了2次,在第2次時讀到了逆跳變,說明是抖動。第5次循環(huán)累乘,循環(huán)體執(zhí)行了3次,在第3次時讀到了逆跳變,說明是抖動。第6次循環(huán)累乘,循環(huán)體執(zhí)行了2次,在第2次時讀到了逆跳變,說明是抖動。第7次循環(huán)累乘,循環(huán)體執(zhí)行了20次,一直沒有讀到逆跳變,說明是穩(wěn)定態(tài)。對于本次按鍵,抖動態(tài)的循環(huán)累乘次數(shù)為2~3次。

      當COUNT=10時,按鍵靈敏,證明可行。其中隨機一次按鍵,串口記錄情況見表3。

      對于本次按鍵,抖動態(tài)的循環(huán)累乘次數(shù)也為2~3次。

      當COUNT=2時,按鍵不靈,說明不可行。因為兩次循環(huán)不足以保證在抖動態(tài)期間一定有一次能讀到逆跳變,以至于將抖動態(tài)誤認為穩(wěn)定態(tài),從而導致一次按鍵被誤認為多次。

      表3 COUNT=10時串口記錄的執(zhí)行情況表

      多做幾次實驗之后發(fā)現(xiàn),每次抖動態(tài)的循環(huán)累乘最多需要三次就可以讀到逆跳變,所以COUNT值要大于3,為了留有一定冗余,取COUNT值為10即可。限于篇幅不能把每次實驗結果都羅列出來。

      3.2 評估

      累乘消抖程序總是在執(zhí)行幾次循環(huán)后就交出執(zhí)行權,最多的循環(huán)次數(shù)也就是COUNT次,相比較延時消抖中的百萬次循環(huán)(將ns級的指令周期累加到ms級,需要執(zhí)行百萬次循環(huán))來說大大提高了實時性。另外,累乘消抖程序并不涉及指令周期和定時器等底層硬件具有可移植性。

      結 語

      使用累乘消抖方法建立的消抖程序在識別出按鍵的狀態(tài)后立刻返回,交出CPU使用權。區(qū)別是不同的返回代碼反映了不同的按鍵狀態(tài),如果是抖動態(tài)則不予處理,如果是穩(wěn)定態(tài)則給予相應處理。如果把按鍵消抖比作家長吩咐正在看電視的小孩看著燒水的水壺,抖動態(tài)好比水正在燒,穩(wěn)定態(tài)好比水已燒開。那么,延時消抖就好比一個笨小孩,離開了電視機,一直盯著水壺,直到水開。

      累乘消抖則好比一個聰明的小孩,沒有停止看電視,只是定期地看一眼水壺的狀態(tài),如果水沒開,繼續(xù)看電視,如果水開了就告知家長。通過這個比喻可以形象地看到累乘消抖具有很強的實時性。另外,累乘消抖不涉及指令周期和定時器等底層硬件,所以又具備可移植性。雖然為了達到最理想的實時性,要通過實驗確定當前系統(tǒng)最適合的COUNT值,但如果要求不是過于嚴苛,直接選用COUNT為100即可。

      [1]卜登立.基于優(yōu)先級編碼器的非編碼矩陣鍵盤接口設計[J].化工自動化及儀表,2010,37(4):93-95.

      [2]張迎偉.基于嵌入式系統(tǒng)的機械設備點檢儀研制[D].西安:西安科技大學,2011.

      [3]曾立志.基于嵌入式系統(tǒng)的按鍵接口設計技術研究[J].軟件,2013,34(7):63-64.

      [4]陳良琳,肖春發(fā).基于Atmel QTouch的ATmega48感應按鍵設計[J].單片機與嵌入式系統(tǒng)應用,2011,11(5):37-39.

      [5]袁鑫.以MCU為核心的嵌入式系統(tǒng)通用硬件平臺設計[D].天津:南開大學,2011.

      [6]楊茂林.基于移動BREW3.1.5平臺的嵌入式應用的開發(fā)與研究[D].北京:北京郵電大學,2010.

      [7]孫強,張振華,曹躍龍.使用UML和C語言實現(xiàn)基于對象的嵌入式軟件開發(fā)[J].計算機測量與控制,2003,11(4):292-294.

      [8]Maeda Y,Kentaro T,MIYAKAWA M.Quantitative Analysis on Usability of Button-Input Interfaces[J].IEICE transactions on fundamentals of electronics,communications and computer sciences,2011,94(2):789-794.

      [9]Morimoto K,Miyajima C,Itou K,et al.A virtual button interface using fingertip movements[C]//Machine Learning and Cybernetics,2007International Conference on IEEE,2007(4):2089-2093.

      胡傳志(碩士研究生),主要研究方向為嵌入式系統(tǒng)和計算機系統(tǒng)結構。

      High Real-time and Portable Method for Shaking Elimination of Keystroke

      Hu Chuanzhi1,2,Shen Jianhua2,Li Yuehua1
      (1.School of Computer Science&Technology,Nantong University,Nantong 226019,China;2.East China Normal University)

      Time-lapse method is a common method of shaking elimination of keystroke in the embedded system,it skips shaking-state via a time-lapse program,but this method has neither real-time performance nor portability.For this reason,a new method of shaking elimination of keystroke is proposed.It recognizes the difference between the shaking-state and steady-state via an algorithm of accumulated multiplication,so that it can eliminate the influence of shaking.The experimental results show that the method has both high real-time performance and portability.

      embedded system;shaking elimination of keystroke;shaking-state;steady-state;real-time performance

      TP368.1

      A

      ??楊迪娜

      2015-01-26)

      南通市應用研究項目(BK2012068);南通大學自然科學基金(13Z002)。

      猜你喜歡
      實時性毛刺按鍵
      基于有限狀態(tài)機的按鍵檢測程序設計
      電子制作(2021年3期)2021-06-16 03:14:26
      基于規(guī)則實時性的端云動態(tài)分配方法研究
      高技術通訊(2021年3期)2021-06-09 06:57:24
      一種鑄鐵鉆孔新型去毛刺刀具的應用
      一種筒類零件孔口去毛刺工具
      基于虛擬局域網(wǎng)的智能變電站通信網(wǎng)絡實時性仿真
      可抑制毛刺的鉆頭結構
      新型銅合金化學去毛刺劑的研制
      航空電子AFDX與AVB傳輸實時性抗干擾對比
      一種多方向導光按鍵結構設計
      電子制作(2016年1期)2016-11-07 08:43:05
      一種車載Profibus總線系統(tǒng)的實時性分析
      蒙阴县| 县级市| 集安市| 绥芬河市| 屯留县| 子洲县| 扎囊县| 秭归县| 抚顺县| 镇雄县| 扎兰屯市| 明光市| 凤凰县| 永兴县| 罗江县| 湖南省| 灵石县| 保靖县| 岫岩| 灵石县| 枣阳市| 陕西省| 盐源县| 新源县| 龙井市| 廊坊市| 道孚县| 方山县| 敦化市| 济宁市| 罗定市| 观塘区| 济宁市| 河南省| 甘南县| 山西省| 北京市| 沙坪坝区| 榆社县| 锡林郭勒盟| 沙洋县|