收藏 分销(赏)

EDA电梯控制器设计--EDA技术综合课程设计.doc

上传人:胜**** 文档编号:2938224 上传时间:2024-06-11 格式:DOC 页数:20 大小:289KB
下载 相关 举报
EDA电梯控制器设计--EDA技术综合课程设计.doc_第1页
第1页 / 共20页
EDA电梯控制器设计--EDA技术综合课程设计.doc_第2页
第2页 / 共20页
EDA电梯控制器设计--EDA技术综合课程设计.doc_第3页
第3页 / 共20页
EDA电梯控制器设计--EDA技术综合课程设计.doc_第4页
第4页 / 共20页
EDA电梯控制器设计--EDA技术综合课程设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、 EDA技术综合课程设 计 课 程: EDA技术综合课程设计 题 目: 电梯控制器 所属院系:电气工程学院 专业班级:自控1304班 姓 名: 王军 学 号:1317014092 指导老师: 张立众 完成地点: 陕西理工学院 目录1.设计任务 22.可选器材 23.设计框图 24. 设计思路 45. 引脚分配 56程序清单 97.主控模块仿真 168.问题及改进 179.总结及感受 1810.参考文献 19一.设计任务1、 设计一个三层的电梯控制器。2、 用数码管显示电梯所在的楼层号,电梯初始化后状态在第一层楼。3、 每层电梯外都有上下楼请求开关,电梯内部有到各楼层的请求开关及紧急故障开关;用

2、数码管显示上行或下行状态,用发光二极管显示是否有紧急情况。4、 电梯每秒升(降)一层,电梯到达有停站请求的楼层后,经1秒电梯开门,开门指示灯亮,开门4秒后指示灯灭,关门,电梯继续运行。5、 当电梯被锁定或发生紧急情况后,电梯停止运行,直到解除锁定或紧急故障后才可以从停止时的状态继续运行。6、 当电梯处于上升状态时,只响应比电梯所在位置高的上楼请求信号,直到最后一个上楼请求执行完毕,再进入下降模式;同理,电梯处于下降状态时,只响应比电梯所在位置低的下楼请求信号,直到最后一个下楼请求执行完毕,再进入上升模式。二.可选器件1. 计算机组成/ISP实验箱一台(含电源)2. 电源线一根FPGA/CPLD

3、下载板一块(或多块,可选)(其中下载版选择以下型号Cyclone EP1C6Q240C8)3. 并行口下载电缆一根4. 电压表棒一付5. 实验指导书一份6. 配套集成电路芯片若干 三.设计框图系统主要分为:主控制模块control,包含状态机,控制电梯的运行及状态转换;消抖模块unshake,消除开关电路的抖动现象,确保逻辑的正确性;显示模块display,内含译码功能,配合控制器显示电梯的工作状态。模块框图见图1,总体框图详见图2。 图1 各模块框图 图2 系统总体框图四.设计思路1.对于电梯控制逻辑的实现,主要是控制模块control,故下面主要介绍控制模块control的设计思想。 控制

4、模块control有一个进程k1,其中又设置了一个计数变量cnt,范围为12000000。计数变量cnt其实是起到分频器的作用,产生了一个1Hz的时钟,在cnt计数2000000次的时间内(即1s),运行控制电梯升降、停留的程序,这些部分相当于以1Hz的时钟触发; 而系统主频时钟2MHz作为触发时钟不断检测用户是否有请求输入,或者电梯是否有异常情况。对于一、二、三层信号,分别由flag1、flag2、flag3和clear1、clear2、clear3两套标志为来控制输入请求是否有效,是否应该对标志位清零。2.主要规则是: 当一层(upone、one)、二层(uptwo、downtwo、two

5、)或三层(downthree、three)的输入信号有效时,相应标志位flag1、flag2、flag3置1,表明该层有请求。 当一层(upone、one)、二层(uptwo、downtwo、two)或三层(downthree、three)的输入信号无效时,相应标志位clear1、clear2、clear3置1,表明相应得到达楼层请求已经在上一个时钟沿完成;同时对应的标志位flag1、flag2、flag3置1,表明相应楼层无请求。 updown信号值为 1时表明电梯处于上升状态,为0时处于下降状态。 程序有两个信号表示电梯的状态:一是位置状态,二是运行状态。position表明电梯的位置状态

