基于FPGA的微波炉控制器设计 - 毕业设计论文 联系客服

发布时间 : 星期日 文章基于FPGA的微波炉控制器设计 - 毕业设计论文更新完毕开始阅读18940167f5335a8102d220b9

基于FPGA 的微波炉控制器设计

4. 系统详细设计

4.1. 输入模块设计

输入模块采用4*4矩阵键盘作为输入设备,实现数据输入控制。矩阵键盘是一种常见的输入装置,在日常生活中,矩阵键盘在计算机、电话、手机、微波炉等格式电子产品上已经被广泛应用,计算机键盘通常采用行列扫描法来确定所按下键的行列位置。由于键盘按键是一种机械开关,所以设计其控制电路时,需要涉及到键盘扫描、键盘译码,光靠矩阵键盘是无法完成按键输入工作的。其中键盘扫描又涉及到时序产生、按键扫描和消除抖动。

4.1.1. 键盘扫描

键盘处理的重要环节是时序产生、键盘扫描和按键消抖,以下分别针对所涉及到的电路进行描述。

1、时序产生电路

本时序产生电路中使用了三种不同频率的工作脉冲波形:系统时钟脉冲、扫描键盘时钟、键盘消抖动时钟。分别定义如下:

CLK: IN STD_LOGIC; --系统时钟脉冲

CLK_SCAN : OUT STD_LOGIC; --扫描键盘时钟 CLK_DEB : OUT STD_LOGIC --键盘消抖动时钟

一般消抖动信号时钟频率必须比其它的电路使用的脉冲信号频率更高,一般消抖动频率是键盘扫描或LED频率的4倍或更高。这里系统时钟频率取50MHZ,扫描时钟频率取100KHZ,消抖时钟频率取200KHZ。

生成的电路符号如下,图4.1所示:

clk_genCLKCLK_SCANCLK_DEBinst 图4.1 时序产生电路符号

2、按键扫描电路

所谓行列式键盘扫描,即用带有I/O口的线组成行列式结构,按键设置在行列的

- 13 -

西南石油大学本科毕业设计(论文)

交点上。行列式矩阵键盘原理:按键设置在行列线的交叉点,行列线分别连接到按键的两端。列线通过上拉电阻截止+5V电压,即列线的输出被定位到高电平状态;判断有无按键按下时通过行线送出扫描信号,然后列线读取状态得到。其方法是依次给行线送低电平,检查列线的输入。若列线全为高电平,则代表所在行无按键按下,若列线出现低电平,则低电平所在的行和出现低电平的列的交叉点处有按键 按下。行扫描信号为KEY_DRV[3..0],列输入信号为KEY_IN[3..0],与按键的对应关系如表4.1所示。

表4.1 n×m行列矩阵对应关系表

KEY_DRV3 ~ KEY_DRV0 KEY_IN3 ~ KEY_IN0 1110 1101 1110 1011 0111 1110 1101 1101 1011 0111 1110 1101 1011 1011 0111 1110 1101 0111 1011 0111 E F A B C D 7 8 9 0 3 4 5 6 对应的按键 1 2 键盘扫描电路是用来产生扫描信号KEY_DRV[3..0],其变化为周期性的有规律的变化(1110 1101 1011 0111),停留在每个状态的时间由按键的机械物理特性决定,按键在闭合和断开的瞬太短的按键扫描时间容易采集到按键抖动,太长的扫描时间容易丢失某些较快的按键信息。

完成程序设计,生成相应的电路符号,如图4.2所示:

- 14 -

基于FPGA 的微波炉控制器设计

key_scanSCAN_CLKKEY_DRV[3..0]inst5 图4.2 键盘扫描电路符号

3、按键消抖电路

当一个按键按下和释放时,对应信号线电平的变化有一个不稳定期,即所谓“抖动”,这是因为多数开关的闭合和断开都有一个过程,并不是即刻实现的。在读取键盘状态时必须避开这个不稳定期,以免造成误判,这样一个做法叫做“去抖”。

如果当在一段时间内都连续多次读到同一个非空(即有键按下)的扫描码,可以认为这时按键已处于稳定状态,这时得到的扫描码就代表了一个键盘动作,抖动的影响已经被剔除。按照这个想法,只需设置一个倒数计数器,当每次读到的非空扫描码与上一次的相同,就将计数器加1;而当一旦读到不同的扫描码或空码则立即将计数器清0。如果计数器的值达到某预定值N时,则表示连续N次读到同一扫描码,于是可认为已经读到了有效的按键。设键盘扫描的间隔是T,则去抖的时间就是N * T。在实际中,因为一般人的按键速度至多是10次/秒,亦即一次按键时间是100ms,所以按下的时间可估算为50ms。因此,键盘扫描的频率取100KHz,消抖时钟频率取200KHz。

综合上述分析,该键盘扫描子模块关键代码如下: COUNTER:BLOCK IS BEGIN

PROCESS(CLK)IS BEGIN

IF(CLK'EVENT AND CLK='1')THEN Q<=Q+1; END IF;

C_DEBOUNCING<=Q(7); --去抖时钟信号 C_KEYBOARD<=Q(9 DOWN TO 8); --键扫信号 END PROCESS;

KEY_SCAN<=\ \

- 15 -

西南石油大学本科毕业设计(论文)

\ \ \

END BLOCK COUNTER;

生成相应的电路符号,如图4.3所示:

debouncingDEB_CLKKEY_IN[3..0]KEY_OUT[3..0]inst4 图4.3 按键消抖电路符号

4.1.2. 键盘译码

通过一个译码程序,将键盘扫描后的值根据需要设定成相应的按键。 程序设计如下:

key_decode : PROCESS(SC_CLK) BEGIN

Z<=KEY_DRV & KEY_IN; --读入的编码与扫描结果拼接 IF SC_CLK'EVENT AND SC_CLK='1' THEN CASE Z IS --数字按键译码电路 WHEN \ALUE<=0; WHEN \ALUE<=1; WHEN \ALUE<=2; WHEN \ALUE<=3; WHEN \ALUE<=4; WHEN \ALUE<=5; WHEN \ALUE<=6; WHEN \ALUE<=7; WHEN \ALUE<=8; WHEN \ALUE<=9; WHEN \ALUE<=10; WHEN \ALUE<=11;

- 16 -