參考Verilog代碼
技巧分享:如何在FPGA內(nèi)實(shí)現(xiàn)按鍵消抖?
發(fā)布時(shí)間:2015-01-08 責(zé)任編輯:sherryyu
【導(dǎo)讀】在FPGA內(nèi)實(shí)現(xiàn)按鍵消抖的方法多種多樣,但是最簡(jiǎn)單的是采用移位寄存器的方法進(jìn)行消抖。因?yàn)橐莆患拇嫫鞯姆椒ú恍枰獙?duì)時(shí)鐘進(jìn)行分頻,也不需要進(jìn)行延時(shí)等復(fù)雜操作。本文就為大家講解這種在FPGA內(nèi)實(shí)現(xiàn)按鍵消抖的方法。
抖動(dòng)的產(chǎn)生
通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān),當(dāng)機(jī)械觸點(diǎn)斷開、閉合時(shí),由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開時(shí)也不會(huì)一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動(dòng),為了不產(chǎn)生這種現(xiàn)象而作的措施就是按鍵消抖。
抖動(dòng)時(shí)間
抖動(dòng)時(shí)間的長(zhǎng)短由按鍵的機(jī)械特性決定,一般為5ms~10ms。這是一個(gè)很重要的時(shí)間參數(shù),在很多場(chǎng)合都要用到按鍵穩(wěn)定閉合時(shí)間的長(zhǎng)短則是由操作人員的按鍵動(dòng)作決定的,一般為零點(diǎn)幾秒至數(shù)秒。鍵抖動(dòng)會(huì)引起一次按鍵被誤讀多次。為確保FPGA對(duì)鍵的一次閉合僅作一次處理,必須去除鍵抖動(dòng)。在鍵閉合穩(wěn)定時(shí)讀取鍵的狀態(tài),并且必須判別到鍵釋放穩(wěn)定后再作處理。
圖1 按鍵抖動(dòng)
FPGA內(nèi)實(shí)現(xiàn)消抖的方法
在FPGA內(nèi)實(shí)現(xiàn)按鍵消抖的方法多種多樣,但是最簡(jiǎn)單的是采用移位寄存器的方法進(jìn)行消抖。因?yàn)橐莆患拇嫫鞯姆椒ú恍枰獙?duì)時(shí)鐘進(jìn)行分頻,也不需要進(jìn)行延時(shí)等復(fù)雜操作,即可實(shí)現(xiàn)對(duì)按鍵邊沿的檢測(cè)。假設(shè)未按下時(shí)鍵值=1.
1、在無鍵按下時(shí),移位寄存器samp[7:0]始終采集到高電平,即samp[7:0]=8''b1111_1111;
2、當(dāng)鍵按下時(shí),samp[7:0]將采集到低電平,數(shù)據(jù)的變化方式為samp[7:0]=8''b1111_1110-->8''b1111_1100-->8''b1111_1000--> ........——>8''b0000_0000;samp[7:0]=8''b1111_1110即為按鍵下降沿。
3、當(dāng)松開按鍵時(shí),samp[7:0]將重新采集到高電平,數(shù)據(jù)變化方式為samp[7:0]=8''b0000_0001-->8''b0000_0011--> ........-->8''b1111_1111;當(dāng)samp[7:0]=8''b0111_1111時(shí),即為按鍵上升沿。
圖2 移位寄存器消抖原理圖
[page]
參考Verilog代碼
//模塊名:EdgeDetect,邊沿檢測(cè)
//button:按鍵,無鍵按下時(shí)為高電平//clk:10M時(shí)鐘
//rst:復(fù)位按鈕,低電平有效
//rise:檢測(cè)到上升沿,高電平有效,寬度為1個(gè)clk
//fall:檢測(cè)到下降沿,高電平有效,寬度為1個(gè)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
//產(chǎn)生上升沿信息
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
//產(chǎn)生下降沿信息
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
特別推薦
- 授權(quán)代理商貿(mào)澤電子供應(yīng)Same Sky多樣化電子元器件
- 使用合適的窗口電壓監(jiān)控器優(yōu)化系統(tǒng)設(shè)計(jì)
- ADI電機(jī)運(yùn)動(dòng)控制解決方案 驅(qū)動(dòng)智能運(yùn)動(dòng)新時(shí)代
- 倍福推出采用 TwinSAFE SC 技術(shù)的 EtherCAT 端子模塊 EL3453-0090
- TDK推出新的X系列環(huán)保型SMD壓敏電阻
- Vishay 推出新款采用0102、0204和 0207封裝的精密薄膜MELF電阻
- Microchip推出新款交鑰匙電容式觸摸控制器產(chǎn)品 MTCH2120
技術(shù)文章更多>>
- 更高精度、更低噪音 GMCC美芝電子膨脹閥以創(chuàng)新?lián)屨夹袠I(yè)“制高點(diǎn)”
- 本立租完成近億元估值Pre-A輪融資,打造AI賦能的租賃服務(wù)平臺(tái)
- 中微公司成功從美國(guó)國(guó)防部中國(guó)軍事企業(yè)清單中移除
- 華邦電子白皮書:滿足歐盟無線電設(shè)備指令(RED)信息安全標(biāo)準(zhǔn)
- 功率器件熱設(shè)計(jì)基礎(chǔ)(九)——功率半導(dǎo)體模塊的熱擴(kuò)散
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
晶體諧振器
晶體振蕩器
晶閘管
精密電阻
精密工具
景佑能源
聚合物電容
君耀電子
開發(fā)工具
開關(guān)
開關(guān)電源
開關(guān)電源電路
開關(guān)二極管
開關(guān)三極管
科通
可變電容
可調(diào)電感
可控硅
空心線圈
控制變壓器
控制模塊
藍(lán)牙
藍(lán)牙4.0
藍(lán)牙模塊
浪涌保護(hù)器
雷度電子
鋰電池
利爾達(dá)
連接器
流量單位