EDA课程设计电梯控制器.docx
《EDA课程设计电梯控制器.docx》由会员分享,可在线阅读,更多相关《EDA课程设计电梯控制器.docx(16页珍藏版)》请在冰豆网上搜索。
EDA课程设计电梯控制器
《电子设计自动化(EDA)技术》课程设计报告
题目:
电梯控制系统设计
姓名:
院系:
专 业:
学号:
指导教师:
完成时间:
年月日
一、课程设计题目、内容与要求…………………………………4
1.1设计内容……………………………………………………4
1.2具体要求……………………………………………………4
二、系统设计………………………………………………………4
2.1设计思路……………………………………………………4
2.2系统原理(包含:
框图等阐述)与设计说明等内容
三、系统实现………………………………………………………5
注:
此部分阐述具体实现,包含主要逻辑单元、模块、源代码等内容
四、系统仿真………………………………………………………12
五、硬件验证(操作)说明…………………………………………15
六、总结……………………………………………………………16
七、参考书目………………………………………………………17
设计题目
电梯控制系统
设计要求
1.电梯入口处设有上下请求开关各1个,电梯内设有乘客到达层次的数字开关。
电梯当前所在的楼层位置用一位数码管显示,用一只发光二极管显示开门/关门状态,用发光二极管显示每层的上下请求状态;2.显示电梯当前所处位置和电梯上行下行及开关门状态;3.电梯到达有停靠站请求的楼层后,电梯门就会自动打开门指示灯亮,开门3秒钟后,电梯门自动关闭并继续运行;4.对电梯开门时间可以提前关门(按关门按钮);5.能记忆电梯内外的所有请求信号,并按照电梯运行的规则次第响应,每个请求信号保留至执行后撤除,如到达某层后,上下方均无请求,则电梯停在该层,中止运行。
设计过程
(包括:
设计方案、上机设计与仿真结果、硬件实验方案及实验结果、收获和体会)
附后
成绩评定
指导教师评语
课程设计等级
一、课程设计题目、内容与要求
1.1课程设计内容-电梯控制系统
采用EDA-VHDL语言建模电梯控制系统,实现电梯的功能需求。
在实验操作平台MAXPLUSII和实验箱(主芯片EPM7096LC68-7)上完成系统的仿真。
1.2电梯系统控制设计要求
(1).每层电梯入口处设有上下请求开关各1个,电梯内设有乘客到达层次的数字开关。
电梯当前所在的楼层位置用一位数码管显示,用一只发光二极管显示开门/关门状态,用发光二极管显示每层的上下请求状态;
(2).显示电梯当前所处位置和电梯上行下行及开门,关门状态;
(3).电梯到达有停靠站请求的楼层后,电梯门就会自动打开门指示灯亮,开门3秒钟后;
(4).电梯门自动关闭(开门指示灯灭)电梯继续运行;
(5).对电梯开门时间可以提前关门(按关门按钮);
(6).能记忆电梯内外的所有请求信号,并按照电梯运行的规则次第响应,每个请求信号保留至执行后撤除,如到达某层后,上下方均无请求,则电梯停在该层,中止运行。
二、系统设计
2.1设计思路
该设计采用方向优先控制方式方案,方向优先控制是指电梯运行到某一楼层时先考虑这一楼层是否有请求:
有,则停止;无,则继续前进。
停下来后再启动时的步骤:
考虑前方——上方或下方是否有请求:
有,则继续前进;无,则停止;检测后方是否有请求,有请求则转向运行,无请求则维持停止状态。
2.2系统原理(包含:
框图等阐述)与设计说明等内容
电梯控制器系统由系统时钟,楼层请求,故障清除,关门中断,超载,提前关门,信号存储,状态存储,中央处理器,电梯升降停,门开关停,楼层显示,请求信号显示,超载故障报警部分组成。
如图1和如图2所示
图2电梯控制系统电路图
三、系统实现
(1)外部数据高速采集模块设计
有效的对外部信号采集、处理要求电梯控制器对外部请求信号的实时、准确采集准确、实时的捕捉楼层到达信号;有防止楼层到达信号、外部请求信号的误判。
(2)信号存储模块
电梯控制器的请求输入信号有18个(电梯外有6个上升请求和6个下降请求的用户输入端口,电梯内有6个请求用户输入端口),由于系统对内、外请求没有设置优先级,各楼层的内、外请求信号被采集后可先进行运算,再存到存储器内。
(3)基于FPGA的中央处理模块
中央数据处理模块是系统的核心,通过对存储的数据(含请求、到达楼层等信号)进行比较、判断以驱动系统状态的流转。
电梯工作过程中共有9种状态:
等待、上升、下降、开门、关门、停止、休眠、超载报警以及故障报警状态。
一般情况下,电梯工作起始点是第一层,起始状态是等待状态,启动条件是收到上升请求。
系统的状态流程图如图3所示:
-
图3系统状态流程图
(4)源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitydiantiis
port(clk:
instd_logic;--时钟信号(频率为2Hz)
full,deng,quick,clr:
instd_logic;--超载、关门中断、提前关门清除报警信号
c_u1,c_u2,c_u3,c_u4,c_u5:
instd_logic;--电梯外人的上升请求信号
c_d2,c_d3,c_d4,c_d5,c_d6:
instd_logic;--电梯外人的下降请求信号
d1,d2,d3,d4,d5,d6:
instd_logic;--电梯内人的请求信号
g1,g2,g3,g4,g5,g6:
instd_logic;--到达楼层信号
door:
outstd_logic_vector(1downto0);--电梯门控制信号
led:
outstd_logic_vector(6downto0);--电梯所在楼层显示
led_c_u:
outstd_logic_vector(5downto0);--电梯外人上升请求信号显示
led_c_d:
outstd_logic_vector(5downto0);--电梯外人下降请求信号显示
led_d:
outstd_logic_vector(5downto0);--电梯内请求信号显示
wahaha:
outstd_logic;--看门狗报警信号
ud,alarm:
outstd_logic;--电梯运动方向显示,超载警告信号
up,down:
outstd_logic);--电机控制信号和电梯运动
enddianti;
architecturebehavofdiantiis
signald11,d22,d33,d44,d55,d66:
std_logic;--电梯内人请求信号寄存信号
signalc_u11,c_u22,c_u33,c_u44,c_u55:
std_logic;--电梯外人上升请求信号寄存信号
signalc_d22,c_d33,c_d44,c_d55,c_d66:
std_logic;--电梯外人下降请求信号寄存信号
signalq:
integerrange0to1;--分频信号
signalq1:
integerrange0to6;--关门延时计数器
signalq2:
integerrange0to9;--看门狗计数器
signaldd,cc_u,cc_d,dd_cc:
std_logic_vector(5downto0);--电梯内外请求信号寄存器
signalopendoor:
std_logic;--开门使能信号
signalupdown:
std_logic;--电梯运动方向信号寄存器
signalen_up,en_dw:
std_logic;--预备上升、预备下降预操作使能信号
begin
process(clk)
begin
ifclk'eventandclk='1'then
ifclr='1'thenq1<=0;q2<=0;wahaha<='0';--清除故障报警
elsiffull='1'thenalarm<='1';q1<=0;--超载报警
ifq1>=3thendoor<="10";
elsedoor<="00";
endif;
elsifq=1thenq<=0;alarm<='0';
ifq2=3thenwahaha<='1';--故障报警
else
ifopendoor='1'thendoor<="10";q1<=0;q2<=0;up<='0';down<='0';--开门操作
elsifen_up='1'then--上升预操作
ifdeng='1'thendoor<="10";q1<=0;q2<=q2+1;--关门中断
elsifquick='1'thenq1<=3;--提前关门
elsifq1=6thendoor<="00";updown<='1';up<='1';--关门完毕,电梯进入上升状态
elsifq1>=3thendoor<="01";q1<=q1+1;--电梯进入关门状态
elseq1<=q1+1;door<="00";--电梯进入等待状态
endif;
elsifen_dw='1'then--下降预操作
ifdeng='1'thendoor<="10";q1<=0;q2<=q2+1;
elsifquick='1'thenq1<=3;
elsifq1=6thendoor<="00";updown<='0';down<='1';
elsifq1>=3thendoor<="01";q1<=q1+1;
elseq1<=q1+1;door<="00";
endif;
endif;
ifg1='1'thenled<="1001111";--电梯到达1楼,数码管显示1
ifd11='1'orc_u11='1'thend11<='0';c_u11<='0';opendoor<='1';
--有当前层的请求,则电梯进入开门状态
elsifdd_cc>"000001"thenen_up<='1';opendoor<='0';
--有上升请求,则电梯进入预备上升状态
elsifdd_cc="000000"thenopendoor<='0';--无请求时,电梯停在1楼待机
endif;
elsifg2='1'thenled<="0010010";--电梯到达2楼,数码管显示2
ifupdown='1'then--电梯前一运动状态位上升
ifd22='1'orc_u22='1'thend22<='0';c_u22<='0';opendoor<='1';
--有当前层的请求,则电梯进入开门状态
elsifdd_cc>"000011"thenen_up<='1';opendoor<='0';
--有上升请求,则电梯进入预备上升状态
elsifdd_cc<"000010"thenen_dw<='1';opendoor<='0';
--有下降请求,则电梯进入预备下降状态
endif;--电梯前一运动状态为下降
elsifd22='1'orc_d22='1'thend22<='0';c_d22<='0';opendoor<='1';
--有当前层的请求,则电梯进入开门状态
elsifdd_cc<"000010"thenen_dw<='1';opendoor<='0';
--有下降请求,则电梯进入预备下降状态
elsifdd_cc>"000011"thenen_up<='1';opendoor<='0';
--有上升请求,则电梯进入预备上升状态
endif;
elsifg3='1'thenled<="0000110";--电梯到达3楼,数码管显示3
ifupdown='1'then
ifd33='1'orc_u33='1'thend33<='0';c_u33<='0';opendoor<='1';
elsifdd_cc>"000111"thenen_up<='1';opendoor<='0';
elsifdd_cc<"000100"thenen_dw<='1';opendoor<='0';
endif;
elsifd33='1'orc_d33='1'thend33<='0';c_d33<='0';opendoor<='1';
elsifdd_cc<"000100"thenen_dw<='1';opendoor<='0';
elsifdd_cc>"000111"thenen_up<='1';opendoor<='0';
endif;
elsifg4='1'thenled<="1001100";--电梯到达4楼,数码管显示4
ifupdown='1'then
ifd44='1'orc_u44='1'thend44<='0';c_u44<='0';opendoor<='1';
elsifdd_cc>"001111"thenen_up<='1';opendoor<='0';
elsifdd_cc<"001000"thenen_dw<='1';opendoor<='0';
endif;
elsifd44='1'orc_d44='1'thend44<='0';c_d44<='0';opendoor<='1';
elsifdd_cc<"001000"thenen_dw<='1';opendoor<='0';
elsifdd_cc>"001111"thenen_up<='1';opendoor<='0';
endif;
elsifg5='1'thenled<="0100100";--电梯到达5楼,数码管显示5
ifupdown='1'then
ifd55='1'orc_u55='1'thend55<='0';c_u55<='0';opendoor<='1';
elsifdd_cc>"011111"thenen_up<='1';opendoor<='0';
elsifdd_cc<"010000"thenen_dw<='1';opendoor<='0';
endif;
elsifd55='1'orc_d55='1'thend55<='0';c_d55<='0';opendoor<='1';
elsifdd_cc<"010000"thenen_dw<='1';opendoor<='0';
elsifdd_cc>"011111"thenen_up<='1';opendoor<='0';
endif;
elsifg6='1'thenled<="0100000";--电梯到达6楼,数码管显示6
ifd66='1'orc_d66='1'thend66<='0';c_d66<='0';opendoor<='1';
elsifdd_cc<"100000"thenen_dw<='1';opendoor<='0';
endif;
elseen_up<='0';en_dw<='0';--电梯进入上升或下降状态
endif;
endif;
elseq<=1;alarm<='0';--清除超载报警
ifd1='1'thend11<=d1;--对电梯内人请求信号进行检测和寄存
elsifd2='1'thend22<=d2;
elsifd3='1'thend33<=d3;
elsifd4='1'thend44<=d4;
elsifd5='1'thend55<=d5;
elsifd6='1'thend66<=d6;
endif;
ifc_u1='1'thenc_u11<=c_u1;--对电梯外人上升请求信号进行检测和寄存
elsifc_u2='1'thenc_u22<=c_u2;
elsifc_u3='1'thenc_u33<=c_u3;
elsifc_u4='1'thenc_u44<=c_u4;
elsifc_u5='1'thenc_u55<=c_u5;
endif;
ifc_d2='1'thenc_d22<=c_d2;--对电梯外人下降请求信号进行检测和寄存
elsifc_d3='1'thenc_d33<=c_d3;
elsifc_d4='1'thenc_d44<=c_d4;
elsifc_d5='1'thenc_d55<=c_d5;
elsifc_d6='1'thenc_d66<=c_d6;
endif;
dd<=d66&d55&d44&d33&d22&d11;--电梯内人请求信号并置
cc_u<='0'&c_u55&c_u44&c_u33&c_u22&c_u11;--电梯外人上升请求信号并置
cc_d<=c_d66&c_d55&c_d44&c_d33&c_d22&'0';--电梯外人下降请求信号并置
dd_cc<=ddorcc_uorcc_d;--电梯内、外人请求信号进行综合
endif;
ud<=updown;--电梯运动状态显示
led_d<=dd;--电梯内人请求信号显示
led_c_u<=cc_u;--电梯外人上升请求信号显示
led_c_d<=cc_d;--电梯外人下降请求信号显示
endif;
endprocess;
endbehav;
四、电梯系统仿真程序仿真
注:
1.电梯停在一楼时,接受到请求信号c_d3、c_d2、c_u4和d6,并把请求信号写入相应的寄存器。
led显示电梯所在楼层;led_d、led-c_u和led_c_d显示用户的请求。
2.电梯经过准备上升状态后,进入上升状态,到达2楼,3楼时,不停继续前进。
3.电梯上升到4楼时,响应请求(c_u4),开门载客;进入预备上升状态。
电梯控制程序仿真局部放大图-1
注:
1.电梯上升到6楼时,响应请求(d_6),开门卸客;进入预备下降状态。
2.电梯下降经过5楼,4楼都不停,到达3楼开门卸客,电梯进入预备下降状态。
电梯控制程序仿真局部放大图-2
注:
1.电梯到达3楼时,响应请求(c_d3),开门载客;进入预备下降状态。
2.电梯在预备下降状态下,电梯应超载(full='1'),发出超载警报alarm;超载信号消失(full='0'),电梯重新进入预备下降状态。
3.电梯接受到提前关门信号quick,电梯跳过关门等待时间。
仿真图中q1从1跳到3;进入关门状态。
4.电梯接受到deng、c_d3和d3电梯重新进入预备下降状态,并且c_d3和d3信号都可以对q2(q2<3时)进行清零处理。
5.当连续的关门中断的次数超过3次时,不认为是出自乘客的需要,而认为是故障,并报警,等技术员处理完故障时,用clr信号才可以清除报警。
电梯控制程序仿真局部放大图-3
注:
1.电梯排除故障后继续运行。
2.电梯执行完所有请求时电梯将停在1楼待机。
电梯控制程序仿真局部放大图-4
五、硬件验证(操作)说明
1.FILE---NEW—TEXTEDTORFILE
2.SAVEAS---COMPILER
3.MAXPLUSII—WAVEFORMEDITOR—SAVEAS
4.ASSIGN—DEVICE
5.ASSIGN—PIN/LOCATION/CHIP
6.MAXPLUSII—SIMULATOR
7.MAXPLUSII--PROGRAMMER
六、课程设计总结
七.参考书目
[1]《电子技术基础模拟部分》(第四版),康华光主编,高教出版社
[2]《数字电子技术基础》(第四版),阎石主编,高教出版社
[3]《PLD与数字系统设计》,李辉主编,西安电子科技大学出版社
[4]《CPLD数字电路设计》,廖裕评,陆瑞强主编,清华大学出版社