黃秋萍,王漢祥,李富華
(蘇州大學,江蘇 蘇州 215021)
數據常常通過人工操作開關的方式進入數字系統。這些開關有很多形式,從計算機鍵盤的單個按鍵下的彈簧觸點到數控機床上的按鈕開關。所有這些機械開關的通用特性是當動作時它們的彈簧觸點有抖動的趨勢,從而引起持續幾毫秒的短時間的接觸和斷開。
在給定系統中,如果閉合的電氣開關代表邏輯1,而斷開的觸點代表邏輯0,接觸抖動會產生嚴重的問題。因為當想要一個單獨的1時可能會產生多個1和0,所以必須在開關輸入端設計防抖動電路以防止問題的發生。
可將鎖存器作為圖1所示的非常方便的防抖動電路。

當圖1所示的開關打在上邊的位置時,電壓V(相當于邏輯1)被加到S的輸入上,沒有電流流進下面的電阻,輸入R將對應于邏輯0的接地電位,相當于S=1,R=0;同理打在下邊的位置時,相當于S=0,R=1;在撥動過程中相當于S=0,R=0;具體仿真波形見圖2。
圖2中S高電平前后的小毛刺模擬“抖動”,由圖可見Q信號上已無抖動。但這是一種理想情況,當S抖動時R保持為低電平,如果開關從S打向R時,S和R同時發生抖動,其結果見圖3。
由圖3可見,抖動并未被完全消除。

利用RC積分電路來達成雜波的濾除與波形修整的電路,如圖4所示。在S1按下的瞬間由于接觸彈跳的關系,會使A點電壓呈現高速的斷續現象,在S1斷開時亦然,如圖5所示。然而由于電容兩端電壓需由電壓經電阻慢慢充電才會上升,使得B點電位緩步上升;S1斷開時,電容電壓經R 放電,使B 點電壓緩緩下降。此變化經史密特反相修整后,可得到標準負脈沖波輸出。

該電路確實消除了抖動現象,但必須用到電阻、電容和史密特觸發器,若用在模擬電路中,能與模擬電路的工藝兼容;但在數字電路中就不便于集成,即使能集成,所占的版圖面積也較大,下面要介紹的是適合于FPGA實現的防抖電路。

由于FPGA內富含觸發器,所以該電路用了四個D型觸發器和一個RS觸發器,電路上半部分為消抖電路,下半部分為微分電路。
Key_press信號經過兩級D觸發器延時處理后(第一級D觸發器的同步功效大于延時,所以為了使延時時間準確,延時電路必須有兩級),再用RS觸發器進行處理。
假設一般人的按鍵速度是10次/s,亦即按鍵時間是100ms,所以按下的時間可估算為50ms,如果取樣信號clk_div頻率為10ms(100Hz),則可取樣5次。對于不穩定的噪聲在5ms以下,則至多可取樣一次。RS觸發器前接上與門后,則RS的組態為:(1)S=0,R=0,pulse不變;(2)S=1,R=0,pulse=1;(3)S=0,R=1,pulse=0,即必須抽樣到兩次1(認為是穩定地按下按鍵)才會輸出1,兩次0(認為是穩定地放掉按鍵)才會輸出0,該部分電路已可完成消抖的功能。
為了避免因信號長度不同而使計數器產生錯誤,再接一級微分電路,然后才接至計數器電路,電路的仿真波形如圖7所示。從pulse波形可以發現,由外部輸入類似按鍵的Key_press信號的前后噪聲都被消除掉了;而且再經過一次微分后,輸出信號single_pulse高電平的寬度只有一個時鐘脈沖周期。

該電路適用于FPGA實現的芯片設計,因FPGA內富含觸發器,若是ASIC則要制版流片,成本太高且占用了太多的芯片面積,下面要介紹的是適用于ASIC的節省面積的消抖電路。
此電路結構與圖1、圖4的防抖動電路有部分相似,在這兩個電路基礎上做了改進,詳見圖8,對此電路做一簡單仿真,似乎并不能起消抖的作用,仿真波形見圖9。


對圖8在CSMC 0.8μm工藝模型下做瞬態分析可以得到如圖10的波形圖。
從圖10可知,當高低電平變化間隔時間小于6ns時,輸出將一直保持高電平,這便意味著該電路能消除6ns以下的抖動,大于6ns的抖動將不能被消除。
另外,靠近S端的兩個反相器的寬長比的設置要特別注意,N管的寬長比要大于P管的,通過調節寬長比可以微調防抖動時間。
文章對四種防抖動開關電路進行了分析和仿真,這四種電路各有其優缺點,可以根據設計需要分別選用。
[1]James Palmer,David Perlman.Schaum’s Outlines Introduction to Digital Systems[M]. American,McGraw Hill companies,Inc.1993.148.
[2]周潤景,圖雅,張麗敏.基于QuartusⅡ的FPGA/CPLD數字系統設計實例[M].北京:電子工業出版社, 2007.380-381.
[3] 唐光明.基于中斷技術的開關軟件消抖算法[J].現代機械,2006(3):107-108.
[4]邢遠秀,陳姚節.鍵盤消抖電路的研究與分析[J].中國科技信息,2008(1):67-68.
[5]曾旎,奚大順,李向陽.按鍵開關的抖動與消除方法[J].電子世界,2005(9):55-56.