如何在不適用軟體式解彈跳的開關與繼電器中實作硬體式解彈跳

作者:Clive "Max" Maxfield

資料提供者:DigiKey 北美編輯群

以電氣與電子工程來說,開關是讓電路「通電」或「斷電」的元件,因此會中斷電流或將電流從一條導線轉移到另一條導線。工程師都知道,開關有相當多種類型,包括搖頭開關、翹板開關、按鈕開關、微動與極限開關、磁性與磁簧開關,還有繼電器。這些類型都有一個共通點:會彈跳。開關就是如此。

傳統上,彈跳對電路僅有些微甚至沒有影響,但若數位電路速度夠快,可偵測多次彈跳並加以反應,就會有嚴重的後果。工程師的任務就是避免或減輕彈跳的影響,或是將開關「解彈跳」。業界採行硬體式解彈跳的歷史已久,但近期則多轉往軟體式解彈跳做法。然而,在某些情況中,硬體式解彈跳還是比較好的選項。

本文將說明彈跳現象,並探討軟體與硬體式的解彈跳做法。接著會舉例說明更適合硬體解彈跳的情況,並且說明實作方法。本文將以 NKK SwitchesON SemiconductorTexas Instruments、Maxim Integrated 與 LogiSwitch 的開關裝置與硬體解彈跳元件作為範例進行說明。

何謂開關彈跳?

當開關或繼電器翻動或撥動時,人們會以為裝置每次變換狀態時只是一瞬間的單次反應,其實當中涉及 100 次以上的通電或斷電動作,且持續數千分之一秒後,觸點才會就趨穩定位。

以 NKK 的 M2011SS1W01 為例,就屬於單極單擲 (SPST) 常開 (NO) 面板安裝搖頭開關。假設此開關的一側視為輸入,並連接到接地 ( 0 V);另一側則當屬輸出,並透過上拉電阻 (R1) 連接到 5 V 電源供應器 (顯示為 +ve),如圖 1 所示。

SPST-NO 搖頭開關彈跳示意圖 (按此放大)圖 1:以 SPST-NO 搖頭開關為例,在開關啟動與關閉時都有可能會發生彈跳。(圖片來源:Max Maxfield)

請注意,開關彈跳在開關啟動 (閉合) 與關閉 (開路) 時都可能會發生。有時候,彈跳會在電軌之間一路轉移,在此視為邏輯 0 與 1 狀態。在此例中,這些即為「淨彈跳」。在比較下,若訊號僅達到中間電壓,這些狀態就會稱為「髒彈跳」。

以 NKK 的 M2012SS1W01-BC 單極雙擲 (SPDT) 面板安裝搖頭開關為例,在常開 (NO) 與常閉 (NC) 端子上都可能會發生彈跳 (圖 2)。在此例中,為了簡潔說明,僅會顯示「淨彈跳」。

SPDT 搖頭開關彈跳示意圖 (按此放大)圖 2:以 SPDT 搖頭開關為例,在開關啟動與關閉時,NO 與 NC 端子都有可能會發生彈跳。(圖片來源:Max Maxfield)

在許多情況下,此訊號彈跳持續時間並不會產生影響。若開關連接電子設備,且設備速度夠快可偵測多次彈跳並加以反應,此時就會發生問題。因此需要有方法,將來自開關的訊號解彈跳,以免電子設備對此作出反應。

軟體與硬體式解彈跳的比較

在 1960 與 1970 年代,開關解彈跳的實作是透過多種硬體技術達成,從簡易的電阻電容 (RC) 延遲電路搭配 SPST 開關,再到較複雜的設定/重置 (SR) 閂鎖功能都有。

在近期,因為許多系統都有微處理器單元 (MPU) 或微控制器單元 (MCU),因此使用軟體技術將來自任何開關的訊號解彈跳是更為普遍的做法。只是,軟體解彈跳並非萬靈丹。有些應用含有小型、低效能、記憶體受限的處理器,且可用來實作解彈跳常式的程式碼空間及/或時脈週期也有限。在這種情況下,硬體實作會是更好的解決方案。

