VHDL项目设计三层电梯控制系统.docx

上传人:b****5 文档编号:28927911 上传时间:2023-07-20 格式:DOCX 页数:19 大小:253.07KB
下载 相关 举报
VHDL项目设计三层电梯控制系统.docx_第1页
第1页 / 共19页
VHDL项目设计三层电梯控制系统.docx_第2页
第2页 / 共19页
VHDL项目设计三层电梯控制系统.docx_第3页
第3页 / 共19页
VHDL项目设计三层电梯控制系统.docx_第4页
第4页 / 共19页
VHDL项目设计三层电梯控制系统.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

VHDL项目设计三层电梯控制系统.docx

《VHDL项目设计三层电梯控制系统.docx》由会员分享,可在线阅读,更多相关《VHDL项目设计三层电梯控制系统.docx(19页珍藏版)》请在冰豆网上搜索。

VHDL项目设计三层电梯控制系统.docx

VHDL项目设计三层电梯控制系统

三层电梯控制系统

一、设计功能与要求

电梯控制系统是的设计目标是按照使用者的要求控制电梯的运行。

要求用VHDL设计出三层电梯的控制系统,基本功能要求如下:

1、每层电梯入口处设有上、下请求开关,使用者可以根据自身的上下楼需要按下相应按键;电梯内部设有到达楼层按钮,使用者可以选择到达楼层。

2、设有电梯运行模式(上、下)标识和当前所在楼层标识。

3、电梯运行模式等同于普通电梯运行模式,电梯一般按照提出请求的先后顺序进行响应。

程序根据电梯当前位置和使用者所在楼层以及进入电梯后的要求控制运行状态。

4、电梯初始模式为一层关门状态。

二、设计思路

本系统的主要输入有电梯外上下控制按钮Button(其中Button(0)

表示一楼电梯外上升请求,Button

(1)表示二楼电梯外上升请求,

Button

(2)表示二楼电梯外下降请求,Button(3)表示三楼电梯外下降

请求);电梯内到达楼层控制按钮floor(其中floor(O)表示请求到达一层,floor

(1)表示请求到达二层,floor

(2)表示请求到达三层)。

系统的输出包括电梯位置标识position,表示电梯当前所在楼层;电梯开门关门显示按钮door(当door=1时表示开门,door=0表示关门);电梯当前运行状态按钮up_down(当up_down=1时表示电梯处于上升状态,当up_down=0时表示电梯处于下降状态)。

系统主要通过当前所在楼层以及运行状态、后续请求判断运行方式。

电梯处在第一层时,当它收到二层电梯外上下楼请求、三层电梯外下楼请求、一层电梯内到达二层和三层请求时,电梯会按照指令上升到相应楼层并开门、关门;若收到一层电梯外上楼请求只做开门响应,随后根据使用者进入电梯后请求进行响应;其他请求不响应。

当电梯处在第二层时,若系统收到二层电梯外上下楼请求只做开门响应;若收到三层电梯外下楼或二层电梯内到达三层请求,则做上楼响应、开门;若收到一层电梯外上楼或二层电梯内到达一层请求,则做下楼楼响应并开门;其他请求不响应。

当电梯处在第三层时,若它收到二层电梯外上下楼请求、一层电梯外上楼请求、电梯内到达二层和一层请求时,电梯会按照指令下降到相应楼层并开门、关门;若收到三层电梯外下楼请求只做开门响应,随后根据使用者进入电梯后请求进行响应;其他请求不响应。

若电梯正处在上升状态中收到外部请求,则只响应比当前所在楼层高的楼层的请求,到达需要到达最高楼层时再响应低层请求。

若电梯正处在下降状态中收到外部请求,则只响应比当前所在楼层低的楼层的请求,到达需要到达最低楼层时再响应高层请求。

三、状态原理图说明

本系统的状态比较复杂,状态中嵌套状态。

图3.1为系统状态原

理说明图,其中bO、bl、b2、b3分别表示Button(0)、Button

(1)、

Button

(2)、Button(3);fO、fl、f2分别表示floor(O)、floor

(1)、floor

(2);

SO表示一层上状态、S1U和S1D分别表示二层上和下状态、S2表示

三层下状态

图3.1状态原理图

本状态图主要说明系统运行当前状态与下一个状态的关系,考虑

了从当前状态到下一状态的所有触发因素,较为复杂

四、源程序以及注释

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.all;

USEIEEE.STD_LOGIC_UNSIGNED.all;

ENTITYelevator15IS

