99在线精品免费视频九九视-99在线精品视频-99在线精品视频免费观里-99在线精品视频在线观看-99在线免费播放



官方論壇
官方淘寶
官方博客
微信公眾號
點(diǎn)擊聯(lián)系吳工 點(diǎn)擊聯(lián)系周老師
您的當(dāng)前位置:主頁 > FPGA原創(chuàng) >

基于FPGA的邊緣檢測工程按鍵部分詳細(xì)解析

發(fā)布時間:2019-12-14   作者:小黑同學(xué) 瀏覽量:

基于FPGA的邊緣檢測工程按鍵部分詳細(xì)解析

作者:小黑同學(xué)

本文為明德?lián)P原創(chuàng)文章,轉(zhuǎn)載請注明出處!

1.1 硬件電路

明德?lián)P采用MP801開發(fā)板來進(jìn)行邊緣檢測項(xiàng)目,在開發(fā)板中按鍵的實(shí)際位置如下圖所示:

明德?lián)PMP801開發(fā)板采用4個獨(dú)立按鍵加一個復(fù)位按鍵,其中最左邊為復(fù)位按鍵,并且采用上拉的連接方法,默認(rèn)為1,當(dāng)按鍵按下時,按鍵的電平被拉低。按鍵的電路原理圖如下所示:

 

1.2 按鍵原理

MP801開發(fā)板上的按鍵為機(jī)械式開關(guān)結(jié)構(gòu),此機(jī)械式開關(guān)的是具有彈性的,因?yàn)槠浜诵牟考閺椥越饘倩善敲丛陂_啟或者閉合的瞬間會在接觸點(diǎn)出現(xiàn)來回彈跳的現(xiàn)象,即我們說的按鍵抖動。當(dāng)然這種情況并不是只在MP801開發(fā)板上出現(xiàn),現(xiàn)階段下絕大多數(shù)的按鍵都是機(jī)械式開關(guān)結(jié)構(gòu),這是無法避免的問題。

雖然只是進(jìn)行了一次按鍵,其實(shí)在按鍵信號穩(wěn)定的前后出現(xiàn)了多個脈沖,實(shí)際產(chǎn)生的波形如下圖所示:

在按鍵閉合和斷開的瞬間,我們其實(shí)只需要一組穩(wěn)定的上升沿和下降沿,但是實(shí)際情況卻產(chǎn)生了若干個沿。因此在實(shí)際的電路中,如果將這樣的信號直接傳送給微處理器掃描采集的話,那就存在把抖動信號當(dāng)做按鍵信號的可能,這樣雖然只按了一次按鍵,但是微處理器卻認(rèn)為按了多次按鍵。為了可以達(dá)到按一次按鍵就可以得到一次識別的效果,就需要對按鍵進(jìn)行消抖處理,消除按下按鍵時不穩(wěn)定、隨機(jī)的抖動電壓信號。機(jī)械式按鍵的抖動次數(shù)、抖動時間、抖動波形都是隨機(jī)的,不同類型的按鍵的最長抖動時間也不同,抖動時間的長短和按鍵的機(jī)械特性有關(guān),一般為5到10ms,但有些按鍵的抖動時間可達(dá)到 20 ms甚至更長。因此,具體設(shè)計(jì)中要具體分析,根據(jù)實(shí)際情況來調(diào)整設(shè)計(jì)。

1.3 按鍵捕捉

有些同學(xué)看到按鍵消抖處理,就理所應(yīng)當(dāng)以為是將按鍵按下這一活動的抖動部分進(jìn)行消除,但其實(shí)按鍵的消抖只是一種比較正式的說法,其本質(zhì)上是在抖動的波形中,捕捉到比較穩(wěn)定的電壓。

我們通過實(shí)際情況來學(xué)習(xí)下。一般按鍵都是低電平有效,通常情況下按鍵信號為高電平,當(dāng)主動按下按鍵時會變成低電平,這是按鍵的基本電平情況。前面我們有說到,在按下的瞬間,穩(wěn)定狀態(tài)的信號前后都會產(chǎn)生抖動,這時即使按鍵信號等于0也無法表示按鍵被按下。

為了解決這一問題,我們對此進(jìn)行了思考,不論信號為抖動信號還是正常信號,都對此進(jìn)行采集,并對其進(jìn)行監(jiān)控,如果信號變0,就可以暫時的判斷為進(jìn)行了按下按鍵操作。接著我們來判斷持續(xù)時間,當(dāng)此操作只持續(xù)了一瞬間,信號就變回了1,那么可以判斷為按鍵抖動;反之如果信號為0持續(xù)了一段時間并且趨于穩(wěn)定,那么就可以判斷此操作為按下按鍵。明德?lián)P管這種行為叫做按鍵捕捉,在按鍵信號中捕捉到持續(xù)一段時間的低電平信號,判斷為按下按鍵的有效操作。關(guān)于持續(xù)時間的判斷,明德?lián)P使用的MP801開發(fā)板抖動時間比較短,低電平信號持續(xù)10ms以上就可以判斷為按下按鍵的行為成立。

