❶ 基于VHDL语言的几种消抖电路的设计
基于此介绍了基于VHDL语言的计数器型消抖电路、D触发器型消抖电路、状态机型消抖电路的工作原理、相关程序、波形仿真及结果分析,并下栽到EP2C35F672C8芯片上进行验证,消抖效果良好,性能稳定,可广泛用于FPGA的按键电路中。
关键词:VHDL;消抖;FPGA0 引言按键开关是许多电子产品不可缺少的输入设备,在智能化电子产品中,按键开关作为人机交互的主要器件之一,可以实现人机对话,完成各种功能操作,而机械式按键开关由于其低成本、高可靠性被广泛使用。在按键操作时,机械触点的弹性及电压突跳等原因,在触点闭合或开启的瞬间会出现电压抖动,实际应用中如果不进行处理将会造成误触发。常见的硬件消抖方法有:利用电容的充放电原理;利用RS触发的保持功能;由同相器组成的积分去抖电路;用反相器组成的翻转式去抖电路;不可重复触发单稳态等等。本文采用VHDL语言设计了几种按键开关的消抖电路。
1 计数器型消抖电路
1.1 计数器型消抖电路(一)
计数器型消抖电路(一)是设置一个模值为(N+1)的控制计数器,clk在上升沿时,如果按键开关key_in='1',计数器加1,key_in='0' 时,计数器清零。当计数器值为2时,key_out输出才为1,其他值为0时。计数器值为N时处于保持状态。因此按键key_in持续时间大于N个clk时钟周期时,计数器输出一个单脉冲,否则没有脉冲输出。如果按键开关抖动产生的毛刺宽度小于N个时钟周期,因而毛刺作用不可能使计数器有输出,防抖动目的得以实现。clk的时钟周期与N的值可以根据按键抖动时间由设计者自行设定。
主要程序结构如下:
图1是N为3的波形仿真图,当按键持续时间大于3个时钟周期,计数器输出一个单脉冲,其宽度为1个时钟周期,小于3个时钟周期的窄脉冲用作模拟抖动干扰,从图1可以看出,抖动不能干扰正常的单脉冲输出。 该方案的特点是能很好消除按键抖动产生的窄脉冲,还可以滤去干扰、噪音等其他尖峰波,但遇到脉宽大于N个Tclk时钟周期的干扰、噪音等时会有输出从而产生误操作,而对于按键操作要求按键时间必须大于N个Tclk时钟周期,否则按键操作也没有输出。1.2 计数器型消抖电路(二)
计数器型消抖电路(二)是控制计数器工作一个循环周期(N+1个状态),且仅在计数器为0时输出为“1”。电路设计了连锁控制设施。在计数器处于状态0时,此时若有按键操作,则计数器进入状态1,同时输出单脉冲(其宽度等于时钟周期)。计数器处于其他状态,都没有单脉冲输出。计数器处于状态N时,控制en='0',导致计数器退出状态N,进入状态0。计数器能否保持状态0,取决于人工按键操作,若按键key_ in='1',控制en='1'(计数器能正常工作),key_in='0',计数器状态保持。显见计数器处于状态0,人工不按键,则计数器保持状态0。
❷ 单片机的按键开关抖动的产生原因,抖动的特点和如何消除抖动
开关按钮在按下时,表面上只按了一下,但信号的传导并不是单纯的由1直接跳到0。这是由于机械触点断开/闭合时会有抖动,信号如图示会在HIGH和LOW之间抖动。这种抖动对人来说是感觉不到的,但对单片机来说,则是完全可以感应到的。
当按钮被按下时,你所期待的效果应该是:111111111000000000…,
而事与愿违,单片机读到的信号可能会是:111110110110000000…,
这中间连续的1和0过渡处,短暂的几个随机交错出现的01就是我们不期望产生的抖动,虽然我们只按了一下按钮,可能会被电路误读成按了好几下按钮,而给人的感觉就是有时候按钮会不灵。消抖的目的就是为了要除去信号在高低电位之间弹跳所造成的不正确输入,就是交错出现的01那段,一般抖动持续的时间是3-10毫秒。所以简单的去抖动操作,只要在这段抖动出现的时间跨度两端进行两次按钮状态检测即可:
假设放开按钮信号为1,按下为0,
那么当首次检测到按钮为0,过10ms再次检测,若依然为0,按钮按下有效;若为1,说明为抖动,去除。
更可靠,更灵敏的消抖做法为:
首次检测到按钮为0后,以后的3-5ms持续检测,若检测到信号一直为0,则按钮有效,若中间有一次不为0,时间清0,重新计时,直到连续3-5ms按钮信号一直为0,方为有效。(补充一下,持续检测的意思,并不是让你把全部的CPU时间全部花在这上面,否则这几ms时间内单片机相当于死机了,影响其它进程,而是间隔性地采样一下,比如5ms之内检测10次,10次全为0有效,其它时间CPU当然去处理别的事务)
至于按钮的连按和单按、双按,多按钮同时生效等更复杂的功能,可借助其它的标志位实现。
❸ 关于消抖电路原理
利用RC充电时间来进行消抖的,按下按键,电容放电,key应该是上升沿中断,放电专之後,由於RC的存在,电平会有属一定的时间才达到高电平。在达到高电平这段时间内,干扰或者误操作都不响应,所以可以达到消抖的目的
❹ 有谁知道机械开关的消颤电路怎么做啊,越简单越好,最好是用电容电阻之类的
--------------------------------------------------------------
在按键上并电容是最简单的方法之一,但不要并太大的电容,否则容易损坏按键。并且,最好是在后面接一施密特电路,以改善信号边沿特性,并增强消抖动效果。。 我的经验是,一般的金属接点轻触按键,接10K上拉或下拉电阻时,并104/224(0.1uF/0.22uF)独石或瓷片电容;导电橡胶接点的按键,接20K上拉或下拉电阻时,并104/473(0.1uF/0.047uF)独石或瓷片电容。。
正规的方法是用 单稳电路,双稳电路,RC滤波电路(这种方法比较简单),软件防抖.上面的方法仅供参考.
RC滤波电路就是在电源端的另一端并一个电容和电阻对地.
打了这么多好累哦,不要吝啬要是有用可要追加分哦!
--------------------------------------------------------------
❺ 用轻触开关和触发器设计一个简单的开关电路,按下轻触开关输出低电平,再按下输出高电平
轻触开关产生触发脉冲,为上升沿有效或下降沿有效;
该触发脉冲可能会有机专械抖动,所以要采用属消抖电路进行去抖动处理;
经过消抖处理的触发脉冲作为2分频电路的输入脉冲,即可完成你所要的功能。【如,所用触发器为D触发器的话,可以将QN输出接到D端输入】
❻ 点动开关的消抖电路是怎样的一种电路
要用RC电路延时,关键在选择适当的时间常数。一般按10—15毫秒设计,使用时感觉不到延时版。具体电路是权反相器输入端到地并联电阻电容(可选5K2μ),输入端再接按键串联电阻(5K)到5v。
键盘消抖软件也是按延时12 毫秒编程的。