原创 按键去抖动实验

2011-3-14 10:21 6208 12 12 分类: FPGA/CPLD

 


实验原理


       独立按键电路图如图1所示。作为机械开关的键盘,在按键操作时,机械触点的弹性及电压突跳等原因,在触点闭合或开启的瞬间会出现电压抖动的现象,如图2所示。在实际应用中如果不进行处理将会造成误触发。


d63d829f-a7d0-4f72-aad4-b4982e1d6e1a.jpg


图1 独立按键电路


  31185eab-fd31-44c4-b5eb-e75e43624448.jpg


图2 按键电平抖动示意图


 


        按键去抖动关键在与提取稳定的低电平状态,滤除前沿、后沿抖动毛刺。对于一个按键信号,可以用一个脉冲对它进行取样,如果连续三次取样为低电平,可以认为信号已经处于键稳定状态。这时输出一个低电平按键信号。继续取样的过程中如果不能满足连续三次取样为低,则认为键稳定状态结束,这时输出变为高电平。一通的消抖电路原理图如图3所示。


388ffb4e-6756-40d7-86a3-ba627e7bd155.jpg


图3  按键消抖硬件原理图


 


Verilog代码


/*


功能:    外部按键消除抖动模块


输入参数:扫描采样scan_clk,按键输入key_in


输出参数:按键消除抖动输出


内部参数:按键输入 KEY_WIDTH 可定义按键的多少


备注:   


*/


module debounce(scan_clk,key_in,key_out);       //按键消抖动模块


input scan_clk;                                                        //采样时钟


input[KEY_WIDTH-1:0] key_in;                //按键输入


output[KEY_WIDTH-1:0] key_out;                   //按键消抖出


reg[KEY_WIDTH-1:0] dout1,dout2,dout3; 


parameter KEY_WIDTH = 8;                           


 


assign key_out = (dout1 | dout2 | dout3);     //按键消除抖动输出


 


always @(posedge scan_clk)


begin


       dout1 <= key_in;


       dout2 <= dout1;


       dout3 <= dout2;


end


endmodule


 


应用指南


        消抖电路的采样时钟是关键,采样时钟的选取直接关系到是否能够有效的去除干扰毛刺,在实际应用中,因为按键触发时间一般为几百毫秒,干扰毛刺脉宽一般为几百微秒到几毫秒。所以采样时钟的周期一般为几毫秒。


 


参考资料


[1]  周立功,SmartEDA多功能教学实验开发平台EDA实验教程(一),2006.10

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条