EDA电梯控制器课程设计报告.doc_第1页
EDA电梯控制器课程设计报告.doc_第2页
EDA电梯控制器课程设计报告.doc_第3页
EDA电梯控制器课程设计报告.doc_第4页
EDA电梯控制器课程设计报告.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沈阳理工大学课程设计专用纸 成 绩 评 定 表学生姓名田刚林班级学号1003030426专 业电子信息工程课程设计题目电梯控制器评语组长签字:成绩日期 20 年 月 日课程设计任务书学 院信息科学与工程学院专 业电子信息工程学生姓名田刚林班级学号1003030426课程设计题目 电梯控制器实践教学要求与任务: 利用EDA设计方法设计电梯控制器,设计平台采用MAXPLUSII或QUARTUS,设计语言采用VHDL,具体功能如下(1) 每层电梯入口处设有上下请求开关(2) 设有电梯所处位置指示装置及电梯运行模式(上升或下降)指示装置(3) 电梯到达有停站请求的楼层后,经过1S电梯门打开,开门指示灯亮,开门4S后,电梯门关闭(开门指示灯灭),电梯继续运行,并能响应提前关门延时关门.(4)能记忆电梯内外的所有请求信号,并按照电梯运行规则次序响应,每个请求信号保留至执行后消除。(5)电梯初始状态为一层开门.(6)具有超载报警和故障报警的功能.工作计划与进度安排:课程设计时间为10天(2周) 1、调研、查资料1天。 2、总体方案设计2天。 3、代码设计与调试5天。 4、撰写报告1天。 5、验收1天。指导教师: 201 年 月 日专业负责人:201 年 月 日学院教学副院长:201 年 月 日 摘要随着EDA技术发展和应用领域的扩大与深入,EDA技术在电子信息、通讯、自动控制及计算机应用等领域的重要性突出。随着技术市场与人才市场对EDA的需求不断提高,产品的市场需求和技术市场的要求也必然会反映到教学领域和科研领域中来。因此学好EDA技术对我们有很大的益处。电梯行业也随着科技的发展,不断地出现在人们生活的各个场所,因此,对电梯控制器的设计是一个很实用的例子,对我们掌握EDA技术的应用也有很大的帮助。 关键词:EDA技术 电子信息 通信 自动控制 目录1、 设计要求概述.1 1.1 设计要求.1 1.2 总体设计思路.1 1.3 具体设计思路.2 2、功能模块整体结构设计.2 2.1 电梯控制器功能.2 2.2 电梯控制器设计.3 3、各模块详细设计.3 3.1底层模块设计.3 3.2 顶层模块设计.64、 逻辑仿真与时序仿真的实现.12 4.1 底层设计模块的方针及参数设置.12 4.2 电梯分层控制模块的仿真及参数设置.13 4.3电梯主控制器仿真波形.155、设计结论.15 5.1 设计功能实现情况.15 5.2 设计心得.16 6、参考文献 .1741 电梯控制器的设计要求与设计思路 1.1 设计要求十层电梯控制器的功能电梯控制器是控制电梯按顾客要求自动上下的装置。设计要求如下:(1)每层电梯入口处设有上下请求开关,电梯内设有顾客到达层次的停站请求开关。(2)设有电梯入口处位置指示装置及电梯运行模式(上升或下降)指示装置。(3)电梯每秒升(降)一层楼(4)电梯到达有停站请求的楼层,经过1秒电梯门打开,开门指示灯亮,开门4秒后,电梯门关闭(开门指示灯灭),电梯继续进行,直至执行完最后一个请求信号后停留在当前层。(5)能记忆电梯内外所有请求,并按照电梯运行规则按顺序响应,每个请求信号保留至执行后消除。(6)电梯运行规则当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕;如果高层有下楼请求,则直接升到有下楼请求的最高楼层,然后进入下降模式。当电梯处于下降模式时则与上升模式相反,只响应比电梯所在位置低的下楼请求信号,由下而下逐个执行,直到最后一个下楼请求执行完毕;如果低层有上楼请求,则直接降到有上楼请求的最低楼层,然后进入上升模式。(7)电梯初始状态为一层开门状态 1.2 总体设计思路实验模拟生活中电梯运动控制,电梯总共十层,最简单的控制思想如下:(1)采集用户呼叫楼层,并放入相应的记忆单元中。(2)不考虑电梯轿厢所在楼层。若有用户呼叫,电梯上行直到达到用户呼叫最大层,再下行直到到达最低层,由此构成一次行程。(3)每完成一次行程,检测是否所用用户呼叫均已响应完毕。如果没有,电梯继续运行,直到响应完所有用户呼叫。否则,电梯停止运行。其中用户请求包括外部请求和内部请求。有外部升降请求信号需点亮相应的外部请求指示灯,内部升降请求信号同外呼。(4)根据电梯所在楼层,七段数码管显示楼层数。(5)根据用户运行方向,点亮相应升降指示灯。(6)当电梯运行到有相应外部呼叫或内部呼叫楼层时,电梯停止运行,灭掉相应的呼叫显示灯,电梯开关门后,继续运行。 1.3 具体设计思路电梯控制可以通过多种方法进行设计,其中采用状态机来实现,思路比较清晰。可以将电梯等待的每秒钟以及开门,关门都看成一个独立的状态。由于电梯又是每秒上升或下降一层,所以就可以通过一个统一的一秒为周期的时钟来触发状态机。根据电梯的实际工作情况,可以把状态机设置10个状态,分别是“电梯停留在1层”,“开门”,“关门”,“开门等待第一秒”,“开门等待第二秒”,“开门等待第三秒”,“开门等待第四秒”,“上升”,“下降”和“停止”状态。各个状态之间的转换条件可以由上面的设计要求所决定。2. 功能模块整体结构设计 2.1 电梯控制器功能本电梯控制器分为主控制器和分控制器。主控制器是电梯内部的控制器,每个楼层有一个分控制器。主控制器的功能:(1)完成10个楼层多用户的载客服务控制。(2)电梯运行时显示电梯的运行方向和所在的楼层。(3)当电梯到达选择的楼层时,电梯自动开门。(4)具有提前关电梯门和延时关电梯门的功能。(5)响应分控制器的有效请求,如果到达有请求的楼层,电梯自动开门。分控制器的功能:(1)显示电梯的运行状态和所在的楼层。(2)显示乘客的上升和下降请求。分控制器的有效请求原则:(1)电梯处于等待状态时,上升和下降请求都响应。(2)电梯处于上升状态时,有上升请求的分控制器所在楼层数大于电梯所在的楼层数。(3)电梯处于下降状态时,有下降请求的分控制器所在楼层数小于电梯所在的楼层数。2.2 电梯控制器设计控制器的功能模块如图2.1所示,包括主控制器、分控制器、楼层选择器、状态显示器、译码器和楼层显示器。乘客在电梯中选择所要到达的楼层,通过主控制器的处理,电梯开始运行,状态显示器显示电梯的运行状态,电梯所在的楼层数通过译码器译码从而在楼层显示器中显示。分控制器把有效的请求传给主控的楼层数。由于分控制器相对简单很多,所以主控制器是核心部分。状态显示器主控制器分控制器译码器电梯位置显示器楼层选择器图2.1 控制器的功能模块图3. 各模块详细设计 3.1底层模块设计及参数设置电梯控制计时模块的源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity counter isport(clk,reset,clr,en:in std_logic; q:out integer range 0 to 8);end;architecture art of counter issignal temp:integer range 0 to 8;beginprocess(clk,reset,clr,en)beginif(clr=1)then temp=0;elsif(rising_edge(clk)then if(reset=1)then temp=5; elsif(en=1)then if temp=5 then temp=temp; else temp=temp+1; end if; end if; end if; end process; q=temp;end art;电梯每层的分控制器源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity layercontrol isport(clk,switch,upkey,downkey,opendoor:in std_logic;qin: in std_logic_vector(10 downto 1);ur,dr:out std_logic;disp1:out std_logic_vector(3 downto 0);end;architecture art of layercontrol isconstant id:std_logic_vector(10 downto 1):=0000001000;signal upkey_data:std_logic;signal downkey_data:std_logic;signal opendoor1:std_logic;signal opendoor2:std_logic;signal req_opendoor:std_logic;signal req_upr:std_logic;signal req_downr:std_logic;signal disp:std_logic_vector(3 downto 0);beginprocess(clk)begin if rising_edge(clk)thenupkey_data=upkey; downkey_data=downkey;opendoor2=opendoor1;opendoor1=opendoor; end if;end process;req_opendoor=(opendoor1 and not(opendoor2);process(switch,clk)begin if(switch=0)thenreq_upr=0;req_downr=0; elsif(rising_edge(clk)then if(req_opendoor=1 and qin=id)then req_upr=0; req_downr=0; elsif(upkey=1 and upkey_data=0)then req_upr=1; elsif(downkey=1 and downkey_data=0)then req_downr=1; end if; end if; end process;ur=req_upr;dr=req_downr; with qin select disp=0001 when 0000000001, 0010 when 0000000010, 0011 when 0000000100, 0100 when 0000001000, 0101 when 0000010000, 0110 when 0000100000, 0111 when 0001000000, 1000 when 0010000000, 1001 when 0100000000, 1010 when 1000000000, 0000 when others;disp1=disp;end art;3.2顶层模块设计10层全自动电梯控制器顶层模块源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity elevator10 is port(clk:in std_logic; -时钟信号 switch:in std_logic; -电梯电源开关,高电平时电梯正常工作 close:in std_logic; -强制关门信号,高电平时电梯门立即关闭delay:in std_logic; -延时信号sel:in std_logic_vector(10 downto 1); -楼层选择信号 uplift:in std_logic_vector(10 downto 1); -电梯上升请求输入信号 downlift:in std_logic_vector(10 downto 1); -电梯下降请求输入信号 qout:out std_logic_vector(10 downto 1); -电梯状态显示输出信号 opendoor:out std_logic); -强制开门信号end;architecture art of elevator10 iscomponent counterport(clk,reset,clr,en:in std_logic; q:out integer range 0 to 8);end component;type state_type is(up,m_up,down,m_down,stop,pause);signal state:state_type; -电梯的各种状态signal clk1:std_logic; -1Hz时钟信号signal clk4:std_logic; -4Hz时钟信号signal req_up:std_logic; -上升请求信号signal req_down:std_logic; -下降请求信号signal runen:std_logic; -电梯运行使能signal runclr:std_logic; -电梯运行复位signal stopen0:std_logic; -电梯停止使能signal stopen1:std_logic;signal stopclr:std_logic; -电梯停止复位signal req_upr:std_logic_vector(10 downto 1); -上升请求寄存器信号signal req_downr:std_logic_vector(10 downto 1); -下降请求寄存器信号signal position:std_logic_vector(10 downto 1); -电梯当前位置信号signal uplift_data:std_logic_vector(10 downto 1); -上升楼层数据显示信号signal downlift_data:std_logic_vector(10 downto 1); -下降楼层数据显示信号signal sel_data:std_logic_vector(10 downto 1); -选择楼层数据显示信号signal runtime: integer range 0 to 8; -电梯运行时间signal opentime:integer range 0 to 8; -电梯开门时间signal openagain:std_logic; -电梯再次开门信号signal voidreset:std_logic; -电梯超载复位信号beginqout=position;p0:process(clk) variable cnt0:integer range 0 to 4; begin if rising_edge(clk)then if cnt0=4 then clk4=1;cnt0:=0; else clk4=0;cnt0:=cnt0+1; end if; end if;end process;p1:process(clk4) variable cnt1:integer range 0 to 3; begin if rising_edge(clk4)then if cnt1=3 then clk1=1;cnt1:=0; else clk1=0;cnt1:=cnt1+1; end if; end if;end process;p2:process(switch,clk,uplift,downlift) begin if rising_edge(clk)then uplift_data=uplift; downlift_data=downlift; sel_data=sel; if state=pause then req_upr=req_upr and not(position); req_downruplift)then req_downrdownlift)then req_downr=(req_downr or downlift); elsif(uplift/=uplift_data and req_down/=1 and positionuplift)then req_upr=(req_upr or uplift); elsif(downlift/=downlift_data and req_down/=1 and positiondownlift)then req_upr=(req_upr or downlift); elsif(sel/=sel_data)then if(selposition and req_up/=1)then req_downrposition and req_down/=1)then req_upr=(req_upr or sel); end if; end if; elsif(state=up or state=m_up)then if(uplift/=uplift_data and req_down/=1 and positionuplift)then req_uprdownlift)then req_downr=(req_downr or downlift); end if; end if; end if;end process; req_up=1 when req_upr/=0000000000 else 0; req_down=1 when req_downr/=0000000000else 0;p3:process(switch,clk) begin if(switch=0)then state=stop;opendoor=0;openagainstate if(opentime=0 and openagain=0 and (req_up=1or req_down=1) or(uplift/=uplift_data and position=uplift) or(downlift/=downlift_data and position=downlift)then opendoor=1;stopclr=0;stopen1=1; end if; if(opentime=3 or (openagain=1 and (req_up=1 or req_down=1)then if(req_up=1)then state=up;opendoor=0;stopen1=0;stopclr=1;openagain=0; elsif(req_down=1)then state=down;opendoor=0;stopen1=0;stopclr=1;openagain=0; else state=pause;opendoor=0;stopen1=0;stopclr=1;openagain if(runtime=4)then runen=0;runclr=1; if(position=(req_upr and position)then state=pause; else state=m_up; end if; else runclr=0;runen state if(runtime=4)then runen=0;runclr=1; if(position=(req_downr and position)then state=pause; else state=m_down; end if; else runclr=0;runenstate=down; end case; end if;end process;p4:process(switch,clk4,delay) begin if(switch=0)then position=0000000001; -电梯电源低电平时,电梯停在第一层 elsif(rising_edge(clk4)then stopen0=(not(delay)and stopen1); if(runtime=3) then if(state=up)then position=(position(9 downto 1)&0); elsif(state=down)thenposition=(0&position(10 downto 2); end if; end if; end if;end process;voidresetclk4,reset=voidreset,clr=runclr,en=runen,q=runtime);door_time:counter port

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论