Presentation is loading. Please wait.

Presentation is loading. Please wait.

按键处理部分 王安然.

Similar presentations


Presentation on theme: "按键处理部分 王安然."— Presentation transcript:

1 按键处理部分 王安然

2 按键电路 键盘作为常用的人机交互工具,用于操作设备运行指令和数据的输入装置,应用于各种电子设备及产品;
本节带领大家学习和分析基于FPGA驱动按键电路的消抖处理;

3 按键电路 常见的按键连接方式有两种形式: 独立式按键:每个按键单独连接到一个I/O口上,通过判断按键端口的电位识别按键的操作,编程简单,需要更多I/O资源 矩阵式按键:通过行列交叉编码连接,通过分时扫描的方法识别按键的操作,节约I/O资源,编程较复杂

4 按键电路 根据上图可知: 左侧硬件连接方式: 按下按键:按键接通,按键端口与地导通,为低电平(GND)
松开按键:按键断开,按键端口通过上拉电阻,为高电平(3.3V电压) 右侧硬件连接方式反之

5 按键使用 module key ( input key_n, input rst_n, output reg led_out );
key_n or negedge rst_n) if (!rst_n) led_out <= 1'b0; else led_out <= ~led_out; endmodule

6 按键抖动原理 抖动的产生 : 通常的按键所用的开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。 因而在闭合及断开的瞬间均伴随有一连串的抖动。按键抖动导致按键电路的输出波动,使系统产生误触发或其他不稳定结果

7 按键抖动原理 一次完整的按键操作过程中包含5个小过程,如下:

8 按键抖动原理 为了消除按键抖动对设计的影响,需要对按键系统进行优化处理,也就是按键消抖处理
按键消抖处理主要分两种方式: 1.硬件消抖 2.软件消抖

9 按键抖动原理 常用的硬件消抖方式有两种: 1.RS触发器消抖:根据RS触发器特性将不稳定的信号转化为矩形波
2.电容充放电消抖:根据电容的充放电将信号中的窄脉冲消除 常用的软件消抖方式有两种: 1.延时采样:检测按键电平变化后延时(10ms以上),采样作为有效信号 2.周期采样:每隔固定时间采样(10ms以上) ,采样作为有效信号

10 延时采样消抖示意

11 延时采样消抖设计框图 边沿检测:按键输入变化检测 计数器计数:计数器计数20ms后采样,将10ms的抖动跨过
延时采样:基于计数器的计时,并采样 下降沿检测:这里使用的是按下有效脉冲输出

12 边沿检测程序实现 边沿检测的方法: 定义一个寄存器对输入信号进行锁存,然后将寄存器的数据与下一个时刻的输入信号做对比,
如果两者不相等则认为输入信号在这个时间段发生了变化,产生了边沿,key_an产生高电平的脉冲。 (key_n_r == key_n_r1)? //前一刻后一刻不相等,边沿 (key_n_r & (!key_n_r1))? //前一刻低,后一刻高,上升沿 ((!key_n_r) & key_n_r1)? //前一刻高,后一刻低,下降沿 reg [KEY_WIDTH-1:0] key_n_r,key_n_r1; //Register key_n_r1, lock key_n_r to next clk clk or negedge rst_n) if (!rst_n) key_n_r <= {KEY_WIDTH{1'b1}}; else begin key_n_r <= key_n; //消除亚稳态影响 key_n_r1 <= key_n_r; //时序延迟1个clk周期 end //Detect the edge of key_n //边沿检测 wire key_an = (key_n_r == key_n_r1)? 1'b0:1'b1;

13 延时采样程序实现 延时采样的方法: 当key_an产生脉冲时,计数器cnt清零并持续对clk计数,
因为我们要采集输入信号变化后20ms的状态值,系统时钟12MHz,计数器终值 = 12M/50 = 240K,所以计数器计数到240K-1时采样。 reg[18:0] cnt; //Count when a edge of key_n is occured clk or negedge rst_n) if (!rst_n) cnt <= 19'd0; else if(key_an) cnt <=19'd0; //按键边沿时计数器清零 else cnt <= cnt + 1'b1; //计数器对12MHz时钟计数 //Sample key_jit when cnt count to CNT_NUM(20ms) if (!rst_n) key_jit <= {KEY_WIDTH{1'b1}}; //计数器20ms时进行采样 else if (cnt == CNT_NUM-1) key_jit <= key_n_r;

