电梯控制器课设报告.docx
《电梯控制器课设报告.docx》由会员分享,可在线阅读,更多相关《电梯控制器课设报告.docx(20页珍藏版)》请在冰豆网上搜索。
电梯控制器课设报告
目录
第一章设计的性质与目的2
第二章设计任务与要求3
第三章方案选择与论证4
第四章设计原理5
4.1原理图5
4.2流程图6
4.3结构框图7
4.4程序描述8
第五章部分时序仿真图14
5.1电梯上锁15
5.2电梯报警15
5.3电梯超载16
5.4电梯运行模拟17
5.5电梯开门延时模拟19
5.6电梯紧急开门19
第七章调试过程中出现的问题及解决措施20
第八章设计总结22
8.1设计方案的优缺点比较22
8.2心得体会22
第一章设计的性质与目的
SOPC/EDA综合课程设计是继《EDA技术及应用》和《数字电子技术》课程之后开出的实践环节教学。
目的是训练学生综合运用学过的《数字电子技术》和《EDA技术及应用》的基本知识,培养独立设计比较复杂的数字逻辑系统的能力。
设计工作建立在硬件和软件两个平台的基础上。
硬件平台是可编程逻辑器件,所选的器件可保证在一片芯片上设计出题目要求的数字电路系统。
软件平台是ALTERA公司的QuartusII。
通过课程设计,学生要掌握使用EDA(电子设计自动化)工具设计数字逻辑的方法,包括设计输入、编译、软件仿真、下载和硬件仿真等全过程。
第二章设计任务与要求
1.设计一个4层电梯全自动控制电路。
2.电梯运行锁用一按钮代替(开锁上电),低电平可以运行,高电平不能运行。
3.每层电梯入口处设有上行、下行请求按钮,电梯内设有乘客到达层次的停站要求开关,高电平有效。
4.有电梯所处楼层指示灯和电梯上行、下行状态指示灯。
5.电梯到达某一层时,该层指示灯亮,并一直保持到电梯到达另一层为止。
电梯上行或下行时,相应状态指示灯亮。
6.电梯接收到停站请求后,每层运行2秒,到达停站层,停留2秒后门自动打开,开门指示灯亮,开门6秒后电梯自动关门。
7.能记忆电梯内、外的请求信号,并按照电梯的运行规则依次响应,请求信号保留至响应后撤除。
8.人数超载或超重用一按钮代替,高电平有效,超载时电梯不能运行,并有相应指示。
9.事故报警按钮高电平有效,事故报警不能运行,并有指示灯,信号保留至事故消除。
10.增加手动开门、关门控制,并可调整开、关门时间。
第三章方案选择与论证
电梯共有上升、下降、开门、关门、停止、一楼、二楼、三楼、四楼等几个状态,设计电梯就是要弄清楚这几个状态之间的相互转化关系,可以假设电梯开始时在一楼,如果二三四楼有请求(包括电梯要停在二楼或二楼有上升或下降请求或停在三楼或三楼有上升或下降请求或停在四楼、或四楼有下降请求),则电梯要上升,否则就停在一楼。
当电梯在二楼时,如果三楼或四楼有请求(包括电梯停在三楼或三楼有上升或下降请求或停在四楼或四楼有下降请求),则电梯要上升,如果一楼有请求(包括停在一楼或一楼有上升请求),则电梯下降。
当电梯在三楼时,如果四楼有请求(包括停在四楼或四楼有下降请求),则电梯要上升,如果一楼二楼有请求(包括停在一楼或二楼或一楼二楼有上升请求或二楼有下降请求),则电梯要下降,否则电梯就停在三楼。
当电梯在四楼,如果一二三楼有请求(包括停在一二三楼或一二三楼有上升请求或二三楼有下降请求),则电梯下降,否则电梯停在四楼。
当电梯上锁时,电梯处于非工作状态,所有指示灯全灭,当电梯超载时,超载灯亮,等电梯遇到紧急情况时,报警灯亮。
因为电梯上升或下降是一个过程,这个过程持续两秒,电梯开关门要持续六秒,所以还必须设计一个计数器,计数器和主控制器共同组成电路的原理方案图,这是主控制器和计数器可以不用同一个时钟脉冲驱动,但要处理好两个元件的连接。
当然如果主控制器是用秒脉冲驱动,可以把两个模块集成一个模块。
第四章设计原理
4.1原理图
图4.1电梯控制器的原理图
4.2流程图
图4.2电梯控制器流程图
4.3结构框图
图4.3电梯控制器结构图
4.4程序描述
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitycontrlis
port(clk1,lock,alarm,overweight,It1,It2,It3,It4,up1,up2,up3,down2,down3,down4:
in
std_logic;----lock为电梯锁开关alarm为警报器开关overweight为超重开关It1、It2、It3、It4分别表示电梯停在一二三四楼up1表示一楼有向上请求Up2表示二楼有向上请求up3表示三楼有向上请求down2表示二楼有向下的请求
----down3表示三楼有向下请求down4表示四楼有向下请求
quick,delay,dengwo:
instd_logic;----分别表示快速关门延长一段时间关门不马上关门
led1,led2,led3,led4:
outstd_logic;----一二三四楼层的指示灯
alarmled,overweightled,upled,downled,dooropenled:
outstd_logic);----报警灯超重灯上行状态灯下降状态灯开门灯
endcontrl;
architecturexinofcontrlis
typestate_typeis(start,rukou,up,down,dooropen,stop,wait1,wait2,wait3,wait4,wait5,wait6,wait7,wait8,wait9,upwait1,upwait2,dnwait1,dnwait2);
------start表示初始化状态rukou表示程序执行状态up上行状态down下降状态dooropen开门状态stop停止运行状态
------后面几个状态用来延时
signalstate:
state_type:
=start;
signalstopcun:
std_logic_vector(3downto0);
-----电梯停止楼层存储器
signalupcun,downcun:
std_logic_vector(2downto0);
-----上升请求存储器下降请求存储器
signaldd1,dd2,dd3:
std_logic_vector(3downto0);
-----信号用来交换数据
begin
p1:
process(clk1,lock,alarm,overweight)
variableposition:
integerrange0to4;
begin
iflock='1'thenled1<='0';led2<='0';led3<='0';led4<='0';alarmled<='0';
overweightled<='0';dooropenled<='0';upled<='0';downled<='0';
----电梯上锁
elsifalarm='1'thenalarmled<='1';
-----警报灯亮
elsifoverweight='1'thenoverweightled<='1';
-----超重灯亮
elsifrising_edge(clk1)then
ifup1='1'thenupcun(0)<='1';endif;
ifup2='1'thenupcun
(1)<='1';endif;
ifup3='1'thenupcun
(2)<='1';endif;
ifdown4='1'thendowncun
(2)<='1';endif;
ifdown3='1'thendowncun
(1)<='1';endif;
ifdown2='1'thendowncun(0)<='1';endif;
ifIt1='1'thenstopcun(0)<='1';endif;
ifIt2='1'thenstopcun
(1)<='1';endif;
ifIt3='1'thenstopcun
(2)<='1';endif;
ifIt4='1'thenstopcun(3)<='1';endif;
-----将各种请求存入存储器
dd1<='0'&upcun;
-----将上升请求存储器扩展成四位
dd2<=downcun&'0';
-----将下降请求扩展成四位
dd3<=dd1ordd2orstopcun;
casestateis
whenstart=>
ifdd3="0000"thenstate<=start;
elsifposition=0thenled1<='1';position:
=position+1;state<=rukou;
endif;
-----电梯开始运行,一楼灯亮,如果没有请求,电梯状态不变
whenrukou=>
ifposition=1thenifstopcun(0)='1'orupcun(0)='1'thenstopcun(0)<='0';upcun(0)<='0';state<=dooropen;
elsestate<=up;
endif;
-----电梯在一楼,如果当前层有请求,进入开门状态,同时清除请求,否则电梯上升
elsifposition=2thenifstopcun
(1)='1'orupcun
(1)='1'ordowncun(0)='1'thenstopcun
(1)<='0';upcun
(1)<='0';downcun(0)<='0';state<=dooropen;
elsifdd3>"0011"thenstate<=up;
elsifdd3<"0010"thenstate<=down;
endif;
-----电梯在二楼,如果当前层有请求,进入开门状态,同时将请求清除,如果三四楼有请求,电梯上升,否则下降
elsifposition=3thenifstopcun
(2)='1'orupcun
(2)='1'ordowncun
(1)='1'thenstopcun
(2)<='0';upcun
(2)<='0';downcun
(1)<='0';state<=dooropen;
elsifdd3>"0111"thenstate<=up;
elsifdd3<"0100"thenstate<=down;
endif;
-----电梯在三楼,如果当前层有请求,进入开门状态,同时将请求清除,如果四楼有请求,电梯上升,否则下降
elsifposition=4thenifstopcun(3)='1'ordowncun
(2)='1'thenstopcun(3)<='0';downcun
(2)<='0';state<=dooropen;
elsestate<=down;
endif;
endif;
-----电梯在四楼,如果当前层有请求,进入开门状态,同时将请求清除,否则下降
whenup=>upled<='1';state<=upwait1;
-----上升状态,上行状态灯亮
whenupwait1=>state<=upwait2;
-----运行持续两秒
whenupwait2=>upled<='0';position:
=position+1;
-----到达新的楼层,上行指示灯灭
ifposition=1thenled1<='1';led2<='0';led3<='0';led4<='0';
-----一楼指示灯亮
elsifposition=2thenled2<='1';led1<='0';led3<='0';led4<='0';
-----二楼指示灯亮
elsifposition=3thenled3<='1';led2<='0';led1<='0';led4<='0';
-----三楼指示灯亮
elsifposition=4thenled4<='1';led1<='0';led2<='0';led3<='0';
-----四楼指示灯亮
elseled1<='0';led2<='0';led3<='0';led4<='0';
endif;
ifposition=2anddd3>"0011"andstopcun
(1)='0'andupcun
(1)='0'anddowncun(0)='0'thenstate<=up;
-----如果在二楼且当前层没有请求,电梯继续上升
elsifposition=3anddd3>"0111"andstopcun
(2)='0'andupcun
(2)='0'anddowncun
(1)='0'thenstate<=up;
-----如果在三楼且当前层没有请求,电梯继续上升
elsestate<=dooropen;ifposition=4thenifdowncun
(2)='1'thendowncun
(2)<='0';endif;
ifstopcun(3)='1'thenstopcun(3)<='0';endif;
elsifposition=3thenifdowncun
(1)='1'thendowncun
(1)<='0';endif;
ifupcun
(2)='1'thenupcun
(2)<='0';endif;
ifstopcun
(2)='1'thenstopcun
(2)<='0';endif;
elsifposition=2thenifdowncun(0)='1'thendowncun(0)<='0';endif;
ifupcun
(1)='1'thenupcun
(1)<='0';endif;
ifstopcun
(1)='1'thenstopcun
(1)<='0';endif;
endif;
endif;
-----电梯进入开门状态,且将与所在楼层相关的请求清除
whendown=>downled<='1';state<=dnwait1;
-----下降状态,下降指示灯亮
whendnwait1=>state<=dnwait2;
-----运行持续两秒
whendnwait2=>downled<='0';position:
=position-1;
-----到达新的楼层,下降指示灯灭
ifposition=1thenled1<='1';led2<='0';led3<='0';led4<='0';
elsifposition=2thenled2<='1';led1<='0';led3<='0';led4<='0';
elsifposition=3thenled3<='1';led2<='0';led1<='0';led4<='0';
elsifposition=4thenled4<='1';led2<='0';led3<='0';led1<='0';
elseled1<='0';led2<='0';led3<='0';led4<='0';
endif;
ifposition=3anddd3<"0100"andstopcun
(2)='0'andupcun
(2)='0'anddowncun
(1)='0'
thenstate<=down;
-----电梯在三楼且当前层没有请求,电梯继续下降
elsifposition=2anddd3<"0010"andstopcun
(1)='0'andupcun
(1)='0'anddowncun(0)
='0'
thenstate<=down;
-----电梯在二楼且当前层没有请求,电梯继续下降
elsestate<=dooropen;ifposition=1thenifupcun(0)='1'thenupcun(0)<='0';endif;
ifstopcun(0)='1'thenstopcun(0)<='0';endif;
elsifposition=2thenifupcun
(1)='1'thenupcun
(1)<='0';endif;
ifdowncun(0)='1'thendowncun(0)<='0';endif;
ifstopcun
(1)='1'thenstopcun
(1)<='0';endif;
elsifposition=3thenifupcun
(2)='1'thenupcun
(2)<='0';endif;
ifdowncun
(1)='1'thendowncun
(1)<='0';endif;
ifstopcun
(2)='1'thenstopcun
(2)<='0';endif;
endif;
endif;
-----电梯进入开门状态且将与所在楼层相关的请求清除
whendooropen=>state<=wait1;
whenwait1=>dooropenled<='1';state<=wait2;
-----电梯到达楼层后,停两秒再开门
whenwait2=>ifquick='1'thenstate<=wait7;
-----快速关门,电梯开门后过三秒关门
elsifdelay='1'thenstate<=wait3;-
----延时关门,电梯开门后过九秒关门
elsestate<=wait5;
-----正常情况下电梯开门后过六秒关门
endif;
whenwait3=>state<=wait4;
whenwait4=>state<=wait5;
whenwait5=>state<=wait6;
whenwait6=>state<=wait7;
whenwait7=>state<=wait8;
whenwait8=>state<=wait9;
-----延时过程
whenwait9=>dooropenled<='0';
ifdengwo='1'thenstate<=wait6;
-----不马上关门,门合上后再次打开
elsifdd3>"0000"thenstate<=rukou;
-----请求没有执行完毕,继续执行程序
elsestate<=stop;
-----请求执行完毕,电梯停止运行
endif;
whenstop=>ifposition>1thenstopcun(0)<='1';state<=rukou;
-----如果电梯不是停在一楼,将电梯返回到一楼
elseled1<='0';led2<='0';led3<='0';led4<='0';alarmled<='0';
overweightled<='0';dooropenled<='0';upled<='0';downled<='0';
position:
=0;
-----电梯停止运行,进入上锁状态
endif;
endcase;
endif;
endprocessp1;
endxin;
第五章部分时序仿真图
5.1电梯上锁
电梯上锁,有请求也不执行;
5.2电梯报警
当有紧急情况时,报警灯亮,有请求不会执行;
5.3电梯超载
当电梯超载时,超载警报灯亮,有请求不执行
5.4电梯运行模拟
这个图模拟的是多个请求时,电梯的运行情况。
先是一楼有向上请求想到二楼去同时二楼有向上请求到四楼去,接着四楼有下降请求回到一楼,电梯运行情况是:
电梯在一楼(一楼指示灯led1亮)时开门持续6秒(波形上可以看到开门灯亮),关门后,电梯向上运行(上行指示灯亮2秒),到二楼后(二楼指示灯led2亮),电梯开门(同样开门灯持续亮六秒),接着电梯继续上升,上行指示灯亮2秒,到三楼时,三楼指示灯led3亮,电梯继续向上运行,上行指示灯亮2秒,到达四楼时四楼指示灯亮,同时电梯门打开(开门灯亮6秒),关门后,电梯向下运行(下降指示灯亮2秒),到达三楼时三楼指示灯亮,电梯继续向下运行(下降指示灯亮2秒),到达2楼时二楼指示灯亮,电梯继续向下运行(下降指示灯亮两秒),到达一楼时,电梯门打开(开门灯亮),关门后没有其它请求,电梯停止运行。
四楼有个向下的请求要到三楼去,二楼有个向下的请求要到一楼,电梯运行情况为:
电梯开始时在一楼,一楼指示灯亮,电梯向上运行(上升指示灯亮2秒),到达二楼,二楼指示灯亮,电梯继续向上运行(上升指示灯亮2秒),到达三楼,三楼指示灯亮,电梯仍向上运行(上升指示灯亮2秒),到达四楼,四楼指示灯亮,电梯门打开(开门灯亮6秒),电梯关门后,电梯向下运行(下降指示灯亮2秒),到达三楼(三楼指示灯亮),电梯开门(开门指示灯亮6秒),电梯继续下降(下降指示灯亮2秒),到达二楼(二楼指示灯亮),电梯开门(开门指示灯亮6秒),电梯继续下降(下降指示灯亮2秒),到达一楼,电梯门打开,电梯运行结束。
5.5电梯开门延时模拟
电梯受到一个不马上关门信号(dengwo=’1’),电梯关上的门重新打开,并延长一段时间门。
5.6电梯紧急开门
在这幅波形图上,当第二次开门时有一个快速关门信号(quick=’1’)开门灯亮了四秒就灭了(电梯关门了),当第三次开门时收到一个延时信号(delay=’1’),开门灯亮了8秒才灭。
注释:
由于有的信号名字太长无法全部显示出来,现特意标示(每幅图都一样),信号的名称依次为:
alarmalarmledclk1delaydengwodooropenleddown2down3down4downledIt1It2It3It4led1led2led3led4lockoverweightoverweightledquickup1up2up3upled
第七章调试过程中出现的问题及解决措施
Error:
VHDLsyntaxerroratcontrlvhd(11)neartext“if”:
expecting“end”,or“(”oranidentifier(“if”isareservedkeyword),oraparallelstatement
这通常是警告你你写的程序在11行附近的if在后面没有endif与之呼应。
由于程序中用到判断条件的语句非常多,所以这个错误会经常出现。
Error:
VHDLerrorathaha.vhd(16):
typeofidentifier"haha"doesnotagreewithitsusageasvoidtype
这是在警告你程序16行定义的haha的类型与其使用形式不对应,很可能是haha为变量,