键盘Pmod控制器(VHDL)

逻辑主页

代码下载

键盘Pmod控制器(顶层文件):pmod_keypad.vhd (11.7 KB)

消抖逻辑(必须包含在项目中):debounce.vhd (3.1 KB)

特性

  • 针对Digilent键盘Pmod(PmodKYPD)的简化接口VHDL源代码
  • 通过并行接口输出被按下的按键
  • 支持最多2个按键同时按下
  • 消除键盘设计固有的误触和漏检
  • 对按键进行消抖处理(可配置消抖时间)

简介

本文详述了用于连接Digilent键盘Pmod的VHDL组件,如图1所示。图2展示了该键盘Pmod控制器集成到系统中的典型实例。如图所示,键盘Pmod控制器通过FPGA的IO端口直接连接键盘Pmod。它循环激励键盘列线并读取行线来检测按键,随后通过16位并行接口输出结果。该组件使用Quartus Prime 17.0.0 Lite Edition设计。

1. Digilent键盘Pmod

2. 应用示例

工作原理

键盘Pmod采用行列矩阵电路以减少所需IO数量。图3展示了Pmod相关电路原理图(但Digilent错误标注了第4行开关名称)。

3. 键盘Pmod电路

检测单键按下

当无按键按下时,行输出通过10kΩ电阻被上拉至逻辑高电平。单个按键按下时,会在行的10kΩ电阻与连接的列的470Ω电阻之间形成分压电路。若FPGA将列拉低,则行输出电压会降至逻辑低阈值以下,被FPGA读取为’0’。通过逐列拉低并读取行值,可可靠检测单键按下,从而确定该行哪个按键被按下。

当仅有一个按键按下时,该方法能可靠检测特定按键。

但若同时按下多个按键,仍需采取额外措施来消除可能出现的误报和漏检。

检测双键同时按下

上述单键检测方法也能检测多数双键按下情况,但并非全部。当仅有两个按键按下且不在同一行时,该方法可可靠检测双键按下。

假设同一行的两个按键被同时按下。由于FPGA将其中一列保持高电平,该列的470Ω电阻会与行的10kΩ电阻并联。这会改变分压电路,使行输出电压不低于逻辑低阈值,导致FPGA误判为无按键按下(对两个按键都产生漏检)。

Keypad Pmod控制器可修正此双键按下问题。它会同时拉低这两列,检查同一行是否有两个按键被同时按下。图4展示了该电路结构。若两键均被按下,行输出将降至逻辑低电压阈值以下。需注意,若其中任一键单独按下,行输出也会变低。因此,仅当单键检测法未独立检测到任一按键时,Keypad Pmod控制器才会判定为双键按下。

4 单行双列拉低情况

消除漏检与误报

三个及以上按键同时按下会使上述方法失效。问题源于此时多个电阻通常处于并联状态。这种并联组合会大幅改变分压电路特性,导致多数情况出现漏检或误报。

在遍历所有列并对每行进行单键与双键按压场景轮询后,Keypad Pmod控制器会统计该轮询周期内检测到的按键次数,随后输出结果。若检测到超过两个按键被按下,所有结果均视为可疑且不可靠,因此不会接受或输出任何结果。

通过这种方式,所有输出值均为明确可靠的按键动作。若同时按下超过两个按键,系统将全部视为操作错误予以忽略,因为此时无法可靠判定具体哪些按键被按下。

检测时间

Keypad Pmod控制器还会计算每次轮询检查所需的输入时钟周期数。当某列被拉低时,被按下按键所在行需要经过显著的时间常数,其输入才会达到逻辑低电平阈值。为满足此要求,控制器会在读取数值前等待300纳秒。

控制器通过GENERIC参数clk_freq 实现此功能,该参数必须设置为系统时钟输入clk 的频率。

消抖处理

完成轮询周期并统计检测到的按键次数以验证有效性后,控制器会在输出前对结果进行消抖处理。GENERIC参数stable_time 指定按键值必须保持稳定的毫秒数,才能被计为单次按压。

此处描述的消抖组件即实现此功能。

控制器配置

通过设置ENTITY中的GENERIC参数来配置Keypad Pmod控制器。表1描述了相关参数。

1. 通用参数说明

端口描述

表2描述了Keypad Pmod控制器的端口。

2. 端口描述

连接方式

该Pmod配备一个12针连接器。表3提供引脚定义。需将Keypad Pmod控制器的端口分配至FPGA引脚,这些引脚已按所列对应关系连接至各接口。

3. Keypad Pmod引脚定义与Keypad Pmod控制器的连接

复位

Keypad Pmod控制器组件工作时,reset_n 输入端口必须保持逻辑高电平。该端口低电平将异步复位组件。复位期间,组件会将输出置为高电平,清除按键 输出并清空所有相关内部寄存器。复位释放后,Keypad Pmod控制器将恢复运行。

结论

该Keypad Pmod控制器是可编程逻辑组件,用于连接Digilent的Keypad Pmod模块。它能处理所有必要流程,可靠检测并消除最多2个同时按键的抖动,通过并行接口输出结果。当检测到超过2个按键同时按下时,控制器会输出全零信号,表明无法确定可靠按键状态,从而消除键盘设计固有的误触和漏检问题。