EDA电梯控制器设计.docx
- 文档编号:24650043
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:27
- 大小:224.93KB
EDA电梯控制器设计.docx
《EDA电梯控制器设计.docx》由会员分享,可在线阅读,更多相关《EDA电梯控制器设计.docx(27页珍藏版)》请在冰豆网上搜索。
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)
variablecnt:
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;
ifcnt<2000000then--通过计数2000000获得1s的时钟信号
cnt:
=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
endif;
alarm<=ala;
oveli
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 电梯 控制器 设计