2013年4月1日 星期一

Debounce 電路設計

1. 何謂 Bounce (彈跳):

所謂的 Bounce 是指我們在按下電源開關時,電壓不會從 0 伏直接升到 VDD 伏。而是在 0 及 VDD 間震盪好幾次,最後才在 VDD 端穩定下來。

一個電子產品若有彈跳現象的話,最常見到的「症狀」是按下一個開關,結果數字跳好幾下。

2. 何謂 Debounce 電路 ??

為了解決彈跳問題,我們設計了 Debounce (反彈跳)電路,Debounce 電路的原理是:我們設定一個 Time Window,當波形能穿過這個 Time Window 時,才切換波形。

假設我們希望開關穩定的時間為 0.001 秒 = 1*10^-3 秒 = 1 ms

3. 如何設計 Debounce 電路 ??

a. 第一種作法:使用 AND 閘
利用 AND 閘來作 Debounce 電路可以在很短的時間之內設計完成,它的優點是簡單易懂。

缺點:
 * 單一 AND 閘之 Delay 相當短,要湊 1ms 可能需要很多的 AND 閘串接
 * 由於我們使用固定數量之 AND 閘,因此其 time window 不可改變,其彈性比較差

b. 第二種作法:使用 NOT 閘加一個超大 AND 閘
利用 NOT 閘來作 Debounce 電路可以在很短的時間之內設計完成,它的優點是簡單易懂。

上述兩種作法最大的缺點有二:
1. 佔空間:如果我們要設計的 debounce 電路之 time window 為 1ms,我們可能要串 1000 個 NOT 閘才能成功,這是相當佔空間的。
2. 沒彈性:如果我們有兩個專案,其中 A 專案的 debounce 時間為 1ms,而 B 專案的 debounce 時間為 1.5 ms,則我們必須針對兩個不同的專案設計出不同的 debounce 電路。

因此這兩種作法是比較差的 debounce 電路。

c. 第三種作法:兼具彈性及省空間的作法 ??
利用 Counter 電路來設計 debounce 電路可以解決上述兩個問題,因此我們可以看實體
電路設計。

low-active  -> 低態動作:輸入為 0 時動作。
high-active -> 高態動作:輸入為 1 時動作。

{a[7:3],b[2:0]}