基于VHDL的电梯控制系统设计说明Word格式.docx
《基于VHDL的电梯控制系统设计说明Word格式.docx》由会员分享,可在线阅读,更多相关《基于VHDL的电梯控制系统设计说明Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
二、设计框图及模块说明
✧设计电梯系统框图如下图所示:
✧电梯系统大致包括4个模块:
1)外部数据采集模块
对外部信号采集、处理要求电梯控制器:
实现对外部请求信号的实时、准确采集;
准确实时地捕捉达到楼层的信号;
有效防止楼层到达信号、外部请求信号的误判。
采用FPGA为系统控制核心,系统时钟频率足够满足此系统实时采集数据的要求。
外部请求信号的输入形式为按键输入,到达楼层信号来自光敏传感器,关门中断信号及超载信号则产生于压力传感器。
2)信号存储模块
电梯控制系统的请求输入信号有18个(电梯外有6个上升请求和6个下降请求的用户输入端口,电梯有6个请求用户输入端口),由于系统对外请求没有设置优先级,各楼层的外请求信号被采集后可先进行运算,再存到存储器。
要注意的是电梯运行过程中,由于用户的请求信号的输入是离散的,而且系统对请求的响应也是离散的,因此请求信号的存储要新的请求信号不能覆盖原来的请求信号,只有响应动作完成后才能清除存储器对应的请求信号位。
3)基于FPGA的中央处理器模块
中央数据处理模块是系统的核心,通过对存储的数据(含请求、到达楼层等信号)进行比较、判断以驱动系统状态的流转。
电梯工作过程中共有9种状态:
等待、上升、下降、开门、关门、停止、休眠、超载报警及故障报警状态。
一般情况下电梯的工作始点是第一层,起始状态是等待状态,启动条件是接受上升请求。
超载状态时电梯关门动作取消,同时发出警报,直到警报被清除(看门狗信号有效的条件是一层楼连续发生关门中断情况超过3次)。
本系统由请求信号启动,运行中每检测到一个到达楼层信号,再参考原方向信号来决定是否停止,转向等动作。
系统状态流程图如下图所示:
4)信号的输出、显示模块
本系统的输出信号有两种:
一种是电机的升降控制信号(两位)和开门/关门控制信号;
另一种是面向用户的提示信号(含楼层显示、方向显示、已接受请求显示等)。
电机控制信号一般需要两位,本系统中电机有3种工作状态:
正转、反转和停转状态。
两位控制信号作为一个三路开关的选通信号,此三路开关选用模拟电子开关。
系统的显示输出包括数码管楼层显示、数码管请求信号显示和表征运动方向箭头指示灯的开关信号。
LED七段数码管显示部分在前面的作业中已经做了详细的介绍及说明,在本系统中省略。
本系统具有请求信号显示功能,结合方向显示,可以减少用户对同一请求的输入次数,这样就延长了电梯按键的寿命。
三、电梯控制程序设计源代码及端口说明
输入端口信号说明:
clk:
时钟信号,2Hz;
clr:
清除警报信号,高有效,清除故障报警;
c_u1、c_u2、c_u3、c_u4、c_u5:
电梯外人的上升请求;
c_d2、c_d3、c_d4、c_d5、c_d6:
电梯外人的下降请求;
deng:
关门中断,用于在需要等待时,让电梯门一直打开,停止运动;
d1、d2、d3、d4、d5、d6:
电梯人的请求信号;
full:
超载信号,高时表示电梯的人过多,超载报警;
g1、g2、g3、g4、g5、g6:
到达楼层信号,数码管LED将显示其值;
quick:
提前关门信号,高有效,当为高时,电梯门马上关闭;
输出端口信号说明:
door[1:
0]:
电梯门控信号;
led[6:
电梯所在楼层显示;
led_c_u[5:
电梯外人上升请求信号显示;
led_c_d[5:
电梯外人下降请求信号显示;
led_d[5:
电梯请求信号显示;
alarm:
超载警告信号;
up:
电梯运动状态显示,高时表示上升;
down:
电梯运动状态显示,高时表示为下降;
ud:
电机控制信号,控制电梯的上升下降,“1”表示为上升,“0”表示为下降;
wawawa:
看门狗报警信号,高时表示故障报警。
源代码如下所示:
----------------------------------------------------------------------------------
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitydiantiis
port(clk:
instd_logic;
--时钟信号(频率为2Hz)
full,deng,quick,clr:
--超载、关门中断、提前关门清除报警信号
c_u1,c_u2,c_u3,c_u4,c_u5:
--电梯外人的上升请求信号
c_d2,c_d3,c_d4,c_d5,c_d6:
--电梯外人的下降请求信号
d1,d2,d3,d4,d5,d6:
--电梯人的请求信号
g1,g2,g3,g4,g5,g6:
--到达楼层信号
door:
outstd_logic_vector(1downto0);
--电梯门控制信号
led:
outstd_logic_vector(6downto0);
--电梯所在楼层显示
led_c_u:
outstd_logic_vector(5downto0);
--电梯外人上升请求信号显示
led_c_d:
--电梯外人下降请求信号显示
led_d:
outstd_logic_vector(5downto0);
--电梯请求信号显示
wahaha:
outstd_logic;
--看门狗报警信号
ud,alarm:
--电梯运动方向显示,超载警告信号
up,down:
outstd_logic);
--电机控制信号和电梯运动
enddianti;
architecturebehavofdiantiis
signald11,d22,d33,d44,d55,d66:
std_logic;
--电梯人请求信号寄存信号
signalc_u11,c_u22,c_u33,c_u44,c_u55:
--电梯外人上升请求信号寄存信号
signalc_d22,c_d33,c_d44,c_d55,c_d66:
--电梯外人下降请求信号寄存信号
signalq:
integerrange0to1;
--分频信号
signalq1:
integerrange0to6;
--关门延时计数器
signalq2:
integerrange0to9;
--看门狗计数器
signaldd,cc_u,cc_d,dd_cc:
std_logic_vector(5downto0);
--电梯外请求信号寄存器
signalopendoor:
--开门使能信号
signalupdown:
--电梯运动方向信号寄存器
signalen_up,en_dw:
--预备上升、预备下降预操作使能信号
begin
:
process(clk)
ifclk'
eventandclk='
1'
then
ifclr='
thenq1<
=0;
q2<
wahaha<
='
0'
;
--清除故障报警
elsiffull='
thenalarm<
q1<
--超载报警
ifq1>
=3thendoor<
="
10"
elsedoor<
00"
endif;
elsifq=1thenq<
alarm<
ifq2=3thenwahaha<
--故障报警
else
ifopendoor='
thendoor<
q1<
up<
down<
--开门操作
elsifen_up='
then--上升预操作
ifdeng='
=q2+1;
--关门中断
elsifquick='
=3;
--提前关门
elsifq1=6thendoor<
updown<
--关门完毕,电梯进入上升状态
elsifq1>
01"
=q1+1;
--电梯进入关门状态
elseq1<
door<
--电梯进入等待状态
elsifen_dw='
then--下降预操作
ifg1='
thenled<
1001111"
--电梯到达1楼,数码管显示1
ifd11='
orc_u11='
thend11<
c_u11<
opendoor<
--有当前层的请求,则电梯进入开门状态
elsifdd_cc>
"
000001"
thenen_up<
opendoor<
--有上升请求,则电梯进入预备上升状态
elsifdd_cc="
000000"
thenopendoor<
--无请求时,电梯停在1楼待机
elsifg2='
0010010"
--电梯到达2楼,数码管显示2
ifupdown='
then--电梯前一运动状态位上升
ifd22='
orc_u22='
thend22<
c_u22<
--有当前层的请求,则电梯进入开门状态
000011"
--有上升请求,则电梯进入预备上升状态
elsifdd_cc<
000010"
thenen_dw<
--有下降请求,则电梯进入预备下降状态
--电梯前一运动状态为下降
elsifd22='
orc_d22='
c_d22<
--有当前层的请求,则电梯进入开门状态
--有上升请求,则电梯进入预备上升状态
elsifg3='
0000110"
--电梯到达3楼,数码管显示3
ifd33='
orc_u33='
thend33<
c_u33<
000111"
000100"
elsifd33='
orc_d33='
c_d33<
elsifg4='
1001100"
--电梯到达4楼,数码管显示4
ifd44='
orc_u44='
thend44<
c_u44<
001111"
001000"
elsifd44='
orc_d44='
c_d44<
elsifg5='
0100100"
--电梯到达5楼,数码管显示5
ifd55='
orc_u55='
thend55<
c_u55<
011111"
010000"
elsifd55='
orc_d55='
c_d55<
elsifg6='
0100000"
--电梯到达6楼,数码管显示6
ifd66='
orc_d66='
thend66<
c_d66<
100000"
elseen_up<
en_dw<
--电梯进入上升或下降状态
elseq<
=1;
--清除超载报警
ifd1='
ord1='
=d1;
--对电梯人请求信号进行检测和寄存
elsifd2='
ord2='
=d2;
elsifd3='
ord3='
=d3;
elsifd4='
ord4='
=d4;
elsifd5='
ord5='
=d5;
elsifd6='
ord6='
=d6;
ifc_u1='
orc_u1='
thenc_u11<
=c_u1;
--对电梯外人上升请求信号进行检测和寄存
elsifc_u2='
orc_u2='
thenc_u22<
=c_u2;
elsifc_u3='
orc_u3='
thenc_u33<
=c_u3;
elsifc_u4='
orc_u4='
thenc_u44<
=c_u4;
elsifc_u5='
orc_u5='
thenc_u55<
=c_u5;
ifc_d2='
orc_d2='
thenc_d22<
=c_d2;
--对电梯外人下降请求信号进行检测和寄存
elsifc_d3='
orc_d3='
thenc_d33<
=c_d3;
elsifc_d4='
orc_d4='
thenc_d44<
=c_d4;
elsifc_d5='
orc_d5='
thenc_d55<
=c_d5;
elsifc_d6='
orc_d6='
thenc_d66<
=c_d6;
dd<
=d66&
d55&
d44&
d33&
d22&
d11;
--电梯人请求信号并置
cc_u<
&
c_u55&
c_u44&
c_u33&
c_u22&
c_u11;
--电梯外人上升请求信号并置
cc_d<
=c_d66&
c_d55&
c_d44&
c_d33&
c_d22&
'
--电梯外人下降请求信号并置
dd_cc<
=ddorcc_uorcc_d;
--电梯、外人请求信号进行综合
ud<
=updown;
--电梯运动状态显示
led_d<
=dd;
--电梯人请求信号显示
led_c_u<
=cc_u;
led_c_d<
=cc_d;
endif;
endprocess;
endbehav;
此次电梯控制系统设计使用的是Altera公司的MAX-II,由下资源使用情况图可见这款芯片足够满足本次设计需求。
四、仿真结果及说明
假设电梯初始状态在一楼,此时2、3楼电梯外有人要下楼,4楼电梯外有人要上楼,在此后输入等待、快速关门、超载等信号,观察仿真图得出结论:
电梯控制程序仿真全图
注:
实际使用时电梯的时钟为2Hz,为了仿真时便于观察我们在仿真时,将频率加倍为25MHz。
电梯控制程序仿真局部放大图-1
1.电梯停在一楼时,接受到请求信号c_d3、c_d2、c_u4和d6,并把请求信号写入相应的寄存器。
led显示电梯所在楼层;
led_d、led-c_u和led_c_d显示用户的请求。
2.电梯经过准备上升状态后,进入上升状态,到达2楼、3楼时,由于2、3楼的乘客要求的是下降,所以不停继续前进。
3.电梯上升到4楼时,响应请求(c_u4),开门载客;
载客时电梯的门状态door先由10(电梯门打开)跳到00(等待)再跳到01(电梯门关闭),完成乘客的进入;
此后进入预备上升状态。
电梯控制程序仿真局部放大图-2
1.电梯上升到6楼时,响应请求(d_6),开门卸客;
进入预备下降状态。
2.电梯下降经过5楼,4楼都不停,到达3楼开门卸客,电梯进入预备下降状态。
电梯控制程序仿真局部放大图-3
1.电梯到达3楼时,响应请求(c_d3),开门载客;
2.电梯在预备下降状态下,电梯应超载(full='
),发出超载警报alarm;
超载信号消失(full='
),电梯重新进入预备下降状态。
4.电梯接收到提前关门信号quick,电梯跳过关门等待时间。
仿真图中q1从1跳到3;
进入关门状态。
5.电梯接收到deng、c_