14 仿真文件程序实现 testbench: 测试程序中 key_in 作为按键的输出给设计文件,
模拟按键,正常为高电平,按下按键为低电平,前后各有抖动 integer ii; reg key_in; //active low initial begin key_in = 1'b1; #400; for(ii=0;ii<=4;ii=ii+1) key_in = #50 ~key_in; #1000 key_in = 1'b1; #50 key_in = 1'b1; #400; $stop; end

15 延时采样仿真结果 红色 key_n 为按键输入, 前后各有抖动 紫色 key_an 为边沿检测信号
绿色 key_jit 为延时采样, key_pulse 为脉冲输出, key_state 为状态输出

16 周期采样消抖示意

17 周期采样消抖设计框图 计数器计数:计数器固定计数20ms采样,相邻采样最多只有 一个落在不稳定的区间,化不稳定为稳定
周期采样:基于计数器的计时,并采样 下降沿检测:这里使用的是按下有效脉冲输出

18 周期采样程序实现 reg [KEY_WIDTH-1:0] key_n_r; reg [18:0] cnt; //Count for 20ms
clk or negedge rst_n) if(!rst_n) cnt <= 19'd0; else if(cnt >= CNT_NUM-1) cnt <= 19'd0; else cnt <= cnt + 1'b1; reg [KEY_WIDTH-1:0] key_n_r; //Sample key_jit when cnt count to CNT_NUM(20ms) if(!rst_n) begin key_n_r <= {KEY_WIDTH{1'b1}}; key_jit <= {KEY_WIDTH{1'b1}}; end else begin key_n_r <= key_n; //消除亚稳态影响 if(cnt == CNT_NUM-1) key_jit <= key_n_r; //20ms采样 else key_jit <= key_jit; end

19 按键抖动原理 红色 key_n 为按键输入, 前后各有抖动
绿色 key_jit 为延时采样, key_pulse 为脉冲输出, key_state 为状态输出

20 矩阵按键原理及优势 原理: 将按键按矩阵排列,使用行线和列线分别连接到按键开关的两端,列线通过上拉电阻连接到VCC,
当无按键按下时,列线处于高电平的状态,而当有按键按下时,列线电平 由与此列线相连的行线电平决定。 最后通过行列扫描法就可以判断各按键的操作状态 优势: 相对独立按键来说,当键盘中按键数量较多时,矩阵按键可以节约I/O资源的占用,如4*4矩阵可以通过8个I/O口实现16个按键的连接,且数量越多优势越明显。

21 矩阵式按键硬件连接

22 矩阵按键行列扫描法 状态 行 列 按键 STATE0 ROW1=0 第1行输出低电平 其余为高电平 判断第1列电平:COL1==0/1
K1按下/松开 判断第2列电平:COL2==0/1 K2按下/松开 判断第3列电平:COL3==0/1 K3按下/松开 判断第4列电平:COL4==0/1 K4按下/松开 STATE1 ROW2=0 第2行输出低电平 K5按下/松开 K6按下/松开 K7按下/松开 K8按下/松开 STATE2 ROW3=0 第3行输出低电平 K9按下/松开 K10按下/松开 K11按下/松开 K12按下/松开 STATE3 ROW4=0 第4行输出低电平 K13按下/松开 K14按下/松开 K15按下/松开 K16按下/松开

23 矩阵式按键设计框图 row <= 4'b1110; key_out[3:0] <= col;

24 200Hz分频信号 计数器计数,分频产生200Hz的信号

25 状态转换 状态机,实现状态转换及各状态的输出

26 周期采样消抖输出 根据不同状态下获取对应状态下矩阵按键的返回值,对应输出扫描消抖过的信号

27 仿真文件测试程序实现

28 矩阵按键仿真结果 红色key_n为Testbench中模拟的按键信号 黄色col和row对应矩阵按键的行列信号
绿色key_out为16个按键分别的状态输出

29


Download ppt "按键处理部分 王安然."

Similar presentations


Ads by Google