1、FPGA技术实现四层电梯控制器 电梯控制器一、设计需求说明与功能1设计需求说明 电梯作为高层建筑物的重要交通工具与人们的工作和生活日益紧密联系。FPGA/CPLD作为新一代工业控制器,以其高可靠性和技术先进性,在电梯控制中得到广泛应用,从而使电梯由传统的继电器控制方式发展为计算机控制的一个重要方向,成为当前电梯控制和技术改造的热点之一。FPGA/CPLD是一种专门从事逻辑控制的微型计算机系统。由于FPGA/CPLD具有性能稳定、抗干扰能力强、设计配置灵活等特点。因此在工业控制方面得到了广泛应用。自90年代后期FPGA/CPLD引入我国电梯行业以来,由FPGA/CPLD组成的电梯控制系统被许多电
2、梯制造厂家普遍采用。利用VHDL语言完成一个4层自动升降的电梯的控制电路,控制电路遵循方向优先原则控制电梯完成多层楼的载客服务,同时指示电梯运行情况和电梯内外请求信息。电梯控制系统分为调速部分和逻辑控制部分。调速部分的性能对电梯运行是乘客的舒适感有着重要影响,而逻辑控制部分则是电梯安全可靠运行的关键。为了改善电梯的舒适感和运行的可靠性,现在都改为用FPGA/CPLD来控制电梯的运行,这样大大提高了电梯的性能。2.设计设备使用的软件平台:WindowsXP+ 二、方案设计及实现1.电梯控制器的任务和要求利用VHDL语言完成一个多层自动升降的电梯的控制电路,控制电路遵循方向优先原则控制电梯完成多层
3、楼的载客服务,同时指示电梯运行情况和电梯内外请求信息。(1)设计一个4层电梯全自动控制电路。(2)电梯运行锁用一按钮代替(开锁上电),低电平可以运行,高电平不能运行。(3)每层电梯入口处设有上行、下行请求按钮,电梯内设有乘客到达层次的停站要求开关,高电平有效。(4)有电梯所处楼层指示灯和电梯上行、下行状态指示灯。(5)电梯到达某一层时,该层指示灯亮,并一直保持到电梯到达另一层为止。电梯上行或下行时,相应状态指示灯亮。(6)电梯接收到停站请求后,每层运行2秒,到达停站层,停留2秒后门自动打开,开门指示灯亮,开门6秒后电梯自动关门。(7)能记忆电梯内、外的请求信号,并按照电梯的运行规则依次响应,请
4、求信号保留至响应后撤除。(8)人数超载或超重用一按钮代替,高电平有效,超载时电梯不能运行,并有相应指示。(9)事故报警按钮高电平有效,事故报警不能运行,并有指示灯,信号保留至事故消除。(10)增加手动开门、关门控制,并可调整开、关门时间。2.原理图3. 流程图4.电梯控制器结构图 5.程序描述 -File:control.vhd-Designer:Wu Hailin -Module:control-Description:-Date:2011/05/1-Modify date:2011/05/4LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE
5、.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY contrl IS 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表示三楼有向下请求
6、down4表示四楼有向下请求 quick,delay,dengwo:in std_logic;-分别表示快速关门 延长一段时间关门 不马上关门 led1,led2,led3,led4:out std_logic;-一二三四楼层的指示灯 alarmled,overweightled,upled,downled,dooropenled:out std_logic);-报警灯 超重灯 上行状态灯 下降状态灯 开门灯 end contrl;architecture xin of contrl istype state_type is(start,rukou,up,down,dooropen,stop,
7、wait1,wait2,wait3,wait4,wait5,wait6,wait7,wait8,wait9,upwait1,upwait2,dnwait1,dnwait2);-start表示初始化状态 rukou表示程序执行状态 up上行状态 down下降状态 dooropen开门状态 stop停止运行状态-后面几个状态用来延时signal state:state_type:=start;signal stopcun: std_logic_vector(3 downto 0);-电梯停止楼层存储器signal upcun,downcun: std_logic_vector(2 downto 0
8、);-上升请求存储器 下降请求存储器signal dd1,dd2,dd3: std_logic_vector(3 downto 0);-信号用来交换数据beginp1:process(clk1,lock,alarm,overweight)variable position: integer range 0 to 4;beginif lock=1 then led1=0;led2=0;led3=0;led4=0;alarmled=0;overweightled=0;dooropenled=0;upled=0;downled=0;-电梯上锁elsif alarm=1 then alarmled=1
9、;-警报灯亮elsif overweight=1 then overweightled=1;-超重灯亮elsif rising_edge(clk1) then if up1=1 then upcun(0)=1; end if; if up2=1 then upcun(1)=1; end if; if up3=1 then upcun(2)=1; end if; if down4=1 then downcun(2)=1; end if; if down3=1 then downcun(1)=1; end if; if down2=1 then downcun(0)=1; end if; if I
10、t1=1 then stopcun(0)=1; end if; if It2=1 then stopcun(1)=1; end if; if It3=1 then stopcun(2)=1; end if; if It4=1 then stopcun(3)=1; end if; -将各种请求存入存储器 dd1=0& upcun; -将上升请求存储器扩展成四位 dd2=downcun & 0; -将下降请求扩展成四位 dd3 if dd3=0000 then state=start; elsif position=0 then led1=1;position:=position+1; state
11、 if position=1 then if stopcun(0)=1 or upcun(0)=1 then stopcun(0)=0;upcun(0)=0; state=dooropen; else state=up; end if;-电梯在一楼,如果当前层有请求,进入开门状态,同时清除请求,否则电梯上升 elsif position=2 then if stopcun(1)=1 or upcun(1)=1 or downcun(0)=1 then stopcun(1)=0 ; upcun(1)=0;downcun(0)=0;state0011 then state=up; elsif dd
12、30010 then state=down; end if;-电梯在二楼,如果当前层有请求,进入开门状态,同时将请求清除,如果三四楼有请求,电梯上升,否则下降 elsif position=3 then if stopcun(2)=1 or upcun(2)=1 or downcun(1)=1 then stopcun(2)=0;upcun(2)=0 ;downcun(1)=0; state0111 then state=up; elsif dd30100 then state=down; end if;-电梯在三楼,如果当前层有请求,进入开门状态,同时将请求清除,如果四楼有请求,电梯上升,否
13、则下降 elsif position=4 then if stopcun(3)=1 or downcun(2)=1 then stopcun(3)=0;downcun(2)=0;state=dooropen; else stateupled=1;statestateupled=0;position:=position+1;-到达新的楼层,上行指示灯灭 if position=1 then led1=1;led2=0;led3=0;led4=0;-一楼指示灯亮 elsif position=2 then led2=1;led1=0;led3=0;led4=0;-二楼指示灯亮 elsif posi
14、tion=3 then led3=1;led2=0;led1=0;led4=0;-三楼指示灯亮 elsif position=4 then led4=1;led1=0;led2=0;led3=0;-四楼指示灯亮 else led1=0;led2=0;led3=0;led40011 and stopcun(1)=0 and upcun(1)=0 and downcun(0)=0 then state0111 and stopcun(2)=0 and upcun(2)=0 and downcun(1)=0 then state=up;-如果在三楼且当前层没有请求,电梯继续上升 else state
15、=dooropen;if position=4 then if downcun(2)=1 then downcun(2)=0;end if; if stopcun(3)=1 then stopcun(3)=0;end if; elsif position=3 then if downcun(1)=1 then downcun(1)=0; end if; if upcun(2)=1 then upcun(2)=0; end if; if stopcun(2)=1 then stopcun(2)=0;end if; elsif position=2 then if downcun(0)=1 the
16、n downcun(0)=0; end if; if upcun(1)=1 then upcun(1)=0; end if; if stopcun(1)=1 then stopcun(1)downled=1;statestatedownled=0;position:=position-1;-到达新的楼层,下降指示灯灭 if position=1 then led1=1;led2=0;led3=0;led4=0; elsif position=2 then led2=1;led1=0;led3=0;led4=0; elsif position=3 then led3=1;led2=0;led1=
17、0;led4=0; elsif position=4 then led4=1;led2=0;led3=0;led1=0; else led1=0;led2=0;led3=0;led4=0; end if; if position=3 and dd30100 and stopcun(2)=0 and upcun(2)=0 and downcun(1)=0 then state=down;-电梯在三楼且当前层没有请求,电梯继续下降 elsif position=2 and dd30010 and stopcun(1)=0 and upcun(1)=0 and downcun(0)=0 then s
18、tate=down;-电梯在二楼且当前层没有请求,电梯继续下降 else state=dooropen;if position=1 then if upcun(0)=1 then upcun(0)=0;end if; if stopcun(0)=1 then stopcun(0)=0;end if; elsif position=2 then if upcun(1)=1 then upcun(1)=0; end if; if downcun(0)=1 then downcun(0)=0; end if; if stopcun(1)=1 then stopcun(1)=0;end if; els
19、if position=3 then if upcun(2)=1 then upcun(2)=0;end if; if downcun(1)=1 then downcun(1)=0; end if; if stopcun(2)=1 then stopcun(2)statedooropenled=1; state if quick=1 then state=wait7;-快速关门,电梯开门后过三秒关门 elsif delay=1 then state=wait3;-延时关门,电梯开门后过九秒关门 else statestatestatestatestatestatestate dooropenl
20、ed=0; if dengwo=1 then state0000 then state=rukou;-请求没有执行完毕,继续执行程序 else stateif position1 then stopcun(0)=1; state=rukou;-如果电梯不是停在一楼,将电梯返回到一楼 else led1=0;led2=0;led3=0;led4=0;alarmled=0; overweightled=0;dooropenled=0;upled=0;downled=0; position:=0;-电梯停止运行,进入上锁状态 end if;end case;end if;end process p1
21、;end xin;三 部分仿真波形图:1电梯上锁电梯上锁,有请求也不执行;2 电梯报警当有紧急情况时,报警灯亮,有请求不会执行;3 电梯超载当电梯超载时,超载警报灯亮,有请求不执行4 电梯运行模拟这个图模拟的是多个请求时,电梯的运行情况。先是一楼有向上请求想到二楼去同时二楼有向上请求到四楼去,接着四楼有下降请求回到一楼,电梯运行情况是:电梯在一楼(一楼指示灯led1亮)时开门持续6秒(波形上可以看到开门灯亮),关门后,电梯向上运行(上行指示灯亮2秒),到二楼后(二楼指示灯led2亮),电梯开门(同样开门灯持续亮六秒),接着电梯继续上升,上行指示灯亮2秒,到三楼时,三楼指示灯led3亮,电梯继续
22、向上运行,上行指示灯亮2秒,到达四楼时四楼指示灯亮,同时电梯门打开(开门灯亮6秒),关门后,电梯向下运行(下降指示灯亮2秒),到达三楼时三楼指示灯亮,电梯继续向下运行(下降指示灯亮2秒),到达2楼时二楼指示灯亮,电梯继续向下运行(下降指示灯亮两秒),到达一楼时,电梯门打开(开门灯亮),关门后没有其它请求,电梯停止运行。四楼有个向下的请求要到三楼去,二楼有个向下的请求要到一楼,电梯运行情况为:电梯开始时在一楼,一楼指示灯亮,电梯向上运行(上升指示灯亮2秒),到达二楼,二楼指示灯亮,电梯继续向上运行(上升指示灯亮2秒),到达三楼,三楼指示灯亮,电梯仍向上运行(上升指示灯亮2秒),到达四楼,四楼指示
23、灯亮,电梯门打开(开门灯亮6秒),电梯关门后,电梯向下运行(下降指示灯亮2秒),到达三楼(三楼指示灯亮),电梯开门(开门指示灯亮6秒),电梯继续下降(下降指示灯亮2秒),到达二楼(二楼指示灯亮),电梯开门(开门指示灯亮6秒),电梯继续下降(下降指示灯亮2秒),到达一楼,电梯门打开,电梯运行结束。5电梯开门延时模拟电梯受到一个不马上关门信号(dengwo=1),电梯关上的门重新打开,并延长一段时间门。6电梯紧急开门在这幅波形图上,当第二次开门时有一个快速关门信号(quick=1)开门灯亮了四秒就灭了(电梯关门了),当第三次开门时收到一个延时信号(delay=1),开门灯亮了8秒才灭。注释:由于有
24、的信号名字太长无法全部显示出来,现特意标示(每幅图都一样),信号的名称依次为:alarm alarmled clk1 delay dengwo dooropenled down2 down3 down4 downled It1 It2 It3 It4 led1 led2 led3 led4 lock overweight overweightled quick up1 up2 up3 upled 。系统延时分析总结: 四 总结在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经
25、验,对以后从事集成电路设计工作会有一定的帮助。在应用VHDL的过程中让我真正领会到了其并行运行与其他软件(C语言)顺序执行的差别及其在电路设计上的优越性。用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。俗话说写程序容易,调试程序难,通过这次实践我真正体会到了这句话的深刻含义,尤其是对做电梯的同学来说,体会会更深一些,电梯本身并不复杂,就是那么几个状态,之所以难完全是因为电梯的模块较少,集成度比较高,主程序模块的代码非常长(平均大概是170行左右,高的可达250多行),这就给调试造成了极大的不方便,因为代码少,出现错误的概率也比较小。一旦程序代码较长,逻辑就很难理清,当然如果出现错误还好一点,最关键的是警告,如果警告没处理好,结果很可能就出不来,只能对着一大堆警告在那干着急,大呼“崩溃,悲剧”之类的话,我遇到过很多这种情况,几乎都快绝望了,但是一旦有了结果,那种高兴喜悦之情就会溢于言表,我亲眼目睹很多同学好不容易做出结果后那手舞足蹈的情景,即使内向的人也不例外。我想这次实践不仅使我们学科学知识这么简单,它还使我们明白了很多的道理,例如如何在绝望中寻找希望,阳光总在风雨后等等,我想对每一个同学而言,这番经历都将使其获益终生。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1