vhdl 电梯系统.docx
- 文档编号:11086730
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:27
- 大小:1.58MB
vhdl 电梯系统.docx
《vhdl 电梯系统.docx》由会员分享,可在线阅读,更多相关《vhdl 电梯系统.docx(27页珍藏版)》请在冰点文库上搜索。
vhdl电梯系统
题目:
基于VHDL六层电梯控制系统
班级:
2009211406
学号:
09211843
姓名:
黄世超
目录:
一.设计要求
1.1六层电梯控制器将实现的功能
1.2电梯上下层运行流程图
1.3电梯运行控制流程图
二.总体设计电路图
三.六层电梯控制器的实体设计
3.1选择器件
3.2功能模块
四.电梯控制器控制仿真分析
4.1电梯程序仿真分析
4.2译码器仿真分析
4.3数据选择器仿真分析
4.4分频器模块仿真分析
4.5顶层电路仿真分析
五.程序源代码
5.1电梯程序
5.2分频器模块程序
5.3译码器程序
5.4数据选择器程序
六.实验总结
一.设计要求
1.1六层电梯控制器将实现的功能:
(1)每层电梯入口处设有上下请求开关,电梯内设有顾客到达层次的停站请求开关。
(2)设有电梯入口处位置指示装置及电梯运行模式(上升或下降)指示装置。
(3)电梯每秒升(降)一层楼。
(4)电梯到达有停站请求的楼层,经过1秒电梯门打开,开门指示灯亮,开门4秒后,电梯门关闭(开门指示灯灭),电梯继续进行,直至执行完最后一个请求信号后停留在当前层。
(5)能记忆电梯内外所有请求,并按照电梯运行规则按顺序响应,每个请求信号保留至执行后消除。
(6)电梯运行规则:
当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕;如果高层有下楼请求,则直接升到由下楼请求的最高层,然后进入下降模式。
当电梯处于下降模式时则与上升模式相反。
(7)电梯初始状态为一层开门状态。
总体设计方案:
1.2电梯上下层运行流程图
电梯上升流程图
电梯下降流程图
1.3电梯运行控制流程图
二.总体设计电路图
顶层电路原理图
电梯控制器为其中的核心部件,控制其电梯的运行情况,而其控制则由按钮来决定,通过按钮指示灯判断电梯的工作状态及显示其运行情况。
实验板上输入过大的脉冲序列,通过分频器将高频转换为低频,即buttonclk,通过此时钟信号控制电梯信号灯。
当按钮为高电平时,电梯开始工作,并通过按钮信号灯决定电梯的运行。
电梯所处位置显示通过译码器,再通过数据选择器显示到数码管上。
udsig和doorlight显示电梯门和电梯的状态。
stoplight[6..1]fuplight[6..1]fdnlight[6..1]显示按钮指示。
Reset按钮使电梯恢复到初始位置。
楼层position变化相应的数码管也跟着变。
其顶层原理图如图3.1:
三.六层电梯控制器的实体设计
首先考虑输入端口,一个异步复位端口reset,用于在系统不正常时回到初始状态;在电梯外部,必须有升降请求端口,一层是最低层,不需要有下降请求,六层是最高层,不需要有上升请求[3],二三四五层则上升、下降请求端口都有;在电梯的内部,应该设有各层停留的请求端口:
一个电梯时钟输入端口,该输入时钟以1秒为周期,用于驱动电梯的升降及开门关门等动作;另有一个按键时钟输入端口,时钟频率比电梯时钟高。
其次是输出端口,有升降请求信号以后,就得有一个输出端口来指示请求是否被响应,有请求信号以后,该输出端口输出逻辑‘l’。
被响应以后则恢复逻辑‘0’;同样,在电梯内部也应该有这样的输出端口来显示各层停留是否被响应;在电梯外部,需要一个端口来指示电梯现在所处的位置;电梯开门关门的状态也能用一个输出端口来指示[3];为了观察电梯的运行是否正确,可以设置一个输出端口来指示电梯的升降状态。
3.1选择器件
1.数据选择器
逻辑功能表如表
2.译码器
逻辑功能表如表
3.2功能模块
电梯主控制模块
如图:
电梯主控制模块端口说明:
buttonclk按钮时钟信号liftclk电梯时钟信号
reset复位键f1upbutton一楼上楼按钮
f2upbutton二楼上楼按钮f3upbutton三楼上楼按钮
f4upbutton四楼上楼按钮f5upbutton五楼上楼按钮
f2dnbutton二楼下楼按钮f3dnbutton三楼下楼按钮
f4dnbutton四楼下楼按钮f5dnbutton五楼下楼按钮
f6dnbutton六楼下楼按钮stop1button电梯内部一楼按钮
stop2button电梯内部二楼按钮stop3button电梯内部三楼按钮
stop4button电梯内部四楼按钮stop5button电梯内部五楼按钮
stop6button电梯内部六楼按钮fuplight[6..1]每楼层上升指示灯
fdnlight[6..1]每楼层下降指示灯stoplight[6..1]电梯内部楼层指示灯
position[2..0]楼层位置显示doorlight电梯门状态显示
udsig电梯上升下降显示
分频器模块
如图:
模块端口说明:
clk_in电源输入端div_out分频后时钟输出端
译码器模块
如图:
aaa[2..0]楼层位置输出端bbb[3..0]译码输出端
数据选择器模块
如图:
数据选择器模块端口说明:
input[3..0]译码器输入端output[6..0]数据选择器输出端
四.电梯控制器控制仿真分析
4.1电梯程序分析
示例1:
如图所示仿真的是在第五层电梯外部有上升请求,也就是f5upbuttton信号的一个脉冲[9],可以看到电梯从一层上升到五层,position信号由1变到5,doorlight信号‘1’表示开门,‘0’表示关门。
当乘客进入电梯以后,在电梯内部要求上升到第六层,也就是stop6button产生一个脉冲,电梯上升到第6层,开门4秒以后关门,停留在第六层,position最后的值为6。
在仿真图中看不到buttonclk,只显示为一条黑色的线,是因为采用了频率较大的时钟。
再看fuplight信号灯,当五层有上升请求的时候,它的值由0变到16。
(注意fuplight和fdnlight是6位的二进制向量,这里的“010000”,表示五层有请求;“000100”也就是4,表示三层有请求)。
当电梯停留到第五层以后,表明该请求被响应,所以它的值变为0,由于没有下降请求信号,所以fdnlight信号灯的值一盲都为0。
当电梯处于第五层时,udsig=0,即此时若没有其他请求,电梯处于上升模式;当stop6button=1,即电梯内部按了六层请求时,电梯门灯灭电梯开始上升udsig=0,即处于上升模式[10],抵达六层时,udsig=即无论什么请求电梯都开始下降,且doorlight=1,即灯亮,电梯门开。
四秒之后灯灭,电梯门关。
示例2:
图中是有下降请求的情况,它是图4.1的继续,当电梯停留在第六层的时候,在电梯外第四层有下降请求,这时候fdnlight信号灯由0变为8,说明第四层有下降请求。
电梯下降到第四层,响应了下降请求,所以fdnlight信号灯清0。
电梯开始下降,即udsig=1,抵达四楼后电梯门开,doorlight=1,这时候,在电梯内部有一楼向上请求,接着电梯内部有三楼的请求,所以电梯继续下降,到达三层后,电梯门开[11],四秒后电梯门关,又因为一楼有请求所以最终到达一楼停止响应,position信号的值保持在1,电梯处于上升模式。
四秒后电梯门关。
示例3:
图中仿真的情况是,原先电梯停留在第一层,这时候电梯外第六层有下降请求,电梯上升到第六层,乘客进入电梯以后要求下降到一层,与此同时,在电梯外第三层有上升请求,电梯首先要响应下降请求然后再响应这个上升请求,所以电梯得先下降到一层,然后再上升到第三层来,接着电梯内部五楼,三楼都有请求信号,于是电梯升到五楼然后下降到三楼,这是符合常理的。
从仿真的波形看,电梯的位置变化和想象是一致的。
电梯的运行情况完全正确。
最后乘客在电梯内部要求上升到三层,所以电梯最后的停留位置为三层。
示例4:
图中所示的仿真,原先电梯停留在第一层,电梯外第六层有下降请求,电梯上升到六层,乘客进入电梯以后要求下降到一层,此时,二层有下降请求,接着又有上升请求,电梯首先在二层停留。
然后下降到一层。
随后要响应二层上升请求,上升到二层,乘客进入电梯以后要求上升到三层,所以电梯最后的停留位置在三层。
4.2译码器仿真分析
本模块的主要功能是将10进制数转换成4位二进数。
当输入信号aaa=1时,输出bbb=0001;
当输入信号aaa=2时,输出bbb=0010;
当输入信号aaa=3时,输出bbb=0011;
当输入信号aaa=4时,输出bbb=0100;
当输入信号aaa=5时,输出bbb=0101;
当输入信号aaa=6时,输出bbb=0110;
其他都为0000;
仿真波形如图
4.3数据选择器仿真分析
此模块的功能是根据输入不同的数据输出不同的数据,即由输入定输出,输出量通过数码管显示数据。
当input=0001时,输出0110000,数码管显示1;
当input=0010时,输出1101101,数码管显示2;
当input=0011时,输出1111001,数码管显示3;
当input=0100时,输出0110011,数码管显示4;
当input=0101时,输出1011011,数码管显示5;
当input=0110时,输出1011111,数码管显示6;
仿真波形如图
4.4分频器模块仿真分析
此模块的功能是把高频率的时钟信号转换为低频脉冲信号。
仿真波形图如图:
4.5顶层电路仿真分析
实例
(1):
当二楼上升按钮为高电平时,即f2uplight=1;电梯门开始上升,到达二楼时,门灯为高电平,即doorlight=1;数码管显示2;此时电梯内stop3button=5;即电梯收到五楼的请求指示,门关,到达五楼后,此时数码管显示5;4秒后门关,等灭,doorlight=0。
仿真图如图:
实例
(2):
当电梯六楼向下按钮f3dnlight=1时,电梯到达六楼,此时电梯内部按钮stop1button=1;与此同时,三楼电梯f3dnlight=1,电梯到达三楼停后,最终到达一楼。
仿真波形如图:
五.程序源代码:
5.1电梯程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitysixliftis
port(
buttonclk:
instd_logic;--按钮时钟信号
liftclk:
instd_logic;--电梯时钟信号
reset:
instd_logic;--复位键
f1upbutton:
instd_logic;--一楼上升按钮
f2upbutton:
instd_logic;--二楼上升按钮
f3upbutton:
instd_logic;--三楼上升按钮
f4upbutton:
instd_logic;--四楼上升按钮
f5upbutton:
instd_logic;
f2dnbutton:
instd_logic;--二楼下降按钮
f3dnbutton:
instd_logic;--三楼下降按钮
f4dnbutton:
instd_logic;--四楼下降按钮
f5dnbutton:
instd_logic;--五楼下降按钮
f6dnbutton:
instd_logic;--六楼下降按钮
fuplight:
bufferstd_logic_vector(6downto1);--上升指示灯
fdnlight:
bufferstd_logic_vector(6downto1);--下降指示灯
stop1button,stop2button,stop3button,stop4button,stop5button,stop6button:
instd_logic;--电梯内部按钮
stoplight:
bufferstd_logic_vector(6downto1);--内部停止指示灯
position:
bufferintegerrange1to6;--楼层位置显示
doorlight:
outstd_logic;--电梯门指示灯‘1’开‘0’关
udsig:
bufferstd_logic);--‘0’处于上升模式,‘1’处于下降模式
endsixlift;
architectureartofsixliftis
typelift_stateis(stopon1,dooropen,doorclose,doorwait4,up,down,stop);--电梯所处的7个状态
signalmylift:
lift_state;--内部电梯状态信号
signalclearup:
std_logic;--上升清除信号
signalcleardn:
std_logic;--下降清除信号
begin
controllift:
process(reset,liftclk)
variablepos:
integerrange1to6;--楼层位置变量
begin
ifreset='1'then
mylift<=stopon1;--起始状态
clearup<='0';--上楼信号清除
cleardn<='0';--下楼信号清除
pos:
=1;--处于一楼
position<=1;--处于一楼
else
ifliftclk'eventandliftclk='1'then--四秒后门关
casemyliftis
whenstopon1=>doorlight<='1';--电梯门开
position<=1;--电梯处于一楼
pos:
=1;
mylift<=doorwait4;
whendoorwait4=>mylift<=doorclose;
whendoorclose=>
doorlight<='0';--电梯门关
ifudsig='0'then--电梯处于上升模式
ifposition=6then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='1';mylift<=doorclose;
elseudsig<='1';mylift<=down;
endif;
elsifposition=5then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='0';mylift<=doorclose;
elsifstoplight(6)='1'orfdnlight(6)='1'then
udsig<='0';mylift<=up;
elseudsig<='1';mylift<=down;
endif;
elsifposition=4then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='0';mylift<=doorclose;
elsifstoplight(5)='1'orstoplight(6)='1'orfdnlight(6)='1'orfdnlight(5)='1'then
udsig<='0';mylift<=up;
elseudsig<='1';mylift<=down;
endif;
elsifposition=3then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='0';mylift<=doorclose;
elsifstoplight(4)='1'orstoplight(5)='1'orstoplight(6)='1'orfdnlight(6)='1'orfdnlight(5)='1'orfdnlight(4)='1'then
udsig<='0';mylift<=up;
elseudsig<='1';mylift<=down;
endif;
elsifposition=2then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='0';mylift<=doorclose;
elsifstoplight(3)='1'orstoplight(4)='1'orstoplight(5)='1'orstoplight(6)='1'orfdnlight(6)='1'orfdnlight(5)='1'orfdnlight(4)='1'orfdnlight(3)='1'then
udsig<='0';mylift<=up;
elseudsig<='1';mylift<=down;
endif;
elsifposition=1then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='0';mylift<=doorclose;
elseudsig<='0';mylift<=up;
endif;
endif;
elsifudsig='1'then
ifposition=1then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='0';mylift<=doorclose;
elseudsig<='0';mylift<=up;
endif;
elsifposition=2then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='1';mylift<=doorclose;
elsifstoplight
(1)='1'orfuplight
(1)='1'then
udsig<='1';mylift<=down;
elseudsig<='0';mylift<=up;
endif;
elsifposition=3then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='1';mylift<=doorclose;
elsifstoplight
(1)='1'orstoplight
(2)='1'orfuplight
(1)='1'orfuplight
(2)='1'then
udsig<='1';mylift<=down;
elseudsig<='0';mylift<=up;
endif;
elsifposition=4then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='1';mylift<=doorclose;
elsifstoplight
(1)='1'orstoplight
(2)='1'orstoplight(3)='1'orfuplight
(1)='1'orfuplight
(2)='1'orfuplight(3)='1'then
udsig<='1';mylift<=down;
elseudsig<='0';mylift<=up;
endif;
elsifposition=5then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='1';mylift<=doorclose;
elsifstoplight
(1)='1'orstoplight
(2)='1'orstoplight(3)='1'orstoplight(4)='1'orfuplight
(1)='1'orfuplight
(2)='1'orfuplight(3)='1'orfuplight(4)='1'then
udsig<='1';mylift<=down;
elseudsig<='0';mylift<=up;
endif;
elsifposition=6then
ifstoplight="000000"andfuplight="000000"andfdnlight="000000"then
udsig<='1';mylift<=doorclose;
elseudsig<='1';mylift<=down;
endif;
endif;
endif;
whenup=>position<=position+1;pos:
=pos+1;
ifposition<6and(stoplight(pos)='1'orfuplight(pos)='1')then
mylift<=stop;
elsifpos=6and(stoplight(pos)='1'orfdnlight(pos)='1')then
mylift<=stop;
elsemylift<=doorclose;
endif;
whendown=>
position<=position-1;pos:
=pos-1;
ifposition>1and(stoplight(pos)='1'orfdnlight(pos)='1')
thenmylift<=stop;
elsifpos=1and(stoplight(pos)='1'orfuplight(pos)='1')
thenmylift<=stop;
elsemylift<=doorclose;
endif;
whenstop=>mylift<=dooropen;
whendooropen=>
doorlight<='1';
ifudsig='0'then
ifposition<6and(stoplight(position)='1'orfuplight(position)='1')thenclearup<='1';
elseclearup<='1';cleardn<='1';
endif;
elsifudsig='1'then
ifposition>1and(stoplight(position)='1'orfdnlight(position)='1')then
cleardn<='1';
elseclearup<='1';clea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vhdl 电梯系统 电梯 系统