6、,是一个取值13的整数 ,分别表示电梯处于第一、二、三层;state表示电梯的运行状态,使枚举数据类型,共10个值,分别是:-states为电梯所处的各个状态-up1表示电梯正在从第1层上升-up2表示电梯正在从第2层上升-down1表示电梯正在向第1层下降-down2表示电梯正在向第2层下降-stop表示电梯停止在某一层上-dw1表示电梯开门的第一秒-dw2表示电梯开门的第二秒-dw3表示电梯开门的第三秒-dw4表示电梯开门的第四秒,判断电梯的下一个状态-dw5表示当电梯处于上升或下降状态时,如果没有相应的上升或下降请求信号,则转入 dw5状态,使其不再在上升或下降状态停留,而响应其它信号程

7、序利用case语句实现这10个状态间的相互转移。五.引脚分配详见下图状态流程图1、顶层流程图解超载报警是是否否故障报警从二层上行状态停止状态从一层上行状态向一层下降状态判断当前楼层和运动状态初始化,电梯停在一楼清除故障警报是否是否存在故障清除故障是否超载综合所有指令,判断下一运动状态具体判断条件见下面每层楼框图。开锁向二层下降状态开门前3秒(空闲状态)开门第4秒(判断状态)空闲响应状态2、以下是较具体的状态转化图一楼当前层请求进入停止状态上行请求无有继续等待从一层上升状态有无进入停止状态向一层下降状态从二层上升状态二楼当前层请求下行请求无有继续等待有无前一状态为上升前一状态为下降上行请求有停止

8、状态当前层请求从二层上升状态无有上行请求有无向一层下降状态有下行请求无当前层门外上行请求当前层门外下行请求有有无无三楼当前层请求进入停止状态下行请求无有继续等待向二层下降状态有无六.程序清单消抖模块(程序分两栏排版)20library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity unshake is port(clk:in std_logic; -时钟,10HZ; key:in std_logic; -开关信号; keyout:o

9、ut std_logic); -消抖之后的开关信号end;architecture a of unshake is signal cp :std_logic;signal jsp:integer range 0 to 3;beginprocess(clk)beginif(clkevent and clk=1)thenif key=1 thenif jsp=3 thenjsp=jsp;elsejsp=jsp+1;end if;if jsp=1 thencp=1;elsecp=0;end if; elsejsp=0;end if;end if;keyout=cp;end process;end;显

