• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      按鍵消抖在單片機(jī)和FPGA實(shí)驗(yàn)教學(xué)中的應(yīng)用

      2018-08-11 03:34:18徐能謀張海峰通訊作者
      數(shù)碼世界 2018年7期
      關(guān)鍵詞:中斷按鍵延時(shí)

      徐能謀 張海峰( 通訊作者)

      引言:按鍵作為當(dāng)今許多智能設(shè)備、計(jì)算機(jī)和工業(yè)控制領(lǐng)域的人機(jī)接口,為了能讓按鍵穩(wěn)定有效的工作,按鍵消抖一直是在使用按鍵時(shí)必須解決的。在長(zhǎng)期的科研與教學(xué)實(shí)踐過(guò)程中,按鍵消抖往往是高校學(xué)生在剛開(kāi)始學(xué)習(xí)按鍵時(shí)比較難處理的問(wèn)題。初學(xué)者即使掌握一些延時(shí)等按鍵消抖方法,但在實(shí)際應(yīng)用的過(guò)程中還是經(jīng)常會(huì)出現(xiàn)消抖不完全等問(wèn)題,特別是利用單片機(jī)做一些大項(xiàng)目的時(shí)候,往往會(huì)出現(xiàn)不同的模塊之間相互干擾,進(jìn)而導(dǎo)致整個(gè)系統(tǒng)不正常工作;在進(jìn)入到EDA課程的學(xué)習(xí)中,在面對(duì)FPGA的按鍵消抖時(shí),很多學(xué)生又會(huì)不知所措,無(wú)法用硬件描述語(yǔ)言去生成一個(gè)合適的消抖電路。因此,在單片機(jī)和FPGA實(shí)驗(yàn)教學(xué)中,讓學(xué)生掌握好按鍵消抖對(duì)提升學(xué)生的學(xué)習(xí)能力和思維方式有著重要意義。

      無(wú)論是矩陣按鍵還是獨(dú)立按鍵,在實(shí)際使用時(shí),必須經(jīng)過(guò)消抖處理。在單片機(jī)中,按鍵消抖可以通過(guò)延時(shí)、定時(shí)器等實(shí)現(xiàn);在FPGA中可以則使用邊沿檢測(cè)的方法實(shí)現(xiàn)按鍵消抖,就按鍵消抖原理而言,和單片機(jī)的延時(shí)消抖沒(méi)有區(qū)別。但是,在單片機(jī)與FPGA中,按鍵消抖的具體實(shí)現(xiàn)方法有不同之處。除了本文中介紹的按鍵去抖動(dòng)的方法之外,還有很多處理按鍵抖動(dòng)的方法,例如使用狀態(tài)機(jī)來(lái)寫(xiě)按鍵消抖,在單片機(jī)和FPGA中都有著很好的消抖效果。

      1 按鍵消抖原理

      在單片機(jī)和FPGA實(shí)驗(yàn)教學(xué)中,按鍵是經(jīng)常需要使用的重要模塊。按鍵通常有機(jī)械觸點(diǎn),當(dāng)按鍵在閉合或者斷開(kāi)的瞬間,都會(huì)出現(xiàn)抖動(dòng)。抖動(dòng)的時(shí)間在5~10ms內(nèi),為了確保抖動(dòng)完全被消除,本文采用消抖時(shí)間為20ms。在按鍵按下和放開(kāi)時(shí),按鍵的前沿抖動(dòng)和后沿抖動(dòng)如圖1所示。

      圖1

      按鍵消抖可以分為硬件消抖和軟件消抖兩大類(lèi)。去抖動(dòng)的原理基本相似,都是通過(guò)一定的方式,記錄下最開(kāi)始按鍵按下時(shí)的狀態(tài),然后經(jīng)過(guò)一定的延時(shí),渡過(guò)按鍵的抖動(dòng)時(shí)間之后,再比較此時(shí)按鍵的狀態(tài)是否與延時(shí)之前的狀態(tài)相同,如果是相同的,那么就可以確定按鍵的確被按下;如果不同,則說(shuō)明是抖動(dòng)。在單片機(jī)中,通過(guò)與按鍵連接的I/O口電平來(lái)判斷狀態(tài),延時(shí)則可以使用延時(shí)子程序?qū)崿F(xiàn),也可以通過(guò)計(jì)時(shí)器實(shí)現(xiàn);在FPGA中,延時(shí)可以通過(guò)編寫(xiě)硬件描述語(yǔ)言,例如Verilog HDL等,生成一個(gè)硬件去抖動(dòng)電路。

      2 單片機(jī)按鍵消抖

      2.1 單片機(jī)按鍵硬件消抖

      在單片機(jī)的教學(xué)實(shí)踐中,常用的硬件去抖動(dòng)的方法是在按鍵兩端并聯(lián)小電容,可以起到一定的去抖動(dòng)的作用。利用電容的充放電特性來(lái)對(duì)抖動(dòng)過(guò)程中產(chǎn)生電壓毛刺進(jìn)行平滑處理,從而實(shí)現(xiàn)按鍵消抖。但是同樣也存在明顯的缺點(diǎn),這種消抖方式的效果往往不是很好,而且還增加了成本和電路復(fù)雜度,所以,在實(shí)際應(yīng)用中使用的并不多。

      2.2 單片機(jī)按鍵軟件消抖

      軟件延時(shí)函數(shù)延時(shí)去抖動(dòng)方式在程序較小、程序規(guī)模不大、單片機(jī)連接的外設(shè)不多時(shí),去抖動(dòng)的效果很好。但是,在使用單片機(jī)開(kāi)發(fā)程序規(guī)模和單片機(jī)連接多個(gè)外設(shè)時(shí),采用延時(shí)函數(shù)去抖動(dòng)有著很明顯的缺陷。首先,單片機(jī)的CPU資源非常少,延時(shí)消抖與等待釋放需要消耗 CPU 運(yùn)行時(shí)間,執(zhí)行效率低下;其次,當(dāng)按鍵按下的時(shí)候,CPU相當(dāng)于一直在等待延時(shí)和釋放,執(zhí)行空語(yǔ)句,從而會(huì)導(dǎo)致單片機(jī)系統(tǒng)中的其他外設(shè)由于得不到CPU資源無(wú)法正常工作。

      軟件延時(shí)函數(shù)延時(shí)去抖動(dòng)在面對(duì)規(guī)模較大的單片機(jī)開(kāi)發(fā)時(shí),缺點(diǎn)太突出,使得CPU使用效率下降。因此,當(dāng)在進(jìn)行較大規(guī)模單片機(jī)開(kāi)發(fā)時(shí),可以采用定時(shí)中斷來(lái)實(shí)現(xiàn)按鍵的去抖動(dòng),從而解決CPU利用率低的問(wèn)題。不過(guò),隨之出現(xiàn)的問(wèn)題是,單片機(jī)的中斷源相對(duì)較少,因此,在單片機(jī)中采用軟件消抖時(shí)應(yīng)考慮實(shí)際情況選擇合適的按鍵去抖動(dòng)方案。

      2.2.1 延時(shí)消抖

      軟件延時(shí)消抖的原理,就是當(dāng)檢測(cè)到按鍵狀態(tài)變化之后,先延時(shí)等待20ms,讓抖動(dòng)消失之后再進(jìn)行一次按鍵狀態(tài)檢測(cè),如果與剛才檢測(cè)到的狀態(tài)相同,就可以確認(rèn)按鍵已經(jīng)穩(wěn)定的動(dòng)作了。下面是軟件延時(shí)消抖的參考程序:

      //按鍵軟件延時(shí)消抖

      void key_deal(keyin)

      {

      if(keyin==0)//按鍵剛剛按下

      {

      delay(20);// 延時(shí) 20ms

      if(keyin==0)//確認(rèn)按鍵被按下

      {

      while(keyin==0) ;//等待按鍵釋放

      keyout=0;//此時(shí)按鍵抖動(dòng)已去除

      }

      else keyout=1;

      }

      else keyout=1;

      }

      上面的程序是一個(gè)簡(jiǎn)單的按鍵延時(shí)消抖程序,作為一個(gè)簡(jiǎn)單延時(shí)消抖例程。但是,在實(shí)際的單片機(jī)做項(xiàng)目開(kāi)發(fā)時(shí),程序往往很大,狀態(tài)值也很多,主程序要不停的進(jìn)行掃描,判斷各種狀態(tài)值是否發(fā)生變化,及時(shí)的進(jìn)行任務(wù)調(diào)度,但是,delay語(yǔ)句會(huì)導(dǎo)致CPU被占用,主程序得不到執(zhí)行,如果外部時(shí)間恰好在程序執(zhí)行delay語(yǔ)句中發(fā)生,這樣很容易使的單片機(jī)丟失部分?jǐn)?shù)據(jù),最終導(dǎo)致系統(tǒng)不正常工作。

      2.2.2 定時(shí)中斷消抖

      為了解決軟件延時(shí)消抖帶來(lái)的弊端,同時(shí)又要完成按鍵去抖動(dòng),此時(shí),可以采用定時(shí)中斷方式實(shí)現(xiàn)按鍵消抖。定時(shí)中斷消抖很好的避免了延時(shí)消抖中占用單片機(jī)的執(zhí)行時(shí)間,當(dāng)主程序檢測(cè)到按鍵被按下時(shí),開(kāi)啟定時(shí)器,定時(shí)時(shí)間設(shè)置為20ms,當(dāng)?shù)竭_(dá)定時(shí)時(shí)間之后將定時(shí)標(biāo)志位置1。在主程序中,檢測(cè)到定時(shí)標(biāo)志為置1之后停止定時(shí)器,同時(shí)判斷按鍵是否仍然被按下,如果是,那么按鍵消抖完成并且按鍵已經(jīng)穩(wěn)定,否則按鍵沒(méi)有被成功按下。

      雖然定時(shí)中斷消抖可以解決延時(shí)消抖的弊端,但是在實(shí)際應(yīng)用過(guò)程中,單片機(jī)的中斷源相對(duì)少,當(dāng)工程項(xiàng)目很大時(shí),中斷源將會(huì)不夠用,此時(shí),定時(shí)中斷消抖顯然不太合適。為了解決定時(shí)中斷消抖在面對(duì)中斷源較少時(shí)的情況,還可以采用狀態(tài)機(jī)的方法實(shí)現(xiàn)按鍵消抖。

      3 FPGA按鍵消抖

      在FPGA開(kāi)發(fā)中,硬件去抖動(dòng)電路時(shí)十分常用,利用硬件描述語(yǔ)言,可以直接生成硬件去抖動(dòng)的電路。與單片機(jī)中的按鍵消抖相比,F(xiàn)PGA最大的優(yōu)勢(shì)在與電路的可靠性高,而不像單片機(jī)十分依賴(lài)于軟件,并且,生成的所有硬件都可以并行運(yùn)行,沒(méi)有單片機(jī)串行運(yùn)行的限制。因此,在FPGA中做硬件去抖動(dòng)電路比在單片機(jī)上做要更簡(jiǎn)單。

      采用與單片機(jī)軟件消抖的原理,F(xiàn)PGA中按鍵消抖的基本思想是:首先,外部需要提供一個(gè)時(shí)鐘,然后每個(gè)時(shí)鐘上升沿都來(lái)的時(shí)候都去檢查看按鍵狀態(tài)是否發(fā)生變化,如果變化,則相應(yīng)的計(jì)數(shù)器啟動(dòng),當(dāng)計(jì)數(shù)器記滿(mǎn)一定時(shí)間并且期間按鍵值沒(méi)有變化時(shí),說(shuō)明此時(shí)的按鍵值是穩(wěn)定的,可以讀取。然后根據(jù)去抖動(dòng)之后的按鍵值的變化做相應(yīng)的功能處理。

      在FPGA中,采用延時(shí)消抖有兩種方法,一種是將抖動(dòng)時(shí)間計(jì)算在延時(shí)時(shí)間內(nèi),從按鍵按下開(kāi)始,計(jì)時(shí)器工作,當(dāng)計(jì)數(shù)滿(mǎn)足20ms之后,判斷按鍵是否仍然被按下,從而實(shí)現(xiàn)按鍵消抖。下面是使用Verilog HDL編寫(xiě)的按鍵消抖參考程序:

      always @(posedge CLK_1kHz)

      begin

      if(keyin==0 & KL==0)

      KL<=1;

      else if(KL>0 & KL<20)

      KL<=KL+1;

      else if(KL==20 & keyin==0)

      begin keyout<=1`b0;KL<=0;end

      else

      keyout<=1`b1;

      end

      同時(shí),利用Maxplus II對(duì)程序進(jìn)行波形仿真,在輸入上手動(dòng)加上一些抖動(dòng),觀察輸出。波形仿真如圖2所示。

      圖2

      從仿真波形圖可以看出,這種方法可以消除按鍵的抖動(dòng)。另一種方法就是不計(jì)算抖動(dòng)時(shí)間,讀取按鍵當(dāng)前值并且按鍵值在20ms內(nèi)一直保持不變后,就可以確定按鍵進(jìn)入了穩(wěn)定狀態(tài),此時(shí)再讀取該按鍵的值,實(shí)現(xiàn)按鍵去抖動(dòng)。下面是使用Verilog HDL編寫(xiě)的按鍵消抖參考程序:

      //按鍵去抖動(dòng)處理 key是按鍵 CLK頻率是1kHz keyout是去抖動(dòng)之后的按鍵值

      always @(posedge CLK_1kHz)//記錄按鍵在高電平下穩(wěn)定持續(xù)時(shí)間

      begin

      if(!keyin) KL<=KL+1;

      else KL<=0;

      end

      always @(posedge CLK_1kHz)//記錄按鍵在低電平下穩(wěn)定持續(xù)時(shí)間

      begin

      if(keyin) KH<=KH+1;

      else KH<=0;

      end

      always @(posedge CLK_1kHz)//判斷按鍵穩(wěn)定持續(xù)時(shí)間是否達(dá)到20ms

      begin

      if(KH>20) keyout<=1`b1;

      else if(KL>20) keyout<=1`b0;

      end

      同時(shí),利用Maxplus II對(duì)程序進(jìn)行波形仿真,在輸入上手動(dòng)加上一些抖動(dòng),觀察輸出。波形仿真如圖3所示。

      圖3

      經(jīng)過(guò)波形仿真可以看出,第二種方法顯然可以很好的解決按鍵抖動(dòng),消除了前沿和后沿抖動(dòng),實(shí)現(xiàn)了按鍵消抖。

      上面兩種方法都可以實(shí)現(xiàn)FPGA按鍵消抖。然而,相比于第一種消抖方式,第二種消抖方式更為常用和有效。首先,第二種方式具有前沿和后沿消抖;其次,在按鍵按下或者放開(kāi)的過(guò)程中,如果按鍵存在毛刺,那么該電路也可以有效的消除這些毛刺,使得電路更加穩(wěn)定可靠。

      4 結(jié)束語(yǔ)

      在單片機(jī)和FPGA實(shí)驗(yàn)教學(xué)中,利用本文介紹的按鍵消抖方法可以有效的處理按鍵在動(dòng)作時(shí)的抖動(dòng)問(wèn)題。除了上述介紹的一些按鍵去抖動(dòng)的方法之外,還有很多按鍵消抖的方法,像利用狀態(tài)機(jī)實(shí)現(xiàn)去消抖、累乘消抖[4]等,這些去抖動(dòng)的方法也具有很強(qiáng)的實(shí)用性。在眾多的按鍵消抖方式中,每種方法各有利弊,在實(shí)際的實(shí)驗(yàn)或者項(xiàng)目開(kāi)發(fā)時(shí),需要根據(jù)實(shí)際的軟件資源、硬件資源、成本等綜合考慮,從中選出合適的按鍵消抖方式。

      猜你喜歡
      中斷按鍵延時(shí)
      基于有限狀態(tài)機(jī)的按鍵檢測(cè)程序設(shè)計(jì)
      電子制作(2021年3期)2021-06-16 03:14:26
      基于級(jí)聯(lián)步進(jìn)延時(shí)的順序等效采樣方法及實(shí)現(xiàn)
      跟蹤導(dǎo)練(二)(5)
      千里移防,衛(wèi)勤保障不中斷
      解放軍健康(2017年5期)2017-08-01 06:27:44
      一種多方向?qū)Ч獍存I結(jié)構(gòu)設(shè)計(jì)
      電子制作(2016年1期)2016-11-07 08:43:05
      Two-dimensional Eulerian-Lagrangian Modeling of Shocks on an Electronic Package Embedded in a Projectile with Ultra-high Acceleration
      桑塔納車(chē)發(fā)動(dòng)機(jī)延時(shí)熄火
      光控觸摸延時(shí)開(kāi)關(guān)設(shè)計(jì)
      河南科技(2014年23期)2014-02-27 14:19:00
      按鍵的多種狀態(tài)檢測(cè)及消抖處理方法
      家電科技(2013年4期)2013-07-09 10:55:08
      AT89C51與中斷有關(guān)的寄存器功能表解
      婺源县| 阜新市| 泗洪县| 塔城市| 巢湖市| 石棉县| 博乐市| 孙吴县| 山东省| 遂溪县| 西平县| 皋兰县| 凤山市| 凌云县| 乌鲁木齐市| 故城县| 岳池县| 齐齐哈尔市| 昌平区| 乳源| 怀宁县| 栖霞市| 双桥区| 昌邑市| 石屏县| 布拖县| 正安县| 潢川县| 大同市| 定结县| 井冈山市| 敦煌市| 台前县| 东光县| 花垣县| 清水河县| 大埔区| 兖州市| 兰州市| 石渠县| 泸西县|