技巧分享:如何在FPGA內實現按鍵消抖?
發布時間:2015-01-08 責任編輯:sherryyu
【導讀】在FPGA內實現按鍵消抖的方法多種多樣,但是最簡單的是采用移位寄存器的方法進行消抖。因為移位寄存器的方法不需要對時鍾進行分頻,也不需要進行延時等複雜操作。本文就為大家講解這種在FPGA內實現按鍵消抖的方法。
抖動的產生
通常的按鍵所用開關為機械彈性開關,當機械觸點斷開、biheshi,youyujixiechudiandedanxingzuoyong,yigeanjiankaiguanzaibiheshibuhuimashangwendingdijietong,zaiduankaishiyebuhuiyixiaziduankai。yinerzaibihejiduankaideshunjianjunbansuiyouyilianchuandedoudong,weilebuchanshengzhezhongxianxiangerzuodecuoshijiushianjianxiaodou。
抖動時間
抖動時間的長短由按鍵的機械特性決定,一般為5ms~10ms。這(zhe)是(shi)一(yi)個(ge)很(hen)重(zhong)要(yao)的(de)時(shi)間(jian)參(can)數(shu),在(zai)很(hen)多(duo)場(chang)合(he)都(dou)要(yao)用(yong)到(dao)按(an)鍵(jian)穩(wen)定(ding)閉(bi)合(he)時(shi)間(jian)的(de)長(chang)短(duan)則(ze)是(shi)由(you)操(cao)作(zuo)人(ren)員(yuan)的(de)按(an)鍵(jian)動(dong)作(zuo)決(jue)定(ding)的(de),一(yi)般(ban)為(wei)零(ling)點(dian)幾(ji)秒(miao)至(zhi)數(shu)秒(miao)。鍵(jian)抖(dou)動(dong)會(hui)引(yin)起(qi)一(yi)次(ci)按(an)鍵(jian)被(bei)誤(wu)讀(du)多(duo)次(ci)。為(wei)確(que)保(bao)FPGA對鍵的一次閉合僅作一次處理,必須去除鍵抖動。在鍵閉合穩定時讀取鍵的狀態,並且必須判別到鍵釋放穩定後再作處理。

圖1 按鍵抖動
FPGA內實現消抖的方法
在FPGA內(nei)實(shi)現(xian)按(an)鍵(jian)消(xiao)抖(dou)的(de)方(fang)法(fa)多(duo)種(zhong)多(duo)樣(yang),但(dan)是(shi)最(zui)簡(jian)單(dan)的(de)是(shi)采(cai)用(yong)移(yi)位(wei)寄(ji)存(cun)器(qi)的(de)方(fang)法(fa)進(jin)行(xing)消(xiao)抖(dou)。因(yin)為(wei)移(yi)位(wei)寄(ji)存(cun)器(qi)的(de)方(fang)法(fa)不(bu)需(xu)要(yao)對(dui)時(shi)鍾(zhong)進(jin)行(xing)分(fen)頻(pin),也(ye)不(bu)需(xu)要(yao)進(jin)行(xing)延(yan)時(shi)等(deng)複(fu)雜(za)操(cao)作(zuo),即(ji)可(ke)實(shi)現(xian)對(dui)按(an)鍵(jian)邊(bian)沿(yan)的(de)檢(jian)測(ce)。假(jia)設(she)未(wei)按(an)下(xia)時(shi)鍵(jian)值(zhi)=1.
1、在無鍵按下時,移位寄存器samp[7:0]始終采集到高電平,即samp[7:0]=8''b1111_1111;
2、當鍵按下時,samp[7:0]將采集到低電平,數據的變化方式為samp[7:0]=8''b1111_1110-->8''b1111_1100-->8''b1111_1000--> ........——>8''b0000_0000;samp[7:0]=8''b1111_1110即為按鍵下降沿。
3、當鬆開按鍵時,samp[7:0]將重新采集到高電平,數據變化方式為samp[7:0]=8''b0000_0001-->8''b0000_0011--> ........-->8''b1111_1111;當samp[7:0]=8''b0111_1111時,即為按鍵上升沿。

圖2 移位寄存器消抖原理圖
[page]
參考Verilog代碼
//模塊名:EdgeDetect,邊沿檢測
//button:按鍵,無鍵按下時為高電平//clk:10M時鍾
//rst:複位按鈕,低電平有效
//rise:檢測到上升沿,高電平有效,寬度為1個clk
//fall:檢測到下降沿,高電平有效,寬度為1個clk
module EdgeDetect(
input clk,
input rst,
input button,
output reg rise,
output reg fall
);
reg[7:0] samp;//移位寄存器采集button鍵值
//移位寄存器采集button信息
always@(posedge clk or negedge rst)
begin
if(!rst)
samp<=8''b1111_1111;
else
samp<={samp[7:1],button};
end
//產生上升沿信息
always@(posedge clk or negedge rst)
begin
if(!rst)
rise<=1''b0;
else if(samp==8''b1111_1110)
rise<=1''b1;
else
rise<=1''b0;
end
//產生下降沿信息
always@(posedge clk or negedge rst)
begin
if(!rst)
fall<=1''b0;
else if(samp==8''b0111_1111)
fall<=1''b1;
else
fall<=1''b0;
end
endmodule
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 從機械執行到智能互動:移遠Q-Robotbox助力具身智能加速落地
- 品英Pickering將亮相2026航空電子國際論壇,展示航電與電池測試前沿方案
- 模擬芯片設計師的噩夢:晶體管差1毫伏就廢了,溫度升1度特性全飄
- 3A大電流僅需3x1.6mm?意法半導體DCP3603重新定義電源設計
- 芯科科技Tech Talks與藍牙亞洲大會聯動,線上線下賦能物聯網創新
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索




