參考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
特別推薦
- X-CUBE-STL:支持更多STM32, 揭開功能安全的神秘面紗
- 大聯(lián)大世平集團(tuán)的駕駛員監(jiān)控系統(tǒng)(DMS)方案榮獲第六屆“金輯獎(jiǎng)之最佳技術(shù)實(shí)踐應(yīng)用”獎(jiǎng)
- 貿(mào)澤推出針對(duì)基礎(chǔ)設(shè)施和智慧城市的工程技術(shù)資源中心
- 大普技術(shù)自主可控、高精度、小型化TCXO——對(duì)講機(jī)應(yīng)用
- Melexis創(chuàng)新推出集成喚醒功能的汽車制動(dòng)踏板位置傳感器芯片方案
- Vishay推出的新款高能浪涌限流PTC熱敏電阻,可提高有源充放電電路性能
- 美芯晟推出支持ALS和Flicker的小尺寸閃爍光傳感器芯片
技術(shù)文章更多>>
- 車用開關(guān)電源的開關(guān)頻率定多高才不影響EMC?
- 貿(mào)澤推出針對(duì)基礎(chǔ)設(shè)施和智慧城市的工程技術(shù)資源中心
- “扒開”超級(jí)電容的“外衣”,看看超級(jí)電容“超級(jí)”在哪兒
- DigiKey 誠(chéng)邀各位參會(huì)者蒞臨SPS 2024?展會(huì)參觀交流,體驗(yàn)最新自動(dòng)化產(chǎn)品
- 提前圍觀第104屆中國(guó)電子展高端元器件展區(qū)
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
Cirrus Logic
CNR
CPU
CPU使用率高
Cree
DC/AC電源模塊
dc/dc
DC/DC電源模塊
DDR2
DDR3
DIY
DRAM
DSP
DSP
D-SUB連接器
DVI連接器
EEPROM
Element14
EMC
EMI
EMI濾波器
Energy Micro
EPB
ept
ESC
ESD
ESD保護(hù)
ESD保護(hù)器件
ESD器件
Eurotect