基于FPGA 的六层电梯控制系统
完最后一个请求信号后停留在当前层。电梯初始状态为一层关门状态。
综上所述,完成了课题的所有要求,该设计采用模块化编程,升级可实现任意多层电梯系统,具有很强的适应性和实用性。
在本设计中,因为考虑了扩展性,所以在信号定义的时候就使用了二进制的向量,而不是整数。在设计方法上也做了特殊的设计,所以使得扩展性较好。如果要实现n层电梯的控制,首先在端口的地方就要加入所有的按键,而指示灯只要把向量中的6改成n就可以了。同时需要在按键控制进程里加入其他按键触发指示灯的语句。在电梯的升降状态将6改成n,在电梯的开门状态中将2改成n一1,在关门状态,将position=6改成position=n,关键是修改position=6的部分,如果按照每层罗列,将十分烦琐,所以得寻求各层判断条件的共性,解决方法之一就是,新建一个全局向量abc为std_logic_vector(n downto 1),abc的赋值为abc<=(pos=>’1’,other=>'
0’)。在电梯的上升模式时,如果有本层请求信号,则电梯开门;如果没有任何请求信号,则电梯停在当前层;否则用abc和stoplight与fuplight向量比较,如果stoplight或fupligh比abc大,则说明更高层还有上升或者停战请求,电梯需继续上升;如果abc更大,则用abc与fdnlight作比较,如果fdnlight更大,则说明更高层有下降请求,电梯继续上升,否则电梯下降。电梯处在下降模式时同原理分析判定下一状态。这样可以大大简化程序,但要注意的是abc向量作为判断依据,需实时更新,可以单独写一个进程,触发时钟周期要设置得很小。在电梯的上升状态和开门状态中,把6改为n,在信号灯控制进程中加入其它按键触发指示灯的语句。
20
基于FPGA 的六层电梯控制系统
参考文献
[1]潘松,黄继业.EDA技术实用教程.科学出版社,2006
[2]付家才.EDA原理与应用[M].北京:化学工业出版社,2001:15-23
[3]王振红.VHDL数字电路设计应用实践教程[M].北京:机械工业出版社,2003:2-14 [4]黄智伟.FPGA系统设计与实践[M].北京:电子工业出版社,2005:12-24 [5] 梁延东.电梯控制技术[M].北京:中国建筑工业出版社,1997:23-47
21
基于FPGA 的六层电梯控制系统
致谢
在这里对老师在平时授课中的耐心教导表示衷心感谢。
通过此次课程设计,学到了很多之前不了解的知识,也意识到了大学课程对我们今后的学习有很大的帮助。在课程设计中,我虽然碰到了很多困难和问题,到最后还是靠自己的努力与坚持独立的完成了任务。这次设计给我最深的印象就是扩大自己的知识面,学习了很多以前不了解的知识,了解更多与本专业有关的科技信息,与时代共同进步,才能在将来成为有用的科技人才,觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。再次感谢老师的谆谆教诲!
22
基于FPGA 的六层电梯控制系统
附录
源程序: 电梯控制程序: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity sixlift is port(
buttonclk:in std_logic; --按钮时钟信号
liftclk: in std_logic; --电梯时钟信号
reset:in std_logic; --复位键
f1upbutton:in std_logic; --一楼上升按钮 f2upbutton:in std_logic; --二楼上升按钮
f3upbutton:in std_logic; --三楼上升按钮 f4upbutton:in std_logic; --四楼上升按钮 f5upbutton:in std_logic;
f2dnbutton:in std_logic; --二楼下降按钮 f3dnbutton:in std_logic; --三楼下降按钮 f4dnbutton:in std_logic; --四楼下降按钮 f5dnbutton:in std_logic; --五楼下降按钮
f6dnbutton:in std_logic; --六楼下降按钮
fuplight:buffer std_logic_vector(6 downto 1); --上升指示灯
fdnlight:buffer std_logic_vector(6 downto 1); --下降指示灯 stop1button,stop2button,stop3button,
stop4button,
stop5button,
stop6button:in std_logic; --电梯内部按钮
stoplight:buffer std_logic_vector(6 downto 1); --内部停止指示灯
position:buffer integer range 1 to 6; --楼层位置显示
doorlight:out std_logic; --电梯门指示灯 ‘1’ 开 ‘0’关
23
基于FPGA 的六层电梯控制系统
udsig:buffer std_logic ); --‘0’处于上升模式,‘1’处于下降模式 end sixlift;
architecture art of sixlift is type
lift_state
is
(stopon1,dooropen,doorclose,doorwait4,up,down,stop); --电梯所处的7个状态
signal mylift:lift_state; --内部电梯状态信号
signal clearup:std_logic; --上升清除信号 signal cleardn:std_logic; --下降清除信号
signal waitcnt:integer range 0 to 2; --waitcnt为完成四秒延时而设置 begin
controllift:process(reset,liftclk) variable pos:integer range 1 to 6; --楼层位置变量 begin
if reset='1' then mylift<=stopon1; --起始状态 clearup<='0'; --上楼信号清除 cleardn<='0'; --下楼信号清除 pos:=1; --处于一楼 position<=1; --处于一楼 else
if liftclk'event and liftclk='1' then --四秒后门关 case mylift is
when stopon1 => doorlight<='1'; --电梯门开 position<=1; --电梯处于一楼 pos:=1;
mylift<=doorwait4; when doorwait4 => waitcnt<=waitcnt+1; --waitcnt计数够两个电梯时钟脉冲后状态跳转到doorclose,加上中间过程完成延时四秒
24