电梯控制器课程设计Word文档下载推荐.docx
《电梯控制器课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电梯控制器课程设计Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
如果电梯没有接收到请求信号,则电梯在一层待机,其分析图如图2所示。
图2-1电梯处于一层时运行情况分析
②处于二层时,电梯则可能出现以下三种情况:
①电梯没有接收到梯内梯外的任何请求信号时,则电梯在二层待机;
②电梯接收到上升请求信号,进入预上升状态;
③电梯接收到下降请求信号,进入预下降状态,其分析图如图3所示。
图2-2电梯处于二层时的运行情况分析
③处于三层时,不管是梯内梯外,电梯都只能接收到下降的请求信号。
此时,电梯就进入预下降状态,准备作下降运行。
如果电梯没有接收到请求信号,则电梯在三层待机,其分析图如图4所示。
图2-3电梯处于三层时的运行可能分析
(3)对电梯开门、关门等内部信号处理的分析,其流程如图6所示。
图2-4电梯内外信号处理
当电梯接收到请求信号后,运行到发出请求的楼层。
运达后,开门使能信号促使电梯开门载客,同时驱动关门延时信号。
在电梯进行完关门倒数计后,关门使能信号将促使电梯关门状态,然后上升或下降运行。
2.2.2电梯整体设计
电梯控制器采用状态机来实现,思路比较清晰。
可以将电梯等待的每秒钟以及开门、关门都看成一个独立的状态。
由于电梯又是每秒上升或下降一层,所以就可以通过一个统一的1秒为周期的时钟来触发状态机。
根据电梯的实际工作情况,可以把状态机设置10个状态,分别是“电梯停留在第1层”、“开门”、“关门”、“开门等待第1秒”、“开门等待第2秒”、“开门等待第3秒”、“开门等待第4秒”、“上升”、“下降”和“停止状态”。
各个状态之间的转换条件可由上面的设计要求所决定。
电梯初始状态为一层,处在开门状态,开门指示灯亮。
一层电梯入口处设有上楼请求开关,二层电梯入口设有上、下楼请求开关,三层电梯入口处设有下楼请求开关,电梯内部设有乘客到达楼层的停站请求开关及其显示。
设置电梯所处位置指示(用数码管表示)及电梯上升或下降指示。
电梯到达有停站请求的楼层后,电梯门打开,开门指示灯亮。
开门4秒后,电梯门关闭,开门指示灯灭,电梯继续运行,直至执行完最后一个请求信号后停在当前层。
电梯控制系统能记忆电梯内外的请求信号,并按照电梯运行规则工作,每个请求信号执行完毕后随即清除。
2.3端口设计说明
(1)由功能要求得到本程序设计的端口必须包括:
时钟信号(fclk);
一楼电梯外的上升请求信号(up1);
二楼电梯外的上升请求信号(up2);
二楼电梯外的下降请求信号(down2);
三楼电梯外的下降请求信号(down3);
电梯内部到达楼层的请求信号(stop1、stop2、stop3);
电梯内部关门请求信号(close);
所有输入信号等于1,表示有请求,等于0,表示无请求;
电梯外部上升指示灯(uplight)和下降请求指示灯(downlight),它们与up1、up2、down2、down3信号相对应;
电梯内部乘客到达楼层的停站请求灯(stoplight),该信号与stop1、stop2和stop3信号相对应;
电梯运行模式指示(udsig),1代表下降模式,0代表上升模式;
电梯所在楼层指示(position),表示电梯在对应楼层;
电梯所在楼层数码管表示(dout),该信号与position信号相对应;
电梯门状态灯(doorlight),1表示开门,0表示关门。
(2)该设计中有8个LED等:
电梯外部上升指示灯(uplight),一楼二楼各一个;
下降请求指示灯(downlight)二楼三楼各一个;
电梯内部乘客到达楼层的停站请求灯(stoplight)分别指示一楼二楼三楼;
电梯门状态灯(doorlight)指示电梯门的开关。
2.4程序设计
代码由三大部分组成:
库声明,实体,结构体。
2.4.1库声明部分
调用VHDL库,通过library语句本程序应用了VHDL库中的”通用ieee库”和”标准std库”。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
2.4.2实体部分
实体部分列出了代码所用到的所用输入输出端口。
主控制器系统由VHDL语言实现,其输入输出端口定义如下:
entityfliftis
port(fclk,up1,up2,down2,down3,stop1,stop2,stop3,close:
instd_logic;
uplight:
bufferstd_logic_vector(2downto1);
---电梯外部1.2楼上请求
downlight:
bufferstd_logic_vector(3downto2);
---电梯外部2.3楼下请求
stoplight:
bufferstd_logic_vector(3downto1);
---电梯内部请求
udsig:
bufferstd_logic;
---电梯的状态,0代表(预)上升,1代表(预)下降
position:
bufferintegerrange1to3;
---电梯所在楼层
doorlight:
outstd_logic;
---门灯,开门灯亮,关门等灭
dout:
outstd_logic_vector(3downto0));
---用以实现楼层数字显示
endflift;
2.4.3结构体部分
结构体部分共使用了分频进程,电梯状态进程,读按键、控制指示灯进程和楼层显示进程4个进程。
使用状态机来实现电梯功能。
在电梯状态进程中,在电梯的上升状态中,通过对信号灯的判断,决定下一个状态是继续上升还是停止;
在电梯下降状态中,也是通过对信号灯的判断,决定下一个状态是继续下降还是停止;
在电梯停止状态中,通过对信号灯的判断,决定电梯是上升、下降还是停止。
状态机进程的运行基于电梯时钟fliclk,此时钟周期是外部时钟周期的十六倍;
按键设定进程基于按键时钟buttonclk,此时钟的周期为外部时钟周期的两倍。
按键时钟周期比电梯时钟周期短,这就意味着按键设定进程比状态机进程快,这就保证了每一次按键都能扫描并保留而不会被状态机进程中的清零程序消除。
按键后产生的点亮的信号灯(逻辑值为‘1’)用于作为状态机进程中的判断条件,而clearup和cleardn信号为逻辑‘l’使得相应的信号灯熄灭。
分频进程:
该进程的目的是产生不同频率的两个时钟,电梯控制时钟fliclk和按键控制时钟buttonclk。
process(fclk)---产生电梯控制时钟fliclk和按键控制时钟buttclk
begin
if(fclk'
eventandfclk='
1'
)thenq<
=q+1;
endif;
buttonclk<
=q(0);
fliclk<
=q(3);
endprocess;
状态机进程:
该部分是整个设计的核心,根据电梯的工作模式,将电梯的工作分为10个状态,分别为停一层stopno1、开门状态dooropen、关门状态doorclose、开门等待1秒wait1、开门等待2秒wait2、开门等待3秒wait3、开门等待4秒wait4、上升up、下降down和停止stop。
在每个状态下,判断输入信号的请求,转入下一状态且产生对应得输出信号。
结构体部分分析
(1)停一层状态
当处于停一层状态时,电梯开门同时转入下一状态wait1。
whenstoponl=>
doorlight<
='
;
position<
=1;
pos:
state<
=wait1;
开门等待1秒:
该状态时重新计入上升下降请求。
如果此时有关门请求,则转入下一状态doorclose;
如果没有请求,则下一状态为wait2。
whenwait1=>
clearup<
0'
cleardn<
if(close='
)thenstate<
=doorclose;
elsestate<
=wait2;
开门等待2秒:
如果没有请求,则下一状态为wait3。
开门等待3秒:
如果没有请求,则下一状态为wait4。
开门等待4秒:
该状态的下一状态为doorclose。
(2)上升模式
当处于上升模式,同时电梯位于三层,如果此时电梯的内部与外部都没有请求,电梯转为下降模式,并进入下一状态doorclose;
如果此时电梯内部有在三层下的请求或三层外部有下楼请求,电梯进入下一状态dooropen;
否则电梯转为下降模式,并进入下一状态down。
if(position=3)then
if(stoplight="
000"
anduplight="
00"
anddownlight="
)
thenudsig<
state<
elsif(stoplight(3)='
ordownlight(3)='
)
thenstate<
=dooropen;
elseudsig<
=down;
当处于上升模式,同时电梯位于二层,如果此时电梯的内部与外部都没有请求,电梯仍为上升模式,并进入下一状态doorclose;
如果此时电梯内部有在二层下的请求或二层外部有下楼请求或上楼请求,电梯进入下一状态dooropen;
如果此时电梯内部有在三层下的请求或三层外部有下楼请求,电梯仍为上升模式,并进入下一状态up;
elsif(position=2)then
if(stoplight="
elsif(stoplight(3)='
=up;
当处于上升模式,同时电梯位于一层,如果此时电梯的内部与外部都没有请求,电梯仍为上升模式,并进入下一状态doorclose;
如果此时电梯内部有在一层下的请求或一层外部有上楼请求,电梯进入下一状态dooropen;
否则电梯仍为上升模式,并进入下一状态up。
(3)下降模式
当处于下降模式,同时电梯位于一层,如果此时电梯的内部与外部都没有请求,电梯转为上升模式,并进入下一状态doorclose;
否则电梯转为上升模式,并进入下一状态up。
当处于下降模式,同时电梯位于二层,如果此时电梯的内部与外部都没有请求,电梯仍为下降模式,并进入下一状态doorclose;
如果此时电梯内部有在一层下的请求或一层外部有上楼请求,电梯仍为下降模式,并进入下一状态down;
当处于下降模式,同时电梯位于三层,如果此时电梯的内部与外部都没有请求,电梯仍为下降模式,并进入下一状态doorclose;
否则电梯仍为下降模式,并进入下一状态down。
(4)电梯上升下降处理
上升:
电梯所在楼层数加一。
如果此时电梯在二层同时二层外部有上升或下降的请求或电梯内部有在二层下的请求,则进入下一状态stop。
如果此时电梯在二层同时三层外部有下降的请求或电梯内部有在三层下的请求,则进入下一状态up;
否则进入下一状态stop。
whenup=>
position<
=position+1;
=pos+1;
if(pos=2and(uplight
(2)='
ordownlight
(2)='
orstoplight
(2)='
))
=stop;
elsif(pos=2and(stoplight(3)='
))
下降:
电梯所在楼层数减一。
如果此时电梯在二层同时一层外部有上升的请求或电梯内部有在一层下的请求,则进入下一状态down;
停止:
该状态的下一状态为dooropen。
开门状态:
电梯开门同时清除上升下降的请求,并转入下一状态wait1,其它的状态都转入下一状态stop。
如果清除上升的信号有效,则电梯内部相应楼层停止信号清除,同时电梯外部相应楼层上升信号清除;
否则当有上升请求时相应的电梯外部上升指示灯亮。
if(clearup='
thenstoplight(position)<
uplight(position)<
else
if(up1='
)thenuplight
(1)<
elsif(up2='
)thenuplight
(2)<
如果清除下降的信号有效,则电梯内部相应楼层停止信号清除,同时电梯外部相应楼层下降信号清除;
否则当有下降请求时相应的电梯外部下降指示灯亮。
如果停止信号有效,则相应的电梯内部停站请求灯亮。
if(stop1='
)thenstoplight
(1)<
elsif(stop2='
)thenstoplight
(2)<
elsif(stop3='
)thenstoplight(3)<
3系统仿真
分几种情况分析:
(1)在三楼乘坐电梯到一楼
图3-1系统仿真图
(1)
初始时电梯停在一层position=1,上升模式udsig=0并保持开门状态,doorlight=1。
外部没有请求时,电梯等待四秒后关门,doorlight变为0。
三层有下楼请求并要求停在一层则先down3置1,downlight(3)=1。
由于三层是下楼请求,而电梯此时是上升模式udsig=0,则电梯到二层时不停position=2,直接运行到三层position=3,开门doorlight变为1,down3清零,downlight(3)=0。
进入电梯后把stop1置1,stoplight
(1)=1,等待4秒后自动关门doorlight变为0,转为下降模式udsig=1,下降到二楼position=2,继续下降到一楼position=1,stoplight
(1)=0,开门doorlight=1,等待4秒后自动关门doorlight变为0。
如图3-1所示
(2)在二楼乘坐电梯到三楼
图3-2系统仿真图
(2)
二层有上楼请求并要求停在三楼则先把up2置1,uplight
(2)=1。
由于二层是上楼请求,而电梯此时是上升模式udsig=0,则电梯到二层时停position=2,开门doorlight变为1,up2清零,uplight
(2)=0,进入电梯后把stop3置1,stoplight(3)=1,等待4秒后自动关门doorlight变为0,继续上升到3楼position=3,stoplight
(1)=0,开门doorlight=1,等待4秒后自动关门doorlight变为0。
如图3-2所示
(3)在三楼乘坐电梯到二楼
图3-3系统仿真图(3)
三层有下楼请求并要求停在二层则先down3置1,downlight(3)=1。
由于三层是下楼请求,而电梯此时是上升模式udsig=0,则电梯到二层时不停position=2,直接运行到三层position=3,开门doorlight变为1,down3清零,downlight(3)=0,进入电梯后stop2置1,stoplight
(2)=1,等待4秒后自动关门doorlight变为0,转为下降模式udsig=1,下降到二楼position=2,stoplight
(2)=0,开门doorlight=1,等待4秒后自动关门doorlight变为0。
如图3-3所示
(4)在一楼乘坐电梯到二楼
图3-4系统仿真图(4)
一层有上楼请求并要求停在三楼则先up1置1,uplight
(1)=1。
由于一层是上楼请求,而电梯此时是上升模式udsig=0,则电梯开门doorlight变为1,up1清零,uplight
(1)=0。
进入电梯后把stop2置1,stoplight
(2)=1,等待4秒后自动关门doorlight变为0,上升到2楼position=2,开门doorlight=1,stoplight
(2)=0,等待4秒后自动关门doorlight变为0。
如图3-4所示
(5)在二楼乘坐电梯到一楼
图4-5系统仿真图(5)
二层有下楼请求并要求停在一层则先down2置1,downlight
(2)=1。
由于二层是下楼请求,而电梯此时是上升模式udsig=0,则电梯到二层时停position=2,开门doorlight变为1,down2清零,downlight
(2)=0,进入电梯后stop1置1,stoplight
(1)=1,等待4秒后自动关门doorlight变为0,转为下降模式udsig=1,下降到一楼position=2,stoplight
(1)=0,开门doorlight=1,等待4秒后自动关门doorlight变为0。
如图3-5所示
4小结
我这篇课设基于VHDL语言设计的三层电梯控制器,并进行了仿真。
在参考了许多相关资料后,充分理解了三层电梯的设计要求,基本上完成了任务要求:
但本代码中可能仍存在一些不能解决的实际问题,许多工程实际问题不能完全用理论知识去解决,需要不断吸取实践经验,寻找解决问题方法。
用VHDL硬件描述语言的形式来进行三层电梯控制器的设计方便灵活,利用EDA软件进行编译优化仿真极大的减少了电路设计时间和可能发生的错误,降低了开发成本,相信这种设计方法将在未来的数字系统设计中发挥越来越重要的作用。
这一周的设计过程中,除找资料外,大多时间都是在电脑上进行的,通过反复的编译,仿真,不断试验来实现所得结果。
在设计上,运用了EDA自上而下的设计思想,逐步完善所设计功能,同时,用到VHDL语言中的状态机,多进程,CASE、IF….ELSE等语句,才达到以上结果。
设计过程中也遇到了许多问题,如波形仿真上信号的设置等。
这个课程设计还有很多不足之处:
1、电梯各个进程依赖于2个不同的时钟,这样做虽然比较精确但是显得有些多余。
2、电梯控制程序只实现了三层楼电梯的控制,这种电梯在现实生活中应用很少,而且此程序不方便向更多层电梯控制器程序扩展。
通过此次的课程设计,我学到了很多知识,包括QuartusII和ModelSim的使用和仿真,已经如何真正的运用学过的EDA知识,完成具有意义性的系统设计。
培养了自学能力和动手能力。
并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。
通过课程设计,我学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题。
参考文献
[1]潘松黄继业EDA技术实用教程科学出版社