比較器與混合訊號元件

開關彈跳消除(switch debouncing)

當你按下一個機械按鈕,你感覺到乾淨的一聲喀噠——但在電氣上,金屬接點並非乾淨地接觸。它們猛地撞在一起、彈開、再接觸、再彈開,在安定之前的幾毫秒內反覆數次,就像掉落的球停下前先彈跳幾下。一個快速的數位輸入把這看成不是一次按壓,而是一串快速的開-關-開-關轉態。彈跳消除就是把那串雜亂的轉態,變回人類本意的單一、乾淨事件的藝術。

彈跳通常持續從不到一毫秒到約 10 或 20 毫秒,視開關而定。對一秒輪詢數千次的微控制器來說,那一次按壓可能被登記成五次或十次。解藥有兩大類。硬體:一個 RC 低通濾波器(一顆電阻加一顆電容)把彈跳的邊緣平滑掉,後面常接一個史密特觸發閘把它整乾淨。軟體:在第一個邊緣之後,程式等一段固定時間(比方 20 毫秒),再重讀接腳,只有當準位仍然穩定才接受這次按壓——它就只是忽略彈跳窗內的任何活動。無論哪種,訣竅都是「要求穩定的時間,長過彈跳所能持續的時間」。

凡是有人按鍵之處都要緊:鍵盤、音量鍵、選單導覽、計數器。略過它,一次按壓就跳過兩個選單項、或把一枚硬幣數成兩次。誠實的重點:史密特觸發器單獨只能清理電氣雜訊,卻不能消除機械彈跳,因為接點真的開合了許多次——那些準位是真的,不是雜訊,所以你需要刻意的時間延遲,而非僅靠遲滯。而正確的彈跳消除時間是一種平衡:太短,彈跳會漏過去;太長,按鈕會感覺遲鈍或漏掉快速的連按兩下。約 10 到 30 毫秒適合大多數人按的按鈕。

一個按鈕彈跳約 5 毫秒。在軟體中,接腳第一次讀到低的瞬間,程式啟動一個 20 毫秒計時器並忽略接腳;計時器到期時再讀一次,由於接點早已安定,無論接點彈得多劇烈,都只登記恰好一次按壓。

要求穩定的時間長過彈跳——一次按壓、一個事件。

史密特觸發器清理電氣雜訊,卻不消除機械彈跳:接點確實開合了許多次,所以那些邊緣是真實訊號,不是雜訊。彈跳消除需要刻意的時間延遲,無論在硬體還是軟體。

又称
debouncecontact debounce去彈跳消除彈跳