1 引言
按键作为普通的输入外设,在仪器仪表工业设备和家用电器中得到广泛应用。目前,按键输入电路Ⅲ主要有2种:一种是非扫描方式可以判断多键状态(允许多键同时动作),但是不适用于大量按键情况,所需I/0端口多;另一种是扫描阵列方式,适用于大量按键,但不能多键同时动作。因此,需要开发一种既适合大量按键又适合多键同时动作,并能节省单片机(MCU)的口线资源的多按键状态识别系统。这里提出一种利用FPGA的I/0端口数多和可编程的特点,采用VHDL语言的多按键状态识别系统,实现识别60个按键自由操作,并简化MCU的控制信号。
2 系统设计方案
FPGA是一种可编程逻辑器件,它具有良好性能、极高的密度和极大的灵活性,外围电路简单可靠等特性。因此,该系统设计是由MCU、FPGA、按键等部分组成。60路按键信号进入FPGA单元,以供数据采集;FPGA处理采集到的数据信号,编码后写入内部FIFO。MCU通过I/O端口提取FIFO中的数据。模块通过电源接口向各个部分供电。其系统设计原理框图如图l所示。
2.1 FPGA配置电路
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存储器,可满足用户小容量信息存储,完全满足系统设计要求。
由于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所示。
2.2 按键电路
图3为一路按键电路,共60个按键(i=1~60)。由于外界环境复杂,按键引线长达6 m,保护二极管VDi:在外界干扰信号大于VCC时导通起到保护FPGA的作用。电阻Ri上拉限流,按键未闭合状态下FPGA输入引脚始终处于高电平。
3 FPGA内部逻辑设计
FPGA内部功能分为扫描模块、编码模块、控制模块以及同步FIFO RAM模块,如图4所示。
图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]数据线上的按键编号和状态数据。
3.1 扫描模块
扫描模块主要完成扫描按键状态输入和按键的软件去抖动。扫描按键状态输入是以5 m8为周期扫描60个输入引脚,将其结果存入60个两位状态移位寄存器。其代码为:
按键去抖有硬件和软件2种实现方式。为了节省成本,充分发挥FPGA器件的功能,该系统设计采用软件去抖。图5为软件去抖动流程。图中State为2位状态移位寄存器,初始值为0,TimeDelay为延时计数器。
软件去抖动过程说明:对状态寄存器的2位数值做异或运算,即m=State_1 Xor State_2。若m=l,说明按键有动作,则令TimeDelay=1,启动延时计数;若m=O,表明按键处于去抖延时或者平稳状态。这时判断TimeDelay,若TimeDelay=0,则按键处于平稳状态;若0MaxDelay时说明按键已经平稳,将结果送入编码器模块。软件去抖关键代码如下:
3.2 编码模块
以0、l表示按键通断状态,60个按键则需要8个字节;在实际中单键动作的概率远远大于多键同时动作的概率,若只对状态发生变化的按键以8位编码方式传输按键信息,则一个按键只需传送一个字节,因此为尽可能地减少MCU的负担,提高实时性,设计为只在按键发生状态变化时才向MCU传输相应按键的编号和状态数据。其编码数据格式如图6所示。
状态位lbit,0表示按键闭合状态,1表示按键打开;数据6bits,即0X01~OX3C分别表示1~60个按键;lbit偶校验位。这样传输一次数据就可完成按键编号和状态的传输。
编码器采用连续和随机2种工作模式。连续工作模式每次扫描后对所有按键依次编码,并获取所有按键的当前状态;而随机工作模式在每次扫描后只对状态发生变化的按键编码。
3.3 控制模块
控制模块完成MCU与FPGA之间的功能控制,有2个作用:一是根据Scan信号选择编码模块的工作模式,二是产生FIFO RAM的读取操作时序。
对于模式控制,Scan上升沿触发控制模块,使编码模块进入连续工作模式,扫描完成一周,控制模块发送控制信号使编码模块进入随机工作模式。
对于读取数据,控制模块根据FIFO RAM的Data[7:0]是否有数据,置位Ready信号。有数据,Ready为低电平;无数据,Ready为高电平。RdClk为读取时钟,相当于确认信号,每读完一个数据,发送一个脉冲。
3.4 FIFORAM模块
与MCU通信的接口种类很多,可选择串口、I2C、并口等形式,应用中可根据MCU资源以及项目成本、进度等具体情况选择最合适的一种方式。该系统设计利用同步FIF0 RAM并口传输。FIF0 RAM模块采用EDA软件库中的标准模块。
4 仿真结果
采用Altera公司提供的Quartus II仿真工具,其集成有与硬件实时操作相吻合的硬件测试工具。综合仿真结果如图7所示,系统时钟SysClk为12 kHz,其仿真结果表明系统设计达到要求。
5 结论
提出基于FPGA器件,VHDL语言描述的特殊键盘设计方案解决远距离、分散、多键动作状态识别问题,极大节省PCB面积和MCU的I/0端口资源。模块中扫描延迟、扫描间隔等参数可根据系统需求灵活改变,FPGA器件使得电路功能的扩展方便,具有极高稳定性和灵活性。这一方案已在实际项目中应用,经现场验证性能稳定可靠。
关键字:多按键状态识别 I/0端口 VHDL
引用地址:基于FPGA的多按键状态识别系统设计方案
按键作为普通的输入外设,在仪器仪表工业设备和家用电器中得到广泛应用。目前,按键输入电路Ⅲ主要有2种:一种是非扫描方式可以判断多键状态(允许多键同时动作),但是不适用于大量按键情况,所需I/0端口多;另一种是扫描阵列方式,适用于大量按键,但不能多键同时动作。因此,需要开发一种既适合大量按键又适合多键同时动作,并能节省单片机(MCU)的口线资源的多按键状态识别系统。这里提出一种利用FPGA的I/0端口数多和可编程的特点,采用VHDL语言的多按键状态识别系统,实现识别60个按键自由操作,并简化MCU的控制信号。
2 系统设计方案
FPGA是一种可编程逻辑器件,它具有良好性能、极高的密度和极大的灵活性,外围电路简单可靠等特性。因此,该系统设计是由MCU、FPGA、按键等部分组成。60路按键信号进入FPGA单元,以供数据采集;FPGA处理采集到的数据信号,编码后写入内部FIFO。MCU通过I/O端口提取FIFO中的数据。模块通过电源接口向各个部分供电。其系统设计原理框图如图l所示。
2.1 FPGA配置电路
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存储器,可满足用户小容量信息存储,完全满足系统设计要求。
由于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所示。
2.2 按键电路
图3为一路按键电路,共60个按键(i=1~60)。由于外界环境复杂,按键引线长达6 m,保护二极管VDi:在外界干扰信号大于VCC时导通起到保护FPGA的作用。电阻Ri上拉限流,按键未闭合状态下FPGA输入引脚始终处于高电平。
3 FPGA内部逻辑设计
FPGA内部功能分为扫描模块、编码模块、控制模块以及同步FIFO RAM模块,如图4所示。
图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]数据线上的按键编号和状态数据。
3.1 扫描模块
扫描模块主要完成扫描按键状态输入和按键的软件去抖动。扫描按键状态输入是以5 m8为周期扫描60个输入引脚,将其结果存入60个两位状态移位寄存器。其代码为:
按键去抖有硬件和软件2种实现方式。为了节省成本,充分发挥FPGA器件的功能,该系统设计采用软件去抖。图5为软件去抖动流程。图中State为2位状态移位寄存器,初始值为0,TimeDelay为延时计数器。
软件去抖动过程说明:对状态寄存器的2位数值做异或运算,即m=State_1 Xor State_2。若m=l,说明按键有动作,则令TimeDelay=1,启动延时计数;若m=O,表明按键处于去抖延时或者平稳状态。这时判断TimeDelay,若TimeDelay=0,则按键处于平稳状态;若0
3.2 编码模块
以0、l表示按键通断状态,60个按键则需要8个字节;在实际中单键动作的概率远远大于多键同时动作的概率,若只对状态发生变化的按键以8位编码方式传输按键信息,则一个按键只需传送一个字节,因此为尽可能地减少MCU的负担,提高实时性,设计为只在按键发生状态变化时才向MCU传输相应按键的编号和状态数据。其编码数据格式如图6所示。
状态位lbit,0表示按键闭合状态,1表示按键打开;数据6bits,即0X01~OX3C分别表示1~60个按键;lbit偶校验位。这样传输一次数据就可完成按键编号和状态的传输。
编码器采用连续和随机2种工作模式。连续工作模式每次扫描后对所有按键依次编码,并获取所有按键的当前状态;而随机工作模式在每次扫描后只对状态发生变化的按键编码。
3.3 控制模块
控制模块完成MCU与FPGA之间的功能控制,有2个作用:一是根据Scan信号选择编码模块的工作模式,二是产生FIFO RAM的读取操作时序。
对于模式控制,Scan上升沿触发控制模块,使编码模块进入连续工作模式,扫描完成一周,控制模块发送控制信号使编码模块进入随机工作模式。
对于读取数据,控制模块根据FIFO RAM的Data[7:0]是否有数据,置位Ready信号。有数据,Ready为低电平;无数据,Ready为高电平。RdClk为读取时钟,相当于确认信号,每读完一个数据,发送一个脉冲。
3.4 FIFORAM模块
与MCU通信的接口种类很多,可选择串口、I2C、并口等形式,应用中可根据MCU资源以及项目成本、进度等具体情况选择最合适的一种方式。该系统设计利用同步FIF0 RAM并口传输。FIF0 RAM模块采用EDA软件库中的标准模块。
4 仿真结果
采用Altera公司提供的Quartus II仿真工具,其集成有与硬件实时操作相吻合的硬件测试工具。综合仿真结果如图7所示,系统时钟SysClk为12 kHz,其仿真结果表明系统设计达到要求。
5 结论
提出基于FPGA器件,VHDL语言描述的特殊键盘设计方案解决远距离、分散、多键动作状态识别问题,极大节省PCB面积和MCU的I/0端口资源。模块中扫描延迟、扫描间隔等参数可根据系统需求灵活改变,FPGA器件使得电路功能的扩展方便,具有极高稳定性和灵活性。这一方案已在实际项目中应用,经现场验证性能稳定可靠。
上一篇:基于DSP+MCU的列车滚动轴承故障诊断系统设计与应用
下一篇:一种基于DDS技术的信号发生器研究与实现
推荐阅读最新更新时间:2024-05-02 23:01
基于VHDL的16路可调速彩灯控制器设计
0 引言 近年来,FPGA/CPLD发展迅速,随着集成电路制造工艺的不断进步,高性价比的FPGA/CPLD器件推陈出新,使FPGA/CPLD成为当今硬件设计的重要途径,与传统电路设计方法相比,FPGA/CPLD具有功能强大、开发周期短、投资少,便于追踪市场变化及时修改产品设计以及开发工具智能化等特点。在诸多FPGA/CPLD的设计语言中,VHDL语言作为一种主流的硬件描述语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性,并在语言易读性和层次化、结构化设计方面,表现出了强大的生命力和应用潜力。 QuartusⅡ是Altera公司在21世纪初推出的
[安防电子]
为什么设计复杂系统如此之难?浅谈利用仿真攻克汽车系统
当今汽车行业所面临的挑战与电信行业十多年前所经历的类似。混合动力电动汽车和燃料电池汽车等新技术也促进了研发活动的日趋活跃,正如我们在手机演变成多媒体设备的进程中所看到的一样。同样,电信业面临着功耗和芯片尺寸限制的问题,而汽车设计师正努力将更多技术运用到过去仅仅是机械的设备中。 电子、电气、机械,硬件和软件组件以及将其相连接的网络正大力推动汽车设计的发展。车载电子设备数量的比重目前为40%,而且在不断上升,与此同时,电子控制单元的数量也在日益增加,并被分布到整个系统中,用以控制新应用的精密性和复杂性。电子控制单元能包含数百个软件组件,促使系统更多地采用多路复用技术,也提升了通信方面的要求。 不仅一般系统设计在整体上有所扩大,可以满足
[汽车电子]
基于VHDL的异步FIFO设计
先进先出缓存电路读/写(FIFO)在大规模逻辑设计中被广泛应用,几乎每个芯片都要涉及,同样在空空导弹的数据传输体系中也得以大量应用。FIFO类型可以分为两种,第一种为同步FIFO,即读/写时钟是同步的,这里的同步不仅仅是指读/写时钟为同一个时钟,即属于同一个时终域。当读/写时钟频率为倍数关系,即相位关系确定时,也归属同步FIFO的范畴。另一种为异步FIFO,读/写时钟频率不成倍数关系或相位关系不确定,即跨时钟域。异步FIFO可以在不同的时钟域之间快速方便地传输实时数据,因此在遥测数据传输中,异步FIFO实用性更好。然而如何正确地产生空满标志以及如果解决亚稳态问题是异步FIFO设计的难点。 1 FIFO结构 首先,典型
[电源管理]
基于VHDL的Petri网系统的FPGA实现
1 引言 Petri网是一种系统的、数学的和图形的描述和分析工具 ,随着超大规模集成电路FPGA和CPLD的发展,Petri网的硬件实现成为可能,而基于Petri网的逻辑控制器的逻辑电路实现方法成为最近几年的研究热点 。在目前的Petri网硬件实现的研究中,主要给出了petri网C/E系统和P/T系统的几种实现方法,但主要存在如下缺点:1)使用基本门电路和触发器用图形法自底向上实现了Petri网基本元件库所与变迁。这种设计方法的最大缺点是不易于任意修改逻辑电路设计。2)用VHDL语言实现了整体电路设计的软件化,但未形成模块化的Petri网元件。 VHDL语言由于其其强大的行为描述能力及与硬件行为无关的特性,被广泛的用于数字系统设
[嵌入式]
基于FPGA的HSDI接口设计
引 言
HSDI(High Speed Direct InjectiON)是一种可配置的高速数据接口。例如,德州仪器公司生产的集成式1394a链接层控制器与舣端口物理层控制器TSB43DA42和TSB43DB42分别包括3个高速数据端口(HSDI)。每个端口均支持数据I/O,能专门负责一个同步数据路径,所有端口都支持与各种编解码器的无缝连接,能够根据IEC61883标准实现压缩的A/V数据与数字音频的传输。还有就是Freescale公司计划开发的UWB系列产品。这些UWB网卡符合美国联邦通讯委员会(FCC)现行拟定的UWB标准,支持多种操作系统;同时,这些产品将拥有mini-PCI和SDIO模组外形结构,并且,还将具有PC
[嵌入式]
用VHDL设计专用串行通信芯片
摘要: 一种专用串行同步通信芯片(该芯片内部结构和操作方式以INS8250为参考)的VHDL设计及CPLD实现,着重介绍了用VHDL及CPLD设计专用通信芯片的开发流程、实现难点及应注意的问题。
关键词: VHDL FPGA CPLD UART 统计时分复用器
在通信系统中,通信芯片是整个硬件平台的基础,它不仅完成OSI物理层中的数据发送和接收,还能根据传输方式和协议的不同实现不同的数据校验方式及数据组帧格式。
目前,许多厂商都提供通用的串行通信芯片,其传输方式分为同步方式和异步方式。其中,异步芯片大多与INTEL的8250芯片兼容;而同步方式,由于一般涉及到所支持的传输协议(BSC、HDL
[工业控制]
用VHDL实现有线电视机顶盒信源发生
VHDL是随着可编辑逻辑器件(PLD)的发展而发展起来的一种硬件描述语言。它是1980年美国国防部VHSIC(超高速集成电路)计划的一部分,并于1986年和1987年分别成为美国国防部和IEEE的工业标准。作为一种硬件设计时采用的标准语言,VHDL具有极强的描述能力,能支持系统行为级、寄存器传输级和门级三个不同层次的设计,这样设计师将在TOP-DOWN设计的全过程中均可方便地使用同一种语言。而且,VHDL设计是一种“概念驱动式”的高层设计技术,设计人员毋需通过门级原理图描述电路,而是针对目标进行功能描述,由于摆脱了电路细节的束缚,设计人员可以专心于设计方案和构思上,因此设计工作省时省力,加快了设计周期,并且工艺转换变得轻松。V
[家用电子]
羿步FIFO的VHDL设计
摘要: 给出了一个利用格雷码对地址编码的羿步FIFO的实现方法,并给出了VHDL程序,以解决异步读写时钟引起的问题。
关键词: FIFO 双口RAM 格雷码 VHDL
FIFO(先进先出队列)是一种在电子系统得到广泛应用的器件,通常用于数据的缓存和用于容纳异步信号的频率或相位的差异。FIFO的实现通常是利用双口RAM和读写地址产生模块来实现的。FIFO的接口信号包括异步的写时钟(wr_clk)和读时钟(rd_clk)、与写时钟同步的写有效(wren)和写数据(wr_data)、与读时钟同步的读有效(rden)和读数据(rd_data)。为了实现正确的读写和避免FIFO的上溢或下溢,通常还应该给
[半导体设计/制造]
小广播
热门活动
换一批
更多
最新嵌入式文章
更多精选电路图
更多热门文章
更多每日新闻
更多往期活动
- 电感知识大考:遇到这些问题怎么办?|“MPS电感探索季:发现小且不凡的秘密!”第一站
- EEWORLD十周年为你而任性——上百块ST开发板团购盛宴开始啦!49元包邮,发帖还返现
- 有奖调查:ST MEMS 传感器论坛用户问卷调查,参与有惊喜
- 有奖直播:安森美电感式位置传感器接口 NCS32100
- Mouser&TE直播:解锁智能家居部件新技术,探索连接黑科技
- 有奖直播|ADI电机控制解决方案
- 有奖直播:NXP 汽车系统电源管理开讲啦,从功能安全架构到新品FS26,预约有礼~
- 与未来同行-是德科技创新技术峰会·北京
- 一大波MCU开发板正在靠近,速来——瑞萨电子设计大赛(2015)
- 三人行必有我师——EEworld网友原创教程隆重登场!
11月13日历史上的今天
厂商技术中心