讀者們可能還記得,前段時間我寫了一篇關於開關抖動的文章《Switch Bouncing Around》,其中比較了各種開關的抖動程度。這個話題由我們尊敬的編輯Max Maxfield推動,他一直試圖找出應該在消除抖動軟體中使用多長的等候狀態才能可靠地消除一般的開關抖動(甚至最嚴重的抖動)。

不幸的是,我需要購買一台新的示波器,因為我現有的設備沒有一個能提供單次觸發模式,而單次觸發對於擷取開關抖動波形是非常必要的,特別是如果你想保存它或用相機拍下來(我在另一個《On Upgrading Oscilloscopes》專欄中有講這個問題)。雖然我的新示波器只有兩個60MHz通道,但已經證明它可以很好地完成在我購買後給它的所有任務。

當然,很難讓Max開心(這也許是件好事,因為他的Happy Dance真的不忍卒睹)。他打算寫一個關於硬體和軟體消除抖動技術的迷你系列,作為其中的一部分,他要求我使用我的新示波器來研究圖1的硬體消除抖動電路。

20191210TA31P1 圖1 74x00消除抖動電路。(資料來源:Clive Maxfield/David Ashton)

圖1這個電路非常簡單,在圖中所示的狀態中,A1上拉至邏輯值1(5V),B2接地(即邏輯值0)。則QB應該為邏輯值1,A2也是邏輯值1。QA因此將為0,B1也會變為0。當切換開關時,NC觸點從地面斷開的瞬間,B2變為1;然而,B2為0,則QB將仍然保持1。之後不久,常開(NO)觸點接地的瞬間,A1將變為0,這意味著QA將變為1,B1也將變為1,此時,B2將被拉高到1,雙穩態電路因此改變狀態,QB將變為0,A2也將為0。A1產生的任何抖動都不會影響輸出QA,一直持續到下一次開關操作,整潔而簡單。我選擇了一個抖動量很大的開關,以充分驗證電路的消除抖動性能。

讀者們會發現雙穩態電路有兩個輸入,以及兩個輸出。如果可能的話,可以同時監控這四個點,以驗證消除抖動確實發生,並展現QA和QB輸出是單一、乾淨的轉換。但我只有一台雙通道示波器,該怎麼辦?

我工作的地方也只有一台雙通道示波器。我考慮過購買一台四通道的,倒是有幾個價格稍合理的。Hantek是我新購買的雙通道示波器的製造商,他們還有一款四通道、70MHz PC示波器(但不像我現在的示波器有內建螢幕),價格約為200美元。Picoscope是一家以製造PC示波器而聞名的製造商,倒是有一款示波器稍微貴一點,但頻率只有10MHz;如果想要100MHz示波器,那可能要花費1,000美元以上,而且如果還要內建螢幕的話,價格更會高很多。

當然理想狀況下,示波器最好配有大量記憶體,這樣才可以放大或縮小擷取的波形(我的示波器雖然也可以,但範圍非常有限)。但我和Max目前都沒有這麼多資金,Max曾嘗試爭取一個免費的示波器供我使用,但沒找到任何對此有興趣的廠家。開始的時候我用的產品甚至都不是來自「真正的」示波器廠商,如Tektronix、Keysight等,其實這些廠商的示波器才是我喜歡的,但它們遠超出我的預算,當然除非我贏了彩券。

因此我開始著手利用現有的雙通道的示波器做到最好。當然,很容易同時顯示NO開關極和其中一個Q輸出(當NO輸入拉低時,QA將變高,QB將變低)。然而,一時興起,我將探針連接到QA和QB,並以非常高的速度掃描以便可以看到輸出的轉換,圖2就是所得到的結果。

20191210TA31P2 圖2 QA和QB的輸出疊加。(資料來源:David Ashton)

