<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=553 </link><title>基于VHDL语言的按键消抖电路设计及仿真</title><author>ethan</author><pubDate>2010-01-13 9:28:20</pubDate><description><![CDATA[按键开关是电子设备实现人机对话的重要器件之一。由于大部分按键是机械触点，在触点闭合和断开时都会产生抖动。为避免抖动引起误动作造成系统的不稳定，就要求消除按键的抖动，确保按键每按一次只做一次响应。随着可编程逻辑器件的综合性能的不断提高，它已经象单片机一样。广泛应用在各种数字逻辑领域。用可编程逻辑器件直接获取键盘信息也得到广泛的应用。这里提出用<a style="color: blue; text-decoration: underline" title="VHDL" href="http://article.ednchina.com/word/266352.aspx">VHDL</a>语言编程的有限状态机的设计方法来实现按键的消抖，经仿真分析和下载实现，这种方法设计的消抖电路能够很好地实现电路功能，进行快速按键时都能保证每按一次做一次的响应，且性能稳定。
<p><strong>　　1 按键抖动产生原因分析</strong></p>
<p>　　绝大多数按键都是机械式开关结构，由于机械式开关的核心部件为弹性金属簧片，因而在开关切换的瞬间会在接触点出现来回弹跳的现象。虽然只是进行了一次按键，结果在按键信号稳定的前后出现了多个脉冲，如图1所示。如果将这样的信号直接送给<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr216" jquery1263346038148="39">微处理器</nobr>扫描采集的话，将可能把按键稳定前后出现的脉冲信号当作按键信号，这就出现人为的一次按键但微处理器以为多次按键现象。为了确保按键识别的准确性，在按键信号抖动的情况下不能进入状态输入，为此就必须对按键进行消抖处理，消除抖动时不稳定、随机的电压信号。机械式按键的抖动次数、抖动时间、抖动波形都是随机的。不同类型的按键其最长抖动时间也有差别，抖动时间的长短和按键的机械特性有关，一般为5～10 ms，但是，有些按键的抖动时间可达到20 ms，甚至更长。所以，在具体设计中要具体分析，根据实际情况来调整设计。</p>
<p align="center"><img alt="多个脉冲" src="http://pagesadmin.ednchina.com/images/article/f91c1fa1-61a3-4e81-8e7c-2e35cf604c00/1.jpg" /></p>
<p><strong>　　2 <a style="color: blue; text-decoration: underline" title="按键消抖" href="http://article.ednchina.com/word/266353.aspx">按键消抖</a>电路的设计</strong></p>
<p>　　按键消抖一般采用硬件和软件消抖两种方法。硬件消抖是利用电路滤波的原理实现，软件消抖是通过按键延时来实现。在微机系统中一般都采用软件延时的消抖方法。在用可编程逻辑器件FPGA／CPLD设计数字系统中，也可以用VHDL语言设计相应的时序和逻辑电路，对按键信号进行处理，同样可以达到消抖目的。本文利用Altera公司的可编程逻辑器件CPLD和<a style="color: blue; text-decoration: underline" title="Quartus" href="http://article.ednchina.com/word/266351.aspx">Quartus</a>Ⅱ，设计性能可靠的按键消抖电路。</p>
<p><strong>　　2．1 按键消抖电路设计原理</strong></p>
<p>　　按键消抖的关键是提取稳定的低电平(或高电平)状态，滤除按键稳定前后的抖动脉冲。在用基于VHDL语言的时序逻辑电路设计按键消抖电路时，可以用一个时钟脉冲信号对按键状态进行取样，当第一次采样到低电平时，启动延时电路，延时结束后，再对按键信号进行连续三次取样，如果三次取样都为低电平，则可以认为按键已经处在稳定状态，这时输出一个低电平的按键确认信号，如果连续三次的取样中，至少有一次是高电平，则认为按键仍处在抖动状态，此时不进行按键确认，按键输出信号为高电平。</p>
<p><strong>　　2．2 按键消抖电路设计</strong></p>
<p>　　该控制电路采用VHDL语言的有限状态机的设计方法来描述和实现，其状态转换图如图2所示。</p>
<p align="center"><img alt="状态转换图" src="http://pagesadmin.ednchina.com/images/article/f91c1fa1-61a3-4e81-8e7c-2e35cf604c00/2.jpg" /></p>
<p>　　电路的复位信号Reset有效时，电路进入复位状态S0，在S0状态下时钟信号CLK以一定的频率采样按键输入信号Key_in，如果采样到 Key_in=&lsquo;1&rsquo;则停留在S0状态，并继续采样按键输入信号的状态，一旦采样到输入信号是低电平，即Key_in=&lsquo;0&rsquo;，则转入S1延时状态，进行消抖延时，当延时结束时Delay_end=&lsquo;1&rsquo;，则转入在S2状态，在此状态下时钟信号CLK以一定频率采样按键输入Key_in的状态，如果采样到 Key_in为高电平即Key_in=&lsquo;1&rsquo;则转回状态S0，表示按键仍处在抖动状态，如果采样到Key_in=&lsquo;O&rsquo;，则转入状态S3；状态S3，S4 的转换过程和条件跟S2相同，在S4状态下，如果Key_in=&lsquo;0&rsquo;则转入S5状态，当到达状态S5时．表示经过S2，S3，S4三个连续状态检测按键输入Key_in的状态都为&lsquo;0&rsquo;，则认为按键处在稳定状态，并在S5输出按键确认信号Key_confirm=&lsquo;1&rsquo;。同时在状态S5下时钟信号CLK 检测按键输入状态，当检测到按键输入Key_in=&lsquo;0&rsquo;，表示按键仍未释放，则停留在S5继续检测按键输入信号状态，如果检测到Key_in=&lsquo;1&rsquo;，表示按键已经释放，则转回状态S0，等待下一次按键操作。<strong>　3 </strong><a style="color: blue; text-decoration: underline" title="按键消抖" href="http://article.ednchina.com/word/266353.aspx"><strong>按键消抖</strong></a><strong>电路的仿真分析</strong></p>
<p>　　消抖电路的仿真图如图3所示。当复位信号Reset=&lsquo;0&rsquo;时，状态机Key处在S0状态，同时以CLK的时钟频率采样按键输入信号Din的状态，当 CLK第一次采样到Din为低电平时，此时可能发生了按键操作，随即状态机Key进入S1消抖延时状态，当延时结束时delay_end=&lsquo;1&rsquo;(延时结束信号)，跟接着状态机KEY的S2，S3，S4连续三个状态对按键输入信号Din进行采样，当三个状态下采样到Din信号都是低电平，则转入S5状态，并产生按键确认信号Key_confirm=&lsquo;1&rsquo;，同时在S5状态下等待按键释放，在此状态下当CLK时钟信号检测到Din为高电平时转回状态S0。因按键释放瞬间也会发生抖动，所以由波形图可以看出，当按键释放瞬间由状态S5转回状态S0，在S0状态下，因按键抖动CLK时钟又检测到Din为低电平，随即转入S1进行消抖延时，经过S1的消抖延时后，按键已经稳定，Din为稳定的高电平，所以在状态S2检测到Din为高电平，则转入S0状态，到此时完成一次按键的操作，等待下一次按键操作，如果没有按键操作，即按键没按下，则一直保持在状态S0。</p>
<p>&nbsp;</p>
<p align="center"><img alt="消抖电路的仿真图" src="http://pagesadmin.ednchina.com/images/article/f91c1fa1-61a3-4e81-8e7c-2e35cf604c00/3.jpg" /></p>
<p><strong>　　4 结 语</strong></p>
<p>　　采用有限状态机方法设计按键消抖电路，再根据按键的特性设定合适的延时时间(一般10 ms)后，通过仿真分析及实验验证，能够起到很好的消抖效果，而且性能稳定，能确保每一次按键操作，产生一次按键确认，可广泛应用于可编程逻辑器件的键盘扫描设计中。</p>]]></description></item></channel></rss>