EDA电梯控制器课设报告.docx
《EDA电梯控制器课设报告.docx》由会员分享,可在线阅读,更多相关《EDA电梯控制器课设报告.docx(32页珍藏版)》请在冰豆网上搜索。
EDA电梯控制器课设报告
1、绪论
随着EDA技术发展和应用领域的扩大与深入,EDA技术在电子信息、通讯、自动控制及计算机应用等领域的重要性突出。
随着技术市场与人才市场对EDA的需求不断提高,产品的市场需求和技术市场的要求也必然会反映到教学领域和科研领域中来。
因此学好EDA技术对我们有很大的益处。
EDA功能强大,一台计算机、一套EDA软件和一片或几片大规模可编程芯片(CPLD/FPGA或ispPAC),就能完成电子系统的设计。
EDA技术涉及面广,内容丰富,但在教学和技术推广层面上,应用较为广泛的是基于可编程器件的EDA技术,它主要包括如下四大要素:
1大规模可编程器件,它是利用EDA技术进行电子系统设计的载体;2硬件描述语言,它是利用EDA技术进行电子系统设计的主要手段;3软件开发工具,它是利用EDA技术进行电子系统的智能化的自动化设计工具;4实验开发系统,它是利用EDA技术进行电子系统设计的下载工具及硬件验证工具。
电梯行业也随着科技的发展,不断地出现在人们生活的各个场所,因此,对电梯控制器的设计是一个很实用的例子,对我们掌握EDA技术的应用也有很大的帮助。
2、三层电梯设计原理
2.1系统设计功能
1.每层电梯入口处设有请求开关,电梯内设有顾客到达层次的停站请求开关。
2.设有电梯入口处位置指示装置及电梯运行模式(上升或者下降)指示装置。
3.电梯每秒升(降)层楼。
电梯到达有停站请求的楼层,经过1秒电梯门打开,开门指示灯亮,开门4秒后,电梯门关闭(开门指示灯灭),电梯继续进行,直至最后一个请求信号后停留在当前层。
4.能记忆电梯内所有请求,并按照电梯运行规则按顺序响应,每个请求信号保留至执行后消除。
5.电梯运行规则——当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由上而下逐个执行,直到最后一个上楼请求执行完毕;如果高层有下楼请求,则直接升到由下楼请求的最高楼层,然后进入下降模式。
当电梯处于下降模式时则与上升模式相反。
6.电梯初始状态为一层开门状态。
2.2系统设计方案
2.2.1系统设计接口图
根据系统设计要求,并考虑到系统的可验证性,整个系统的输入输出接口设计如图2.2.1:
图2.2.1电梯输入输出接口图
2.2.2系统设计各接口说明
系统设计有如下输入:
时钟(buttonclk,liftclk),系统复位键(reset),楼层上升请求(f1upbutton,f2upbutton),楼层下降请求(f2dnbutton,f3dnbutton),外部请求指示灯(fuplight,fdnlight),楼层停止请求(stop1button,stop2button,stop3button),内部请求指示灯(stoplight);同时输出如下:
当前楼层位子(position),楼层上升、下降指示灯(udsig),开门状态灯(doorlight)。
2.2.3主要程序代码说明
1.设计此系统是通过状态机实现的,首先定义以下状态:
TYPELIFT_STATEIS
(STOPON1,DOOROPEN,DOORCLOSE,DOORWAIT1,DOORWAIT2,DOORWAIT3,DOORWAIT4,UP,DOWN,STOP);
2.利用用户所输入请求,在以上状态之间进行转换,同时也定义了以下寄存器信号以备调用:
SIGNALMYLIFT:
LIFT_STATE;
SIGNALCLEARUP:
STD_LOGIC;--清除上升请求指示灯
SIGNALCLEARDN:
STD_LOGIC;--清除上下降请求指示灯
SIGNALPOS:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALPOSITION:
INTEGERRANGE1TO3;
3.在用户输入控制时,通过多个进程进行协调工作:
CTRLIFT:
PROCESS(RESET,LIFTCLK)--控制电梯状态进程
用来为用户楼层选择
主要用了以下语句:
(1)CASE语句
CASE语句属于顺序语句,因此必须放在进程语句中使用,CASE语句的一般表达式是:
CASE<表达式>IS
WHEN<选择值或标志符>=〉<顺序语句>;...<顺序语句>;
WHEN<选择值或标志符>=〉<顺序语句>;...<顺序语句>;
...
ENDCASE;
当执行到CASE语句时,首先计算<表达式>的值,然后根据WHEN条件句中与之相同的<选择值或标志符>,执行对应的<顺序语句>,最后结束CASE语句。
条件句中的=“>”不是操作符,它的含义相当于THEN(或“于是”)。
使用CASE语句应该注意以下几点:
WHEN条件句中的选择值或标志符所代表的值必须在表达式的取值范围内。
除非所以条件句中的选择值能完全覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须如教材例那样用OTHERS关键词表示以上已列的所有条件句中的未能列出的其他可能的取值。
OTHERS只能出现一次,且只能作为最后一种条件取值。
使用OTHERS的目的是为了使条件句中的所有选择值能涵盖表达式的所有取值,以免综合器会插入不必要的锁存器。
关键词NULL表示不做任何操作。
CASE语句中的选择值只能出现一次,不允许有相同选择值的条件语句出现。
CASE语句执行中必须选中,且只能选中所列条件语句中的一条。
(2)IF语句
IF语句是VHDL设计中最重要和最常用的语句,IF语句作为一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行制定的顺序语句。
IF语句的语句结构有以下几种:
IF条件句THEN
顺序语句
ENDIF;
IF条件语句THEN
顺序语句
ELSE
顺序语句
ENDIF;
IF条件语句THEN
IF条件句THEN
...
END IF
ENDIF
IF条件句THEN
顺序句
ELSIF条件句THEN
顺序语句
...
ELSE
顺序语句
ENDIF;
IF语句中至少应有一个条件句,“条件句”可以是BOOLEAN类型的标志符,如IFA1THEN...,或者是一个判别表达式,如IFA<B+1 THEN...,判别表达式输出的值,即判断结果的数据类型是BOOLEAN。
IF语句根据条件语句产生的判断结果是TRUE或是FALSE,有条件的选择执行其后的顺序语句。
以上具体应用如源代码所示.
2.2.4电梯控制器的组成
电梯的控制状态包括运行状态、停止状态及等待状态,其中运行状态又包含向上状态和向下状态。
每层楼设有用户请求按钮,用户可以通过本层的请求,对电梯进行控制,使电梯到当前楼层;而在电梯内部,还设有电梯停靠按钮,当用户需要下电梯时,可按下停止按钮,在计数及显示上,当电梯运行停止后,计数4s后,门自动关闭,而显示器也可显示当前电梯所在楼层数。
图2.2.2电梯内部控制结构图
2.3系统设计源程序及程序具体分析
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYTHREEFLIFTIS
PORT(BUTTONCLK:
INSTD_LOGIC;--按键时钟
LIFTCLK:
INSTD_LOGIC;--电梯时钟
RESET:
INSTD_LOGIC;--
F1UPBUTTON:
INSTD_LOGIC;--
F2UPBUTTON:
INSTD_LOGIC;--
F2DNBUTTON:
INSTD_LOGIC;--
F3DNBUTTON:
INSTD_LOGIC;--
FUPLIGHT:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO1);--外部上升请求指示灯
FDNLIGHT:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO1);--外部下降请求指示灯
STOP1BUTTON,STOP2BUTTON,STOP3BUTTON:
INSTD_LOGIC;--内部请求按键
STOPLIGHT:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO1);--内部请求指示灯
POST:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--电梯楼层数
DOORLIGHT:
OUTSTD_LOGIC;--开关
UDSIG:
BUFFERSTD_LOGIC);--升降
ENDTHREEFLIFT;
ARCHITECTUREARTOFTHREEFLIFTIS
TYPELIFT_STATEIS
(STOPON1,DOOROPEN,DOORCLOSE,DOORWAIT1,DOORWAIT2,DOORWAIT3,DOORWAIT4,UP,DOWN,STOP);
SIGNALMYLIFT:
LIFT_STATE;
SIGNALCLEARUP:
STD_LOGIC;--清除上升请求指示灯
SIGNALCLEARDN:
STD_LOGIC;--清除上下降请求指示灯
SIGNALPOS:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALPOSITION:
INTEGERRANGE1TO3;
BEGIN
CTRLIFT:
PROCESS(RESET,LIFTCLK)--控制电梯状态进程
BEGIN
IFRESET='1'THEN--异步信号如果为1时电梯状态
MYLIFT<=STOPON1;
CLEARUP<='0';
CLEARDN<='0';
ELSE—否则,异步信号如果惟0时正常工作状态
IFLIFTCLK'EVENTANDLIFTCLK='1'THEN
CASEMYLIFTIS
WHENSTOPON1=>DOORLIGHT<='0';POSITION<=1;POS<="0001";UDSIG<='0';--电梯位置为1
MYLIFT<=DOORWAIT1;--状态转移到开门等待第1秒状态
--CLEARUP<='1';
--CLEARDN<='1';--电梯处在一层状态时
WHENDOORWAIT1=>MYLIFT<=DOORWAIT2;--电梯处在等待第1秒状态时
CLEARUP<='0';CLEARDN<='0';
WHENDOORWAIT2=>MYLIFT<=DOORWAIT3;--电梯处在等待第2秒状态时
WHENDOORWAIT3=>MYLIFT<=DOORWAIT4;--电梯处在等待第3秒状态时
WHENDOORWAIT4=>DOORLIGHT<='0';--电梯处在等待第4秒状态时
IFUDSIG='0'THEN--UDSIG=0表示上升模式;
IFPOSITION=3THEN--如果电梯在第三层;
IFSTOPLIGHT="000"ANDFUPLIGHT="000"ANDFDNLIGHT="000"THEN--没有任何请求信号;
UDSIG<='1';--UDSIG=1表示下降模式;
MYLIFT<=DOORCLOSE;--电梯转为关门状态;
ELSIFSTOPLIGHT(POSITION)='1'ORFDNLIGHT(POSITION)='1'THEN
UDSIG<='1';MYLIFT<=DOOROPEN;
ELSEUDSIG<='1';
MYLIFT<=DOWN;--电梯转为下降状态;
ENDIF;
ELSIFPOSITION=2THEN--如果电梯在第二层;
IFSTOPLIGHT="000"ANDFUPLIGHT="000"ANDFDNLIGHT="000"THEN--没有任何请求信号;
UDSIG<='0';
MYLIFT<=DOORCLOSE;
ELSIFSTOPLIGHT(POSITION)='1'ORFUPLIGHT(POSITION)='1'
THEN
UDSIG<='0';MYLIFT<=DOOROPEN;
ELSIFSTOPLIGHT(3)='1'ORFDNLIGHT(3)='1'THEN--有3层停站或3层下降请求
UDSIG<='0';--处于上升状态
MYLIFT<=UP;
ELSIFSTOPLIGHT(POSITION)='1'ORFDNLIGHT(POSITION)='1'
THENUDSIG<='1';MYLIFT<=DOOROPEN;
ELSEUDSIG<='1';MYLIFT<=DOWN;
ENDIF;
ELSIFPOSITION=1THEN--处于1层
IFSTOPLIGHT="000"ANDFUPLIGHT="000"ANDFDNLIGHT="000"THEN
UDSIG<='0';--任何请求,电梯处于1层,肯定上升,using置0
MYLIFT<=DOORCLOSE;状态置回关门状态等待升降请求
ELSIFSTOPLIGHT(POSITION)='1'ORFUPLIGHT(POSITION)='1'THEN
UDSIG<='0';MYLIFT<=DOOROPEN;
ELSEUDSIG<='0';MYLIFT<=UP;--否则无论怎么样电梯都得上升
ENDIF;
ELSIFPOSITION=2THEN--如果电梯在第二层
IFSTOPLIGHT="000"ANDFUPLIGHT="000"ANDFDNLIGHT="000"THEN
UDSIG<='1';--没有任何请求信号,电梯仍处于下降模式
MYLIFT<=DOORCLOSE;--状态置回关门状态等待升降请求
ELSIF
STOPLIGHT(POSITION)='1'ORFDNLIGHT(POSITION)='1'
THEN–-如果内部有1层停站请求或者有1层上升请求
UDSIG<='1';
MYLIFT<=DOOROPEN;
ELSIFSTOPLIGHT
(1)='1'ORFUPLIGHT
(1)='1'THEN
UDSIG<='1';MYLIFT<=DOWN;--状态转移到下降状态
ELSIFSTOPLIGHT(POSITION)='1'ORFUPLIGHT(POSITION)='1'THEN
UDSIG<='0';MYLIFT<=DOOROPEN;
ELSEUDSIG<='0';MYLIFT<=UP;--其他情况电梯都得上升
ENDIF;
ELSIFPOSITION=3THEN--如果电梯停在第三层
IFSTOPLIGHT="000"ANDFUPLIGHT="000"ANDFDNLIGHT="000"THEN
--没有任何请求信号,由于电梯处于最高层,所以肯定要下降
UDSIG<='1';
MYLIFT<=DOORCLOSE;
ELSIFSTOPLIGHT(POSITION)='1'ORFDNLIGHT(POSITION)='1'THEN
UDSIG<='1';MYLIFT<=DOOROPEN;
ELSEUDSIG<='1';
MYLIFT<=DOWN;
ENDIF;
ENDIF;
ENDIF;
WHENUP=>--电梯处于上升状态时
POSITION<=POSITION+1;--信号POSITION加1表示上升1层
POS<=POS+1;--电梯处在上升状态时,变量POS加1表示上升一层
IFPOSITION=2AND(STOPLIGHT
(2)='1'ORFUPLIGHT
(2)='1')
--如果即将到达的层不是最高层并且内部有该层停站请求或者该层外部有上升请求
THENMYLIFT<=STOP;--下一状态电梯停止
ELSIFPOSITION<3AND(STOPLIGHT(3)='1'ORFUPLIGHT(3)='1')
THENMYLIFT<=DOORCLOSE;
ELSIFPOSITION<3AND(STOPLIGHT(POSITION)='1'ORFDNLIGHT(POSITION)='1')
THENMYLIFT<=STOP;
ELSIFPOSITION=3AND(STOPLIGHT(POSITION)='1'ORFDNLIGHT(POSITION)='1')
THENMYLIFT<=STOP;
ELSEMYLIFT<=DOORCLOSE;
ENDIF;
WHENDOWN=>POSITION<=POSITION-1;POS<=POS-1;--电梯处在下降的状态时
IFPOSITION>1AND(STOPLIGHT(POSITION)='1'ORFDNLIGHT(POSITION)='1')
THENMYLIFT<=STOP;
ELSIFPOSITION>1AND(STOPLIGHT
(1)='1'ORFUPLIGHT
(1)='1')THEN
--没有任何请求信号,由于电梯处于最高层,所以肯定要下降
MYLIFT<=DOORCLOSE;
ELSIFPOSITION>1AND(STOPLIGHT(POSITION)='1'ORFUPLIGHT(POSITION)='1')
--如果即将到达的层不是1层且内部有该层停站请求或者该层外部有下降请求
THENMYLIFT<=STOP;--下一状态为停止状态
ELSIFPOSITION=1AND(STOPLIGHT(POSITION)='1'ORFUPLIGHT(POSITION)='1')
--如果即将到达的层是1层且内部有该层停站请求或者该层外部有上升请求
THENMYLIFT<=STOP;--下一状态为停止状态
ELSEMYLIFT<=DOORCLOSE;
ENDIF;
WHENSTOP=>--电梯处在停止状态时
MYLIFT<=DOOROPEN;--状态转移到开门状态
WHENDOOROPEN=>--电梯处于开门状态时
DOORLIGHT<='1';
IFUDSIG='0'THEN--如果电梯处于上升模式
IFPOSITION<3AND(STOPLIGHT(POSITION)='1'ORFUPLIGHT(POSITION)='1')THEN
--如果电梯位于2层或2层以上,且内部停站等于1或外部请求下降信号等于1,此时只用--清除上升
--请求指示灯
CLEARUP<='1';
ELSECLEARUP<='1';CLEARDN<='1';--其他情况需同时清除上升和下降指示灯
ENDIF;
ELSIFUDSIG='1'THEN--如果电梯处于下降模式
IFPOSITION>1AND(STOPLIGHT(POSITION)='1'ORFDNLIGHT(POSITION)='1')THEN
--如果电梯位于2层或2层以上,且内部停站等于1或外部请求下降信号等于1,此时只用--清除下降
--请求指示灯
CLEARDN<='1';
ELSECLEARDN<='1';CLEARUP<='1';--其他情况需同时清除上升和下降指示灯
ENDIF;
ENDIF;
MYLIFT<=DOORWAIT1;
WHENDOORCLOSE=>DOORLIGHT<='0';--10电梯处在关门状态时
MYLIFT<=DOORWAIT4;
WHENOTHERS=>MYLIFT<=STOPON1;
ENDCASE;
ENDIF;
ENDIF;
ENDPROCESSCTRLIFT;
POST<=POS;
CTRLIGHT:
PROCESS(RESET,BUTTONCLK)--控制按键信号灯的进程
BEGIN
IFRESET='1'THEN--异步复位信号为1时
STOPLIGHT<="000";FUPLIGHT<="000";FDNLIGHT<="000";
ELSE
IFBUTTONCLK'EVENTANDBUTTONCLK='1'THEN
IFCLEARUP='1'THEN--当清除上升请求指示灯信号为1时
STOPLIGHT(POSITION)<='0';FUPLIGHT(POSITION)<='0';
--该层电梯内部停站信号灯和外部上升请求指示灯灭
ELSE
IFF1UPBUTTON='1'THENFUPLIGHT
(1)<='1';
ELSIFF2UPBUTTON='1'THENFUPLIGHT
(2)<='1';
ENDIF;--如果按键,那么指示灯亮
ENDIF;
IFCLEARDN='1'THEN--当清除下降请求指示灯信号为1时
STOPLIGHT(POSITION)<='0';FDNLIGHT(POSITION)<='0';
ELSE
IFF2DNBUTTON='1'THENFDNLIGHT
(2)<='1';
ELSIFF3DNBUTTON='1'THENFDNLIGHT(3)<='1';
ENDIF;--如果按键,那么指示灯亮
ENDIF;
IFSTOP1BUTTON='1'THENSTOPLIGHT
(1)<='1';
ELSIFSTOP2BUTTON='1'THENSTOPLIGHT
(2)<='1';
ELSIFSTOP3BUTTON='1'THENSTOPLIGHT(3)<='1';
ENDIF;--如果按键,那么指示灯亮
ENDIF;
ENDIF;
ENDPROCESSCTRLIGHT;
ENDART;
2.4程序仿真图及分析
①在第二层电梯外部有上升请求,也就是f2upbuttton信号的一个脉冲,可以看到电梯从一层上升到二层,position信号由1变到2,doorlight信号‘1’表示开门,‘0’表示关门。
当乘客进入电梯以后,在电梯内部要求上升到第三层,也就是stop3button产生一个脉冲,电梯上升到第3层,开门4秒以后关门,停留在第三层,position最后的值为3。
在仿真图中看不到buttonclk,只显示为一条黑色的线,是因为采用了频率较大的时钟。
再看fuplight信号灯,当二层有上升请求的时候,它的值由0变到2。
(注意fuplight和fdnlight是3位的二进制向量,这里的2代表“010”,表示二层有请求;“100”也就是4,表示三层有请求)。
当电梯停留到第二层以后,表明该请求被响应,所以它的值变为0,由于没有下降请求信号,所以fdnlight信号灯的值一盲都为O。
波形图如图3.2.1。
图3.2.1
②有下降请求的情况,它是图4的继续,当电梯停留在第三层的时候,在电梯外第二层有下降请求,这时候fdnlight信号灯由0变为2,说明第二层有下降请求。
电梯下降到第二层,响应了下降请求,所以fdnlight信号灯清0。
这时候,在电梯内部没有停留在哪