PORT(CLK:

INSTD_LOGIC;

reset:

INSTD_LOGIC;

Button:

INSTD_LOGIC_VECTOR(3DOWNTO0);

--button(0)为一层外上升请求,button

(1)为二层外上升请求,--button

(2)为二楼外下降请求,Button(3)为三层外下降请求;

floor:

INSTD_LOGIC_VECTOR(2DOWNTO0);

--floor(O)为电梯内一层请求按钮,floor

(1)为电梯内二层请求按钮,

--floor

(2)为电梯内三层请求按钮;

position:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

--position表示电梯当前位置信息;

door:

OUTSTD_LOGIC;--'1'为开门,'0'为关门;

up_down:

OUTSTD_LOGIC--'1'为上楼,'0'为下楼;

);

ENDelevator15;

ARCHITECTUREBehavOFelevator15IS

TYPEStateIS(S0,S1U,S1D,S2);

--S1U为二楼上状态,S1D为二楼下状态;

SIGNALcurrent_state:

State;

--中间变量:

当前状态

SIGNALnext_state:

State;

--中间变量:

下一状态

SIGNALup:

STD_LOGIC;

--中间变量:

上升下降状态

SIGNALdor:

STD_LOGIC;

--中间变量:

开门关门状态

BEGIN

P1:

PROCESS(CLK)

--状态转换进程;

BEGIN

IFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿

current_state<=next_state;

ENDIF;

ENDPROCESS;

P2:

PROCESS(reset,clk,current_state,up,button,floor)

VARIABLEbutton_var:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEfloor_var:

STD_LOGIC_VECTOR(2DOWNTO0);

VARIABLEcat:

STD_LOGIC;

VARIABLEca_time:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFreset='1'THEN--复位处理,初始状态为一层

next_state<=S0;

position<="0001";

cat:

='0';

ca_time:

="0000";

up<='Z';

dor<='0';

button_var(3DOWNTO0):

="0000";floor_var(2DOWNTO0):

="000";

ELSIFclk'eventandclk='1'THEN

若无复位信号,则将外部按钮信号存储到7个变量之中;

IFbutton(0)='1'THEN

button_var(0):

='1';ELSENULL;

ENDIF;

IFbutton

(1)='1'THEN

button_var

(1):

='1';ELSENULL;

ENDIF;

IFbutton

(2)='1'THEN

button_var

(2):

='1';ELSENULL;

ENDIF;

IFbutton(3)='1'THEN

button_var(3):

='1';ELSENULL;

ENDIF;

IFfloor(0)='1'THENfloor_var(0):

='1';ELSENULL;ENDIF;

IFfloor

(1)='1'THENfloor_var

(1):

='1';ELSENULL;ENDIF;

IFfloor

(2)='1'THENfloor_var

(2):

='1';ELSENULL;ENDIF;

IFcat='0'THENca_time:

=ca_time+1;ENDIF;--开门,关门计时;

CASEcurrent_stateIS

WHENS0=>--一楼状态处理;

position<="0001";

cat:

='0';

IF(button_var(0)orfloor_var(0))='1'THEN

CASEca_timeIS

WHEN"0011"=>dor<='1';

WHEN"1101"=>dor<='0';

button_var(0):

='0';

floor_var(0):

='0';

IF(floor_var

(1)orfloor_var

(2))='1'THEN

next_state<=S1U;

ca_time:

="0000";

up<='1';

ELSE

next_state<=S0;

ca_time:

="0000";

ENDIF;

WHENothers=>NULL;

ENDCASE;

ELSIF(button_var

(1)ORbutton_var

(2)orbutton_var(3)orfloor_var

(2)orfloor_var

(1))='1'THEN

next_state<=S1U;

ca_time:

="0000";

up<='1';

ELSE

next_state<=S0;

ca_time:

="0000";

ENDIF;

WHENS1U=>--二楼上状态处理;

position<="0010";

cat:

='0';

IFfloor_var

(1)='1'THEN--二楼内上升请求;

CASEca_timeIS

WHEN"0011"=>dor<='1';

WHEN"1101"=>dor<='0';

floor_var

(1):

='0';

IF(button_var

(1)orbutton_var(3)orfloor_var

(2))='1'THENnext_state<=S2;

ca_time:

="0000";

button_var

(1):

='0';

ELSIF(button_var(0)orbutton_var

(2)orfloor_var(0))='1

THEN

next_state<=s0;

ca_time:

="0000";

button_var

(2):

