版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章EDA技术随着大规模集成电路技术和计算机技术的不断发展,在涉及通信、国防、航天、医学、工业自动化、计算机应用、仪器仪表等领域的电子系统设计工作中,EDA技术的含量正以惊人的速度上升,电子类高新技术项目的开发也更加依赖于EDA技术的应用。即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性能价格比大幅提高。不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成部分EDA技术的含义及特点EDA(ElectronicDesignAutomation,电子系统设计自动化)技术是20世纪90年代初从CAD(计算机辅助设计),CAM(计算机辅助制造),CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。现代EDA技术就是以计算机为工具,在EDA软件平台上,根据硬件描述语言HDL完成的设计文件,能自动地完成用软件方式描述的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。设计者的工作仅限于利用软件的方式来完成对系统硬件功能的描述,在EDA工具的帮助下和应用相应的FPGA/CPLD器件,就可以得到最后的设计结果。尽管目标系统是硬件,但整个设计和修改过程如同完成软件设计一样方便和高效。[3]可见,利用EDA技术进行电子系统的设计具有以下几个特点:一是用软件的方式设计硬件;二是用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;三是采用自顶向下(top--down)的设计方法;四是设计过程中可用有关软件进行各种仿真;五是系统可现场编程,在线升级;六是整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。因此,EDA代表了当今电子设计技术的最新发展方向。EDA技术的主要内容EDA技术涉及面很广,内容丰富,从教学和实用的角度看,主要应掌握如下个4个方面的内容:一是大规模可编程逻辑器件;二是硬件描述语言;三是软件开发工具;四是实验开发系统。其中,大规模可编程逻辑器件是利用EDA技术进行电子系统设计的载体,硬件描述语言是利用EDA技术进行电子系统设计的主要表达手段,软件开发工具是利用EDA技术进行电子系统设计的智能化的自动设计工具,实验开发系统则是利用EDA技术进行电子系统设计的下载工具及硬件验证工具。1.3FPGA、VHDL语言FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA采用了逻辑单元阵列(LOA,LogicCellArray)这样一个新概念,内部包括可配置逻辑模块(CLB,ConfigurableLogicBlock)、输入输出模块(IOB,InputOutputBlock)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:采用FPGA设计ASIC电路,用户不需要投片生产就能得到合用的芯片;FPGA可做其他全定制或半定制ASIC电路的试样片:FPGA内部有丰富的触发器和I/O引脚;FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一;FPGA采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼容。可以说,FPGA芯片是小批量系统提高系统集成度和可靠性的最佳选择之一。目前FPGA的品种很多,有XILINX的xc系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。VHDL于1983年有美国国防部(DOD)发起创建,由IEEE进一步发展并在1987年作为“IEEE标准1076”发布。从此,VHDL成为硬件描述语言的业界标准之一。VHDL作为一个规范语言和建模语言,随着VHDL的标准化,出现了一些支持该语言的行为仿真器。由于创建VHDL的最初目标是用于标准文档的建立和电路功能模拟,其基本想法是在高层次上描述系统和元件的行为。但到了20世纪90年代初,人们发现,VHDL不仅可以作为系统模拟的建模工具,而且可以作为电路系统的设计工具,可以利用软件工具将VHDL源码自动地转化为文本方式表达的基本逻辑元件连接图,即网表文件。这种方法显然对于电路自动设计师一个极大的推进。很快,电子设计领域出现了第一个软件设计工具,即VHDL逻辑综合器,它把标准VHDL的部分语句描述转化为具体电路实现的网表文件。VHDL具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,在语言易读性和层次化结构化设计方面表现了强大的生命力和应用潜力。因此,VHDL支持各种模式的设计方法:自顶向下雨自底向上或混合方法,在面对当今许多电子产品生命周期缩短,需要多次重新设计以融入最新技术、改变工艺等方面,VHDL具有良好的适应性。用VHDL进行电子系统设计的一个很大的优点神设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。1.4QuartusII软件介绍QuartusII应用开发工具提供完整的多平台设计环境,它可以轻易满足特定设计的需要,是可编程片上系统(SOPC)设计的综合性环境。QuartusII可在个人计算机或Unix/Linus工作站上使用,大大简便了整个设计过程,做到真正的快速CPLD/FPGA应用开发。与早期的MAX+plusII开发工具相比,QuartusII提供更为广泛的器件支持库、更高的编译效率、更好的图形界面和更为便捷的仿真平台。QuartusII全面支持Altera公司出品的芯片产品,就4.0版本而言,它支持的芯片型号包括ACEX1K、APEX全系列、APEXII、基于ARM技术的Excalibur系列、Cyclone、FLEX全系列、HardCopyStratix、MAXII、MAX全系列、Mercury、Stratix、StratixII以及StratixGX等。QuartusII为电路设计者提供了完整的多平台设计环境,它可以满足众多特定设计的需要。QuartusII拥有CPLD/FPGA各个开发阶段对应的开发工具,设计者通过它的集成开发环境可一次性完成整体应用的开发。图1.1所示是利用QuartusII完成应用开发的流程图。图1.1QuartusII设计流程第2章电梯控制系统2.1设计背景与意义目前国内七八十年代安装的许多电梯电气部分用继电器接触器控制系统,线路复杂,接线多,故障率高,维修保养难,许多已处于闲置状态,其拽引系统多采用交流双速电机系统换速,效率低,调速性能指标较差,严重影响电梯运行质量。由于这些电梯交流调压调速系统,交流双速电机拖动系统性能及乘坐舒适感较差,交流调压调速系统属能耗型调速的机械部分无大问题,为节约资金,大部分老式电梯用户希望对电梯的电气控制系统进行改造,提高电梯的运行性能。因此对电梯控制技术进行研究,寻找适合我国老式电梯的改造方法具有十分重要的意义。电梯作为高层建筑物的重要交通工具与人们的工作和生活日益紧密联系。FPGA/CPLD作为新一代工业控制器,以其高可靠性和技术先进性,在电梯控制中得到广泛应用,从而使电梯由传统的继电器控制方式发展为计算机控制的一个重要方向,成为当前电梯控制和技术改造的热点之一。由于FPGA/CPLD具有性能稳定、抗干扰能力强、设计配置灵活等特点。因此在工业控制方面得到了广泛应用。自90年代后期FPGA/CPLD引入我国电梯行业以来,由FPGA/CPLD组成的电梯控制系统被许多电梯制造厂家普遍采用。并形成了一系列的定型产品。在传统继电器系统的改造工程中,FPGA/CPLD系统一直是主流控制系统。电梯控制系统分为调速部分和逻辑控制部分。调速部分的性能对电梯运行是乘客的舒适感有着重要影响,而逻辑控制部分则是电梯安全可靠运行的关键。为了改善电梯的舒适感和运行的可靠性,现在都改为用FPGA/CPLD来控制电梯的运行,这样大大提高了电梯的性能。2.2设计要求采用FPGA设计一个10层的电梯控制系统,用VHDL语言进行程序设计,用QuartusII软件进行结果仿真。该控制器可控制电梯完成10层楼的载客服务。要求遵循方向优先原则,能响应提前关门或延迟关门,并具有超载报警和故障报警;同时指示电梯运行情况和电梯内外请求信息。第3章电梯控制系统整体设计方案3.1不同的方案设计3.1.1基于单片机的电梯控制设计方案电梯控制系统的工作原理是:当某层有电梯信号输入时,电梯信号锁存系统将电梯信号锁存,待单片机查询到电梯信号后,根据电梯信号的位置(即楼层数)和电梯所处的位置,决定电梯运行方向,并启动电梯到电梯层停梯、开门,待乘客进入电梯关门后,再根据乘客要求把乘客送到目的层。用单片机实现电梯控制系统的结构原理框图如图3.1所示。[9]电梯上升、下降指示器A单片机电梯安全控制电路上、下楼请求信号存储电路<=>电梯运行电路电梯位置监测与显示电路<=>电梯开关门电路图3.1单片机电梯控制系统的方框图3.1.2基于PLC的电梯控制设计方案电梯PLC的控制系统和其他类型的电梯控制系统一样主要由控制系统和拖动控制系统两部分组成。其基本结构图如图3.2所示,主要硬件包括主机及扩展、机械系统、轿厢操纵盘、厅外呼梯盘、指层器、门机、调速装置与主拖动系统等。图3.2PLC电梯控制系统的基本结构图3.1.3基于FPGA的电梯控制设计方案该设计采用方向优先控制方式方案,并能响应提前关门延时关门,并具有超载报警和故障报警;同时指示电梯运行情况和电梯内外请求信息。它主要由4个模块组成:外部数据高速采集模块、信号存储模块、基于FPGA的控制器模块、信号的输出、显示模块。3.2方案比较与选择采用单片机的电梯控制系统是以MCS-51系列单片机为控制核心与可编程接口芯片和采用串入并出移位寄存器的显示驱动电路及带有比较器的信号输入滤波电路构造的一个主控板并利用软件手段实现对电梯运行的逻辑控制。结构简单,运行可靠,耗电量少且便于维修,具有造价低廉,维修方便之特点,但没FPGA控制方便灵活。采用PLC的电梯控制系统是一种用于自动化控制的专用计算机,实质上属于计算机控制方式。PLC控制一般具有可靠高、易操作、维修、编程简单、灵活性强等特点。在设计中要使用到变频器,其功能强,使用灵活,由于PLC的针对性较强,每一台PLC都是根据一个设备而设计的,且使用到继电器,所以价格较昂贵,操作复杂。采用FPGA的电梯控制系统通过对器件内部的设计来实现系统功能,是一种基于芯片的设计方法。设计者可以根据需要定义器件内部逻辑和引出端,将电路板设计的大部分工作放在芯片的设计中进行,通过对芯片设计实现数字系统的逻辑功能。灵活的内部功能块组合,引出端定义等,可大大减轻电路设计和电路板设计和电路板设计的工作量和难度,有效的增强设计的灵活性,提高工作效率。同时采用可编程逻辑器件,设计人员在实验室可反复编程,修改错误,以期尽快开发产品,迅速占领市场。基于芯片的设计方法可以减少芯片的数量,缩小系统体积,降低能源消耗,提高系统的性能和可靠性。基于FPGA的电梯控制系统比基于单片机的控制更灵活、更方便于设计,基于PLC的控制系统的针对性要强,一台PLC只针对于一个设备而设计且要使用到继电器,所以价格昂贵,综合考虑使用FPGA设计电梯控制系统比较适合。3.3整体方案设计设计一个10层楼的电梯控制器,该控制器可控制电梯完成10层楼的载客服务而且遵循方向优先原则,方向优先控制是指电梯运行到某一楼层时先考虑这一楼层是否有请求:有,则停止;无,则继续前进。停下后再启动时的步骤:考虑前方一一上方或下方是否有请求:有,则继续前进;无,则停止;检测后方是否有请求,有请求则转向运行,无请求则维持停止状态。这种运行方式下,电梯对用户的请求响应率为100%,且响应的时间较短,电梯在维修停止状态的时候可以进入省电模式,又能节省大量电能。具体功能如下:完成10层楼的载客服务控制;电梯初始位置为第一层;电梯运行时显示电梯的运行方向和所在的楼层;当电梯到达选择的楼层时,电梯自动开门;当电梯到达本层时,清除请求;具有提前关电梯门和延时关电梯门的功能;电梯处于等待状态时,上升和下降请求都响应;电梯处于上升状态时,有上升请求的分控制器所在楼层数大于电梯所在的楼层数。(9)电梯处于下降状态时,有下降请求的分控制器所在楼层数小于电梯所在的楼层数。⑵系统方框图如图3.3。如果压力传感器连续采集到3次关门中断信号,则启动电梯故障信号,除非人为对故障进行清除,否则电梯将保持开门状态并不进行任何操作。如果压力传感器采集到电梯超载,电梯将报警,并保持开门状态不进行任何操作,直到压力传感器采集到电梯不再超载。电梯打开后,如果用户不进行任何操作,电梯3秒后将自动关门,如果用户按提前关门键,电梯将立即响应关门指令。控制器模块对电梯内及电梯外用户的上升和下降请求进行处理,处理结果并置后存入信号存储模块。电梯在运行过程中,每到达一层将通过控制器模块,对信号存储模块的存储指令进行比对,以判断是否需要停止,并通过光敏采集到的信1号来判断电梯所到达的楼层,并通过显示模块进行显示。⑴4图3.3电梯方向优先控制方式控制器系统方框图第4章电梯控制系统的硬件设计4.1外部数据高速采集模块设计有效的对外部信号采集、处理要求电梯控制器:对外部请求信号的实时、准确采集;准确、实时的捕捉楼层到达信号;有效防止楼层到达信号、外部请求信号的误判。控制器采用FPGA作为系统控制的核心,系统时钟频率是32MHz,完全可以满足实时采集数据的要求。由于电路中毛刺现象的存在,信号的纯净度降低,单个的毛刺往往被误作为系统状态转换的触发信号,严重影响电梯的正常工作。可以采用多次检测的方法解决这个问题,对一个信号进行多次采样以保证信号的可信度。外部请求信号的输入形式为按键输入,到达楼层信号来自光敏传感器,关门中断信号及超载信号则产生于压力传感器。4.1.1键盘输入外部请求信号输入采用键盘输入,用带有I/O口的线组成行列结构,按键设置在行列的交点上。本题目采用5X6的行列结构可以构成30个键盘,实际使用30个。按键设置在行列线交叉点,行、列线分别连接到按键开关的两端。列线通过上拉电阻接+5V的电压,即列线的输出被钳位到高电平状态。判断键盘中有无按键按下时通过行线送入扫描信号,然后从列线读取状态得到的。其方法是依次给行线送低电平,检查列线的输入。如果列线信号全为高电平,则代表低电平信号所在的行中无按键按下;如果列线有输入为低电平,则低电平信号所在的行和出现低电平的列的交点处有按键按下,电路图如图4.1所示。
图4.1键盘输入电路4.2信号存储模块电梯控制器的请求输入信号有30个(电梯外有9个上升请求和9个下降请求的用户输入端口,电梯内有10个请求用户输入端口,一个提前关门quick,一个清楚报警信号clr),由于系统对内、外请求没有设置优先级,各楼层的内、外请求信号被采集后可先进行运算,再存到存储器内。电梯运行过程中,由于用户的请求信号的输入是离散的,而且系统对请求的响应也是离散的,因此请求信号的存储要求新的请求信号不能覆盖原来的请求信号,只有响应动作完成后才能清除存储器内对应的请求信号位。对应某一楼层的请求信号的存储、清除电路如图4.2所示。图4.2请求信号操彳电路4.3基于FPGA的控制器模块图4.2请求信号操彳电路控制器模块是系统的核心,通过对存储的数据(含请求、到达楼层等信号)进行比较、判断以驱动系统状态的流转。电梯工作过程中共有9种状态:等待、上升、下降、开门、关门、停止、休眠、超载报警以及故障报警状态。一般情况下,电梯工作起始点是第一层,起始状态是等待状态,启动条件是收到上升请求。控制器模块采用FPGA芯片,编写控制程序后下载到芯片内,实现对电梯系统的控制。其使用的芯片是Xilinx公司SpartanII系列的XC2S15-5CS144C芯片。SpartanII器件的集成度可以达到15万门,系统速度可达到200MHz,能达到ASIC的性价比。SpartanII2.5V现场可编程们SpartanII器件的工作电压为2.5V,采用0.22pm/0.18pmCMOS工艺,6层金属连线制造。4.4信号的输出、显示模块本系统的输出信号有三种:一种是电机的升降控制信号(两位)和开门/关门控制信号;一种是面向用户的提示信号(含楼层显示、方向显示、已接受请求显示等);一种是对于超载、故障的报警信号。电机的控制信号一般需要两位,本系统中电机有3种工作状态:正转、反转和停转状态。两位控制信号作为一个三路开关选通信号,此三路开关选用模拟电子开关。系统的显示输出包括数码管请求信号显示、数码管楼层显示。电路图如图4.3,4.4所示。
图4.3电梯内、外请求信号显示电路图图4.4数码管楼层显示电路图本系统具有请求信号显示功能,结合方向显示,可以减少用户对同一请求的输入次数,这样就延长了电梯按键的使用寿命。假如电梯处于向上运动状态,初始位置是底层,初始请求是10楼,2楼时进入一人,如果他的目的地是10楼,他看到初始请求是10楼,就可以不再按键。同时,电梯外部的人也可以根据请求信号显示(上升请求、下降请求、无请求),就可以避免没必要的重复请求信号输入。电梯使用时,系统结合相应的电梯使用规范完全可以满足人们的需要,而且效率比较高。图4.5报警输出电路图报警输出电路图主要由频率放大器构成。当电梯内超载时,压力传感器输出的电压超出范围时,双限比较器输出低电平,触发了报警电路,发出报警信号。第5章电梯控制系统软件设计及仿真5.1键盘输入软件设计5.1.1键盘扫描模块键盘扫描电路是用于产生keydrv4到keydrv0信号,其变化的顺序依次为11110-11101-11011-10111-01111-……周而复始地扫描。其停留在每个状态的时间大约为10ms.更短的停留时间是没有必要的,因为人按键的时间大约为10ms,不可能有更快的按键动作发生;另外,更短的停留时间还容易采集到抖动信号,会干扰判断。而太长的停留时间则容易丢失某些较快的按键动作。键盘扫描电路的外部接口如图5.1所示。其中clk_scan是周期为10ms的扫描时钟,keydrv为输出到键盘的扫描信号,宽度为5位。键盘扫描电路程序:libraryIEEE;useIEEE.std_logic_1164.ALL;entitykeysanisport(clk_scan:instd_logic;--扫描时钟,周期10mskeydrv:outstd_logic_vector(4downto0));--输出扫描信号endkeysan;architecturebehaviorofkeysanisconstants0:std_logic_vector(4downto0):="11110”;--定义状态机编码constants1:std_logic_vector(4downto0):="11101”;constants2:std_logic_vector(4downto0):="11011”;constants3:std_logic_vector(4downto0):="10111”;constants4:std_logic_vector(4downto0):="01111”;signalpresent_state:std_logic_vector(4downto0);--状态机现态signalnext_state:std_logic_vector(4downto0);--状态机次态beginprocess(clk_scan)--状态更新进程beginif(clk_scan'eventandclk_scan='1')then
present_state<=next_state;endif;endprocess;process(present_state)--状态译码begincasepresent_stateiswhens0=>next_state<=s1;whens1=>next_state<=s2;whens2=>next_state<=s3;whens3=>next_state<=s4;whens4=>next_state<=s0;whenothers=>next_state<=s0;--多余态处理endcase;endprocess;keydrv<=present_state;--输出译码endbehavior;以上程序采用一个状态机来实现扫描电路。该状态机是一个one-hot状态机,并且输出值就是状态机的状态,没有通过一个逻辑电路来做输出译码。这样做的好处是得到的输出信号比较“干净”,没有毛刺。图5.1为外部接口图,图5.2为波形仿真图。
keysan图5.1外部接口图图5.2波形仿真图keysan图5.1外部接口图图5.2波形仿真图键盘译码电路是从keydrv4到keydrv0和keyin5到keyin0信号中译码出按键键值的电路。按键标志产生电路是产生按键标志信号keypressed的电路,其外部接口如图5.3所示。其中clk为全局时钟信号,它是由FPGA芯片的外部晶振给出的。clk在系统中的频率是最高,其他时钟都由它分频产生。keydrv为键盘扫描信号,keyin为键盘输入信号,keypressed表示有一个按键被按下,每发生一次按键动作,keypressed就输出一个宽度为全局时钟周期的正脉冲。该信号用于与其他模块一起,负责通知其他模块键盘上有按键发生。其他模块在keyypressed有效时,可以读取键值。程序如下:libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;entitykeydecoderisport(keyin:instd_logic_vector(5downto0);--键盘输入keydrv:instd_logic_vector(4downto0);--扫描信号clk:instd_logic;--全局时钟clk_scan:instd_logic;--扫描时钟c_u1,c_u2,c_u3,c_u4,c_u5,c_u6,c_u7,c_u8,c_u9:outstd_logic;--输出值c_d2,c_d3,c_d4,c_d5,c_d6,c_d7,c_d8,c_d9,c_d10:outstd_logic;d1,d2,d3,d4,d5,d6,d7,d8,d9,d10:outstd_logic;quick,clr:outstd_logic;keypressed:outstd_logic);--有键被按下标志endkeydecoder;architecturert1ofkeydecoderissignaltemp:std_logic_vector(10downto0);--temp=keyin&keydrvsignaltemp_pressed:std_logic;--用于产生keypressedsignalq1,q2,q3,q4,q5,q6,q7,q8,q9,q10:std_logic;--10个寄存器signalkeypressed_asy:std_logic;--同步化的keypressedbegintemp<=keydrv&keyin;process(temp)--译码进程begincasetempiswhen"11110111110"=>c_u1<=T;temp_pressed<='1';when"11110111101"=>c_u2<=T;temp_pressed<='1';temp_pressed<='1';when"11110110111"=>c_u4<=T;temp_pressed<='1';when"11110101111"=>c_u5<=T;temp_pressed<='1';when"11110111111"=>c_u6<='1';temp_pressed<='1';when"11101111110"=>c_u7<='1';temp_pressed<='1';when"11101111101"=>c_u8<='1';temp_pressed<='1';when"11101111011"=>c_u9<='1';temp_pressed<='1';when"11101110111"=>c_d2<=T;temp_pressed<='1';when"11101101111"=>c_d3<='1';temp_pressed<='1';when"11101011111"=>c_d4<='1';temp_pressed<='1';when"11011111110"=>c_d5<='1';temp_pressed<='1';when"11011111101"=>c_d6<='1';temp_pressed<='1';when"11011111011"=>c_d7<='1';temp_pressed<='1';when"11011110111"=>c_d8<='1';temp_pressed<='1';when"11011101111"=>c_d9<='1';temp_pressed<='1';when"11011011111"=>c_d10<='1';temp_pressed<='1';when"10111111110"=>d1<=T;temp_pressed<='1';when"10111111101"=>d2<=T;temp_pressed<='1';when"10111111011"=>d3<=T;temp_pressed<='1';when"10111110111"=>d4<=T;temp_pressed<='1';when"10111101111"=>d5<=T;temp_pressed<='1';when"10111011111"=>d6<=T;temp_pressed<='1';when"01111111110"=>d7<=T;temp_pressed<='1';when"01111111101"=>d8<=T;temp_pressed<='1';when"01111111011"=>d9<=T;temp_pressed<='1';when"01111110111"=>d10<=T;temp_pressed<='1';when"01111101111"=>quick<=T;temp_pressed<='1';when"01111011111"=>clr<=T;temp_pressed<='1';whenothers=>temp_pressed<='0';endcase;endprocess;process(clk_scan)--按键标志产生电路beginif(clk_scan'eventandclk_scan='1')thenq1<=temp_pressed;q2<=q1;q3<=q2;q4<=q3;q5<=q4;q6<=q5;q7<=q6;q8<=q7;endif;keypressed_asy<=q1orq2orq3orq4orq5orq6orq7orq8;endprocess;process(clk)--同步化keypressed_asybeginif(clk'eventandclk='1')thenq9<=keypressed_asy;q10<=q9;endif;keypressed<=q9andnot(q10);endprocess;endrt1;输入信号clk_scan,它是用于产生扫描信号的时钟,周期为10ms。按键信号temp_pressed首先通过clk_scan信号的上升沿采样。通过采样后,抖动噪声被消除。采样后的信号被分别延迟1到8个clk_scan周期得到8个信号q1,q2,q3和q4,q5,q6,q7,q8,。这8个信号进行或运算得到一个宽约160ms并且与全局时钟异步的按键信号keypressed_asy。原来程序中一个长时间的按键过程有可能会被认为是多次按键,通过这种方法使得一个长时间的按键仍然被认为是一次按键。keydecoderc_u1c_u2keyin[5..0]c_u3c_u4c_u5keydry[4..0]c_u6c_u7c_u8clkc_u9c_d2c_d3clk_scanc_d4c_d5c_d6c_d7c_d8c_d9c_d10d1d2d3d4d5d6d7d8d9d10quickclrkeypressedi234:424344454617484920O1■22■2324052627■2809■30■3132333435inst图5.3外部接口图时钟产生电路是用用于产生扫描时钟的,它的输出提供给键盘扫描电路和按键标志产生电路,其外部接口如图5.4所示。它的输入是全局时钟,在这里假设全局时钟频率为32MHz。他的输出是周期为100ms的扫描时钟。程序如下:libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;entityclk_genisport(clk:instd_logic;--全局时钟clk_scan:outstd_logic);--扫描时钟endclk_gen;architecturert1ofclk_genissignalcnt:integerrange0to199;--做程序仿真时,用这个语句beginprocess(clk)--计数模块beginif(clk'eventandclk='1')thenif(cnt=cnt'high)thencnt<=0;elsecnt<=cnt+1;endif;endif;endprocess;process(cnt,clk)--译码输出beginif(clk'eventandclk='1')then--寄存器锁存输出,目的消除波形上的“毛刺”(小的抖动)ifcnt>=cnt'high/2thenclk_scan<='1';elseclk_scan<='0';endif;endif;endprocess;endrt1;该程序主要包含有一个计数器模块和一个译码输出模块,该程序是通过计数器模块实现分频的。要从32MHz的全局时钟得到100Hz的时钟,必须进行320000倍的分频,如图5.5所示。图5.4外部接口图图5.5波形仿真图5.2控制模块设计及仿真系统的状态流程图如图5.6所示。图中,超载状态时电梯关门动作取消,同时发出报警,直到警报被清除;故障时电梯不执行关门动作,同时发出警报,直到警报被清除(看门狗信号有效的条件是一层楼连续发生关门中断请求超过3次)。本系统由请求信号启动,运行中每检测到一个到达楼层信号,就将信号存储器的请求信号和楼层状态信号进行比较,再参考原方向信号来决定是否停止,转向等动作。电梯控制器功能:完成10个楼层的多用户载客服务控制;电梯内设有乘客到达层数的停站请求开关;每层电梯外设有上下请求开关,显示乘客的上升和下降请求;电梯运行时,楼内外同时显示电梯的运行状态和所在的楼层;当电梯到达选择的楼层时,经过1s电梯门打开,开门指示灯亮,开门3s后,电梯关闭,指示灯灭,电梯继续运行,直至执行完最后一个请求信号停在1层;能记忆电梯外的所有请求信号,按照电梯运行规则次序响应,每个请求信号保留至执行后消除;响应电梯外的有效请求,到达请求的楼层,电梯自动开门。电梯运行规则:电梯处于上升状态时,响应上升请求的楼层大于电梯的所在层;电梯处于下降状态时,响应有下降请求的楼层小于电梯的所在层;执行完上升状态时,若更高层有下楼请求,接开到下楼请求的最高层接客,然后进入下降模式;先执行完所有的上楼请求再执行下楼请求,抑或先执行完所有的下楼请求再执行上楼请求。其5.7为接口电路。清除报警看门狗信号有效刖万(上)请求未响应关门;除"中断4继续前进停止信号有效下降上升停止登载层出现请求继续前进门开门完毕到/!转到顶转向等时时间前方(下请求未响应停止:信号有效..停止请求未响应完毕提前关门等待秒休眠清除报警看门狗信号有效刖万(上)请求未响应关门;除"中断4继续前进停止信号有效下降上升停止登载层出现请求继续前进门开门完毕到/!转到顶转向等时时间前方(下请求未响应停止:信号有效..停止请求未响应完毕提前关门等待秒休眠图5.6系统状态流程图动作完成1.控制源程序如下:libraryieee;useieee.std_logic_1164.all;ATitleuseieee.std_logic_unsigned.all;useieee.std_logic_arith.all;SzeBTitleuseieee.std_logic_arith.all;SzeBDate:Fie:Numbe11-Apr-Fby\Myentitydihntiis--时钟信号port(clk:instd_logic;full,deng,quick,clr:instd_logic;----时钟信号信号c_u1,c_u2,c_u3,c_u4,c_u5,c_u6,c_u7,c_u8,c_u9:outstd_logic;--电梯外人的上升请求信号c_d2,c_d3,c_d4,c_d5,c_d6,c_d7,c_d8,c_d9,c_d10:outstd_logic;--电梯外人的下降请求信号
--电梯内人请求信d1,d2,d3,d4,d5,d6,d7,d8,d9,d10:instd_logic;g1,g2,g3,g4,g5,g6,g7,g8,g9,g10:instd_logic;--到达楼层信号door:outstd_logic_vector(1downto0);--电梯门控制信号led1:outstd_logic_vector(6downto0);--电梯所在楼层显示led2:outstd_logic_vector(6downto0);led_c_u:outstd_logic_vector(9downto0);--电梯外人上升请求信号显示led_c_d:outstd_logic_vector(9downto0);--电梯外人下降请求信号显示led_d:outstd_logic_vector(9downto0);--电梯内请求信号显示wahaha:outstd_logic;--看门狗报警信号ud,alarm:outstd_logic;--电梯运动方向显示,超载警告信号up,down:outstd_logic);--电机控制信号和电梯运动enddianti;architecturebehavofdianti--电梯内人请求信signald11,d22,d33,d44,d55,d66,d77,d88,d99,d1010:std_logic:=‘0’;--电梯内人请求信号寄存信号signalc_u11,c_u22,c_u33,c_u44,c_u55,c_u66,c_u77,c_u88,c_u99:std_logic:=‘0’;--电梯外人上升请求信号寄存信号signalc_d22,c_d33,c_d44,c_d55,c_d66,c_d77,c_d88,c_d99,c_d1010:std_logic:=‘0’;--电梯外人下降请求信号寄存信号signalq:integerrange0to1;--分频信号signalq1:integerrange0to6;--关门延时计数器signalq2:integerrange0to9;--看门狗计数器signaldd,cc_u,cc_d,dd_cc:std_logic_vector(9downto0);--电梯内外请求信号寄存器signalopendoor:std_logic;--开门使能信号signalupdown:std_logic;--电梯运动方向信号寄存器signalen_up,en_dw:std_logic;--预备上升、预备下降预操作使能信号begincom:process(clk)beginifclk'eventandclk='1'thenifclr='1'thenq1<=0;q2<=0;wahaha<='0';--清除故障报警elsiffull='1'thenalarm<='1';q1<=0;--超载报警ifq1>=3thedoor<="10";elsedoor<="00”;endif;elsifq=1thenq<=0;alarm<='0';ifq2=3thenwahaha<='1';--故障报警elseifopendoor='1'thendoor<="10”;q1<=0;q2<=0;up<='0';down<='0';--开门操作elsifen_up='1'then--上升预操ifdeng='1'thendoor<="10";q1<=0;q2<=q2+1;--关门中断elsifequick='1'thenq1<=3;--提前关门elsifeq1=6thendoor<="00";updown<='1';up<=T;--关门状态,电梯进入上升状态elsifeq1>=3thendoor<="01”;q1<=q1+1;--电梯进入关门状态elseq1<=q1+1;door<="00”;--电梯进入等待状态endif;elsifeen_dw='1'then--下降预操作ifdeng='1'thendoor<="10";q1<=0;q2<=q2+1;elsifequick='1'thenq1<=3;elsifeq1=6thendoor<="00”;updown<='0';down<=T;elsifeq1>=3thendoor<="01”;q1<=q1+1;elseq1<=q1+1;door<="00”;endif;endif;ifg1='1'thenled1<="1001111";led2<="1111111";--电梯到达1楼,数码管显示1ifd11='1'orc_u11='1'thend11<='0';c_u11<='0';opendoor<=T;--有当前层的请求,则电梯进入开门状态elsifdd_cc>"0000000001"thenen_up<='1';opendoor<='0';--有上升请求,则电梯进入预备上升状态elsifdd_cc="0000000000"thenopendoor<='0';--无请求时,电梯停在1楼待机endif;elsifg2='1'thenled1<="0010010";led2<="1111111";--电梯到达2楼,数码管显示2ifupdown='1'thenifd22='1'orc_u22='1'thend22<='0';c_u22<='0';opendoor<='1';--有当前层的请求,则电梯进入开门状态elsifdd_cc>"0000000011"thenen_up<='1';opendoor<='0';--有上升请求,则电梯进入预备上升状态elsifdd_cc<"0000000010"thenen_dw<='1';opendoor<='0';--有下降请求,则电梯进入预备下降状态endif;elsifd22='1'orc_d22='1'thend22<='0';c_d22<='0';opendoor<=T;--有当前层的请求,则电梯进入开门状态elsifdd_cc<"0000000010"thenen_dw<='1';opendoor<='0';--有下降请求,则电梯进入预备下降状态elsifdd_cc>"0000000011"thenen_up<='1';opendoor<='0';--有上升请求,则电梯进入预备上升状态endif;elsifg3='1'thenled1<="0000110";led2<="1111111";--电梯到达3楼,数码管显示3ifupdown='1'thenifd33='1'orc_u33='1'thend33<='0';c_u33<='0';opendoor<=T;elsifdd_cc>"0000000111"thenen_up<='1';opendoor<='0';elsifdd_cc<"0000000100"thenen_dw<='1';opendoor<='0';endif;elsifd33='1'orc_d33='1'thend33<='0';c_d33<='0';opendoor<='1';elsifdd_cc<"0000000100"thenen_dw<='1';opendoor<='0';elsifdd_cc>"0000000111"thenen_up<='1';opendoor<='0';endif;elsifg4='1'thenled1<="1001100";led2<="1111111";--电梯到达4楼,数码管显示4ifupdown='1'thenifd44='1'orc_u44='1'thend44<='0';c_u44<='0';opendoor<=T;elsifdd_cc>"0000001111"thenen_up<='1';opendoor<='0';elsifdd_cc<"0000001000"thenen_dw<='1';opendoor<='0';endif;elsifd344='1'orc_d44='1'thend44<='0';c_d44<='0';opendoor<='1';elsifdd_cc<"0000001000"thenen_dw<='1';opendoor<='0';elsifdd_cc>"0000001111"thenen_up<='1';opendoor<='0';endif;elsifg5='1'thenled1<="0100100";led2<="1111111";--电梯到达5楼,数码管显示5ifupdown='1'thenifd55='1'orc_u55='1'thend55<='0';c_u55<='0';opendoor<=T;elsifdd_cc>"0000011111"thenen_up<='1';opendoor<='0';elsifdd_cc<"0000010000"thenen_dw<='1';opendoor<='0';endif;elsifd55='1'orc_d55='1'thend55<='0';c_d55<='0';opendoor<='1';elsifdd_cc<"0000010000"thenen_dw<='1';opendoor<='0';elsifdd_cc>"0000011111"thenen_up<='1';opendoor<='0';endif;elsifg6='1'thenled1<="0100000";led2<="1111111";--电梯到达6楼,数码管显示6ifupdown='1'thenifd66='1'orc_u66='1'thend66<='0';c_u66<='0';opendoor<=T;elsifdd_cc>"0000111111"thenen_up<='1';opendoor<='0';elsifdd_cc<"0000100000"thenen_dw<='1';opendoor<='0';endif;elsifd55='1'orc_d55='1'thend55<='0';c_d55<='0';opendoor<='1';elsifdd_cc<"0000100000"thenen_dw<='1';opendoor<='0';elsifdd_cc>"0000111111"thenen_up<='1';opendoor<='0';endif;elsifg7='1'thenled1<="0001111";led2<="1111111";--电梯到达7楼,数码管显示7ifupdown='1'thenifd77='1'orc_u55='1'thend77<='0';c_u77<='0';opendoor<=T;elsifdd_cc>"0001111111"thenen_up<='1';opendoor<='0';elsifdd_cc<"0001000000"thenen_dw<='1';opendoor<='0';endif;elsifd77='1'orc_d77='1'thend77<='0';c_d77<='0';opendoor<='1';elsifdd_cc<"0001000000"thenen_dw<='1';opendoor<='0';elsifdd_cc>"0001111111"thenen_up<='1';opendoor<='0';endif;elsifg8='1'thenled1<="0000000";led2<="1111111";--电梯到达8楼,数码管显示8ifupdown='1'thenifd88='1'orc_u88='1'thend88<='0';c_u88<='0';opendoor<=T;elsifdd_cc>"0011111111"thenen_up<='1';opendoor<='0';elsifdd_cc<"0010000000"thenen_dw<='1';opendoor<='0';endif;elsifd88='1'orc_d88='1'thend88<='0';c_d88<='0';opendoor<=T;
elsifdd_cc<"0010000000"thenen_dw<='1';opendoor<='0';elsifdd_cc>"0011111111"thenen_up<='1';opendoor<='0';endif;elsifg9='1'thenled1<="0000100";led2<="1111111";--电梯到达9楼,数码管显示9ifupdown='1'thenifd99='1'orc_u99='1'thend99<='0';c_u99<='0';opendoor<=T;elsifdd_cc>"0111111111"thenen_up<='1';opendoor<='0';elsifdd_cc<"0100000000"thenen_dw<='1';opendoor<='0';endif;elsifd99='1'orc_d99='1'thend99<='0';c_d99<='0';opendoor<=T;elsifdd_cc<"0100000000"thenen_dw<='1';opendoor<='0';elsifdd_cc>"0111111111"thenen_up<='1';opendoor<='0';endif;elsifg10='1'thenled1<="1111001";led2<="0000001";--电梯到达10楼,数码管显示10ifd1010='1'orc_u1010='1'thend1010<='0';c_d1010<='0';opendoor<=T;elsifdd_cc<"1000000000"thenen_dw<='1';opendoor<='0';endif;elsifen_up<='0';en_dw<='0';elsifen_up<='0';en_dw<='0';--电梯进入上升或下降状态endif;endif;elseq<=1;alarm<='0';-清除超载报警elseq<=1;alarm<='0';-清除超载报警ifd1='1'thend11<=d1;对电梯内人请求信号进行检测和寄存elsifd2='1'thend22<=d2;elsifd3='1'thend33<=d3;elsifd4='1'thend44<=d4;elsifd5='1'thend55<=d5;elsifd6='1'thend66<=d6;elsifd7='1'thend77<=d7;elsifd8='1'thend88<=d8;elsifd9='1'thend99<=d9;elsifd10='1'thend1010<=d10;endif;ifc_u1='1'thenc_u11<=c_u1;--对电梯外人上升请求信号进行检测和寄存elsifc_u2='1'thenc_u2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中级会计实务章节练习及易错题集
- 注册会计师CPA财务成本管理章节练习及精解
- 临床执业医师医学综合笔试高频考点及习题集(重点标注)
- 初级经济师专业知识和实务章节练习题库
- 2027年服装洗水合同二篇
- 2027年劳动合同和聘用合同是二篇
- 2027年追认购买合同二篇
- 医疗器械供货合同书样板(2026版)
- 石灰石买卖合同
- 医院廉洁从业行动季度工作总结
- 2026秋小学湘美版美术二年级上册(新教材)教学计划含进度表
- 新版小学数学新西师版五年级上册全册教案(2026秋)合集
- 公路水路典型运输和设施零碳试点工作方案
- 武汉人才集团招聘笔试题库2026
- XX国资委防汛防台风国有企业应急预案(国资救援)
- 2026年兰州药品检查员考试大纲
- 中国帕金森病治疗指南第五版更新总结2026
- 2026云南黄金集团招聘高校毕业生72人易考易错模拟试题(共500题)试卷后附参考答案
- (2026年)多参数监护仪临床警报管理实践指南课件
- 《危险化学品目录》(2026版)
- 高考英语衡水体字帖电子书
评论
0/150
提交评论