EDA电梯控制器设计.docx

上传人:b****7 文档编号:8888047 上传时间:2023-02-02 格式:DOCX 页数:24 大小:178.21KB
下载 相关 举报
EDA电梯控制器设计.docx_第1页
第1页 / 共24页
EDA电梯控制器设计.docx_第2页
第2页 / 共24页
EDA电梯控制器设计.docx_第3页
第3页 / 共24页
EDA电梯控制器设计.docx_第4页
第4页 / 共24页
EDA电梯控制器设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

EDA电梯控制器设计.docx

《EDA电梯控制器设计.docx》由会员分享,可在线阅读,更多相关《EDA电梯控制器设计.docx(24页珍藏版)》请在冰豆网上搜索。

EDA电梯控制器设计.docx

EDA电梯控制器设计

EDA技术综合课程

设计

课程:

EDA技术综合课程设计

题目:

电梯控制器

所属院系:

电气工程学院专业班级:

自控1304班

姓名:

王军学号:

1317014092

指导老师:

立众

完成地点:

理工学院

 

 

1.设计任务…………………………………………………………………2

2.可选器材…………………………………………………………………2

3.设计框图…………………………………………………………………2

4.设计思路…………………………………………………………………4

5.引脚分配…………………………………………………………………5

6程序清单…………………………………………………………………9

7.主控模块仿真…………………………………………………………16

8.问题及改进……………………………………………………………17

9.总结及感受……………………………………………………………18

10.参考文献……………………………………………………………19

 

一.[设计任务]

1、设计一个三层的电梯控制器。

2、用数码管显示电梯所在的楼层号,电梯初始化后状态在第一层楼。

3、每层电梯外都有上下楼请求开关,电梯部有到各楼层的请求开关及紧急故障开关;用数码管显示上行或下行状态,用发光二极管显示是否有紧急情况。

4、电梯每秒升(降)一层,电梯到达有停站请求的楼层后,经1秒电梯开门,开门指示灯亮,开门4秒后指示灯灭,关门,电梯继续运行。

5、当电梯被锁定或发生紧急情况后,电梯停止运行,直到解除锁定或紧急故障后才可以从停止时的状态继续运行。

6、当电梯处于上升状态时,只响应比电梯所在位置高的上楼请求信号,直到最后一个上楼请求执行完毕,再进入下降模式;同理,电梯处于下降状态时,只响应比电梯所在位置低的下楼请求信号,直到最后一个下楼请求执行完毕,再进入上升模式。

二.[可选器件]

1.计算机组成/ISP实验箱一台(含电源)

2.电源线一根

FPGA/CPLD下载板一块(或多块,可选)(其中下载版选择以下型号CycloneEP1C6Q240C8)

3.并行口下载电缆一根

4.电压表棒一付

5.实验指导书一份

6.配套集成电路芯片若干

三.[设计框图]

系统主要分为:

主控制模块control,包含状态机,控制电梯的运行及状态转换;

消抖模块unshake,消除开关电路的抖动现象,确保逻辑的正确性;

显示模块display,含译码功能,配合控制器显示电梯的工作状态。

模块框图见图1,总体框图详见图2。

图1各模块框图

图2系统总体框图

四.[设计思路]

1.对于电梯控制逻辑的实现,主要是控制模块control,故下面主要介绍控制模块control的设计思想。

控制模块control有一个进程k1,其中又设置了一个计数变量cnt,围为1~2000000。

计数变量cnt其实是起到分频器的作用,产生了一个1Hz的时钟,在cnt计数2000000次的时间(即1s),运行控制电梯升降、停留的程序,这些部分相当于以1Hz的时钟触发;

而系统主频时钟2MHz作为触发时钟不断检测用户是否有请求输入,或者电梯是否有异常情况。

对于一、二、三层信号,分别由flag1、flag2、flag3和clear1、clear2、clear3两套标志为来控制输入请否有效,是否应该对标志位清零。

2.主要规则是:

当一层(upone、one)、二层(uptwo、downtwo、two)或三层(downthree、three)的输入信号有效时,相应标志位flag1、flag2、flag3置‘1’,表明该层有请求。

当一层(upone、one)、二层(uptwo、downtwo、two)或三层(downthree、three)的输入信号无效时,相应标志位clear1、clear2、clear3置‘1’,表明相应得到达楼层请求已经在上一个时钟沿完成;同时对应的标志位flag1、flag2、flag3置‘1’,表明相应楼层无请求。

updown信号值为‘1’时表明电梯处于上升状态,为‘0’时处于下降状态。

程序有两个信号表示电梯的状态:

一是位置状态,二是运行状态。

position表明电梯的位置状态,是一个取值1~3的整数,分别表示电梯处于第一、二、三层;state表示电梯的运行状态,使枚举数据类型,共10个值,分别是:

--states为电梯所处的各个状态

--up1表示电梯正在从第1层上升

--up2表示电梯正在从第2层上升

--down1表示电梯正在向第1层下降

--down2表示电梯正在向第2层下降

--stop表示电梯停止在某一层上

--dw1表示电梯开门的第一秒

--dw2表示电梯开门的第二秒