此外,有許多軟體開關人員並不熟悉開關的物理特性,例如,除了開關的每次啟動都有所差異之外,開關的彈跳特性也有可能會受到環境條件的影響,例如溫度與濕度。

軟體開發人員對開關缺乏專業知識的問題,在現有的開關彈跳主題文獻往往令人混淆且互相矛盾的情況下更顯嚴重。舉例而言,文獻中常看到開關會在啟動或關閉後停止彈跳 1 毫秒 (ms)。然而,知名的嵌入式系統專家 Jack Ganssle 對眾多開關類型進行實證測試,將各個開關啟動 300 次,並且記錄觸.6點開路與閉合時的最小與最大彈跳次數。他的報告指出彈跳平均持續時間為 1.6 ms,彈跳最大持續時間為 6.2 ms。有些工業與軍事「最佳實務」建議在初次啟動後等待 20 ms,然後才可認為開關已經停止彈跳;有些則建議在偵測到最終彈跳後等待 20 ms,然後再觸發任何動作。

此外,有許多簡易型的非處理器架構系統,也要求開關要解彈跳。此類系統的一些例子包括驅動七段碼顯示器的二進位計數器,會計算來自繼電器的脈衝;輸入到一個 555 單次計時器的觸發器,可當作大門或柵門的馬達控制;採用鍵控輸入的暫存器式有限狀態機 (FSM)。此外也有電子微調電位器 (POT),其值可用開關輸入進行修改 (上調、下調,甚至儲存),此時若開關會彈跳就會發生問題。

這些例子清楚說明,若對如何進行硬體解彈跳有一定知識,對任何設計或開發人員來說都非常實用。

利用 RC 網路進行 SPST 開關硬體解彈跳

有個最簡單的硬體式開關解彈跳解決方案例子,就是採用電阻電容 (RC) 網路搭配 SPST 開關。這類電路有非常多種類型。其中有個較多用途的實作涉及兩個電阻與一個二極體 (圖 3)。

RC 網路進行 SPST 開關解彈跳示意圖 (按此放大)圖 3:使用 RC 網路對 SPST 開關 (頂端) 進行解彈跳時,加入二極體 (D1) 即可強制電容 (C1) 透過電阻 R1 進行充電,以及透過電阻 R2 進行放電。(圖片來源:Max Maxfield)

開關啟動 (閉合) 時,電容 C1 會透過電阻 R2 進行放電。若此電路省略了二極體 D1,當開關關閉 (開路) 時,C1 會透過電阻 (R1 + R2) 進行充電。但若有 D1,則表示 C1 僅會透過 R1 進行充電。

在某些情況下,僅有開關的啟動需注意 (即觸發動作進行),因此就可省略 D1。但若開關啟動與關閉時都要觸發動作,且若有延遲最小化的考量,則建議添加 D1。

請查看電容電壓 VC 所展現的突發式充電與放電曲線。此時並不建議將此訊號直接饋送到下游數位邏輯功能的輸入,因為若有訊號在「良好」邏輯 0 與邏輯 1 值之間的未定義區遊蕩並非好事。反之,此訊號會饋送到緩衝區 (具有史密特觸發器輸入) 的輸入,此外,通常會使用逆變緩衝器,例如 Texas Instruments 的 CD74HC14M96 的一個通道,因為逆變功能比起非逆變功能的切換更快。

利用 SR 閂鎖進行 SPDT 開關解彈跳

若是 SPDT 開關,常用的硬體解彈跳解決方案就是使用 SR 閂鎖。自從 IBM 等公司在 1960 年代於大型電腦的開關面板上採用此技術後,此做法已被視為最優異的簡易型硬體解彈跳解決方案。此閂鎖可用兩個背對背雙輸入 NAND 閘組成;例如,採用 Texas Instruments 四通道雙輸入 NAND IC SN74HC00DR 其中兩個通道。

NAND 架構 SR 閂鎖進行 SPDT 開關解彈跳示意圖圖 4:使用 NAND 架構 SR 閂鎖對 SPDT 開關進行解彈跳是非常有效的硬體解彈跳解決方案。(圖片來源:Max Maxfield)