10、示模块(程序分两栏排版)library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity display isport(clk: in std_logic; light: in integer range 1 to 3; serout: out std_logic_vector(6 downto 0);end;architecture a of display issignal disp : std_logic_vector(6 dow

11、nto 0);beginprocess(clk)beginif(clkevent and clk=1)thenif light =1 thendisp=1001111;elsif light=2 thendisp=0010010;elsif light=3 then disp=0000110;end if;end if;end process;serout=disp;end;主控模块library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; -

12、*entity control is port(upone,uptwo,downtwo,downthree : in std_logic;-电梯外乘客的请求信号 one,two,three : in std_logic;-电梯内乘客的请求上或下至几层楼的信号 reset: in std_logic; -复位初始化开关 over,emergency,lock:in std_logic;-超重、紧急停运和上锁信号 clk: in std_logic; -时钟信2MHz alarm,ovelight,locklight : out std_logic;-故障、超重及锁定提示灯 p : out int

13、eger range 1 to 3; -电梯当前位置 lightup,lightdown : out std_logic_vector(6 downto 0); -lightup显示u则电梯在上升模式, -lightdown显示d则电梯在下降模式; arrive: out std_logic); -arrive为1时表明电梯到达楼层,并在开门状态end;-*architecture behave of control is type states is (up1,up2,down1,down2,stop,dw1,dw2,dw3,dw4,dw5);-states为电梯所处的各个状态-up1表示电

14、梯正在从第1层上升-up2表示电梯正在从第2层上升-down1表示电梯正在向第1层下降-down2表示电梯正在向第2层下降-stop表示电梯停止在某一层上-dw1表示电梯开门的第一秒-dw2表示电梯开门的第二秒-dw3表示电梯开门的第三秒-dw4表示电梯开门的第四秒,判断电梯的下一个状态-dw5表示当电梯处于上升或下降状态时,如果没有相应的上升或下降请求信号,则转入-此dw5状态,使其不再在上升或下降状态停留,而响应其它信号signal state: states;signal clear1,clear2,clear3,flag1,flag2,flag3,fl1,fl2,fl3: std_lo

15、gic;-这些都是标志位,控制电梯的状态转换-flag1、flag2、flag3代表各层相应的请求信号-clear1、clear2、clear3代表相应层的请求已经完成,可以接收新的任务signal position: integer range 1 to 3; -电梯的当前停留位置signal lup,ldown: std_logic_vector(6 downto 0);-与lightup和lightdown功能相同signal arr : std_logic; -与arrive功能相同signal ala,ov,loc : std_logic; -与alarm,ovlight,lockl

16、ight功能相同begink1:process(clk)variable cnt: integer range 1 to 2000000;variable updown : std_logic; -此变量表明电梯处于上升或下降状态beginif(clkevent and clk =1)thenif(upone=1 or one=1)then -一层有上楼请求flag1=1;elsif clear1=1 then -一层的请求已完成flag1=0; -当没有新请求信号则清零end if;if (uptwo=1 or downtwo = 1 or two = 1) then -二层有请求flag2

17、=1;elsif clear2 = 1 then -二层的请求已完成flag2=0; -当没有新请求信号则二层清零end if;if (downthree= 1 or three = 1)then -三层有请求flag3=1; elsif clear3 = 1 then -三层的请求已完成flag3=0; -当没有新请求信号则三层清零end if; if(emergency=1) then ala=1; elsif(over=1) then ov=1; elsif(lock=1) then loc=1; end if; if cnt2000000 then-通过计数2000000获得1s的时钟

18、信号 cnt:=cnt+1; -计数信号小于20000000则加1 else if reset = 1 then -复位时,电梯初值设置在一层,状态为stop position=1;state=stop; ovelight=0;-各状态指示灯均灭 locklight=0; alarm=0; lup=1111111; ldown=1111111; else fl1=flag1; fl2=flag2; fl3=flag3; -fl1、fl2、fl3置1表示相应楼层有请求信号,并把相应的任务完成信号clear -置0,表示有新的任务等待完成 if(fl1=1)then clear1=0; end i

19、f; if(fl2=1)then clear2=0; end if; if(fl3=1)then clear3-up1:正在从一层上升if fl2=0 then -若上升期间二层期间无请求,则直接上三层clear1=0;clear3=0;state=up2;position=2;elsestate=stop;position=2;fl2=0; -完成了对二层请求的响应;clear2-up2:正在从二层上升clear1=0;clear2=0;state=stop;position=3;if position =2 then -如果电梯在第二层position=3; -那么下一个位置在第三层fl3

20、=0; -完成了对第三层请求的相应clear3=1;elsif position =1 then -如果电梯在第一层position=2; -那么下一个位置在第二层fl2=0; -二层的请求已经完成clear2 -正在向第一层下降clear2=0;clear3=0;state=stop; -下一状态是stopif position=2 then -如果电梯在第二层position=1; -那么下一个位置在第一层fl1=0; -一层的请求已经完成clear1=1;elsif position =3 thenposition=2;fl2=0;clear2 -正在向第二层下降 -如果在下降期间,二层

21、没有请求,就直接下到一层if fl2 =0 thenclear1=0;clear3=0;-下一状态转至down1,电梯将会再下降一层state=down1;position=2; -电梯的下一个位置在第二层elsestate=stop; -若下降期间二层有请求,则在二层停下position=2; -位置转至二层fl2=0; -完成了对二层请求的响应clear2 -在停止状态 if(emergency=1 or over=1) then state=stop; else state=dw1;-下一状态转至dw1,电梯会进入开门状态arr=1; -arr置1,表明电梯到达并开门lup=111111

22、1; -上升指示灯灭ldown -在dw1状态时,等待1sstatestatestatearr=0; -开门灯灭if position=1 then -如果电梯在第一层updown :=1; -则进入上升模式fl1=0; -一层的任务完成clear1=1;if fl2=1 then -如果二层有请求state=up1; -先响应二层的请求,再响应上升一层的请求arr=0; -维持灯熄灭状态lup=1000001; -上升灯亮,显示字母Uelsif fl3=1 then -若三层有请求state =up1;-响应完二层请求信号后,再响应第三层的请求arr=0;-开门灯维持熄灭状态lup=1000

23、001;-上升灯亮, 显示字母Uend if;elsif position=3 thenupdown :=0;-进入下降状态fl3=0; -到达三层的任务已完成clear3=1;if fl2=1 then -若二层有请求state=down2;-先响应二层请求,再转入下降一层的状态arr=0;ldown=1000010;-下降灯亮,显示delsif fl1=1 thenstate=down2;-响应完二层请求信号后再响应一层的请求arr=0;ldown=1000010;end if;elsif position =2 thenfl2=0; -到达二层的任务已经完成clear2=1;if upd

24、own =1 then-当电梯处于上升状态,不响应一层的请求if fl3=1 thenstate=up2;arr=0;lup=1000001;elsestate=dw5;-若三层无请求,就转至dw5状态end if;end if;if updown = 0 then -当处于下降状态,不响应三层的请求if fl1=1 then state=down1;arr=0;ldown=1000010;-下降灯亮,显示delsestate-只要到了dw5的状态,无论原来处于上升或下降状态,对三层和一层的信号都可相响应if fl3=1 then state=up2;arr=0;lup=1000001;-上升

25、灯亮, 显示字母Uelsif fl1=1 thenstate=down1;arr=0;ldown=1000010;-下降灯亮,显示dend if;end case;cnt:=1;-进程完成一次全部的状态、条件判断并执行相应操作后,计数信号重置1end if;alarm=ala;ovelight=ov;locklight=loc;end if;end if;end process;p=position;-给输出信号赋值lightup=lup;lightdown=ldown;arrive=arr;end;七.主控模块仿真1.由于显示和消抖模块为通用模块,在此不再赘述仿真结果,主要给出主控模块的仿真

26、分析2.为便于仿真,将主控模块control单列为一个工程,并把计数变量cnt的值由2000000改为2。说明:用数码管显示上升和下降状态时分别显示的是字母U和d。由于是共阳极数码管,所以低电平亮。 显示U时,数码管编码为“1000001”,即十进制65;显示d时,数码管编码为“1000010”,即十进制66;数码管熄灭时,编码为“1111111”,即十进制127;对照以上仿真图形可以检验上行、下行状态灯的正确运行。八.问题及改进以下将讨论一下本次实验中遇到的一些问题,已经改进的部分和尚未完善的部分。1、 开始设计时由于未经老师指导,所以设置了过多的繁琐状态,共计10个,包括dw1、dw2和d

27、w3这几个空闲状态,它们唯一的作用就是占用1秒钟的时间来作为电梯到站开门的等待状态。事实上,若用开门、上行、下行、停止等较精简的几个状态也可以完成设计任务,而且对于以后扩展更多的楼层也是很有利的。而自己目前的设计只能用于三层电梯,一旦要求扩展层数,便会遇到很大困难。我会在之后的学习中自行学习思考如何用老师所建议的状态设置方法来实现4层电梯控制器。2、 在老师帮助修改代码的过程中,发现了一些不必要的冗余代码,如:fl1=flag1; fl2=flag2; fl3=flag3; 事实上,这种重复赋值是由于后来改进方案而忘记处理之前的程序造成的。具体如下: 开始设计时,我采用了分频器,将主频2MHz

28、的时钟进行2000000分频分出一个1Hz的信号。两个时钟(主频2Mhz和1Hz)分别以其上升沿控制两个进程k1和k2的运行。其中k1由2MHz时钟触发,控制各输入请求信号和改变状态机的信号,使电梯无论什么时候都快速响应各种操作。k2由1Hz时钟出发,控制电梯的升降及停留。 之后经老师建议,我将分频器模块去掉,也就是说全部系统只有一个主频时钟2MHz来触发。而内部需要控制的升降、停留、开门等待的时间,就由一个计数变量cnt来控制,cnt每计数2000000次,则时间经过1s。这样,原来的两个进程就压缩为一个,进程k2就被略去了,而原来的flag信号是在进程k1中被赋值,进程k2中分别又赋值给了

29、相应的fl信号,所以删除进程k2后就多出了下面的这些语句,fl1=flag1; fl2=flag2; fl3=flag3;虽然不妨碍程序的正确运行,但是给代码的可读性打了折扣,这是在以后的编程中应当力图避免的。3、 同样是因为删除了k2进程,之后没有再改变以前的代码顺序,使得reset,即复位功能被写在了时序代码的部分,和紧急故障及超重状态的判断变成了并行关系。也就是说reset功能的优先级降低了,reset功能应当是异步的,一旦有效,系统立刻停止运行,并所存当前状态。而现在,reset功能在没有紧急故障(或故障消除)或无超重状态时才会有效,而且为使系统能够响应,信号必须至少维持1s的时间。4

30、、 在开始的程序设计中犯了一个小错误,就是电梯如果从一层直接上升到三层(即二楼无请求)时,到达二楼是不会停站开门的,而我忘记了这一点,设计成了每到一层都会有4s的开门等待时间。在之后的修改过程中及时发现了这个问题,并把状态机的转换过程进行了相应的修改,顺利修正了这个错误。5、 从仿真波形来看,复位功能键是有效的,即复位之后电梯会停止在一层,但是在实际电路的运行中,所有功能都可以很完善地实现,唯独复位键无效。在更换了另一套实验箱之后,发现reset功能可以实现,但是复位之后系统便无法相应其他的请求了,这都是和仿真结果相悖的。事实上,可能存在以下问题: 在代码编译的过程中,没有报告错误,即Erro

31、r;但是会有很多警告,即Warning。 很多情况下,Warning会给出类似这样的指示Warning: Output pins are stuck at VCC or GNDWarning: Design contains 1 input pin(s) that do not drive logic Warning: Following 7 pins have nothing, GND, or VCC driving datain port - changes to this connectivity may change fitting resultsInfo: Pin alarm has

32、 VCC driving its datain portInfo: Pin ovelight has VCC driving its datain portInfo: Pin locklight has VCC driving its datain portInfo: Pin lightup0 has VCC driving its datain portInfo: Pin lightup6 has VCC driving its datain portInfo: Pin lightdown1 has VCC driving its datain portInfo: Pin lightdown

33、6 has VCC driving its datain port说明实际电路并非都能很好很完善地执行所有的逻辑表达,特别是在高频和态转换的特殊条件下,对逻辑电路有特殊的要求。一旦实际的物理电路无法完全满足程序代码所叙述的逻辑,那么很可能出现实际电路运行和仿真结果不同的现象。 另外,后来发现状态机的描述中缺少了when others的语句,即对其他未知状态的描述。这样,程序很可能由于实际电路中的干扰而运行到正常状态循环体之外的无效状态中,并且无法预知是否再能回到正常状态,即所谓的程序“跑飞”。以上所述的问题都是需要不断积累经验、不断摸索才能解决的,但是给我以后的学习带来了更加深刻和全面的认识。

34、总结及感受 通过这次课程设计,让我在学习EDA理论知识的基础上,增强了的实践动手能力。在参考了许多相关资料后,充分理解了三层电梯的设计要求基本上完成了设计的功能要求,但本代码中可能仍存在一些不能解决的实际问题,许多工程实际问题不能完全用理论知识去解决,需要不断吸取现场经验,寻找解决问题方法虽然能完成设计的基本功能,但仍有可拓展的空间,比如超载报警、多层电梯等,都是可以继续研究以满足更多的功能要求,但以我现在对 EDA 知识的了解可能不太容易完成,希望以后有机会再深入地学习EDA,设计出更符合实际功能需求的代码。 参考资料1、VHDL数字电路及系统设计 江思敏 编著 -机械工业出版社2、CPLD/FPGA可编程逻辑器件实用教程 马彧 王丹利 王丽英 编著-机械工业出版社参考文献:1陈清华,唐友喜,周佳晶等著.大频偏扩频信号载波同步算法及实现. 2006年恒润科技用户大会论文集,2006年10月。2詹亚锋,曹志刚,马正新,直接扩频序列信号的参数估计,系统工程与电子技术,2004年9月第26卷第9期P1176-1179.3张天骐,林孝康,周正中,一种直扩信号伪码周期及序列的盲估计方法,电波科学学报,2005年6月,第20卷第3期P400-4054 邓振淼,刘 渝,王志忠,正弦波频率估计的修正Rife算法. 数据采集与处理,2006年12月第21卷第4期 P473-477。

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服