如下圖所示,按鍵持續(xù)為高電平,當(dāng)按下按鍵的時候會變?yōu)榈碗娖剑窃诖饲昂蠖紩a(chǎn)生一段高高低低的抖動信號。按鍵捕捉的方法就是持續(xù)的檢測信號的進(jìn)度,比如到第一個低電平產(chǎn)生時,開始計(jì)時,假設(shè)第一個出現(xiàn)的低電平持續(xù)時間為6ms,不滿足按鍵按下標(biāo)準(zhǔn);第二個低電平信號出現(xiàn)持續(xù)時間為8ms,不滿足按鍵按下標(biāo)準(zhǔn);到第四個低電平信號,持續(xù)了10ms以上,滿足按下按鍵標(biāo)準(zhǔn),即可判斷這里有一次的按下按鍵操作;接著第五個低電平信號,持續(xù)時間為6ms,不滿足按下按鍵標(biāo)準(zhǔn)。這種方法,就可以幫助我們很好的確判斷有效按鍵信號。

 

我們將捕捉到的持續(xù)10ms以上低電平狀態(tài)的信號提取出來,就是表示按下按鍵操作的信號。在這里,明德?lián)P會選擇產(chǎn)生一個有效指示信號key_vld來表示按鍵的狀態(tài)。此信號初始狀態(tài)為低電平,當(dāng)捕捉到按鍵按下操作時,信號key_vld會變?yōu)楦唠娖剑掷m(xù)一個時鐘周期,然后重新變?yōu)榈碗娖健_@時我們只要通過判斷key_vld信號的狀態(tài),如有沒有變?yōu)楦唠娖健⒊霈F(xiàn)了幾個高電平,就可以判斷按鍵是否按下以及按下幾次按鍵。這里需要注意,key_vld信號不是代表按鍵的按下的低電平信號,而是已經(jīng)完成了按鍵捕捉的環(huán)節(jié),對捕捉到的成功按下按鍵結(jié)果的一個表現(xiàn)。持續(xù)一個時鐘周期也并不是說按鍵信號持續(xù)了一個時鐘周期,而是向大家更加清晰的表示,這里進(jìn)行了按下按鍵操作。

這里可以理解為,當(dāng)捕捉到一個持續(xù)10ms以上的低電平信號,信號key_vld會舉手示意一下,再次捕捉到下一個時,信號key_vld會再次舉手示意一下。信號key_vld就如它的類型一樣,為有效表示信號,只是表示按下按鍵的有效操作,不做其他。

如下圖所示,我們增加了一個key_vld信號,此信號在這段時間內(nèi)拉高了一個時鐘周期,這就可以判斷按鍵按下了一次。

 

1.4 按鍵消抖的實(shí)現(xiàn)

前面有提到按鍵消抖并不是消除抖動,而是在有抖動的基礎(chǔ)上進(jìn)行一定的操作從而更加準(zhǔn)確的判斷按鍵操作的有效性,實(shí)現(xiàn)按鍵消抖有硬件方法和軟件方法。

硬件消抖的原理很簡單,就是在按鍵上并聯(lián)一個電容,如下圖,利用電容的充放電特性來對抖動過程中產(chǎn)生的電壓進(jìn)行平滑處理,從而實(shí)現(xiàn)消抖。原理前面也有詳細(xì)的講述

但實(shí)際應(yīng)用中,由于這種方式的效果不佳,會有一定的不穩(wěn)定性,增加了電容后由提升了電路的復(fù)雜程度,并且硬件的增加也令成本提高,綜合考慮后,明德?lián)P更多的是采用軟件即程序來實(shí)現(xiàn)消抖的。

前面我們講了捕捉到了足夠時間的信號,判斷為有效按鍵,明德?lián)P的軟件消抖方法即使用計(jì)數(shù)器實(shí)現(xiàn)消抖。前面有講到,按下按鍵的操作會產(chǎn)生低電平,但是由于按鍵的抖動,導(dǎo)致并不是產(chǎn)生固定的一段低電平,而是在前后會有短時間的高低電平波動。那么我們就增加一個計(jì)數(shù)器,用來數(shù)低電平持續(xù)時間,當(dāng)持續(xù)時間達(dá)到10ms的時候,判斷完成一次有效按鍵操作,當(dāng)?shù)碗娖匠掷m(xù)時間不足10ms的時候,即判斷為按鍵抖動,不做有效判斷。

不同按鍵的抖動時間不同,這樣通過軟件實(shí)現(xiàn)按鍵消抖的方式,對于不同的按鍵可以設(shè)計(jì)不同的計(jì)數(shù)器計(jì)數(shù)時間,更具有穩(wěn)定性,也節(jié)約了一定成本,非常建議大家使用。

1.5 按鍵采集實(shí)現(xiàn)

理解了按鍵工作的原理,我們來在FPGA中實(shí)現(xiàn)按鍵采集。

