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



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

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

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

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

作者:小黑同學(xué)

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

1.1 硬件電路

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

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

 

1.2 按鍵原理

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

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

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

1.3 按鍵捕捉

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

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

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

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

 

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

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

如下圖所示,我們?cè)黾恿艘粋€(gè)key_vld信號(hào),此信號(hào)在這段時(shí)間內(nèi)拉高了一個(gè)時(shí)鐘周期,這就可以判斷按鍵按下了一次。

 

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

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

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

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

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

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

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

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

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

 

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

 

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

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

 

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

 

 

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

 

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

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

  •   
  •   
  •   
  •  
  • FPGA教育領(lǐng)域第一品牌
  • 咨詢熱線:020-39002701
  • 技術(shù)交流Q群:544453837
主站蜘蛛池模板: 色涩在线观看 | 日本特级aⅴ一级毛片 | 大学生高清一级毛片免费 | 亚洲成网777777国产精品 | 久久精品无遮挡一级毛片 | 婷婷色视频 | 国产成人涩涩涩视频在线观看免费 | 黄色欧美大片 | 欧美五月婷婷 | 精品亚洲视频在线观看 | 黄色免费看看 | 久久国产成人福利播放 | 性色网址 | 色综合网站国产麻豆 | 国产精品久久久久久影视 | 好男人在线影院www 好看的一级毛片 | 国产视频日韩 | 欧美在线观看网站 | 国产福利视频一区二区微拍 | 国产成人精品日本亚洲网址 | hh99me福利毛片 | 免费国产不卡午夜福在线 | 色综合中文字幕 | 欧美一级毛片一级毛片 | jul724青木玲中文字幕 | 日本aaa大片 | 亚洲综合美腿丝国产一区 | 在线观看激情偷拍视频 | 激情伊人 | 国产亚洲综合色就色 | 国产精品1区 2区 3区 | 亚洲精品久久成人福利 | 国产亚洲人成网站观看 | 91看片在线观看 | 午夜性激福利免费观看 | 国产精品一区二区国产 | 亚洲国产精品一区二区久久 | 中国a级淫片免费播放 | 99热这里都是国产精品 | 国产无圣光高清一区二区 | 一级视频在线观看 |