我使用的是74HCT00 IC,轉換之間有輕微延遲,從1到0(或從0到1)的轉換時間也有輕微延遲,這與資料手冊中這些參數的值非常吻合。這確實引起了我和Max之間關於傳播延遲特性的一些討論,但是我離題了,無論如何這給我另一篇文章提供了足夠的素材,所以耐心等待吧,親愛的讀者!

然後我發現,這些轉換通常在幾奈秒(ns)內就緊密對齊,而開關轉換時間和抖動持續時間以毫秒(ms)為單位測量,時間級相差近百萬倍,我可以觸發任何一個Q轉換並擷取開關操作與開關引起抖動的相對時序。我可以查看一個輸入和輸出,然後再查看另一個輸入與輸出,然後將顯示結果拼接在一起。

透過在同一點觸發,開關打開和關閉的相對時序可以正確顯示。當然,不會有相同的事件顯示出來,但由於開關抖動,無論如何也不會有兩個完全相同的操作。我擷取了一些波形顯示,保留那些具有「最佳」開關抖動的顯示,採用MS Paint工具將它們拼在一起展示(MS Paint對於處理這類工作格外地有用),最後得到的結果如圖3所示。

20191210TA31P3 圖3 消除抖動電路的相對時序。第一次NO接通切換了雙穩態。(資料來源:David Ashton)

我認為這是一個非常好的結果。儘管它是兩個獨立切換操作得到的兩個單獨螢幕擷取組成,但我認為它與真正的四通道示波器顯示沒有太大的差別。

讀者們怎麼想?這是作弊嗎?鑒於我的觸點在整個方案中都保持一樣,這是一種有效的技術嗎?或者我應該使用適當的四通道示波器?

為了確保它的正確性,我擷取了一個同時看到兩個開關觸點的波形圖,而且如圖4所示保持相同的示波器設置,這證實了我在圖3拼接的多波形圖中顯示的相對時序是正確的。

20191210TA31P4 圖4 打開和關閉時的開關抖動。(資料來源:David Ashton)

顯示器上的位置略有不同,但是斷開(下方,在該實例下僅有少許抖動)和接通(上方,有很多抖動)之間的時間與上面相同,約5.5個divisions,或3.75ms。

最終,我擷取了一系列螢幕截圖(圖5),顯示出NO觸點接通和時序為200μs/division時QA輸出的切換,此時顯示了開關觸點的完全(幾乎長達2ms)抖動;再按前一個掃描寬度1/10步長逐步降低時序到20ns/division,顯示其轉換瞬間和相對時序(這裡閘道擴散延遲變得明顯)。

20191210TA31P5 圖5 NO和QA轉換的漸進式螢幕截圖。(資料來源:David Ashton)

請記住,在大多數情況下,相鄰的截圖具有不同的開關操作,但只有在仔細檢查時才會注意到這一點。

所有這些測試都是使用開關觸點上帶有10K電阻的74HC00 IC進行(這是一個常見的上拉電阻值)。我還將示波器探頭設置為10×顯示(其他截圖均使用1×),這極大地改善了轉換的顯示效果,但也顯示出開關觸點上的一些振鈴,這可能是由於移除了1x示波器探頭的電容所致。Max給我的其中一部分工作(他可是一個嚴格的任務負責人),就是嘗試不同的電阻和IC類型。

這實際上是一個設計非常小巧的消除抖動電路。轉換開關很常見,因此將一些轉換開關建構到麵包板中對於測試會非常有用。

要實現按鈕開關(它們通常只是單極)的消除抖動也很容易,也許可以用可重複觸發的單穩態電路做點什麼…

…但Max迫不及待地要編寫這個關於開關抖動和消除抖動技術的系列文章,而且急於要我提供上述討論的測試電路中若採用不同的電阻值和IC類型(LS、CMOS)將得到的結果,所以,我最好還是先搞定這些吧。與此同時,歡迎大家的評論和提問。

(參考原文: SPDT Switch Debouncing With an SR Latch,by David Ashton)

本文同步刊登於EE Times Taiwan 12月號雜誌