三层电梯控制器.docx
《三层电梯控制器.docx》由会员分享,可在线阅读,更多相关《三层电梯控制器.docx(14页珍藏版)》请在冰豆网上搜索。
三层电梯控制器
成绩评定表
学生姓名
高张宝
班级学号
1203030133
专业
电子信息工程
课程设计题目
三层电梯控制器
评
语
组长签字:
成绩
日期
2015年月日
课程设计任务书
学院
信息科学与工程学院
专业
电子信息工程
学生姓名
高张宝
班级学号
1203030133
课程设计题目
三层电梯控制器
一、内容及要求:
利用所学的EDA设计方法设计三层电梯控制器,熟练使用使用QUARTUSⅡ应用软件,进一步学习使用VHDL语言、原理图等EDA设计方法进行综合题目的方法。
1、调试底层模块,并时序仿真。
2、设计顶层模块,并时序仿真。
3、撰写课程设计报告。
二、功能要求:
(1)每层电梯入口处设有上下请求开关
(2)设有电梯所处位置指示装置及电梯运行模式(上升或下降)指示装置
(3)电梯到达有停站请求的楼层后,经过1S电梯门打开,开门指示灯亮,开门4S后,电梯门关闭(开门指示灯灭),电梯继续运行,并能响应提前关门延时关门.
(4)能记忆电梯内外的所有请求信号,并按照电梯运行规则次序响应,每个请求信号保留至执行后消除。
(5)电梯初始状态为一层开门.
(6)具有超载报警和故障报警的功能.
三、进度安排:
课程设计时间为10天(2周)
1、调研、查资料1天。
2、总体方案设计2天。
3、代码设计与调试5天。
4、撰写报告1天。
5、验收1天。
指导教师:
2015年月日
专业负责人:
2015年月日
学院教学副院长:
2015年月日
1概述1
1.1设计背景和意义1
1.2设计任务1
1.3设计要求2
2总体设计思路及原理描述3
2.1总体设计思路3
2.2原理描述4
3软件代码设计5
4仿真及测试10
4.1电梯上升仿真10
4.2电梯下降仿真10
4.3运行结果分析11
5总结12
6参考文献13
1概述
1.1设计背景及意义
随着EDA技术发展和应用领域的扩大与深入,EDA技术在电子信息、通讯、自动控制及计算机应用等领域的重要性突出。
随着技术市场与人才市场对EDA的需求不断提高,产品的市场需求和技术市场的要求也必然会反映到教学领域和科研领域中来。
因此学好EDA技术对我们有很大的益处。
EDA功能强大,一台计算机、一套EDA软件和一片或几片大规模可编程芯片(CPLD/FPGA或ispPAC),就能完成电子系统的设计。
EDA技术涉及面广,内容丰富,但在教学和技术推广层面上,应用较为广泛的是基于可编程器件的EDA技术,它主要包括如下四大要素:
1大规模可编程器件,它是利用EDA技术进行电子系统设计的载体;2硬件描述语言,它是利用EDA技术进行电子系统设计的主要手段;3软件开发工具,它是利用EDA技术进行电子系统的智能化的自动化设计工具;4实验开发系统,它是利用EDA技术进行电子系统设计的下载工具及硬件验证工具。
电梯行业也随着科技的发展,不断地出现在人们生活的各个场所,因此,对电梯控制器的设计是一个很实用的例子,对我们掌握EDA技术的应用也有很大的帮助。
1.2设计任务
设计一个三层电梯的控制器。
要求:
(1)每层电梯入口处设有上下请求开关。
(2)设有电梯所处位置指示装置及电梯运行模式(上升或下降)指示装置。
(3)电梯到达有停站请求的楼层后,经过1S电梯门打开,开门指示灯亮,开门4S后,电梯门关闭(开门指示灯灭),电梯继续运行,并能响应提前关门延时关门。
(4)能记忆电梯内外的所有请求信号,并按照电梯运行规则次序响应,每个请求信号保留至执行后消除。
(5)电梯初始状态为一层开门。
(6)具有超载报警和故障报警的功能.
1.3设计要求
(1)根据设计题目要求编写相应程序代码
(2)对编写的VHDL程序代码进行编译和仿真
(3)利用实验箱完成硬件验证
(4)总结设计内容,完成课程设计说明书
2总体设计思路及原理描述
2.1总体设计思路
实验模拟生活中电梯运动控制,电梯总共三层,最简单的控制思想如下:
(1)采集用户呼叫楼层,并放入相应的记忆单元中。
(2)不考虑电梯轿厢所在楼层。
若有用户呼叫,电梯上行直到达到用户呼叫最大层,再下行直到到达最低层,由此构成一次行程。
(3)每完成一次行程,检测是否所用用户呼叫均已响应完毕。
如果没有,电梯继续运行,直到响应完所有用户呼叫。
否则,电梯停止运行。
其中用户请求包括外部请求和内部请求。
有外部升降请求信号需点亮相应的外部请求指示灯,内部升降请求信号同外呼。
(4)根据电梯所在楼层,七段数码管显示楼层数。
(5)根据用户运行方向,点亮相应升降指示灯。
(6)当电梯运行到有相应外部呼叫或内部呼叫楼层时,电梯停止运行,灭掉相应的呼叫显示灯,电梯开关门后,继续运行。
控制器程序框图
2.2设计原理
电梯控制可以通过多种方法进行设计,其中采用状态机来实现,思路比较清晰。
可以将电梯等待的每秒钟以及开门,关门都看成一个独立的状态。
由于电梯又是每秒上升或下降一层,所以就可以通过一个统一的一秒为周期的时钟来触发状态机。
根据电梯的实际工作情况,可以把状态机设置10个状态,分别是“电梯停留在1层”,“开门”,“关门”,“开门等待第一秒”,“开门等待第二秒”,“开门等待第三秒”,“开门等待第四秒”,“上升”,“下降”和“停止”状态。
各个状态之间的转换条件可以由上面的设计要求所决定。
电梯运行规则:
当电梯处在上升模式时,只响应比电梯所在位置高的上楼请求,由下向上逐个执行,直到最后一个上楼请求执行完毕。
如果高层有下楼请求,直接升到有下楼请求的最高楼层,然后进入下降模式。
当电梯在一楼时,不管是梯内梯外,电梯都只可能接收到上升的请求信号。
此时,电梯就进入预上升状态,准备作上升运行。
如果电梯没有接收到请求信号,电梯则在一楼待机。
当电梯在二楼时,电梯则可能出现三种情况:
电梯并没有接收到梯内梯外的任何请求信号时,电梯停在二楼待机;电梯接收到上升请求信号,进入预上升状态;电梯接收到下降请求信号,进入预下降状态。
当电梯在三楼时,不管是梯内梯外,电梯都只可能接收到下降的请求信号。
此时,电梯就进入预下降状态,准备作下降运行。
如果电梯没有接收到请求信号,电梯则停在二楼待机。
整体方框图
3软件代码设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYdiantiIS--程序实体定义
PORT(clk,swich:
INSTD_LOGIC;
sel,uplift,downlift:
INSTD_LOGIC_VECTOR(3DOWNTO1);
opendoor,up_s,do_s,pa_s:
OUTSTD_LOGIC;
dis:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDdianti;
ARCHITECTUREbehaveOFdiantiIS--结构体定义
SIGNALclk1hz,clk4hz:
STD_LOGIC;
SIGNALur,dr,openonce:
STD_LOGIC;
SIGNALclropen,clrrun,en,enrun:
STD_LOGIC;
TYPEstatetypeIS(pause,up,down);
SIGNALstate:
statetype;
SIGNALopentime,runtime,urr,drr:
STD_LOGIC_VECTOR(3DOWNTO1);
SIGNALposition,seld,upd,downd:
STD_LOGIC_VECTOR(3DOWNTO1);
BEGIN
U0:
PROCESS(clk)--分频进程
VARIABLEq:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFclk'eventANDclk='1'THEN
q:
=q+1;
ENDIF;
clk4hz<=q
(1);--产生4HZ脉冲
clk1hz<=q(3);--产生1HZ脉冲
ENDPROCESS;
U1:
PROCESS(swich,clk,uplift,downlift)--将上升、下降请求记录
BEGIN
IFrising_edge(clk)THEN
IFstate=pauseTHEN
drr<=drrANDNOT(position);
urr<=urrANDNOT(position);
IF(uplift/=updANDur/='1'ANDposition>uplift)THEN
drr<=(drrORuplift);
ELSIF(downlift/=downdANDur/='1'ANDposition>downlift)THEN
drr<=(drrORdownlift);
ELSIF(uplift/=updANDdr/='1'ANDpositionurr<=(urrORuplift);
ELSIF(downlift/=downdANDdr/='1'ANDpositionurr<=(urrORdownlift);
ELSIF(sel/=seld)THEN
IF(seldrr<=(drrORsel);
ELSIF(sel>positionANDdr/='1')THEN
urr<=(urrORsel);
ENDIF;
ENDIF;
ELSIF(state=up)THEN
IF(uplift/=updANDdr/='1'ANDpositionurr<=(urrORuplift);
ELSIFsel/=seldANDdr/='1'ANDpositionurr<=(urrORsel);
ENDIF;
ELSIF(state=down)THEN
IF(downlift/=downdANDur/='1'ANDposition>downlift)THEN
drr<=(drrORdownlift);
ELSIFsel/=seldANDur/='1'ANDposition>selTHEN
drr<=(drrORsel);
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ur<='1'WHENurr/="000"ELSE'0';
dr<='1'WHENdrr/="000"ELSE'0';
U2:
PROCESS(swich,clk)--暂停、上升、下降三个状态之间转换
BEGIN
IFswich='0'THEN--开关关闭时,处于暂停状态
state<=pause;up_s<='0';do_s<='0';pa_s<='1';openonce<='1';opendoor<='0';
clrrun<='1';enrun<='0';clropen<='1';en<='0';
ELSIFRISING_EDGE(CLK)THEN--开关打开后,三个状态之间变化
CASEstateIS
WHENup=>IFruntime="100"THENclrrun<='1';enrun<='0';
IFposition=(urrANDposition)THEN
state<=pause;up_s<='0';do_s<='0';pa_s<='1';clropen<='0';en<='1';
ENDIF;
ELSEclrrun<='0';enrun<='1';up_s<='1';do_s<='0';pa_s<='0';
ENDIF;
WHENdown=>IFruntime="100"THENclrrun<='1';enrun<='0';
IFposition=(drrANDposition)THEN
state<=pause;up_s<='0';do_s<='0';pa_s<='1';clropen<='0';en<='1';
ENDIF;
ELSEclrrun<='0';enrun<='1';up_s<='0';do_s<='1';pa_s<='0';
ENDIF;
WHENpause=>IF(opentime="010"ANDopenonce='0')OR(uplift/=updANDposition=uplift)
OR(downlift/=downdANDposition=downlift)THEN
opendoor<='1';clropen<='0';en<='1';openonce<='0';
ENDIF;
IF(opentime="101"OR(openonce='1'AND(ur='1'ORdr='1')))THEN
IFur='1'THEN
state<=up;
opendoor<='0';up_s<='1';
en<='0';do_s<='0';
clropen<='1';pa_s<='0';
openonce<='0';
ELSIF(dr='1')THEN
state<=down;
opendoor<='0';up_s<='0';
en<='0';do_s<='1';
clropen<='1';pa_s<='0';
openonce<='0';
ELSE
state<=pause;
opendoor<='0';pa_s<='1';
en<='0';do_s<='0';
clropen<='1';up_s<='0';
openonce<='1';
ENDIF;
ENDIF;
ENDCASE;
ENDIF;
ENDPROCESSU2;
U3:
PROCESS(clk)--将按键请求记录、防抖电路
BEGIN
IFCLK'EVENTANDCLK='1'THEN
downd<=downlift;upd<=uplift;
seld<=sel;
ENDIF;
ENDPROCESS;
U4:
PROCESS(clk4hz,swich)
BEGIN
IFswich='0'THENposition<="001";--开关没开时,电梯停在第一层
ELSIFRISING_EDGE(CLK4HZ)THEN
IFruntime="011"THEN
IFstate=upTHEN
position<=position(2downto1)&'0';--电梯处于上升时position循环左移
ELSIFstate=downTHENposition<='0'&position(3downto2);
ENDIF;--电梯处于下降时position循环右移
ENDIF;
ENDIF;
ENDPROCESS;
U5:
PROCESS(clk1hz,clropen)--用于控制开门时间计时的进程
BEGIN
IFclropen='1'THENopentime<="000";
ELSIFRISING_EDGE(CLK1HZ)THEN
IFen='1'THEN
IFopentime="101"THENopentime<="101";
ELSEopentime<=opentime+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
U6:
PROCESS(CLK4HZ,clrrun)--用于控制运行时间的进程
BEGIN
IFclrrun='1'THENruntime<="000";
ELSIFRISING_EDGE(CLK4HZ)THEN
IFenrun='1'THEN
IFruntime="100"THENruntime<=runtime;
ELSEruntime<=runtime+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
U7:
PROCESS(clk)--将电梯所处楼层显示在数码管上
BEGIN
IFRISING_EDGE(CLK)THEN
IFposition="001"THENdis<="0001";
ELSIFposition="010"THENdis<="0010";
ELSIFposition="100"THENdis<="0011";
ELSEdis<="0000";
ENDIF;
ENDIF;
ENDPROCESS;
ENDbehave;
4仿真及测试
Altera公司的Quartuii是一个全面的、易于使用且具有独立解决问题能力的软件,可以完成设计流程中的输入、综合、布局布线、时序分析、仿真和编程下载等功能。
与第三代设计工具MAX+plusii相比,其功能更加完善,特别适合大规模逻辑电路的设计。
4.1电梯上升仿真
当电梯外部有上升请求时,波形图如图所示:
4.2电梯下降仿真
当电梯外部有下降请求时,波形图如图所示
4.3运行结果分析
电梯初始状态为一层,处在关门状态,开门指示灯不亮。
一层电梯入口处设有上楼请求开关,二层电梯入口设有上、下楼请求开关,三层电梯入口处设有下楼请求开关,电梯内部设有乘客到达楼层的停站请求开关。
当一楼有请求上楼时,等待一秒开门,四秒后关门执行所选楼层请求。
电梯到达有停站请求的楼层后,电梯门打开,开门指示灯亮,数码管显示所在楼层,暂停状态灯亮。
开门4秒后,电梯门关闭,开门指示灯灭,暂停状态灯灭。
电梯继续运行,直至执行完最后一个请求信号后停在当前层。
若起初高层有请求,电梯则直接到达有请求的楼层,开门等待下一个请求。
电梯控制系统能记忆电梯内外的请求信号,并按照电梯运行规则工作,每个请求信号执行完毕后随即清除。
5总结
在这一周的设计过程中,除找资料外,大多时间都是在电脑上进行的,通过反复的编译,仿真,不断试验来实现所得结果。
在设计上,运用了EDA自上而下的设计思想,逐步完善所设计功能,同时,用到VHDL语言中的状态机,多进程,CASE、IF….ELSE等语句,才达到以上结果。
在设计中也遇到许多困难,在自己及同学的共同努力下才完成此设计。
因此这次课设给我带来的收获主要有:
进一步熟悉maxplusII软件的使用和操作方法,以及硬件实现时的下载方法与运行方法;
对vhdl语言的自顶向下设计方法有了进一步的认识,对其中的许多语句也有了新了解,掌握;
对自己独立思考和解决问题的能力也有了很大的锻炼,同时同学间的互帮互助精神也是在课程设计中很好体现的;
不足之处也有以下几点:
在设计中,发现错误,自己纠错能力还是很欠缺,未能很好的找出,还是在老师及同学帮助下才完成;另外,对于自己想改进的地方,都能很好的指出,当要真正的去把其他改进的功能加上去,自己还是有所欠缺。
6参考文献
《EDA技术与数字系统设计》邹彦电子工业出版社
《EDA技术实用教程》潘松,黄继业科学出版社
《VHDL与数字电路设计》卢杰科学出版社
《VHDL硬件描述语言》Bhasker著机械工业出版社
《电子技术课程设计指导》彭介华东南大学出版社