回覆列表
  • 1 # 科技電小二

    微控制器系統當中,最常用的外設和人機輸入就是按鍵,按鍵常分為獨立按鍵,矩陣按鍵,AD按鍵等。

    什麼是獨立按鍵以及特點

    一個按鍵獨立佔用一個微控制器埠,完成高低電平的變化,從而實現各種按鍵的邏輯判斷。

    獨立按鍵的特點,區別於AD按鍵和矩陣鍵盤,獨立按鍵的邏輯判斷簡單,硬體設計簡單,主要是佔用微控制器的埠資源。

    獨立按鍵的應用場景, 一般來說在按鍵個數較少,或者按鍵有多重功能複用時,考慮使用獨立按鍵。

    按鍵的消抖方式

    為什麼需要消抖,這是因為在按鍵按下時候,會形成一個簡短機械的反覆電平抖動,而這種電平的抖動會容易造成誤判干擾,所以必須避開,一般有兩鍾方法。

    硬體消抖,在按鍵並聯電容,利用電容對快速變化的電平有濾波作用而消抖。這種方式其實很少用。

    軟體消抖,在微控制器判斷時,在按鍵按下的這個過程中,軟體避開抖動電平的區間。一般按鍵都是使用軟體消毒消抖。

    按鍵的思路:

    1需要一個能夠計時的裝置,計算你需要延時消抖的時間時長,這個部分就需要使用定時器。

    2,每次按鍵按下,電平變化,定時器計數變數開始計數,等到時間,按鍵依舊有效,則觸發,如果中途按鍵電平變化,則計數變數清零,一般這個時間設定為10ms即可。

    3,當鬆開按鍵,電平回覆成正常時,則清除計數變數的值。如下圖所示,則是對按鍵的 按鍵鬆開起反應的程式碼說明,按鍵鬆開後,按鍵狀態位值1。

  • 2 # 電子及工控技術
    獨立按鍵

    1、獨立按鍵的結構與工作過程

    獨立按鍵從原理圖中可以看出它們的按鍵一端都是與GND接地的,按鍵的另一端呢?它是與微控制器的I/O口連線。若用手按下按鍵時相對應的I/O口就會被接地端的按鍵拉成低電平(0V),如果手鬆開時獨立按鍵所對應的I/O口就會被上拉電阻提升到高電平。就這樣微控制器透過程式指令實時檢測所對應獨立按鍵I/O口的高低電平情況就可以判斷出每個I/O口是否被按下了。

    第一步是先判斷是不是有按鍵被按下,上面講了透過檢測高低電平就可以判斷出有沒有按鍵按下。

    第二步是要對按鍵的抖動進行處理,因為我們常用的按鍵都是機械式的微動按鍵,在用手按下或鬆開的瞬間由於按鍵的機械結構原因會有大約15毫秒左右的抖動,這樣就會在電平的下降沿和上升沿就會出現一系列的抖動波形,這樣會對微控制器產生誤操作,必須要採取消抖動的方法。具體如何操作下面與朋友們分享。

    第三步是抖動消除完成後需要再一次判定按鍵的動作是不是真的被按下,如果這時微控制器還是檢測到是低電平說明按鍵確實被按下了,然後就該確定是哪個按鍵被按下了,這時我們就可以給按鍵透過程式起個“名字”(鍵碼),然後就可以去執行相應的任務了。

    第四步是要回覆按鍵的初始狀態,也就是說要判斷按鍵是不是被鬆開了,因為我們不能一直按著按鍵不動,需要把手解放出來。最後再把我們所接的按鍵I/O口恢復到初始的高電平狀態。就這樣按照這四個方法按鍵就可以穩定地去“發號施令”了。

    2、獨立按鍵的特點

    獨立按鍵的特點可以從原理圖中看出它們各個按鍵彼此都是獨立的,每個按鍵輸入線的輸入電平變化不會相互之間受到受影響的。每一個按鍵要佔用一個獨立的I/O口,這種按鍵所佔用單片的埠資源比較多,使用較多按鍵時會佔用較多的微控制器埠,一般需要在按鍵較少的場合用比較合適。

    另一個方面,從整個獨立按鍵的組成看它們的結構是很簡單的,在編寫程式時比較容易編寫按鍵的輸入程式,因此這種獨立按鍵配置靈活、結構簡單、操作程式很容易實現。

    用軟體防按鍵抖動處理的方法

    軟體的抖動前面我們已經做了簡單的介紹,在這裡我與朋友們分享一下如何對按鍵進行防抖動的處理。在按鍵消抖動的問題上我們一般採用兩種方法,一種是軟體的消抖動的方法另一種是硬體消抖動的方法。

    1、用短暫延時法去消抖動的方法

    軟體消抖動主要是透過編寫程式,透過一定的“演算法”來實現。由於這種演算法比較多,下面我就介紹兩種供朋友們參考一下。第一種就是“入門級”的方法,對於剛學微控制器的朋友們較常用的。我們暫且稱為“短暫延時法”,其工作過程就是在第一次檢測到有按鍵按下時,我們用一個延時15毫秒左右的子程式把這個前沿抖動的不確定的電平直接“遮蔽”掉,然後再一次確認該電平的狀態,如果檢測到按鍵還是閉合的狀態說明按鍵確實按下了,就去執行相應的命令就行了,如果按鍵不是閉合說明是因為干擾造成的,微控制器就無響應。

    2、按鍵連續掃描判斷法

    第二種方法是我在學微控制器時微控制器老師給介紹的一種,今天借這個機會給朋友們分享一下,首先在編寫程式時我們要用微控制器裡面的一個定時器作為每2ms產生一次中斷並掃描一次按鍵電平狀態儲存起來,就這樣連續檢測 8 次後看看這連續 8 次的按鍵狀態是不是一樣的。 檢測8 次按鍵的時間大約在 16ms,如果在 16ms 內按鍵都是一樣的電平就說明按鍵處於了穩定的狀態。就這樣每經過 2ms 左移一次,每移動一次就判斷當前連續的 8 次按鍵狀態是不是全為高電平(1) 或者全為低電平(0) ,如果是全為高電平(1)則說明是按鍵彈起了,如果低電平(0)的話則說明按鍵時處於按下的狀態,如果既有高電平(1) 也有低電平(0)就說明按鍵是處於抖動的時間,不做任何判定。

    利用這種軟體的方法可以避免透過延時消抖佔用微控制器執行時間,提過了微控制器執行程式的效率,如果有感測器需要取樣的話更能突出這個軟體防抖動的優勢,現在我編寫按鍵防抖動一般都採用這種方法。

    用硬體防按鍵抖動處理的方法

    用硬體防按鍵抖動的方法不是很常見,但是在有的微控制器控制場合也會用到。它一也般採用兩種方法,一種是採用雙穩態消抖動電路,另一種是用濾波消抖動電路。前者主要是用兩個與非門構成一個RS觸發器來實現的,後者是用RC積分電路具有吸收干擾脈衝的功能來實現的。

    這種電路的原理是根據電容兩端的電壓不能突變來實現的,就是說當按鍵按下時只要電容C兩端的電平的波動不超過非門的開啟電壓(0.8V),那麼閘電路的輸出就不會變化,只要選擇好適當的電容和電阻就可以比較理想地防護按鍵的抖動了。

    矩陣按鍵

    以上我們都是說的獨立按鍵,但是在相當一部分微控制器控制電路里由於I/O口的數量限制,當需要較多的按鍵輸入口時都採用了矩陣的按鍵模式。

    如下圖原理圖所示的那樣,如果 KeyOut1 輸出一 個低電平(0),那麼就相當於KeyOut1是 接地的,這就類似 四個獨立按鍵。此時就必須把 KeyOut2、 KeyOut3、KeyOut4 都置為高電平輸出才行,只有這樣才能保證與它們相連的三路按鍵 不會對這一路產生干擾。

  • 3 # 愛上半導體

    特點

    獨立鍵盤的特點是廉價、簡單,幾乎可以應用在所有需要控制的場景中。

    只要按下去會返回的幾乎都是獨立式鍵盤,最明顯的就是iphone的Home鍵了,在你按下去之後,它的鍵盤還會回到最初始的狀態,這就是獨立式鍵盤。

    除此之外,我們的電腦鍵盤、遙控鍵盤這些也是獨立鍵盤。

    但是這種鍵盤不是獨立鍵盤,比如iPhone的靜音鍵,它有兩種狀態,分別是靜音和非靜音狀態,且不能自己恢復。

    電路符號

    獨立鍵盤和非獨立鍵盤的電路符號如下:

    獨立按鍵的好處是可以反覆的施加同一個訊號,比如手機的音量鍵,我們按下去一次,音量增加一點,以此往復。

    總之獨立按鍵可以做很多非獨立按鍵不能做的事情。

    軟體消抖

    什麼是軟體消抖?

    我們先看一下獨立按鍵的應用場景

    當按鍵未按下的時候,微控制器檢測到的是5V電平;

    當按鍵按下時,微控制器檢測到的是0V;

    但是呢,真是的按鍵按下的時候不是這樣的。

    我們可以看一下按鍵在按下的這一瞬間電位的波形。

    從波形可以看出,按鍵並不是按下之後立馬變為0V,而是有一個抖動的過程。

    如果微控制器直接檢測,可能會亂動作,這時候應該給微控制器加一個延時,比如說在第一次檢測到按鍵按下之後,延時30ms,然後再檢測一次,如果此時檢測到的還是按下的狀態,則說明按鍵被按下。

    至於這個延時是多少,還得具體按鍵具體分析,如果是做產品要用到軟體消抖,一定要拿示波器測試一下抖動的波形,看看抖動的時間到底是多少!

  • 4 # 玩轉嵌入式

    獨立式按鍵和矩陣式按鍵相對,是指一個按鍵佔用一個GPIO口的情況,主要用在按鍵數比較少的場合,用作按鍵輸入實現產品的人機互動。比如洗衣機的面板按鍵、電飯煲的按鍵等。

    按鍵一般都是透過機械式按鍵來實現的,根據是否自鎖可以分為自鎖按鍵和非自鎖按鍵。自鎖按鍵,導通和斷開需要兩次按鍵動作,第一次按下時處於導通/斷開狀態,鬆手後保持該狀態,第二次按下後實現復位。而非自鎖按鍵,鬆手後即復位,如果要狀態保持,需要持續按壓。機械式按鍵是透過簧片接觸和斷開實現開關動作的,所以在按下和彈起的時候都會出現抖動的情況。如果不處理抖動就會出現誤動作。所以,機械式按鍵的消抖處理是必須的。如下圖所示。

    抖動發生在按下和彈起時,一般抖動持續5-10ms,程式在按鍵檢測時,如果不進行濾波則會出現按鍵多次的誤觸發。那麼消抖程式該如何設計呢?

    在學習微控制器初期,很多例程都告訴我們採用延時的方法去抖動,思路如下:當檢測到按鍵動作時,先延時10ms,在進行一次按鍵檢測,如果還是檢測到按鍵動作,則再延時10ms,如果還能檢測到按鍵動作則認為按鍵發生了。這種方法最容易理解,但是非常浪費資源。不建議使用。

    在設計產品時,一般使用如下兩種方式。第一種方式,定義一個按鍵計數變數和標誌位,當檢測到按鍵時,讓按鍵計數變數自加,判斷按鍵計數器的值如果大於一定值,則標誌位置1,否則標誌位清零。

    第二種方式。採用定時器中斷,設定10ms定時變數,當按鍵發生時啟動定時器,10ms後進入中斷再次檢測按鍵事件,如果依然檢測到按鍵發生則代表按鍵有效。

    以上消抖方案可以根據實際情況進行最佳化。

  • 5 # fire1

    按鍵是比較常用的也是比較簡單的人機互動操作,按鍵實際上是一個非自鎖的輕觸開關,按下時觸點會閉合,鬆開是觸點斷開。電路或者微控制器透過檢測按鍵之後的高低電平變化,來檢測按鍵是否按下,透過程式的控制,就可以實現不同功能的選擇與設定。

    獨立按鍵的特點和適用場合

    獨立按鍵最大的特點是一個按鍵佔用一個埠,這樣的好處是不會因為其他按鍵或線路出現問題而影響當前按鍵的功能,缺點就是當按鍵比較多時,佔用的埠比較多。所以這種按鍵的連線方式一般用在按鍵較少或者控制晶片的埠空閒較多時,以及對部分功能的穩定性或者操作的優先性有要求的場合。

    上圖是常用的按鍵檢測硬體連線原理圖。四個按鍵K1-K4透過上拉電阻後輸入到控制晶片的埠,在按鍵未被按下時,由於上拉電阻的存在使埠檢測為高電平,按鍵按下時,對應的埠會變為低電平,控制晶片的程式透過迴圈檢測埠的高低電平變化就可以檢測哪個按鍵被按下了。

    按鍵的防抖消除

    按鍵被按下時,在內部的觸點接觸的一瞬間,它的狀態是不穩定的,會在通斷之間高速轉變,這樣被控制器檢測之後就會形成多次的觸發。為了避免按鍵抖動所帶來的誤動作,要進行按鍵消抖動。

    按鍵的消抖一般從硬體及軟體兩方面著手。硬體消抖一般會在按鍵兩端並聯電容,透過電容的充放電作用將按鍵按下時的高頻振盪吸收掉。單純的硬體消抖是不夠的,雖然這能夠消除大部分的抖動訊號,在軟體設計上仍然需要對抖動進行去除。

    軟體消抖的程式控制思路比較簡單,一般是透過延時。當檢測到按鍵被按下時,不會立即觸發對應功能的控制,而是經過短暫的延時後,再去判斷當前埠的電平訊號,如果仍然檢測到為按鍵按下時的電平,才會認為當前按鍵被按下。延時的這段時間,正好是按鍵抖動發生的時間,再次檢測時,按鍵已經穩定按下了。

    另外還有一種在軟體上消除抖動和防止誤觸發的控制,一般是把按鍵鬆開作為判斷按鍵的標誌,而不是按下時。

    其他型別的按鍵檢測方式

    獨立按鍵由於每個按鍵都要單獨使用埠,在按鍵較多時是比較浪費資源的,如果需要把按鍵單獨引出,也是需要很多引線的。所以獨立按鍵一般只應用在數量比較少的控制電路中,對於按鍵較多的電路,很少採用這種按鍵連線方式。

    矩陣按鍵

    矩陣按鍵類似於驅動LED等控制電路的點陣連線,它是將佈線設定成行列交叉形式,按鍵連線在行列交叉點上。這樣的按鍵連結並不需要每個按鍵對應一條線,每一行或列的連線是被多個按鍵共用的,這樣能夠節省很多的埠。

    矩陣按鍵的數量為行列線的乘積,比如上圖中4根行線4根列線,最多能夠檢測16個按鍵,透過二極體等其他輔助元件,也可以實現更多按鍵的檢測。矩陣按鍵的檢測在程式設計時也是比較簡單的,可以分時使列線輸出高電平,透過檢測返回資料中的電平訊號就可以知道當前列中哪個按鍵被按下了。

    這種按鍵的連線方式能夠節省很多埠資源,也是被很多電器所採用的。但是這種方式所使用的埠還不是太少,對於需要引出鍵盤的電路,仍然需要很多根連線。

    AD按鍵AD按鍵也叫做模擬按鍵,它是透過電阻陣列對基準電壓進行分壓,按鍵按下時短接部分電阻產生電壓值的變化,透過檢測電壓來判斷按鍵被按下的。

    如上圖中的AD按鍵檢測電路,5V的基準電壓透過多個電阻的分壓,產生不同的分壓點,每個點連線一個輕觸按鍵。按鍵被按下時,產生的電壓變化透過控制器的AD埠採集,透過判斷當前檢測到的電壓,來判斷對應按下的按鍵。

    這種按鍵方式最大的優點就是節省埠,理論上無論使用多少數量的按鍵都只需要一個埠,但是它也有一定的缺點。一個是對電壓取樣的精度要求,尤其是按鍵較多,電壓比較接近時;第二個缺點是,按鍵使用時間長時,內部觸點會發生氧化,按鍵的電阻就會增大,或者在按下時發生變化,這樣就會使輸出的電壓發生改變,檢測到的按鍵就會產生誤判斷。

    所以使用AD按鍵時,通常會採用不均等阻值的電阻,使輸出的電壓相差較多而避免誤判斷,另外就是當按鍵長時間使用氧化時,需要整體更換。

  • 中秋節和大豐收的關聯?
  • 現在裝修大部分都用整合牆板安裝,整合牆面好用嗎?