='0';

ELSE

next_state<=S1U;

ca_time:

="0000";

ENDIF;

WHENothers=>NULL;

ENDCASE;

ELSE

IFbutton_var

(1)='1'THEN--二楼外上升请求;

CASEca_timeIS

WHEN"0011"=>dor<='1';

WHEN"1101"=>dor<='0';

button_var

(1):

='0';

IF(floor_var

(2)orbutton_var(3))='1'THENnext_state<=S2;

ca_time:

="0000";

ELSIF(button_var(0)orfloor_var(0)orbutton_var

(2))='1'

THEN

next_state<=s0;

ca_time:

="0000";

up<='0';

ELSEnext_state<=S1U;

button_var

(1):

='0';

ENDIF;

WHENothers=>NULL;

ENDCASE;

ELSE

IF(button_var(3)orfloor_var

(2))='1'THEN

--二楼无上楼,开门请求,但三层有下楼或开门请求;

next_state<=S2;

ca_time:

="0000";

ELSIFbutton_var

(2)='1'THEN

--二楼无上楼,开门请求,三层也无下楼或开门请求,此

--时二楼有下楼请求;

CASEca_timeIS

WHEN"0011"=>dor<='1';

WHEN"1101"=>dor<='0';

button_var

(2):

='0';

IF(floor_var(0)orbutton_var(0))='1'

THEN

next_state<=s0;

ca_time:

="0000";

up<='0';

ELSEnext_state<=S1U;

ca_time:

="0000";

ENDIF;

WHENothers=>NULL;

ENDCASE;

ELSIF(button_var(0)orfloor_var(0))='1'THEN

--电梯处于二楼上状态,仅有一楼信号要处理

next_state<=s0;

ca_time:

="0000";

up<='0';

ELSE

next_state<=S1U;--无任何信号,保持当前状态不变;ca_time:

="0000";

ENDIF;

ENDIF;

ENDIF;

WHENS1D=>--up='0'时的情况;

position<="0010";

cat:

='0';

IFfloor_var

(1)='1'THEN

CASEca_timeIS

WHEN"0011"=>dor<='1';

WHEN"1101"=>dor<='0';

floor_var

(1):

='0';

IF(button_var

(2)orbutton_var(0)orfloor_var(0))='1'THEN

next_state<=s0;

ca_time:

="0000";

button_var

(2):

='0';

ELSIF(button_var

(1)orbutton_var(3)orfloor_var

(2))='1'

THEN

next_state<=S2;

ca_time:

="0000";

button_var

(1):

='0';

ELSEnext_state<=S1D;

ca_time:

="0000";

ENDIF;

WHENothers=>NULL;

ENDCASE;

ELSE

IFbutton_var

(2)='1'THEN

CASEca_timeIS

WHEN"0011"=>dor<='1';

WHEN"1101"=>dor<='0';

button_var

(2):

='0';

IF(floor_var(0)orbutton_var(0))='1'

THEN

next_state<=s0;

ca_time:

="0000";

ELSIF(button_var

(1)orfloor_var

(2)orbutton_var(3))='1'

THEN

next_state<=S2;

ca_time:

="0000";up<='1';

ELSE

next_state<=S1D;

ca_time:

="0000";

ENDIF;

WHENothers=>NULL;

ENDCASE;

ELSE

IF(button_var(0)orfloor_var(0))='1'THENnext_state<=s0;ca_time:

="0000";

ELSIFbutton_var

(1)='1'THENCASEca_timeIS

WHEN"0011"=>dor<='1';

WHEN"1101"=>dor<='0';button_var

(1):

='0';

IF(floor_var

(2)orbutton_var(3))='1THEN

next_state<=S2;ca_time:

="0000";

up<='1';

ELSE

next_state<=S1D;

ca_time:

="0000";

ENDIF;

WHENothers=>NULL;

ENDCASE;

ELSIF(button_var(3)orfloor_var

(2))='1'THENnext_state<=S2;

ca_time:

="0000";

up<='1';

ELSE

next_state<=S1D;

ca_time:

="0000";

ENDIF;

ENDIF;

ENDIF;

WHENS2=>--电梯三楼状态处理;position<="0011";

cat:

='0';

IF(button_var(3)orfloor_var

(2))='1'THEN

CASEca_timeIS不得用于商业用途

WHEN"0011"=>dor<='1';

WHEN"1101"=>dor<='0';

button_var(3):

='0';

floor_var

(2):

='0';

