3层电梯VHDL报告.docx
《3层电梯VHDL报告.docx》由会员分享,可在线阅读,更多相关《3层电梯VHDL报告.docx(24页珍藏版)》请在冰豆网上搜索。
![3层电梯VHDL报告.docx](https://file1.bdocx.com/fileroot1/2022-11/16/6fdaa03b-1032-44dd-889e-581114d5add7/6fdaa03b-1032-44dd-889e-581114d5add71.gif)
3层电梯VHDL报告
1.实验题目
简易二层电梯控制器
模拟真实电梯的运行情况,设计制作一个简易电梯控制器控制二层电梯的运行。
基本要求:
1、电梯设有一层、二层外部呼叫按钮和内部一层、二层指定按钮(BTN)。
2、利用数码管显示电梯所在楼层,用LED显示电梯运行状态如上行、下行、开门、关门等。
提高要求:
1、点阵显示楼层;
2、用点阵显示楼层的上下滚动移出移入表示电梯的上行或下行运行方向
3、增加为三层电梯控制器
2.设计方案及思路
设计思路:
根据题目要求,我在程序中设计了需要用到的8个外部按钮:
f1up,f2up,f2dn,f3dn,warning,stop1,stop2,stop3,reset,另外还有相应的显示信号,程序利用状态机实现总体的控制,状态中用到了7个状态:
(stopon1,dooropen,doorclose,doorwait,up1,down1,stop),状态的主要转换如下:
设定复位后初始状态是stopon1,然后状态跳转到doorclose,在接收到相应的请求信号时,做出判断,若请求信号的楼层大于当前所在的楼层,则程序跳转到up1状态,小于则跳转到down1状态,如果请求信号的楼层与当前楼层相同时,则开门进入dooropen状态,然后到开门延迟状态doorwait,然后再到doorclose状态,上升和下降的过程中判断电梯是否到达指定的楼层,若到达,则程序进入stop状态,然后到开门->延时->关门,进而做判断。
状态转移图如下:
各个状态线表示的内容如下:
1初始化
2初始化后电梯进入工作状态,起始是关门状态
3没有任何信号输入时,电梯始终工作在关门状态
4电梯接收到信号,且请求信号大于当前楼层
5电梯上升后到达指定楼层时停止
6电梯停止后便开门
7延时等待乘客搭乘电梯或者走出电梯
8等待时间结束后电梯关门
9电梯接收到信号,且请求信号小于当前楼层
10电梯下降到指定楼层后停止
11电梯接受的信号与当前楼层相同则开门
控制原理图:
分块设计:
程序中主要分了3个模块:
分频模块,状态控制,状态显示,其中状态显示分成了信号灯显示部分和点阵显示部分,因为一开始对点阵的显示比较生疏,所以点阵显示模块是后来才在总的程序中加入的。
分频模块的作用是将板子提供的时钟信号分频作为电梯运行状态转换的时钟信号;状态控制模块是最核心的一部分,它要分析输入信号并作出相应的状态转换;状态显示的信号灯模块主要控制对于外部输入做出的反应,而点阵显示部分则主要是利用点阵来显示当前的楼层信号和运行的电梯上升或下降模式。
3.时序仿真图
(1)如图
从图中可以看出,当复位键reset高电平时,所有信号都不显示,当reset低电平,有警报信号时,电梯门打开,并产生警报输出,当警报与复位信号都是低电平时,一楼有上升请求,显示上升信号,电梯开门后一楼外部请求上升信号熄灭,内部要求停在2楼和3楼,电梯显示内部请求信号,图中stoplight=”110”时,表示有2、3层内部停站请求,电梯经过4个电梯时钟信号到达2层,然后开门,2层上升请求信号清零,然后再关门,上升到3层,之后开门,关门,此时,没有然后任何外部信号,就停止在3层。
(2)
如图,电梯在3层,接收到2层外部下降请求信号,电梯显示该信号,并从3楼下降,同时接收到2层上升请求信号,电梯显示该信号,下降到2层时,电梯开门,然后从接受到的1楼停站请求信号,电梯继续下降并在一楼开门,然后电梯上升到2层开门,然后执行上升任务,到达3层开门。
4.源程序分析(见附件)
5.功能说明
如图,clk接的是开发板的晶振输入信号,作为时钟信号,reset是复位输入,高电平有效,复位后状态转换为stopon1,f1up电梯外部1楼上升请求信号,f2up电梯外部2楼请求上升信号,f2dn电梯外部2楼请求下降信号,电梯外部3楼请求下降信号,stop1内部一层停站请求端口,stop2内部二层停站请求端口,stop3内部三层停站请求端口都是高电平有效,选择相应的端口时会有相应的LED灯点亮,warning:
内部紧急状况请求,高电平有效,此时电梯门打开,蜂鸣器鸣叫报警,fuplight外部上升请求显示灯,fdnlight外部下降请求显示灯,stoplight内部请求显示灯,doorlight开关门信号灯,用来显示相应的请求信号,row点阵显示行,col点阵显示列,用来显示楼层信息与上升下降信息的,warning_out紧急状况报警,接到蜂鸣器
6.元器件清单及资源利用
实验中用到的是MAXIIEPM1270T144C5的板子,其中主要用到的是按键开关和点阵,另外还用到了2个拨码开关用来表示复位键和警报键,还用到了蜂鸣器用来显示警报信号。
引脚图如下:
附件:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydiantiis
port(
clk:
instd_logic;--时钟信号
reset:
instd_logic;--异步复位端口1-复位
f1up:
instd_logic;--外部一层上升请求端口1-有请求0-无请求以下类似
f2up:
instd_logic;--外部二层上升请求端口
f2dn:
instd_logic;--外部二层下降请求端口
f3dn:
instd_logic;--外部三层下降请求端口
stop1:
instd_logic;--内部一层停站请求端口
stop2:
instd_logic;--内部二层停站请求端口
stop3:
instd_logic;--内部三层停站请求端口
warning:
instd_logic;--内部紧急状况请求端口
fuplight:
bufferstd_logic_vector(2downto1);--外部上升请求显示灯0-灭灯1-亮灯以下类似
fdnlight:
bufferstd_logic_vector(3downto2);--外部下降请求显示灯
stoplight:
bufferstd_logic_vector(3downto1);--内部请求显示灯
doorlight:
outstd_logic;--开关门信号灯
layer:
outstd_logic_vector(1downto0);--当前楼层信息
--在开发板上应用的时候--显示在点阵上,不需要此信号
row:
outstd_logic_vector(7downto0);--点阵显示行
col:
outstd_logic_vector(7downto0);--点阵显示列
warning_out:
outstd_logic--紧急状况报警,接到蜂鸣器
);
endentitydianti;
architecturebehaveofdiantiis--结构体
typestateis--定义14个状态
(stopon1,dooropen,doorclose,doorwait,up1,down1,stop);
signallift_state:
state;
signalclearup:
std_logic;--上升和停站请求清除信号
signalcleardn:
std_logic;--下降和停站请求清除信号
signalup_down:
std_logic;
signalrun_model:
std_logic_vector(2downto0);--电梯模式(上升或下降)信号
signalpos:
integerrange1to3;--电梯位置信号
signali:
integerrange0to7;
signalnum:
integerrange0to99999;
signalliftclk:
std_logic;--电梯时钟信号
begin
----------------------------------分频模块-----------------------------
--功能:
对时钟信号分频,产生电梯运行的时钟信号
------------------------------------------------------------------------
fenpin:
process(clk,reset)
variablecount:
integerrange0to1;--在开发板上应用的时候需要将分频倍数改--大一些1变成24999;
begin
ifreset='1'then
liftclk<='0';
else
ifclk'eventandclk='1'then
ifcount=1then
count:
=0;
liftclk<='1';
else
count:
=count+1;
liftclk<='0';
endif;
endif;
endif;
endprocessfenpin;
---------------------状态转换-----------------------------------
--功能:
电梯的主要控制模块
---------------------------------------------------------------
ctrlift:
process(reset,liftclk,warning)--状态机进程
variablecnt:
integerrange0to4;
begin
ifreset='1'then--异步复位,电梯的初始状态为一层开门状态
lift_state<=stopon1;
clearup<='0';
cleardn<='0';
else
ifliftclk'eventandliftclk='1'then
ifwarning='1'then
run_model<="000";
doorlight<='1';--有警报时开门
else
doorlight<='0';
caselift_stateis--状态转换
whenstopon1=>--1楼停止,初始状态
doorlight<='0';
run_model<="000";
pos<=1;
up_down<='1';
lift_state<=doorclose;
whendoorclose=>--关门状态
doorlight<='0';
run_model<="000";--电梯处于关门停止模式
ifup_down='1'then
ifpos=3then--电梯在3层
iffuplight="00"andfdnlight="00"andstoplight="000"then--没有任何请求信号,电梯停在当前层
up_down<='0';
lift_state<=doorclose;
elsiffdnlight(3)='1'orstoplight(3)='1'then--3层有请求信号时,电梯开门
up_down<='0';
lift_state<=dooropen;
else--否则其它层有信号时,下降
u