欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    《EDA技术》课程设计基于EDA的高层电梯控制器设计.doc

    • 资源ID:2986296       资源大小:82.50KB        全文页数:19页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《EDA技术》课程设计基于EDA的高层电梯控制器设计.doc

    1设计的意义一种以电动机为动力,装有箱状吊舱,用于多层建筑乘人或载运货物的垂直升降机,就是俗称的自动电梯。随着电子技术日新月异的发展,集成电路从20 世纪60年代的小规模到中规模,再到大规模集成电路,伴随着它的高速发展,EDA技术、CPLD 技术也得到充分发展。同时,随着现代社会的物质水平不断提高,越来越多的建筑是其中标志之一,对于高层建筑来说,电梯是必不可少的。除了高层建筑需要电梯外,对于服务和生产部门来说,同样需要各种各样的服务电梯和载物电梯。这使电梯的使用越来越普遍,已从原来只在商业大厦、宾馆使用,过度到在办公室、居民楼等场所使用,并且对电梯功能的要求也不断提高,相应地其控制方式也在不停地发生变化。对于电梯的控制,随着技术的不断发展,微型计算机在电梯控制上的应用日益广泛,现在已进入全微机化控制的时代。电梯的微机化控制主要有以下几种形式:PLC控制,单片机控制,单板机控制,单微机控制,多微机控制,人工智能控制。随着EDA技术的快速发展,EDA已广泛应用于电子设计与控制的各个方面。电梯作为高层建筑物的重要交通工具与人们的工作日益紧密FPGA作为新一代工业控制器,以其高可靠性和技术先进性,在电梯控制中得到广泛应用,从而使电梯由传统的继电器控制方式发展为计算机控制的一个重要方向,成为当前电梯控制和技术改造的热点之一。电梯控制器是控制电梯按顾客要求自动上下的装置。本课程设计文采用VHDL语言来设计实用16层电梯控制器,其代码具有良好的可读性和易理解性,源程序经Quartus II 7.2软件仿真,目标器件选用FPGA器件。通过对16层电梯控制器的设计,可以发现本设计有一定的扩展性,而且可以作为更多层电梯控制器实现的基础。2设计原理2.1 EDA技术介绍EDA技术是20世纪90年代初从计算机辅助设计(Computer Adied Design)、计算机辅助制造(Computer Adied Manufacture)、计算机辅助测试(Computer Adied Testing)和计算机辅助工程(Computer Adied Engineering)的概念发展而来的。随着超大规模集成电路(Very Large Scale Integration)规模和技术复杂度的急剧增长,一块芯片内集成门可达几十万甚至几百万门,并且还在迅速增长,电子系统人工设计已十分困难,必须依靠电子设计自动化技术。EDA技术的基本特征和基本工具总的来说,现代EDA技术的基本特征是采用高级语言描述,具有系统级仿真和综合能力。它主要采用并行工程和“自顶向下”的设计方法,使开发者从一开始就要考虑到产品生成周期的诸多方面,包括质量、成本、开发时间及用户的需求等等,然后从系统设计入手,在顶层进行功能方框图的划分和结构设计,在方框图一级进行仿真、纠错、并用VHDL、Verilog-HDL、ABEL等硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证,然后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。利用EDA技术进行电子系统的设计,具有以下几个特点:用软件的方式设计硬件;用软件方式设计的系统到硬件系统的转换是由相关的开发软件自动完成;设计过程中可用相关软件进行各种仿真;系统可现场编程,在线升级;整个系统可集成在一个芯片上,具有体积小、功耗低及可靠性高的特点。因此,EDA技术是现代电子设计的发展趋势。电子设计自动化(EDA)是一种实现电子系统或电子产品自动化的技术,它与电子技术、微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。2.2系统设计及原理从设计要求中可以看出,分控制器设计相对简单,主控制器是系统的核心部分,也是设计的难点,下面讨论主控制器的设计方法。首先讨论主控制器的设计状态。根据电梯的实际工作情况,可以将主控制器的运行状态分为6种:停止、等待、上升、连续上升、下降和连续下降。电梯开关未打开时,处于停止状态,开关打开后,处于等待状态,之后,响应用户的请求进入上升或下降状态。连续上升状态发生在电梯不在中间层停留的情形,例如,用户在1层进入电梯,直到5层,那么在2、3、4层都处于连续上升状态,连续下降状态同理。这里,状态划分与具体楼层无关,因此,具有很强的通用性。其次考虑输入输出端口,一个电梯开关,供电梯管理员控制电梯,开关无效时,电梯不工作;用户在进入电梯后,可以不必等待5秒,而提前关门,提供close请求服务;用户需要时也可以延迟关门,延迟时间随意,提供delay请求服务;电梯内部有16位按键,供用户输入请求楼层;16个分控制器的上升/下降请求,即2个16位的矢量输入;还有时钟方面,根据电梯的运行速度和等待时间,系统时钟设计为20 Hz。停止stop等待pause连续上升midup连续下降middown下降down上升upswitch=1switch=0ur=0 and dr=0ur=1position=(urr and position)position=(drr and position)position/=(drr and position)rising_edge(clk)dr=1position/=(urr and position)rising_edge(clk)图1 状态转移图输出端口比较简单,一个是开门信号,控制电梯开门和关门,另一个输出当前所在楼层。2.3模块设计与实现2.3.1主控制器模块首先说明一下电梯状态。状态机设置了6个状态,分别是停止、等待、上升、连续上升、下降和连续下降。在结构体ARCHITECTURE和BEGIN之间有如下定义。type statetype is(stop,pause,up,midup,down,middown);signal state:statetype;打开电梯开关后,尚无请求,电梯处于等待状态。如果有用户发出请求,则电梯响应,上升至用户所在楼层(初始电梯在1层)。响应的过程是:判断请求是否符合规则,如果符合,则将请求保存在上升请求寄存器(urr)中,由等待状态转为上升状态,然后启动运行定时器,1秒钟后,到达上一层,如果此层被用户请求,则转入等待状态,自动打开电梯门;否则,转入连续上升状态,将运行计时器清零,然后返回上升状态,重新启动运行定时器,再上升一层,直至到达用户所在楼层。下降的过程同理。在等待状态中,逻辑判断最为复杂。首先是判断下一步状态,是继续上升,继续下降,还是一直等待,抑或从上升转入下降,从下降转入上升,这些都是通过对方向标志位ur、dr的判断得到。其次是开门问题,电梯刚刚到达某一层时,必定是用户准备出梯,或者准备入梯,电梯须自动开门,启动开门计时器,5秒后关门;如果电梯在过去一段时间内处于等待状态,现在,用户发出请求,则必须判断用户的位置,如果用户和电梯在同一层,则须立即开门使用户入梯,否则,直接到达用户所在楼层再开门。电梯内部设有提前关门和延迟关门请求按钮,用户可以根据实际情况,发出请求。这两项功能是通过对开门计时器的计数控制实现的,开门计时器与运行计时器一样,都是带清零端、置位端和使能端的8位计数器。按下提前关门按钮,等于将开门计时器置位,所以计时提前结束,从而实现提前关门的功能;同理,按下延迟开关按钮,等于将使能端置为无效,暂停计时,从而实现延迟关门的功能。在主控制器的VHDL程序中定义了几个信号用于描述电梯运行状态,例如urr(上升请求寄存器)、drr(下降请求寄存器)、ur(上升标志)和dr(下降标志)。opentime和runtime分别是开门计时器和运行计时器的输出。结构体中有6个进程,说明如下:第一个进程对系统时钟分频得到运行计时器时钟;第二个进程对运行计时器时钟分频得到开门计时器时钟;第三个进程是延迟进程,用于检测信号跳变;第四个进程是对上升/下降请求寄存器置位和清零;第五个进程控制电梯运行状态;第六个进程记录电梯位置变化及响应提前、延迟关门请求。2.3.2分控制器模块分控制器设在每层的电梯人口处,作为是检测用户按键,转换为上升/下降请求信号。在请求被执行后,清除相应信号。同时,将电梯当前位置显示给用户。3仿真分析3.1主控制器仿真对主控制器的仿真需要设计一些符合实际情况的假设,比如在外部发出上升请求的乘客,进入电梯内部后一定会按高层的请求按钮;在外部发出下降请求的乘客,进入电梯内部后一定会按低层的请求按钮,而且乘客进入电梯后必定会按键。这些假设都是符合实际情况的。图2 主控制器仿真波形之一如图2所示,仿真的使乘客由1层进入电梯,在电梯内部按键,请求上升至10层。可以看到,初始电梯在1层,收到用户请求后,开门请用户入梯,然后关门并上升到10层,中间不作停留。到达10层后,自动开门,请用户出梯。图3 主控制仿真波形之二如图3所示,仿真的是图2的继续,电梯在10层停留一段时间后,有用户在2层发出请求,电梯下将至2层,开门请用户入梯,然后关门。如图4所示,仿真的是电梯在1层,有2位用户进入,分别请求上升至5层和10层。图中,用户在1层按上升请求按钮,由于电梯也在1层,自动开门,用户入梯。用户在电梯内部按键来选择自己要到达的楼层,假设按键有先后顺序,即不是多用户同一时间按键。上升请求寄存器(urr)保存了用户按键请求,每图4 主控制仿真波形之三次到达用户所请求的楼层后,自动清除对应请求。图5 主控制仿真波形之四如图5所示,仿真的是电梯响应延迟关门。开始时,电梯停留在16层一段时间,有用户在11层发出下降请求,电梯直接下降至11层,到达11层后自动开门,用户而人数较多,难以在5秒内全部进入电梯,于是,用户按延迟关门按钮,等到所有人都进入电梯后,才释放按钮,电梯关门。按键请求到1层,电梯下降至1层,自动开门,用户出梯。3.2分控制器仿真如图6所示,仿真的是一用户在2层发出上升请求信号,另一用户在9层发出下降请求信号。电梯从1层到达2层后停止,用户进入电梯后电梯到达5层后,该用户出梯。然后,电梯继续上升直至9层,让另一用户入梯。图6 分控制仿真波形4设计总结两周的课程设计,使我对EDA有了更多的了解。在编写主控制器程序时,由于程序较为复杂,导致某些地方出现了一些问题,从而影响了仿真波形的准确性,为此我花费了大量的时间去纠正程序的错误。虽然我遇到了很大的困难,但当仿真出最终的波形时,又让我有一种成就感。在进行软件仿真和硬件仿真时,一定要细心,包括软件仿真的信号给定,硬件仿真的引脚锁定。在EDA课程设计的日子里,可以说是苦多于甜,不断地发现问题,不断地思考问题,并解决问题。不过,通过这些学到很多东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能真正达到为我们的生活服务为社会服务的目的。在设计的过程中遇到的问题,反映出来我的许多不足之处,我以后要努力克服缺点,提高自己的实际动手能力和独立思考的能力。总而言之,EDA课程设计的高层电梯控制器还是比较成功的。在设计中遇到了很多问题,但在老师的辛勤的指导下和同学们的帮助以及自己的努力之下,终于都得到了解决,这让我感觉平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。最后我要感谢那些在我遇到问题时是帮助过我的老师和同学们。参考文献1.孟庆海,张洲编.VHDL基础及经典实例开发.西安交通大学出版社,2008年2.杜建国.verilog HDL硬件描述语言.国防工业出版社,2004年3. Volnei A.Pedroni著.VHDL数字电路设计教程.电子工业出版社,2010年4.潘松,黄继业.EDA技术实用教程.科学出版社,2010.6.5.刘玉海.EDA技术课程设计.华中科技大学出版社,2009.5.附录-主控制器-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity maincontroller isport(clk: in std_logic; switch: in std_logic; close: in std_logic; delay: in std_logic; sel,uplift,downlift:in std_logic_vector(16 downto 1); qout: out std_logic_vector(16 downto 1); opendoor:out std_logic);end maincontroller;architecture bhv of maincontroller is component counter is port(clk: in std_logic; preset:in std_logic; clr:in std_logic; en:in std_logic; q:out std_logic_vector(2 downto 0);end component;type statetype is(stop,pause,up,midup,down,middown);signal state:statetype;signal clk4hz:std_logic;signal clk1hz:std_logic;signal ur:std_logic;signal dr:std_logic;signal enrun:std_logic;signal enstop:std_logic;signal enstop1:std_logic;signal clrrun:std_logic;signal clrstop:std_logic;signal urr:std_logic_vector(16 downto 1);signal drr:std_logic_vector(16 downto 1);signal position:std_logic_vector(16 downto 1);signal uplift_d:std_logic_vector(16 downto 1);signal downlift_d:std_logic_vector(16 downto 1);signal sel_d:std_logic_vector(16 downto 1);signal runtime:std_logic_vector(2 downto 0);signal opentime:std_logic_vector(2 downto 0);signal openonce:std_logic;signal voidpreset:std_logic;begin qout <= position; U0:process(clk) variable cnt:integer range 0 to 4; begin if(clk'event and clk='1') then if(cnt = 4) then clk4hz<='1' cnt:=0; else clk4hz<= '0' cnt:= cnt+1; end if; end if;end process;U1:process(clk4hz)variable num:integer range 0 to 3; begin if(clk4hz'event and clk4hz='1') then if(num = 3) then clk1hz<='1' num:= 0; else clk1hz<='0' num:= num + 1; end if; end if;end process;U2:process(switch,clk,uplift,downlift) begin if(clk'event and clk='1') then uplift_d<= uplift; downlift_d<= downlift; sel_d <= sel; end if;end process;U3:process(switch,clk,uplift,downlift) begin if(clk'event and clk='1') then if(state = pause) then drr<= drr and not(position); urr<= urr and not(position); if(uplift/= uplift_d and ur/='1' and position > uplift) then drr <= drr or uplift; elsif(downlift/= downlift_d and ur/='1' and position > downlift) then drr <= drr or downlift; elsif(uplift/= uplift_d and dr/='1' and position < uplift) then urr <= urr or uplift; elsif(downlift/= downlift_d and dr/='1' and position < downlift) then urr <= urr or downlift; elsif(sel/=sel_d) then if(sel < position and ur/='1') then drr<= drr or sel; elsif (sel > position and dr/='1') then urr <= urr or sel; end if; end if; elsif(state = up or state = midup) then if(uplift/= uplift_d and dr/='1' and position < uplift) then urr<= urr or uplift; end if; elsif(state = down or state = middown) then if(downlift/= downlift_d and dr='1' and position > downlift) then drr<= drr or downlift; end if; end if; end if; end process; ur <= '1' when urr/="0000000000000000" else '0' dr <= '1' when drr/="0000000000000000" else '0'U4:process(switch,clk) begin if(switch='0') then state<= stop; opendoor <='0' openonce <='1' elsif(clk'event and clk='1') then case state is when stop => state<= pause; when pause => if(opentime="000" and openonce ='0' and (ur='1' or dr='1') or (uplift/=uplift_d and position = uplift) or (downlift/=downlift_d and position = downlift) then opendoor <='1' clrstop<='0' enstop1<='1' end if; if(opentime="101" or (openonce='1' and (ur='1' or dr='1') then if(ur='1') then state <= up; opendoor <= '0' enstop1<= '0' clrstop<='1' openonce<='0' elsif(dr='1') then state <= down; opendoor <= '0' enstop1<= '0' clrstop<='1' openonce<='0' else state <= pause; opendoor <= '0' enstop1<= '0' clrstop<='1' openonce<='1' end if; end if; when up => if(runtime ="100") then enrun<='0' clrrun<='1' if(position = (urr and position) then state<=pause; else state<= midup; end if; else clrrun<='0' enrun<='1' end if; when midup => state <= up; when down => if(runtime="100") then clrrun<='1' enrun<='0' if(position = (drr and position) then state<= pause; else state<= middown; end if; else clrrun<='0' enrun<='1' end if; when middown => state<= down; end case; end if; end process;U5:process(switch,clk4hz,delay) begin if(switch='0') then position<="0000000000000001" elsif(clk4hz'event and clk4hz='1') then enstop<= not(delay) and enstop1; if(runtime="001") then if(state= up) then position<= position(15 downto 1) &'0' elsif(state = down) then position<='0' & position(16 downto 2); end if; end if; end if; end process; voidpreset <='0' run_timer: counter port map (clk=>clk4hz,preset=>voidpreset,clr=>clrrun,en=>enrun,q=>runtime); door_timer: counter port map(clk=> clk1hz,preset=>close,clr=>clrstop,en=>enstop,q=>opentime);end bhv;-计数器-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity counter isport ( clk: in std_logic; preset: in std_logic; clr: in std_logic; en: in std_logic; q: out std_logic_vector( 2 downto 0);end;architecture bhv of counter issignal temp: std_logic_vector( 2 downto 0);begin q<=temp;process( clk,preset,clr,en)begin if clr='1' then temp<="000" elsif rising_edge( clk) then if preset ='1' then temp<="101" elsif en='1' then if temp="101" then temp<=temp; else temp<=temp+'1' end if; end if; end if;end process;end;-分控制器程序-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity subcontroller isport(clk:in std_logic;switch:in std_logic;qin:in std_logic_vector(16 downto 1);opendoor:in std_logic;upkey:in std_logic;downkey:in std_logic;ur:out std_logic;dr:out std_logic;disp0:out std_logic_vector(3 downto 0);disp1:out std_logic_vector(3 downto 0);end subcontroller;architecture bhv of subcontroller isconstant id:std_logic_vector(16 downto 1):="0000000000001000"signal upkey_d:std_logic;signal downkey_d:std_logic;signal opendoor1:std_logic; signal opendoor2:std_logic;signal opendoor_r:std_logic; signal ur_r:std_logic; signal dr_r:std_logic;signal disp:std_logic_vector(7 downto 0);beginprocess(clk)beginif rising_edge(clk) thenupkey_d<=upkey;downkey_d<=downkey;opendoor2<=opendoor1;opendoor1<=opendoor;end if;end process;opendoor_r<=opendoor1 and not(opendoor2);process(switch,clk)beginif switch='0' thenur_r<='0'dr_r<='0'elsif rising_edge(clk) thenif opendoor_r='1' and qin=id thenur_r<='0'dr_r<='0'elsif upkey='1' and upkey_d='0' thenur_r<='1'elsif downkey='1' and downkey_d='0' thendr_r<='1'end if;end if;end process;ur<=ur_r;dr<=dr_r;with qin selectdisp<="00000001"when"0000000000000001", "00000010"when"0000000000000010", "00000011"when"0000000000000100", "00000100"when"0000000000001000", "00000101"when"0000000000010000", "00000110"when"0000000000100000", "00000111"when"0000000001000000", "00001000"when"0000000010000000", "00001001"when"0000000100000000", "00010000"when"0000001000000000", "00010001"when"0000010000000000", "00010010"when"0000100000000000", "00010011"when"0001000000000000", "00010100"when"0010000000000000", "00010101"when"0100000000000000", "00010110"when"1000000000000000", "00000000"when others;disp0<=disp(3 downto 0);disp1<=disp(7 downto 4);end bhv;

    注意事项

    本文(《EDA技术》课程设计基于EDA的高层电梯控制器设计.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开