按键去抖课程设计文档格式.docx
《按键去抖课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《按键去抖课程设计文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
经过人工设计、制作实验板、调试再修改的多次循环才定型的传统产品设计方法必然被计算机辅助设计所取代,因为这种费时费力又费资源的设计调试方法既增加了产品开发的成本,又受到实验工作场地及仪器设备的限制。
为了克服上述困难,加拿大InteractiveImageTechnologies公司推出的基于Windows95/98/NT操作系统的EDA软件(ElectronicsWorkbench“电子工作台”,EWB)。
他可以将不同类型的电路组合成混合电路进行仿真。
EWB是用在计算机上作为电子线路设计模拟和仿真的新的软件包,是一个具有很高实用价值的计算机辅助设计工具。
目前已在电子工程设计等领域得到了广泛地应用。
与目前流行的电路仿真软件相比较,EWB具有界面直观、操作方便等优点。
他改变了有些电路仿真软件输入电路采用文本方式的不便之处,该软件在创建电路、选用元器件的测试仪器等均可以直接从屏幕图形中选取,而且测试仪器的图形与实物外形基本相似,从而大大提高了电子设计工作的效率。
此外,从另一角度来看,随着计算机技术和集成电路技术的发展,现代电子与电工设计,已经步入了电子设计自动化(EDA)的时代,采用虚拟仿真的手段对电子产品进行前期工作的调试,已成为一种发展的必然趋势。
通过对实际电子线路的仿真分析,从而提高对电路的分析、设计和创新能力。
第二章按键去抖设计要求
按键开关是电子设备实现人机对话的重要器件之一。
由于大部分按键是机械触点,在触点闭合和断开时都会产生抖动。
为避免抖动引起误动作造成系统的不稳定,就要求消除按键的抖动,确保按键每按一次只做一次响应[1,2]。
随着可编程逻辑器件的综合性能的不断提高,它已经象单片机一样,广泛应用在各种数字逻辑领域。
用可编程逻辑器件直接获取键盘信息也得到广泛的应用。
这里提出用VHDL语言编程的有限状态机的设计方法来实现按键的消抖,经仿真分析和下载实现,这种方法设计的消抖电路能够很好地实现电路功能,进行快速按键时都能保证每按一次做一次的响应,且性能稳定。
本课程设计的具体要求如下:
(1)设计一个4路独立键盘输入电路,读取键盘的键值并通过发光二极管显示出来。
(2)输入为时钟信号CLK(50MHz),按键状态KEY1,KEY2,KEY3,KEY4。
(3)输出为D1,D2,D3,D4。
根据按键的状态控制发光二极管的亮灭。
第三章按键去抖分析
按键消抖的关键是提取稳定的低电平(或高电平)状态,滤除按键稳定前后的抖动脉冲。
在用基于VHDL语言的时序逻辑电路设计按键消抖电路时,可以用一个时钟脉冲信号对按键状态进行取样,当第一次采样到低电平时,启动延时电路,延时结束后,再对按键信号进行连续三次取样,如果三次取样都为低电平,则可以认为按键已经处在稳定状态,这时输出一个低电平的按键确认信号,如果连续三次的取样中,至少有一次是高电平,则认为按键仍处在抖动状态,此时不进行按键确认,按键输出信号为高电平。
第四章按键去抖设计方案
按键消抖一般采用硬件和软件消抖两种方法。
硬件消抖是利用电路滤波的原理实现,软件消抖是通过按键延时来实现。
在微机系统中一般都采用软件延时的消抖方法。
在用可编程逻辑器件FPGA/CPLD设计数字系统中,也可以用VHDL语言设计相应的时序和逻辑电路,对按键信号进行处理,同样可以达到消抖目的。
本文利用Altera公司的可编程逻辑器件CPLD和Quartus,设计性能可靠的按键消抖电路。
该控制电路采用VHDL语言的有限状态机的设计法来描述和实现,其状态转换图如图1所示。
图1按键去状态转换图
电路的复位信号Reset有效时,电路进入复位状态S0,在S0状态下时钟信号CLK以一定的频率采样按键输入信号Keyin,如果采样到Keyin=1则停留在S0状态,并继续采样按键输入信号的状态,一旦采样到输入信号是低电平,即Keyin=0,则转入S1延时状态,进行消抖延时,当延时结束时Delayend=1,则转入在S2状态,在此状态下时钟信号CLK以一定频率采样按键输入Keyin的状态,如果采样到Keyin为高电平即Keyin=1则转回状态S0,表示按键仍处在抖动状态,如果采样到Keyin=0,则转入状态S3;
状态S3,S4的转换过程和条件跟S2相同,在S4状态下,如果Keyin=0则转入S5状态,当到达状态S5时,表示经过S2,S3,S4三个连续状态检测按键输入Keyin的状态都为0,则认为按键处在稳定状态,并在S5输出按键确认信号Keyconfirm=1。
同时在状态S5下时钟信号CLK检测按键输入状态,当检测到按键输入Keyin=0,表示按键仍未释放,则停留在S5继续检测按键输入信号状态,如果检测到Keyin=1,表示按键已经释放,则转回状态S0,等待下一次按键操作。
第五章按键去抖模块
5.1去抖动电路模块
clk:
时钟,reset:
复位信号,din:
按键信号输入,dout:
按键去抖动信号输出。
由于按键抖动的时间一般为5到10ms,因此输入时钟clk使用200Hz时钟脉冲(周期为5ms),即5ms采样一次按键信号,当连续两次采样到的按键信号都为低电平时,认为按键稳定的按下。
在按键稳定按下后,采样到按键为高电平时,认为按键释放
5.2去抖动电路模块程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitydebounceis
port(
clk,reset:
INstd_logic;
din:
INstd_logic;
dout:
OUTstd_logic
);
enddebounce;
architectureaofdebounceis
typestateis(s0,s1,s2);
signalcurrent:
state;
begin
process(clk,reset,din)
if(reset='
1'
)then
current<
=s0;
dout<
='
;
elsif(clk'
eventandclk='
casecurrentis
whens0=>
if(din='
0'
=s1;
else
endif;
whens1=>
='
)then
=s2;
whens2=>
whenothers=>
=s0;
endcase;
endprocess;
enda;
5.3按键扫描模块
输入信号:
时钟,50MHz;
reset:
复位信号;
key1,key2,key3,key4:
按键信号输入。
输出信号:
led1,led2,led3,led4:
发光二极管信号输出。
5.4按键扫描程序
第六章按键去抖的顶层原理图设计
6.1顶层原理图的源文件
6.2顶层原理图的时序仿真图
消抖电路的仿真图如上图所示。
当复位信号Reset=0时,状态机Key处在S0状态,同时以CLK的时钟频率采样按键输入信号Din的状态,当CLK第一次采样到Din为低电平时,此时可能发生了按键操作,随即状态机Key进入S1消抖延时状态,当延时结束时delayend=1(延时结束信号),跟接着状态机KEY的S2,S3,S4连续三个状态对按键输入信号Din进行采样,当三个状态下采样到Din信号都是低电平,则转入S5状态,并产生按键确认信号Keyconfirm=1,同时在S5状态下等待按键释放,在此状态下当CLK时钟信号检测到Din为高电平时转回状态S0。
因按键释放瞬间也会发生抖动,所以由波形图可以看出当按键释放瞬间由状态S5转回状态S0,在S0状态下因按键抖动CLK时钟又检测到Din为低电平,随即转入S1进行消抖延时,经过S1的消抖延时后,按键已经稳定,Din为稳定的高电平,所以在状态S2检测到Din为高电平,则转入S0状态,到此时完成一次按键的操作,等待下一次按键操作,如果没有按键操作,即按键没按下,则一直保持在状态S0。
第七章学习心得
本次的EDA课程设计历时一个星期,时间虽短,但通过一个星期的实践,使我对EDA技术有了更进一步的了解。
同时,大致懂得了一个课题制作的具体流程和实施方法。
另外,课程设计对QuartusⅡ软件的使用要求较高,从而使我能较为熟练的运用此软件。
在设计时,采用模块化的设计思路使得问题变的简单明了,大大缩短了时间,降低了发生错误的机侓,也便于修改和更新。
课程设计中,需要找很多资料,在当今的信息化环境中,虽然资料很多,但需要仔细斟酌才能找到所要的。
这次的课程设计很好的锻炼了这种能力。
此外,与同学和老师的交流必不可少,我从中也学到了不少东西。
课程设计是一次很好的锻炼机会,我从中学的很多知识对将来的学习和工作都有很大的帮助,十分感谢学校能提供这样一个机会。