找回密码
 注册
关于网站域名变更的通知
查看: 230|回复: 2
打印 上一主题 下一主题

基于FPGA的多按键状态识别系统设计方案

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-19 11:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 A-Lin 于 2019-12-19 12:34 编辑 ! m3 O( f9 y8 t- ]5 R

' D* \) Q% `' S, l. ~  I; [
基于FPGA的多按键状态识别系统设计方案

% k- _6 U3 V( _$ v6 N* d" L/ p1 \
- ]0 R/ p: A, c) O1 引言  }/ R  m' Y( }
4 l6 ~$ b1 m) n1 N  |4 p
按键作为普通的输入外设,在仪器仪表工业设备和家用电器中得到广泛应用。目前,按键输入电路Ⅲ主要有2种:一种是非扫描方式可以判断多键状态(允许多键同时动作),但是不适用于大量按键情况,所需I/0端口多;另一种是扫描阵列方式,适用于大量按键,但不能多键同时动作。因此,需要开发一种既适合大量按键又适合多键同时动作,并能节省单片机(mcu)的口线资源的多按键状态识别系统。这里提出一种利用FPGA的I/0端口数多和可编程的特点,采用VHDL语言的多按键状态识别系统,实现识别60个按键自由操作,并简化MCU的控制信号。
7 _% u. @, ~  z; ?
' V4 O' M' {9 d( P- G2 系统设计方案: q3 Y  j* F1 {; m& e4 `

2 e* O* W; j2 ~! O% h% x! o. p8 [9 q1 VFPGA是一种可编程逻辑器件,它具有良好性能、极高的密度和极大的灵活性,外围电路简单可靠等特性。因此,该系统设计是由MCU、FPGA、按键等部分组成。60路按键信号进入FPGA单元,以供数据采集;FPGA处理采集到的数据信号,编码后写入内部FIFO。MCU通过I/O端口提取FIFO中的数据。模块通过电源接口向各个部分供电。其系统设计原理框图如图l所示。
2 W  x5 V, M. m
, s5 V2 @( J' F3 n0 d9 _
2.1 FPGA配置电路( Z+ x* _+ ]* l% u" X
- J' E" ^4 W# \4 \# h
FPGA采用ALTEra公司EPF10K30ATC144,该器件内核采用3.3 V供电,端口电压为3.3V可承受5 V输入高电平,其工作频率高达100 MHz;有102个可用I/0端口,每个端口输入电流最高达25 mA,输出电流达25 mA;l728个逻辑单元(Les),12 288 bit的用户Flash存储器,可满足用户小容量信息存储,完全满足系统设计要求。
5 D/ c$ s' F, C1 b, t
7 U, F# u& X7 w" Y由于FPGA基于RAM工艺技术,该器件丁作前需要从外部加载配置数据,需要一个外置存储器保存信息,采用可编程的串行配置器件EPC2.其供电电压为3.3 V。OE和nCS引脚具有内部用户可配置上拉电阻。FPGA的DCLK、DATA0、nCONFIG引脚信号均来自EPC2。系统上电后,首先FPGA初始化,nSTATUS、CONF_DONE置为低电平。nSTATUS置为低电平后复位,此时EPC2的nCE为低电平,因此选取EPC2,从而数据流从DATA引脚输入到FPGA的DATAO引脚。配置完成后,FPGA将CONF_DONE置为高电平,而EPC2将DATA引脚置为高阻态。其FPGA配置电路如图2所示。& e( f. r7 Q0 O) g/ y1 N

  H, f2 t& O9 u" }) ]0 `& i2.2 按键电路
5 F! R" H& q! E% [8 o$ Q
" A+ a: K! C+ h8 `4 {图3为一路按键电路,共60个按键(i=1~60)。由于外界环境复杂,按键引线长达6 m,保护二极管VDi:在外界干扰信号大于VCC时导通起到保护FPGA的作用。电阻Ri上拉限流,按键未闭合状态下FPGA输入引脚始终处于高电平。
. E1 Q. n8 t* E% w: \
% A- Z6 f5 q0 \6 t4 e4 `: w: y/ I
3 FPGA内部逻辑设计
7 C, }$ q; n3 l  D4 U( J
+ [( R3 l- X, i5 P% }FPGA内部功能分为扫描模块、编码模块、控制模块以及同步FIFO RAM模块,如图4所示。( B% z8 t! j1 t. m) b# ^
3 N9 V- t+ j  @. L. g( K4 K
2 g, }( {& @$ X( l
图4中,K1~K60为60个按键的输入端,Scan为工作模式选择信号,Ready为读准备好信号,RdClk为读时钟信号,Data[7:0]为数据输出,ModCtr为编码模式控制信号,FIFOWEn为FIFO RAM写使能信号,FIFOIn为FIFO RAM数据输入,State为按键状态扫描信号。其工作原理为:扫描模块周期扫描按键状态,其结果送入编码模块;编码模块根据模式控制信号ModCtr选择编码方式编码,将其结果送入FIFO RAM;控制模块产生对FIFO RAM的读取控制信号;MCU可通过Readv、RdClk控制信号读取Data[7:0]数据线上的按键编号和状态数据。6 d! c: p* i0 ~! p! d# M' k4 ]
+ j3 w# n1 }! ]2 |. i! V
3.1 扫描模块
0 r+ N( o0 E0 q' g6 V4 H0 k; i( h
$ K8 m) C" y& z: R扫描模块主要完成扫描按键状态输入和按键的软件去抖动。扫描按键状态输入是以5 m8为周期扫描60个输入引脚,将其结果存入60个两位状态移位寄存器.按键去抖有硬件和软件2种实现方式。为了节省成本,充分发挥FPGA器件的功能,该系统设计采用软件去抖。图5为软件去抖动流程。图中State为2位状态移位寄存器,初始值为0,TimeDelay为延时计数器。
6 c6 d$ s* d8 d. q' W
( v) ?: F! Y- P! v- C
软件去抖动过程说明:对状态寄存器的2位数值做异或运算,即m=State_1 Xor State_2。若m=l,说明按键有动作,则令TimeDelay=1,启动延时计数;若m=O,表明按键处于去抖延时或者平稳状态。这时判断TimeDelay,若TimeDelay=0,则按键处于平稳状态;若0<TimeDelay<MaxDelay(最大延时设定值),则说明处于去抖计数中,TimeDelay继续加1,当TimeDelav>MaxDelay时说明按键已经平稳,将结果送入编码器模块。软件去抖关键代码如下:' n" h: O; U& h% J1 Z5 l" Y- I
' H( J0 G4 k& S) W
3.2 编码模块
7 {  L4 j1 R4 R( B7 @; X0 N4 w
* M5 h7 T5 V, {0 n5 F以0、l表示按键通断状态,60个按键则需要8个字节;在实际中单键动作的概率远远大于多键同时动作的概率,若只对状态发生变化的按键以8位编码方式传输按键信息,则一个按键只需传送一个字节,因此为尽可能地减少MCU的负担,提高实时性,设计为只在按键发生状态变化时才向MCU传输相应按键的编号和状态数据。其编码数据格式如图6所示。8 ]+ b. Z- m+ ?& a' u' H

3 W5 E8 ]$ z5 Q' ]4 M1 [4 P) J状态位lbit,0表示按键闭合状态,1表示按键打开;数据6bits,即0X01~OX3C分别表示1~60个按键;lbit偶校验位。这样传输一次数据就可完成按键编号和状态的传输。1 ?6 r- u; a9 x0 C
8 `9 k, L/ R7 b
编码器采用连续和随机2种工作模式。连续工作模式每次扫描后对所有按键依次编码,并获取所有按键的当前状态;而随机工作模式在每次扫描后只对状态发生变化的按键编码。; e4 S! A& A) @0 G
, J5 ~# ^( E0 u; h( O
3.3 控制模块
& t& `' V6 G; G6 e7 C9 G
6 W; b3 m0 J2 _9 {' n! b) b控制模块完成MCU与FPGA之间的功能控制,有2个作用:一是根据Scan信号选择编码模块的工作模式,二是产生FIFO RAM的读取操作时序。2 v3 _9 M: B* I; X) W9 x1 k
! m# h8 }' N' A) K' c
对于模式控制,Scan上升沿触发控制模块,使编码模块进入连续工作模式,扫描完成一周,控制模块发送控制信号使编码模块进入随机工作模式。
9 w- \% v9 M$ C& K. r% s# a  A$ o: C" u% X) D
对于读取数据,控制模块根据FIFO RAM的Data[7:0]是否有数据,置位Ready信号。有数据,Ready为低电平;无数据,Ready为高电平。RdClk为读取时钟,相当于确认信号,每读完一个数据,发送一个脉冲。
9 F8 h) s1 ~% l2 G' E0 ]$ I% a
8 j, e6 A( b4 S3 ~3.4 FIFORAM模块& X4 _  B" f4 ~+ R8 K3 z! T  H
) R2 A7 T' Y/ {
与MCU通信的接口种类很多,可选择串口、I2C、并口等形式,应用中可根据MCU资源以及项目成本、进度等具体情况选择最合适的一种方式。该系统设计利用同步FIF0 RAM并口传输。FIF0 RAM模块采用EDA软件库中的标准模块。
6 u. C$ p& e' `8 w8 W' f. m: W# n8 H1 [4 w: ?- b
4 仿真结果
) M" Y  n- ~* j& J$ p
" z; B: |; m+ o& o+ O0 {/ P采用Altera公司提供的QUARTus II仿真工具,其集成有与硬件实时操作相吻合的硬件测试工具。综合仿真结果如图7所示,系统时钟SysClk为12 kHz,其仿真结果表明系统设计达到要求。6 o+ I9 y. [. ^" W/ M
6 z! ^, u6 c! ^4 `3 l
5 结论
( I' D" i: h+ \
3 j: g; z+ _/ k' r5 S提出基于FPGA器件,VHDL语言描述的特殊键盘设计方案解决远距离、分散、多键动作状态识别问题,极大节省PCB面积和MCU的I/0端口资源。模块中扫描延迟、扫描间隔等参数可根据系统需求灵活改变,FPGA器件使得电路功能的扩展方便,具有极高稳定性和灵活性。这一方案已在实际项目中应用,经现场验证性能稳定可靠.
$ y+ X7 {$ v+ F* d  k( {% Y
* {+ P; ?$ v5 W/ p! c3 V2 i1 K- @, [0 L& l( C* ]

该用户从未签到

2#
发表于 2019-12-19 21:38 | 只看该作者
看看楼主说的方案。

该用户从未签到

3#
发表于 2022-9-2 16:28 | 只看该作者
基于FPGA的多按键状态识别系统设计方案
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-6 05:28 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表