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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

三层电梯控制系统一、设计功能与要求电梯控制系统是的设计目标是按照使用者的要求控制电梯的运行。要求用VHDL设计出三层电梯的控制系统,基本功能要求如下:1、每层电梯入口处设有上、下请求开关,使用者可以根据自身的上下楼需要按下相应按键;电梯内部设有到达楼层按钮,使用者可以选择到达楼层。2、设有电梯运行模式(上、下)标识和当前所在楼层标识。3、电梯运行模式等同于普通电梯运行模式,电梯一般按照提出请求的先后顺序进行响应。程序根据电梯当前位置和使用者所在楼层以及进入电梯后的要求控制运行状态。4、电梯初始模式为一层关门状态。二、设计思路本系统的主要输入有电梯外上下控制按钮Button(其中Button(0)表示一楼电梯外上升请求,Button(1)表示二楼电梯外上升请求,Button(2)表示二楼电梯外下降请求,Button(3)表示三楼电梯外下降请求);电梯内到达楼层控制按钮floor(其中floor(0)表示请求到达一层,floor(1)表示请求到达二层,floor(2)表示请求到达三层)。系统的输出包括电梯位置标识position,表示电梯当前所在楼层;电梯开门关门显示按钮door(当door=1时表示开门,door=0表示关门);电梯当前运行状态按钮up_down(当up_down=1时表示电梯处于上升状态,当up_down=0时表示电梯处于下降状态)。系统主要通过当前所在楼层以及运行状态、后续请求判断运行方式。电梯处在第一层时,当它收到二层电梯外上下楼请求、三层电梯外下楼请求、一层电梯内到达二层和三层请求时,电梯会按照指令上升到相应楼层并开门、关门;若收到一层电梯外上楼请求只做开门响应,随后根据使用者进入电梯后请求进行响应;其他请求不响应。当电梯处在第二层时,若系统收到二层电梯外上下楼请求只做开门响应;若收到三层电梯外下楼或二层电梯内到达三层请求,则做上楼响应、开门;若收到一层电梯外上楼或二层电梯内到达一层请求,则做下楼楼响应并开门;其他请求不响应。当电梯处在第三层时,若它收到二层电梯外上下楼请求、一层电梯外上楼请求、电梯内到达二层和一层请求时,电梯会按照指令下降到相应楼层并开门、关门;若收到三层电梯外下楼请求只做开门响应,随后根据使用者进入电梯后请求进行响应;其他请求不响应。若电梯正处在上升状态中收到外部请求,则只响应比当前所在楼层高的楼层的请求,到达需要到达最高楼层时再响应低层请求。若电梯正处在下降状态中收到外部请求,则只响应比当前所在楼层低的楼层的请求,到达需要到达最低楼层时再响应高层请求。三、状态原理图说明本系统的状态比较复杂,状态中嵌套状态。图3.1为系统状态原理说明图,其中b0、b1、b2、b3分别表示Button(0)、Button(1)、Button(2)、Button(3);f0、f1、f2分别表示floor(0)、floor(1)、floor(2);S0表示一层上状态、S1U和S1D分别表示二层上和下状态、S2表示三层下状态。图3.1状态原理图本状态图主要说明系统运行当前状态与下一个状态的关系,考虑了从当前状态到下一状态的所有触发因素,较为复杂。四、源程序以及注释LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.all;USEIEEE.STD_LOGIC_UNSIGNED.all;ENTITYelevator15ISPORT(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(0)为电梯内一层请求按钮,floor(1)为电梯内二层请求按钮,--floor(2)为电梯内三层请求按钮;position:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--position表示电梯当前位置信息;door:OUTSTD_LOGIC;--'1'为开门,'0'为关门;up_down:OUTSTD_LOGIC--'1'为上楼,'0'为下楼;);ENDelevator15;ARCHITECTUREBehavOFelevator15ISTYPEStateIS(S0,S1U,S1D,S2);--S1U为二楼上状态,S1D为二楼下状态;SIGNALcurrent_state:State;--中间变量:当前状态SIGNALnext_state:State;--中间变量:下一状态SIGNALup:STD_LOGIC;--中间变量:上升下降状态SIGNALdor:STD_LOGIC;--中间变量:开门关门状态BEGINP1:PROCESS(CLK)--状态转换进程;BEGINIFCLK'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);BEGINIFreset='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'THENbutton_var(0):='1';ELSENULL;ENDIF;IFbutton(1)='1'THENbutton_var(1):='1';ELSENULL;ENDIF;IFbutton(2)='1'THENbutton_var(2):='1';ELSENULL;ENDIF;IFbutton(3)='1'THENbutton_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_stateISWHENS0=--一楼状态处理;position=0001;cat:='0';IF(button_var(0)orfloor_var(0))='1'THENCASEca_timeISWHEN0011=dor='1';WHEN1101=dor='0';button_var(0):='0';floor_var(0):='0';IF(floor_var(1)orfloor_var(2))='1'THENnext_state=S1U;ca_time:=0000;up='1';ELSEnext_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'THENnext_state=S1U;ca_time:=0000;up='1';ELSEnext_state=S0;ca_time:=0000;ENDIF;WHENS1U=--二楼上状态处理;position=0010;cat:='0';IFfloor_var(1)='1'THEN--二楼内上升请求;CASEca_timeISWHEN0011=dor='1';WHEN1101=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'THENnext_state=s0;ca_time:=0000;button_var(2):='0';ELSEnext_state=S1U;ca_time:=0000;ENDIF;WHENothers=NULL;ENDCASE;ELSEIFbutton_var(1)='1'THEN--二楼外上升请求;CASEca_timeISWHEN0011=dor='1';WHEN1101=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'THENnext_state=s0;ca_time:=0000;up='0';ELSEnext_state=S1U;button_var(1):='0';ENDIF;WHENothers=NULL;ENDCASE;ELSEIF(button_var(3)orfloor_var(2))='1'THEN--二楼无上楼,开门请求,但三层有下楼或开门请求;next_state=S2;ca_time:=0000;ELSIFbutton_var(2)='1'THEN--二楼无上楼,开门请求,三层也无下楼或开门请求,此--时二楼有下楼请求;CASEca_timeISWHEN0011=dor='1';WHEN1101=dor='0';button_var(2):='0';IF(floor_var(0)orbutton_var(0))='1'THENnext_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';ELSEnext_state=S1U;--无任何信号,保持当前状态不变;ca_time:=0000;ENDIF;ENDIF;ENDIF;WHENS1D=--up='0'时的情况;position=0010;cat:='0';IFfloor_var(1)='1'THENCASEca_timeISWHEN0011=dor='1';WHEN1101=dor='0';floor_var(1):='0';IF(button_var(2)orbutton_var(0)orfloor_var(0))='1'THENnext_state=s0;ca_time:=0000;button_var(2):='0';ELSIF(button_var(1)orbu

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功