一年前做過的小腳丫的消抖實驗和不消抖實驗的區別,開關如果不消抖,產生的毛刺和電平變化確實給開關帶來了不良影響,比如按鍵不靈,需要按暫停或者切換的時候要反覆按多次才有隨機概率實現需要的功能。所以對消抖的概念和重要性比較深刻。
昨天學習stm32的按鍵消抖知識,教程提到一點:
本實驗板連線的按鍵帶硬體消抖功能,見圖 ,它利用電容充放電的延時,消除了波紋,從而簡化軟體的處理,軟體只需要直接檢測引腳的電平即可。基於上述原理圖,作出關於該電容消抖效果實驗的研究。以下內容為對本次實驗的記錄,其大綱如下:
1.首先基於原理圖從理論角度對該濾波電路進行分析
2.用示波器對按鍵按下和鬆開時的波形進行檢測
3.基於實驗結果分析消抖電路
4.對電容併聯開關的消抖電路進行簡要總結
該開關電路的原理圖主要分為兩種情況,第一種是按鍵按下時,第二種是按鍵鬆開時。
假設按鍵沒有按下時,電容c62和電阻r64串聯在3v3的電源和地之間,電容兩端的電壓是3.3v。已知電容沒有電位瞬變的能力,在按下按鍵的瞬間,電容的初始狀態v(0)=3.3v,同時電容開始放電,兩端電壓逐漸減少。但是此時電容放電的迴路中並沒有串聯任何的電阻,只是經過了按鍵開關而已,我們姑且認假設按鍵開關和導線的電阻在 1-10ω之間,那麼時間常數的計算t=rc=1×10^(-7)s,這裡特別說明104的電容值指的是100nf(後續會給出為什麼這裡選擇的電容值是100nf最為合適,這裡我們先跳過)。
通過分析可以看到,在按鍵按下時,其電位從0v到3.3v的變化時長只需要ns級的變化。
現在我們開始推到按鍵鬆開時的情況。
按鍵鬆開時,電容的初始狀態v(0)=3.3v,同時電容開始充電,兩端電壓逐漸增大。通過原理圖我們可以看到,3v3的電源經過電阻4.7kω給電容進行充電,則時間常數t=rc=0.47ms。
則我們可以看到,按鍵按下時,其電位從3.3v到0v的變化時長是100us級甚至到了ms級。
那麼,該電容是如何進行消抖的,我們可以把開關產生抖動的過程細化如下:
由於機械開關的彈性效能,我們在按下開關時,並不能一步到位直接將電位抬公升到電源電壓,而是產生了多次抖動,取其中一次抖動做出分析,則可以認為在該抖動過程中,開關做了一次關和開的動作,即按下之後立刻鬆開,通過上述分析,假設這次抖動持續的時間超過40ns級(前面分析是100ns,這裡我們放鬆條件),則我們姑且認為電容兩端的電位上公升到了3.3v,因為前面分析過按鍵按下時其電位變化時間是100ns級。當抖動過程進入了開的動作,上述分析說過,從3.3v到0v的持續時間需要達到ms級別,也就是說產生一次持續時間超過40ns的抖動時,需要經過ms級的時間才能恢復到低電平完成一次有效的抖動對開關造成影響(這裡指的是抖動足以被誤讀為一次按鍵動作),否則電位只會被抬公升到高電平處而不會恢復到低電平。
對於沒有超過40ns的抖動,我們可以認為持續時間不足以將電位抬公升到3.3v,故不足以產生一次有效的抖動。
簡單總結如下:
在按鍵按下時產生的抖動,只有超過ms級的抖動才有可能是一次有效抖動,沒有超過40ns的抖動不足以改變電位,超過40ns但是達不到ms級的抖動只會將電位拉到高電平,同時由於後續的抖動和真正的按鍵按下時的高電平的到來,可以認為電位會持續保持高電平直到按鍵鬆開。因此,所有的抖動都會因為第一次有效抖動的到來而被覆蓋。
在按鍵鬆開時產生的抖動,超過40ns的抖動都可以將電位重新抬公升到3.3v,故可以認為,只有在不抖動且按鍵完全鬆開時,其電位經過ms級的時間後恢復回低電平。因此,所有的抖動都會因為按鍵鬆開前是高電平而被覆蓋。
上述分析是基於本人對彈性按鍵和電路的理解做出的合理推論分析,如有錯誤,不吝賜教。
在進行理論分析之後,為了確定我的分析思路無誤,我在網上搜尋了比較多的分析,其中有一篇文章的建模分析我覺得寫的非常漂亮,值得參考學習,這裡也推薦給各位道友:按鍵消抖電路瞬態電路分析
1.通過瞬態電路分析得到,按鍵在按下時電平變化的時間需要100ns級,在鬆開時電平變化時間需要100us-ms級別,和上述分析一致。
2.為了保證按鍵功能正常且具有良好的消抖效果,電容的容值為10-100nf級別最為合適。
3.電容併聯開關的消抖電路具有消抖作用,但是會帶來阻尼振盪,如果電路開關要求高,則不建議採用此類消抖電路。
為了對分析進行驗證,用示波器對我的想法進行驗證。得到觸發波形如下:
圖二圖三其中圖一是按鍵按下時的觸發波形,圖二是按鍵鬆開時的觸發波形。
分析上圖,按鍵按下時輸出為高電平,如圖一所示,此時可以看到從低電平到高電平,時間大概是200ns左右,中間伴有少量紋波(阻尼振盪),細心的朋友還可以發現實質上電路產生了兩次阻尼振盪,這次暫時未推理驗證,只是多次實驗結果可以看到按鍵按下時都會有兩次阻尼振盪,且第一次持續時間大概是30ns,第二次的持續時間大概是500ns。
圖二展示的是按鍵鬆開時的波形,從高電平恢復到低電平,時間大概經過了1.7ms左右。同時多次測試表明,在電壓下降前,總是伴隨有比較明顯的抖動,但抖動的電壓變化較小,和上述原理分析相符合。且從時間數量級上看,和理論分析的結果相符合。
圖三是沒有硬體消抖的按鍵響應波形,可以看到,產生的按鍵抖動較多,持續時間大概為30us。
為了進一步檢驗該消抖電路是否有效,本人拆除了濾波電容,進行了多次按鍵測試(測試基於野火stm32f429挑戰者的點亮led燈實驗),實驗結果如下:
帶有硬體消抖電路的按鍵可以有效完成每次按鍵動作;
沒有硬體消抖電路的按鍵出現按鍵動作失效的次數較多;
因此通過實驗一和實驗二,可以有充分的理由說明:
上述的理論分析是合理的,該消抖電路能起到一定的消抖作用,但是會帶來阻尼振盪。
通過實際測試可以看到按鍵的抖動時間已經很短了,基本保持在500us以內。·偶爾出現的1ms以上個人認為是操作失誤,正常的按鍵動作基本都是抖動500us以內。
電容併聯開關的硬體消抖電路具有一定的消抖作用,在要求不高的場合下可以使用,但是會產生阻尼振盪的現象,所以對於要求較高的電路,最好不採用電容併聯開關的消抖電路,防止阻尼振盪產生的超量電壓對電路造成的傷害。
在開關旁串乙個100ω左右的電阻既可以起到良好的消抖效果,還可以解決阻尼振盪的問題(具體有待驗證)
當然也是有代價的,即低電平會被抬高,但是相比較於另乙個電阻,其阻值分到的壓降不大,基本滿足ttl電平要求。
開關問題 高斯消元
description 有n個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的 開關也會相應地發生變化,即這些相聯絡的開關的狀態如果原來為開就變為關,如果為關就變為開。你的目標是經過 若干次開關操作後使得最後n個開關達到乙個特定的狀態。對於任意乙個開...
硬體電路之開關
開關分為機械開關和電子開關 例如三極體,流控流。由自己內部的電器控制開關 機械開關為普通的開關,在開關閉合或者斷開的一瞬間,會出現尖峰電壓或者浪湧電流,即高電伏。會對後面的負載產生影響。所以一般在後面加上乙個電容來濾波。當5v交流電源接通時,a點的電壓如圖上,對電容進行充電,電容電壓上公升逐漸緩慢,...
費解的開關 高斯消元
費解的開關 你玩過 拉燈 遊戲嗎?25盞燈排成乙個5x5的方形。每乙個燈都有乙個開關,遊戲者可以改變它的狀態。每一步,遊戲者可以改變某乙個燈的狀態。遊戲者改變乙個燈的狀態會產生連鎖反應 和這個燈上下左右相鄰的燈也要相應地改變其狀態。我們用數字 1 表示一盞開著的燈,用數字 0 表示關著的燈。下面這種...