IF(floor_var(0)orfloor_var

(1))='1'THEN

next_state<=S1D;

ca_time:

="0000";

up<='0';

ELSE

next_state<=S2;

ca_time:

="0000";

ENDIF;

WHENothers=>NULL;

ENDCASE;

ELSIF(button_var(0)ORbutton_var

(1)ORbutton_var

(2)orfloor_var(0)orfloor_var

(1))='1'THEN

next_state<=S1D;

ca_time:

="0000";

up<='0';

ELSE

next_state<=S2;

ca_time:

="0000";

ENDIF;

ENDCASE;

ENDIF;

--电梯上下,开关门显示;

ENDPROCESS;

P3:

PROCESS(up,dor)

BEGIN

up_down<二up;door<=dor;

ENDPROCESS;

ENDBehav;

五、仿真结果与说明

StrnylationWavefpnTig

彳卜|Painter

Stank

MasterTimeBar

13.5ns

191.4ns

Interval

177.9ns

A

SimuloiticiLmode:

FuhcIlon-al

图5.1

 

图5.1是基本基本功能仿真,使用者在一层电梯外按下上升

(Button(0)=1)按钮,随后开门(door=1)。

使用者进入后按下到达

三楼请求(floor

(2)=1),电梯关门(door=0)并上升(up_down=1)

最后到达三层(position=3)并开门(door=1)。

图5.2是基本记忆功能仿真,电梯处于初始一层关门状态。

三层不得用于商业用途

外使用者按下三层下按钮(floor(3)=1)电梯上升到三楼开门。

然而在上升到二楼时一层外有人按下上楼按钮。

此时电梯先完成上升到三层,然后再下降回到一层响应一层外请求。

图5.3表明在电梯上升过程中可以接收较高楼层的要求。

开始时有人按下一层外上升(Button(0)=1)按钮,电梯开门使用者进入并按下到达三层(floor

(2)=1)请求,此时电梯关门并上升。

在电梯上升但未到达二层时,二层外有人按下上楼(Button

(1)=1)请求,因此当电梯到达二层(position=2)后停止并开门,待二层使用者进入后再完成第一个使用者的请求到达三层。

^imulatianWaveforms

fSknuladon.F'anctional

Master1

imeiBar

13.Sre*JPbrier:

159.14nsInter皿145.64ns

Start

1

:

A

]

毎80.0113

160.0ns

1

240.0ns320.0ie=

ji

400.0“4BG.0na560.

ip

0如B4Q.0吋72

■Ta

ETeuie

]3

5nsJ

iButton

"W

—i

-ButtonlS]

lButtonljZ]

*3

-Buttonfl]

_n.n

%

1>>4

-ButtonlDJ

1^5

CLE

JI

uinwwmjimmiuwnwwinjmwwwiiwumwmmiwwinjiii

OB

door

1

2了

□i

t

[0])

[C

]

畛色

-floor[E]

n

-floor[5]

1^10

-floorEO]

n

Sposition

r

EHX

[Z]

X

[1]

aIE

re

i

3IT

r」

图5.4

图5.4仿真了系统对同一楼层两个不同到达楼层的响应。

有两人先后按下二层上按钮(Button

(1)=1),此时电梯从一层上升至二层并开门。

待两人进入后按照先后顺序按下到达三层(floor

(2)=1)和到

达一层(floor(0)=1)按钮,此时电梯也按照俩人按键先后顺序先到达三层(position=3),然后再到达一层(position=1)。

需要注意的是,本次实验第二个使用者在二层外的按键是错误的,因为他要到达一层

应该按下二层下按钮(Button

(2)=1),然而他却错误的按下了二层上按钮(Button

(1)=1)。

因此同一使用者在电梯内和电梯外提出不同要求时,主要响应电梯内请求。

图5.5和图5.6都是综合仿真实验。

图5.5

图5.6

图5.5是一个在电梯中常见的复杂情况仿真,本实验中共有四个人提出请求。

首先一外层有人提出上升(Button(0)=1)请求并按下上升到三层(floor⑵=1)按键,电梯上升过程中二层外分别有人按下上升(Button

(1)=1)和下降(Button

(2)=1)的按钮,同时三层外有人按下下降(Button(3)=1)按钮。

随后电梯到达二层停止,待俩人进入后都没有按下任何到达楼层请求。

电梯随即到达三层,三层使用者进入后也没有按下任何到达楼层按钮,此时电梯响应此前按下二层下降按钮的使用者的请求再次下降到二层。

图5

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1