我們先將設(shè)計(jì)目標(biāo)使用波形圖表示出來,如下圖所示,按鍵信號定義為key_in,持續(xù)為高電平狀態(tài)即1,變0表示按下按鍵,并且按下按鍵的時間是不確定的;由于按鍵信號key_in屬于異步信號,必須寄存兩拍,第一拍key_in_ff0將信號同步化,第二拍key_in_ff1減少亞穩(wěn)態(tài)帶來的影響。當(dāng)信號key_in_ff1變0時,計(jì)數(shù)器開始計(jì)數(shù),計(jì)數(shù)器數(shù)夠10ms表示按下按鍵;增加一個信號flag初始狀態(tài)為0,當(dāng)計(jì)數(shù)器數(shù)夠10ms時信號變1,當(dāng)key_in_ff0結(jié)束變1時,flag信號變0,表示按鍵操作結(jié)束;增加一個key_vld信號,當(dāng)計(jì)數(shù)器數(shù)夠10ms時拉高1個時鐘,表示成功按下一次按鍵。

 

根據(jù)波形圖一起來進(jìn)行代碼的實(shí)現(xiàn),將信號key_in異步信號同步化代碼表示如下圖所示:

 

接著來將計(jì)時器用代碼表示出來首先計(jì)數(shù)器的加一條件,根據(jù)波形圖可知,當(dāng)key_in_ff1并且flag==0的時候,計(jì)數(shù)器加1條件成立。關(guān)于計(jì)數(shù)器數(shù)多少下,有目的可知道,當(dāng)按鍵低電平持續(xù)時間足夠10ms即按鍵動作有效,因此計(jì)數(shù)器數(shù)10ms,我們使用的時鐘頻率為50Mhz,那么一個時鐘周期就是20ns,要數(shù)夠10ms,就需要500000個時鐘周期,又因?yàn)橛?jì)數(shù)器是從0開始計(jì)數(shù)的,所以計(jì)數(shù)器的結(jié)束條件就是500000-1。

因此計(jì)數(shù)器的代碼表示如下所示:

 

接著標(biāo)志信號flag,信號處于低電平狀態(tài),當(dāng)計(jì)數(shù)器數(shù)夠500000下,標(biāo)志著按鍵操作成立,flag信號拉高,當(dāng)key_in_ff1變1,標(biāo)志著按鍵動作結(jié)束,因此flag的代碼表示如下:

 

 

當(dāng)計(jì)數(shù)器數(shù)完10ms時,我們需要key_vld信號產(chǎn)生一個時鐘周期的高電平輸出,表示一次按鍵操作,因此當(dāng)end_cnt時,信號變1,代碼表示如下:

 

以上就是使用按鍵采集的整個過程,其中包含了按鍵信號消抖和信號捕捉,我們再來做一個總結(jié),當(dāng)遇到有抖動產(chǎn)生的按鍵,就設(shè)置一個信號持續(xù)時間門檻,當(dāng)信號持續(xù)時間達(dá)到這個門檻,可以判斷為有效按鍵信號,當(dāng)無法達(dá)到這個門檻,則按下按鍵操作不成立。達(dá)到門檻的信號,即代表了一次按鍵操作成立,整個操作中,達(dá)到了幾次門檻,就代表按下幾次按鍵。代碼是以適配本工程硬件來寫的,但是道理都是相通的,后續(xù)讀者朋友們遇到按鍵消抖的問題可以使用這種方法解決。

更多邊緣檢測相關(guān)文件歡迎添加Q:1817866119(N老師)獲取!

  •   
  •   
  •   
  •  
  • FPGA教育領(lǐng)域第一品牌
  • 咨詢熱線:020-39002701
  • 技術(shù)交流Q群:544453837
主站蜘蛛池模板: 亚洲国产精品高清在线一区| 中文字幕亚洲另类天堂| 中国一级毛片免费看视频| 在线免费黄| 成人看片| 成人特黄午夜性a一级毛片| 交在线观看网站视频| 免费看在线爱爱小视频| 免费播放aa在线视频成人| 欧美性视频网| 欧美毛片一级| 欧美日韩在线视频免费完整| 欧洲女人性开放免费网站| 国产一级 黄 片| 欧美高清在线精品一区二区不卡 | 在线亚洲精品自拍| 色视频在线观看视频| 成年人在线观看网址| 成人在线手机视频| 在线观看av片永久免费| 在线观看国产一区| 亚洲成综合| 手机日韩看片| 日韩精品久久久毛片一区二区| 午夜hhh视频在线观看hhhh| 日韩欧美一级毛片精品6| 日本综合久久| 小明看看永久视频| 一级毛片在线全部免费播放| baoyu131成人免费视频| 91精品国产人成网站| 2015xxx小明永久免费| 在线播放另类| 亚洲 欧美 在线观看| 日韩欧美在线视频观看| 欧美日韩一本大道香蕉欧美| 久久久久久久久女黄9999| 国内成人免费视频| 国产成人精品视频频| 福利在线免费视频| 特级欧美|