--dw3表示电梯开门的第三秒

--dw4表示电梯开门的第四秒,判断电梯的下一个状态

--dw5表示当电梯处于上升或下降状态时,如果没有相应的上升或下降请求信号,则转入

dw5状态,使其不再在上升或下降状态停留,而响应其它信号

程序利用case语句实现这10个状态间的相互转移。

五.[引脚分配]

详见下图

[状态流程图]

1、顶层流程图解

 

2、以下是较具体的状态转化图

 

 

三楼

当前层请求

进入停止状态

下行请求

继续等待

向二层下降状态

六.[程序清单]

消抖模块(程序分两栏排版)

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityunshakeis

port(clk:

instd_logic;--时钟,10HZ;

key:

instd_logic;--开关信号;

keyout:

outstd_logic);--消抖之后的开关信号

end;

architectureaofunshakeis

signalcp:

std_logic;

signaljsp:

integerrange0to3;

begin

process(clk)

begin

if(clk'eventandclk='1')then

ifkey='1'then

ifjsp=3then

jsp<=jsp;

else

jsp<=jsp+1;

endif;

ifjsp=1then

cp<='1';

else

cp<='0';

endif;else

jsp<=0;

endif;

endif;

keyout<=cp;

endprocess;

end;

显示模块(程序分两栏排版)

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

 

entitydisplayis

port(clk:

instd_logic;

light:

inintegerrange1to3;

serout:

outstd_logic_vector(6downto0));

end;

architectureaofdisplayis

signaldisp:

std_logic_vector(6downto0);

begin

process(clk)

begin

if(clk'eventandclk='1')then

iflight=1then

disp<="1001111";

elsiflight=2then

disp<="0010010";

elsiflight=3then

disp<="0000110";

endif;

endif;

endprocess;

serout<=disp;

end;

 

主控模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

--*****************************************************************************

entitycontrolis

port(upone,uptwo,downtwo,downthree:

instd_logic;--电梯外乘客的请求信号

one,two,three:

instd_logic;--电梯乘客的请求上或下至几层楼的信号

reset:

instd_logic;--复位初始化开关

over,emergency,lock:

instd_logic;--超重、紧急停运和上锁信号

clk:

instd_logic;--时钟信2MHz

alarm,ovelight,locklight:

outstd_logic;--故障、超重及锁定提示灯

p:

outintegerrange1to3;--电梯当前位置

lightup,lightdown:

outstd_logic_vector(6downto0);

--lightup显示'u'则电梯在上升模式,

--lightdown显示'd'则电梯在下降模式;

arrive:

outstd_logic);--arrive为'1'时表明电梯到达楼层,并在开门状态

end;

--*****************************************************************************

architecturebehaveofcontrolis

typestatesis(up1,up2,down1,down2,stop,dw1,dw2,dw3,dw4,dw5);

--states为电梯所处的各个状态

--up1表示电梯正在从第1层上升

--up2表示电梯正在从第2层上升

--down1表示电梯正在向第1层下降

--down2表示电梯正在向第2层下降

--stop表示电梯停止在某一层上

--dw1表示电梯开门的第一秒

--dw2表示电梯开门的第二秒

--dw3表示电梯开门的第三秒

--dw4表示电梯开门的第四秒,判断电梯的下一个状态

--dw5表示当电梯处于上升或下降状态时,如果没有相应的上升或下降请求信号,则转入

--此dw5状态,使其不再在上升或下降状态停留,而响应其它信号

signalstate:

states;

signalclear1,clear2,clear3,flag1,flag2,flag3,fl1,fl2,fl3:

std_logic;

--这些都是标志位,控制电梯的状态转换

--flag1、flag2、flag3代表各层相应的请求信号

--clear1、clear2、clear3代表相应层的请求已经完成,可以接收新的任务

signalposition:

integerrange1to3;--电梯的当前停留位置

signallup,ldown:

std_logic_vector(6downto0);--与lightup和lightdown功能相同

signalarr:

std_logic;--与arrive功能相同

signalala,ov,loc:

std_logic;--与alarm,ovlight,locklight功能相同

begin

k1:

process(clk)

variablet:

integerrange1to2000000;

variableupdown:

std_logic;--此变量表明电梯处于上升或下降状态

begin

if(clk'eventandclk='1')then

if(upone='1'orone='1')then--一层有上楼请求

flag1<='1';

elsifclear1='1'then--一层的请求已完成

flag1<='0';--当没有新请求信号则清零

endif;

if(uptwo='1'ordowntwo='1'ortwo='1')then--二层有请求

flag2<='1';

elsifclear2='1'then--二层的请求已完成

flag2<='0';--当没有新请求信号则二层清零

endif;

if(downthree='1'orthree='1')then--三层有请求

flag3<='1';

elsifclear3='1'then--三层的请求已完成

flag3<='0';--当没有新请求信号则三层清零

endif;

if(emergency='1')then

ala<='1';

elsif(over='1')then

ov<='1';

elsif(lock='1')then

loc<='1';

endif;

ift<2000000then--通过计数2000000获得1s的时钟信号

t:

=cnt+1;--计数信号小于20000000则加1

else

ifreset='1'then--复位时,电梯初值设置在一层,状态为stop

position<=1;

state<=stop;

ovelight<='0';--各状态指示灯均灭

locklight<='0';

alarm<='0';

lup<="1111111";

ldown<="1111111";

else

fl1<=flag1;

fl2<=flag2;

fl3<=flag3;

--fl1、fl2、fl3置'1'表示相应楼层有请求信号,并把相应的任务完成信号clear

--置'0',表示有新的任务等待完成

if(fl1='1')then

clear1<='0';

endif;

if(fl2='1')then

clear2<='0';

endif;

if(fl3='1')then

clear3<='0';

endif;

casestateis--状态机描述

whenup1=>-------------up1:

正在从一层上升

iffl2='0'then--若上升期间二层期间无请求,则直接上三层

clear1<='0';

clear3<='0';

state<=up2;

position<=2;

else

state<=stop;

position<=2;

fl2<='0';--完成了对二层请求的响应;

clear2<='1';

endif;

whenup2=>--------------up2:

正在从二层上升

clear1<='0';

clear2<='0';

state<=stop;

position<=3;

ifposition=2then--如果电梯在第二层

position<=3;--那么下一个位置在第三层

fl3<='0';--完成了对第三层请求的相应

clear3<='1';

elsifposition=1then--如果电梯在第一层

position<=2;--那么下一个位置在第二层

fl2<='0';--二层的请求已经完成

clear2<='1';

endif;

whendown1=>--正在向第一层下降

clear2<='0';

clear3<='0';

state<=stop;--下一状态是stop

ifposition=2then--如果电梯在第二层

position<=1;--那么下一个位置在第一层

fl1<='0';--一层的请求已经完成

clear1<='1';

elsifposition=3then

position<=2;

fl2<='0';

clear2<='1';

endif;

whendown2=>--正在向第二层下降

--如果在下降期间,二层没有请求,就直接下到一层

iffl2='0'then

clear1<='0';

clear3<='0';

--下一状态转至down1,电梯将会再下降一层

state<=down1;

position<=2;--电梯的下一个位置在第二层

else

state<=stop;--若下降期间二层有请求,则在二层停下

position<=2;--位置转至二层

fl2<='0';--完成了对二层请求的响应

clear2<='1';

endif;

whenstop=>--在停止状态

if(emergency='1'orover='1')then

state<=stop;

else

state<=dw1;--下一状态转至dw1,电梯会进入开门状态

arr<='1';--arr置'1',表明电梯到达并开门

lup<="1111111";--上升指示灯灭

ldown<="1111111";--下降指示灯灭

endif;

whendw1=>--在dw1状态时,等待1s

state<=dw2;--下一状态转至dw2

whendw2=>

state<=dw3;

whendw3=>

state<=dw4;

whendw4=>

arr<='0';--开门灯灭

ifposition=1then--如果电梯在第一层

updown:

='1';--则进入上升模式

fl1<='0';--一层的任务完成

clear1<='1';

iffl2='1'then--如果二层有请求

state<=up1;--先响应二层的请求,再响应上升一层的请求

arr<='0';--维持灯熄灭状态

lup<="1000001";--上升灯亮,显示字母’U’

elsiffl3='1'then--若三层有请求

state<=up1;

--响应完二层请求信号后,再响应第三层的请求

arr<='0';--开门灯维持熄灭状态

lup<="1000001";--上升灯亮,显示字母’U’

endif;

elsifposition=3then

updown:

='0';--进入下降状态

fl3<='0';--到达三层的任务已完成

clear3<='1';

iffl2='1'then--若二层有请求

state<=down2;

--先响应二层请求,再转入下降一层的状态

arr<='0';

ldown<="1000010";--下降灯亮,显示’d’

elsiffl1='1'then

state<=down2;

--响应完二层请求信号后再响应一层的请求

arr<='0';

ldown<="1000010";

endif;

elsifposition=2then

fl2<='0';--到达二层的任务已经完成

clear2<='1';

ifupdown='1'then

--当电梯处于上升状态,不响应一层的请求

iffl3='1'then

state<=up2;

arr<='0';

lup<="1000001";

else

state<=dw5;

--若三层无请求,就转至dw5状态

endif;

endif;

ifupdown='0'then

--当处于下降状态,不响应三层的请求

iffl1='1'then

state<=down1;

arr<='0';

ldown<="1000010";--下降灯亮,显示’d’

else

state<=dw5;

--若一层无请求,就转至dw5状态

endif;

endif;

endif;

whendw5=>

--只要到了dw5的状态,无论原来处于上升或下降状态,对三层和一层的信号都可相响应

iffl3='1'then

state<=up2;

arr<='0';

lup<="1000001";--上升灯亮,显示字母’U’

elsiffl1='1'then

state<=down1;

arr<='0';

ldown<="1000010";--下降灯亮,显示’d’

endif;

endcase;

cnt:

=1;--进程完成一次全部的状态、条件判断并执行相应操作后,计数信号重置1

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

当前位置:首页 > 高等教育 > 农学

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

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