開關的 NC 端子連接接地後,如圖 4 上半部所示,會強制閘極 g2 的輸出接到邏輯 1。如此一來,閘極 g1 輸入的兩個邏輯 1 會強制其輸出接到邏輯 0。相比之下,若開關的 NO 端子連接接地,如圖 4 的下半部所示,會強制閘極 g1 的輸出連接邏輯 1。如此一來,閘極 g2 輸入的兩個邏輯 1 會強制其輸出接到邏輯 0。

此電路能有效運作的原因在於,當兩個輸入都處於不作用的邏輯 1 狀態時,SR 閂鎖會記起之前的值。如圖 2 所示,當 SPDT 開關切換時,無論哪個端子連接接地,在連接當下就會先彈跳。由於這些彈跳是在原始值 (邏輯 0) 及新值 (邏輯 1) 之間,因此對 SR 閂鎖的當前狀態沒有影響。在此端子停止彈跳後,另一個端子才會開始彈跳,屆時 SR 閂鎖就會改變狀態。

利用專用裝置進行 SPST 開關解彈跳

之前的解決方案有個問題在於,許多設計人員偏好使用 SPST 開關,因為其費用通常比 SPDT 少。市面上有不少知名的 SPST 專用解彈跳裝置,例如 ON Semiconductor 的 MC14490DWG 以及 Maxim Integrated 的 MAX6818EAP+T

另一家製造商 LogiSwitch 更提供一套三通道、六通道及九通道的解彈跳解決方案,並提供通孔與表面黏著式 (SMD) 封裝。在此以採用 LogiSwitch LS18-S 裝置的電路 (圖 5) 為例說明。

專用三通道 LS18-S 晶片進行 SPDT 開關解彈跳示意圖圖 5:使用專用的三通道 LS18-S 晶片對 SPDT 開關進行解彈跳 (亦有提供六通道與九通道裝置)。(圖片來源:Max Maxfield)

LS18-S 如同 LogiSwitch 全系列產品一樣,皆支援 2.5 至 5.5 V 工作電壓範圍 (電源電壓值不會影響裝置的反應時間)。此外,與其他一些專用 IC 解決方案不同的是,LogiSwitch 的解彈跳裝置不需要其他任何元件,如外部時脈、RC 計時網路,或輸入或輸出上的上拉電阻等。

LS18-S 採用 LogiSwitch 自行研發的調適性 NoBounce 技術,可提供高水準的雜訊耐受度。持續不到 20 ms 的雜訊尖波會被禁止開始或終止循環,且輸出會延遲達 20 ms,然後,不論彈跳持續時間為何,在啟動與釋放時都會進行最後的開關彈跳。

結論

開關類型有許多種,包括搖頭開關、翹板開關及按鈕開關等,都免不了會彈跳。若未加以減緩,開關彈跳會導致微處理器與其他電路將單一次開關啟動視為含有多次事件。

開關的彈跳訊號通常可利用微控制器的軟體進行解彈跳。雖然這是低成本的解決方案,如本文所示,但並非適合所有情況的最佳方案,包括採用效能及記憶體有限之微控制器的系統、軟體開發人員對開關相關問題缺乏專業知識時,或沒有微控制器的系統。

替代方案就是使用硬體進行解彈跳,有多種做法可達到,從電阻電容網路、SR 閂鎖到專用的積體電路都包括在內。

DigiKey logo

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。

關於作者

Image of Max Maxfield

Clive "Max" Maxfield

Clive "Max" Maxfield 在 1980 年從英國雪菲爾哈倫大學取得控制工程學士學位,自此開始擔任大型主機電腦中央處理單元 (CPU) 的設計人員。多年來,Max 已設計眾多元件,從矽晶片到電路板,以及腦電波放大器到蒸汽龐克風格的預知引擎 (別問) 等應有盡有。他更是電子設計自動化 (EDA) 領域的先驅,經驗超過 30 年。

Max 是許多書籍的作者和/或共同作者,包括《Designus Maximus Unleashed》(在阿拉巴馬州列為禁書)、《Bebop to the Boolean Boogie》(電子學的另類指南)、《EDA: Where Electronics Begins》、《FPGAs: Instant Access, and How Computers Do Math》。請瀏覽其 Max's Cool Bean 部落格。

關於出版者

DigiKey 北美編輯群