毕业设计精品采用VHDL语言来设计实用三层电梯控制器.docx
《毕业设计精品采用VHDL语言来设计实用三层电梯控制器.docx》由会员分享,可在线阅读,更多相关《毕业设计精品采用VHDL语言来设计实用三层电梯控制器.docx(21页珍藏版)》请在冰豆网上搜索。
毕业设计精品采用VHDL语言来设计实用三层电梯控制器
1引言
当今世界,部分地区人口高度密集,人和土地资源短缺的矛盾日益激化。
这就注定了必须合理的利用土地去解决人与土地的矛盾。
而兴建高层建筑是其中有效措施之一。
因此能使人们快速便捷地到达目的楼层的电梯就应运而生了。
随着电子技术日薪月异的发展,集成电路从20世纪60年代的小规模到中规模,再到大规模集成电路,伴随着它的高速发展,EDA技术、CPLD技术也得到充分发展。
电梯的使用越来越普遍,已从原来只在商业大厦、宾馆使用,过度到在办公室、居民楼等场所使用,并且对电梯功能的要求也不断提高,相应地其控制方式也在不停地发生变化。
对于电梯的控制,随着技术的不断发展,微型计算机在电梯控制上的应用日益广泛,现在已进入全微机化控制的时代。
电梯的微机化控制主要有以下几种形式:
PLC控制,单片机控制,单板机控制,单微机控制,多微机控制,人工智能控制[1]。
随着EDA技术的快速发展,CPLD/FPGA[2]已广泛应用于电子设计与控制的各个方面。
本设计就是使用一片CPLD/FPGA来实现对电梯的控制的。
三层电梯广泛应用在大型的货运之中。
其使用便捷,货运周期短,效率高成本低,对货运事业具有相当的经济价值。
电梯作为高层建筑物的重要交通工具与人们的工作日益紧密FPGA/CPLD作为新一代工业控制器,以其高可靠性和技术先进性,在电梯控制中得到广泛应用,从而使电梯由传统的继电器控制方式发展为计算机控制的一个重要方向,成为当前电梯控制和技术改造的热点之一。
电梯控制器是控制电梯按顾客要求自动上下的装置。
本文采用VHDL语言来设计实用三层电梯控制器,其代码具有良好的可读性和易理解性,源程序经A1tera公司的MAX+plusII软件仿真,目标器件选用CPLD器件。
通过对三层电梯控制器的设计,可以发现本设计有一定的扩展性,而且可以作为更多层电梯控制器实现的基础。
2EDA技术介绍
2.1EDA概述
EDA技术是20世纪90年代初从计算机辅助设计(ComputerAdiedDesign)、计算机辅助制造(ComputerAdiedManufacture)、计算机辅助测试(ComputerAdiedTesting)和计算机辅助工程(ComputerAdiedEngineering)的概念发展而来的。
随着超大规模集成电路(VeryLargeScaleIntegration)规模和技术复杂度的急剧增长,一块芯片内集成门可达几十万甚至几百万门,并且还在迅速增长,电子系统人工设计已十分困难,必须依靠电子设计自动化技术。
EDA技术的基本特征和基本工具总的来说,现代EDA技术的基本特征是采用高级语言描述,具有系统级仿真和综合能力。
它主要采用并行工程和“自顶向下”的设计方法,使开发者从一开始就要考虑到产品生成周期的诸多方面,包括质量、成本、开发时间及用户的需求等等,然后从系统设计入手,在顶层进行功能方框图的划分和结构设计,在方框图一级进行仿真、纠错、并用VHDL、Verilog-HDL、ABEL等硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证,然后再用逻辑综合优化工具生成具体的门级逻辑电路的网表[3],其对应的物理实现级可以是印刷电路板或专用集成电路。
利用EDA技术进行电子系统的设计,具有以下几个特点:
用软件的方式设计硬件;用软件方式设计的系统到硬件系统的转换是由相关的开发软件自动完成;设计过程中可用相关软件进行各种仿真;系统可现场编程,在线升级;整个系统可集成在一个芯片上,具有体积小、功耗低及可靠性高的特点。
因此,EDA技术是现代电子设计的发展趋势。
电子设计自动化(EDA)是一种实现电子系统或电子产品自动化的技术,它与电子技术、微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。
2.2MAX+plusII软件简介
MAX+plusⅡ是Altera公司提供的FPGA/CPLD开发集成环境,Altera是世界上最大可编程逻辑器件[4]的供应商之一。
MAX+plusⅡ界面友好,使用便捷,被誉为业界最易用易学的EDA软件。
在MAX+plusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真[5]、编程下载整个流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程[6]。
3电梯控制器设计
3.1设计要求
EDA设计实现一个3层电梯的控制系统。
系统要求如下:
(1)电梯到达楼层时,能发出指示信号(数码管显示楼层号);
(2)能指示电梯的运行状态(上行或下行);
(3)电梯的门操作具有关门延时设置(当按下梯内关门按钮时立刻响应关门操作,否则延时固定时间后响应关门操作);
(4)正确响应各楼层的上行和下行请求(各楼层设置上行和下行选择按钮)。
3.2电梯运行规则
电梯运行规则:
当电梯处在上升模式时,只响应比电梯所在位置高的上楼请求,由下向上逐个执行,直到最后一个上楼请求执行完毕。
如果高层有下楼请求,直接升到有下楼请求的最高楼层,然后进入下降模式。
当电梯在一楼时,不管是梯内梯外,电梯都只可能接收到上升的请求信号。
此时,电梯就进入预上升状态,准备作上升运行。
如果电梯没有接收到请求信号,电梯则在一楼待机。
当电梯在二楼时,电梯则可能出现三种情况:
电梯并没有接收到梯内梯外的任何请求信号时,电梯停在二楼待机;电梯接收到上升请求信号,进入预上升状态;电梯接收到下降请求信号,进入预下降状态。
当电梯在三楼时,不管是梯内梯外,电梯都只可能接收到下降的请求信号。
此时,电梯就进入预下降状态,准备作下降运行。
如果电梯没有接收到请求信号,电梯则停在二楼待机。
3.3电梯整体设计
电梯控制器采用状态机来实现,思路比较清晰。
可以将电梯等待的每秒钟以及开门、关门都看成一个独立的状态。
由于电梯又是每秒上升或下降一层,所以就可以通过一个统一的1秒为周期的时钟来触发状态机。
根据电梯的实际工作情况,可以把状态机设置10个状态,分别是“电梯停留在第1层”、“开门”、“关门”、“开门等待第1秒”、“开门等待第2秒”、“开门等待第3秒”、“开门等待第4秒”、“上升”、“下降”和“停止状态”。
各个状态之间的转换条件可由上面的设计要求所决定。
电梯初始状态为一层,处在开门状态,开门指示灯亮。
一层电梯入口处设有上楼请求开关,二层电梯入口设有上、下楼请求开关,三层电梯入口处设有下楼请求开关,电梯内部设有乘客到达楼层的停站请求开关及其显示,电梯内部还设有乘客关门请求。
设置电梯所处位置指示(用数码管表示)及电梯上升或下降指示。
电梯到达有停站请求的楼层后,电梯门打开,开门指示灯亮。
当按下梯内关门按钮时立刻响应关门操作,否则,开门4秒后,电梯门关闭,开门指示灯灭,电梯继续运行,直至执行完最后一个请求信号后停在当前层。
电梯控制系统能记忆电梯内外的请求信号,并按照电梯运行规则工作,每个请求信号执行完毕后随即清除。
3.4端口设计说明
由功能要求得到本程序设计的端口必须包括:
时钟信号(clk);
系统复位信号(reset);
一楼电梯外人的上升请求信号(up1);
二楼电梯外人的上升请求信号(up2);
二楼电梯外人的下降请求信号(down2);
三楼电梯外人的下降请求信号(down2);
电梯内部人到达楼层的请求信号(stop1、stop2、stop3);
电梯内部关门请求信号(close);
所有输入信号等于1,表示有请求,等于0,表示无请求;
电梯外部上升指示灯(uplight)和下降请求指示灯(downlight),它们与up1、up2、down2、down3信号相对应;
电梯内部乘客到达楼层的停站请求灯(stoplight),该信号与stop1、stop2和stop3信号相对应;
电梯运行模式指示(udsig),1代表下降模式,0代表上升模式;
电梯所在楼层指示(position),表示电梯在对应楼层;
电梯所在楼层数码管表示(dout),该信号与position信号相对应;
电梯门状态指示(doorlight),1表示开门,0表示关门。
3.5具体程序设计说明
整段代码由三大部分组成:
库声明,实体,结构体。
3.5.1库声明部分
调用VHDL库,通过library语句本程序应用了VHDL库中的”通用ieee库”和”标准std库”。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
3.5.2实体部分
实体部分列出了代码所用到的所用输入输出端口。
结构体部分共使用了分频进程,电梯状态进程,读按键、控制指示灯进程和信号灯进程4个进程。
主控制器系统由VHDL语言实现,其输入输出端口定义如下:
entityfliftis
port(clk:
instd_logic;——时钟信号
close:
instd_logic;——立即关门
rightlight:
bufferstd_logic;——门灯信号
up1:
instd_logic;———楼上升按钮
up2:
instd_logic;——二楼上升按钮
down2:
instd_logic;——二楼下将按钮
down3:
instd_logic;——三楼下将按钮
uplight:
bufferstd_logic_vector(3downto1);——上升指示灯
dnlight:
bufferstd_logic_vector(3downto1);——下将指示灯
stop1,stop2,stop3:
instd_logic;——停止按钮
stoplight:
bufferstd_logic_vector(3downto1);——停止指示灯
position:
bufferintegerrange1to3;——楼层信号
led:
bufferstd_logic_vector(3downto0);——楼层指示灯
doorlight:
outstd_logic;——门灯信号
udsig:
bufferstd_logic);——电梯运行状态
3.5.3结构体部分
使用状态机来实现电梯功能。
在结构体中,设计了俩个进程互相配合,一个是状态机进程作为主要进程,另外一个是信号灯控制进程作为辅助进程。
状态机进程中的很多判断条件是以信号灯进程产生的信号灯信号为依据的,而信号灯进程中信号灯的熄灭又是由状态机进程中传出的clearup和cleardn信号来控制。
在状态机进程中,在电梯的上升状态中,通过对信号灯的判断,决定下一个状态是继续上升还是停止;在电梯下降状态中,也是通过对信号灯的判断,决定下一个状态是继续下降还是停止;在电梯停止状态中,判断是最复杂的,通过对信号的判断,决定电梯是上升、下降还是停止。
在信号灯控制进程中,由于使用了专门的频率较高的按键时钟,所以使得按键的灵敏度增大,但是时钟频率不能过高,否则容易使按键过于灵敏。
按键后产生的点亮的信号灯(逻辑值为‘1’)用于作为状态机进程中的判断条件,而clearup和cleardn信号为逻辑‘l’使得相应的信号灯熄灭。
分频进程:
该进程的目的是产生不同频率的两个时钟,电梯控制时钟fliclk和按键控制时钟buttclk。
process(clk)——产生电梯控制时钟fliclk和按键控制时钟buttclk
begin
if(clk'eventandclk='1')thenq<=q+1;
endif;
buttclk<=q(0);
fliclk<=q(3);
endprocess;
状态机进程:
该部分是整个设计的核心,根据电梯的工作模式,将电梯的工作分为10个状态,分别为停一层stopno1、开门状态dooropen、关门状态doorclose、开门等待1秒wait1、开门等待2秒wait2、开门等待3秒wait3、开门等待4秒wait4、上升up、下降down和停止stop。
在每个状态下,判断输入信号的请求,转入下一状态且产生对应得输出信号。
停一层状态:
电梯开门同时转入下一状态wait1。
whenstoponl=>doorlight<='1';position<=1;pos:
=1;state<=wait1;
开门等待1秒:
该状态时重新计入上升下降请求。
如果此时有关门请求,则转入下一状态doorclose;如果没有请求,则下一状态为wait2。
whenwait1=>clearup<='0';cleardn<='0';
if(close='1')thenstate<=doorclose;
elsestate<=wait2;
endif;
开门等待2秒:
如果此时有关门请求,则转入下一状态doorclose;如果没有请求,则下一状态为wait3。
开门等待3秒:
如果此时有关门请求,则转入下一状态doorclose;如果没有请求,则下一状态为wait4。
开门等待4秒:
该状态的下一状态为doorclose。
关门状态:
此时电梯开门。
该状态要分为2种情况进行分析即电梯处于上升情况或下降情况。
当处于上升模式,同时电梯位于三层,如果此时电梯的内部与外部都没有请求,电梯转为下降模式,并进入下一状态doorclose;如果此时电梯内部有在三层下的请求或三层外部有下楼请求,电梯进入下一状态dooropen;否则电梯转为下降模式,并进入下一状态down。
if(position=3)then
if(stoplight="000"anduplight="000"anddownlight="000")
thenudsig<='1';state<=doorclose;
elsif(stoplight(3)='1'ordownlight(3)='1')
thenstate<=dooropen;
elseudsig<='1';state<=down;
endif;
当处于上升模式,同时电梯位于二层,如果此时电梯的内部与外部都没有请求,电梯仍为上升模式,并进入下一状态doorclose;如果此时电梯内部有在二层下的请求或二层外部有下楼请求或上楼请求,电梯进入下一状态dooropen;如果此时电梯内部有在三层下的请求或三层外部有下楼请求,电梯仍为上升模式,并进入下一状态up;否则电梯转为下降模式,并进入下一状态down。
elsif(position=2)then
if(stoplight="000"anduplight="000"anddownlight="000")
thenudsig<='0';state<=doorclose;
elsif(stoplight(3)='1'ordownlight(3)='1')
thenudsig<='0';state<=up;
elseudsig<='1';state<=down;
endif;
当处于上升模式,同时电梯位于一层,如果此时电梯的内部与外部都没有请求,电梯仍为上升模式,并进入下一状态doorclose;如果此时电梯内部有在一层下的请求或一层外部有上楼请求,电梯进入下一状态dooropen;否则电梯仍为上升模式,并进入下一状态up。
当处于下降模式,同时电梯位于一层,如果此时电梯的内部与外部都没有请求,电梯转为上升模式,并进入下一状态doorclose;如果此时电梯内部有在一层下的请求或一层外部有上楼请求,电梯进入下一状态dooropen;否则电梯转为上升模式,并进入下一状态up。
当处于下降模式,同时电梯位于二层,如果此时电梯的内部与外部都没有请求,电梯仍为下降模式,并进入下一状态doorclose;如果此时电梯内部有在二层下的请求或二层外部有下楼请求或上楼请求,电梯进入下一状态dooropen;如果此时电梯内部有在一层下的请求或一层外部有上楼请求,电梯仍为下降模式,并进入下一状态down;否则电梯转为上升模式,并进入下一状态up。
当处于下降模式,同时电梯位于三层,如果此时电梯的内部与外部都没有请求,电梯仍为下降模式,并进入下一状态doorclose;如果此时电梯内部有在三层下的请求或三层外部有下楼请求,电梯进入下一状态dooropen;否则电梯仍为下降模式,并进入下一状态down。
上升:
电梯所在楼层数加一。
如果此时电梯在二层同时二层外部有上升或下降的请求或电梯内部有在二层下的请求,则进入下一状态stop。
如果此时电梯在二层同时三层外部有下降的请求或电梯内部有在三层下的请求,则进入下一状态up;否则进入下一状态stop。
whenup=>position<=position+1;pos:
=pos+1;
if(pos=2and(uplight
(2)='1'ordownlight
(2)='1'orstoplight
(2)='1'))
thenstate<=stop;
elsif(pos=2and(stoplight(3)='1'ordownlight(3)='1'))
thenstate<=up;
elsestate<=stop;
endif;
下降:
电梯所在楼层数减一。
如果此时电梯在二层同时二层外部有上升或下降的请求或电梯内部有在二层下的请求,则进入下一状态stop。
如果此时电梯在二层同时一层外部有上升的请求或电梯内部有在一层下的请求,则进入下一状态down;否则进入下一状态stop。
停止:
该状态的下一状态为dooropen。
开门状态:
电梯开门同时清除上升下降的请求,并转入下一状态wait1,其它的状态都转入下一状态stopup='1'。
如果清除上升的信号有效,则电梯内部相应楼层停止信号清除,同时电梯外部相应楼层上升信号清除;否则当有上升请求时相应的电梯外部上升指示灯亮。
if(clearup='1')
thenstoplight(position)<='0';uplight(position)<='0';
else
if(up1='1')thenuplight
(1)<='1';
elsif(up2='1')thenuplight
(2)<='1';
endif;
endif;
如果清除下降的信号有效,则电梯内部相应楼层停止信号清除,同时电梯外部相应楼层下降信号清除;否则当有下降请求时相应的电梯外部下降指示灯亮。
如果停止信号有效,则相应的电梯内部停站请求灯亮。
4系统仿真
电梯运行情况分析,选取几个典型运行情况进行分析。
电梯运行情况一:
二层和三层都有下楼请求并都要求停在一层,初始时电梯停在一层,上升模式,并保持开门状态。
外部没有请求时,电梯等待4秒关门。
由于二层和三层都是下楼请求,而电梯此时是上升模式,则电梯到二层时不停,直接运行到三层,开门,由于没有关门请求,电梯等待4秒自动关门,并转为下降模式。
电梯运行到二层,开门,由于没有关门请求,电梯等待4秒自动关门。
由于电梯内部要求停在一层,则电梯直接运行到一层,开门,由于没有关门请求,电梯等待4秒自动关门,并自动转为上升模式。
仿真情况如图1所示。
图1电梯运行情况一
电梯运行情况二:
电梯一层有上楼请求并要求停在三层,二层同时有下楼请求并要求停在一层,初始时电梯停在一层,上升模式,并保持开门状态。
外部没有请求时,电梯等待4秒关门。
当一层外部有上楼请求时,电梯开门,由于没有关门请求,电梯等待4秒自动关门。
虽然此时二层有下楼请求,但由于此时电梯处于上升模式,所以电梯在二层不停。
电梯内部要求在三层停止,电梯直接运行到三层停止,开门,由于没有关门请求,电梯等待4秒自动关门,并自动转为下降模式。
二层外部有下楼请求,则电梯运行到二层停止,开门,由于没有关门请求,电梯等待4秒自动关门。
电梯内部要求在一层停,则电梯停止在一层,开门,由于没有关门请求,电梯等待4秒自动关门,并自动转为上升模式。
仿真情况如图2所示。
图2电梯运行情况二
电梯运行情况三:
一层有上楼请求并要求停在三层,二层有上楼请求并要求停在三层,同时二层有下楼请求并要求停在一层:
初始时电梯停在一层,上升模式,并保持开门状态。
外部没有请求时,电梯等待4秒关门。
当一层外部有上楼请求时,电梯开门,由于没有关门请求,电梯等待4秒自动关门。
电梯内部要求停在三层同时二层外部有上楼请求,则电梯停在二层,开门,由于没有关门请求,电梯等待4秒自动关门。
电梯运行到三层,执行内部请求,开门,由于没有关门请求,电梯等待4秒自动关门,并自动转为下降模式。
二层有下楼请求,电梯运行到二层停止,开门,由于没有关门请求,电梯等待4秒自动关门。
电梯内部要求停在一层,开门,由于没有关门请求,电梯等待4秒自动关门,并转为上升模式。
仿真情况如图3所示。
图3电梯运行情况三
5硬件测试
该硬件调试使用实验电路结构图5(即选择模式5进行硬件测试),引脚锁定与按键设置如下:
clk>chip=lift;inputpin=126;
up1>chip=lift;inputpin=8;按键1
up2>chip=lift;inputpin=9;按键2
down2>chip=lift;inputpin=10;按键3
down3>chip=lift;inputpin=12;按键4
stop1>chip=lift;inputpin=13;按键5
stop2>chip=lift;inputpin=17;按键6
stop3>chip=lift;inputpin=18;按键7
close>chip=lift;inputpin=19;按键8
doorlight>chip=lift;outputpin=20
udsig0>chip=lift;outputpin=21
udsig1>chip=lift;outputpin=22
led0>chip=lift;outputpin=30
led1>chip=lift;outputpin=31
led2>chip=lift;outputpin=32
led3>chip=lift;outputpin=33
6结论
分析设计要求可知用状态机实现电梯的控制比较简便,通过各个状态的分析找出关系,逐步分解各个状态,进行设计。
电梯到达楼层时,能发出指示信号;能指示电梯的运行状态;电梯的门操作具有关门延时设置;正确响应各楼层的上行和下行请求。
虽然本设计能基本实现上述的功能,但是也存在一定的问题:
仿真中参数的设置问题。
参数的设置对于整个设计可谓至关重要。
在程序仿真之初,这个问题就曾一度被忽视。
造成在调试的过程中对信号随意设置,导致仿真失败,还以为是程序出错。
例如,在程序仿真之初,clk信号的周期设置为100ms,由仿真的效果看到只能实现最基本的楼层显示,其他功能都失效。
后来通过对clk信号的周期进行调试,当其减少到25ms时,电梯的上述功能都能基本实现;信号传输延时的问题。
通过调试仿真观察,可以看到本系统的信号延时在10ms左右。
但当改变仿真时的一些参数时(如仿真时间、时钟信号的周期、分频信号的周期以及器件的选用等),可以发现延时又会发生比较细微的变化。
在日常应用中,由于选用的硬件以