EDA电梯控制器设计_第1页
EDA电梯控制器设计_第2页
EDA电梯控制器设计_第3页
EDA电梯控制器设计_第4页
EDA电梯控制器设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

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、状态当前层请求从二层上升状态无有上行请求有无向一层下降状态有下行请求无当前层门外上行请求当前层门外下行请求有有无无三楼当前层请求进入停止状态下行请求无有继续等待向二层下降状态有无六.程序清单消抖模块(程序分两栏排版)library 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:out

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

10、d if; elsejsp<=0;end if;end if;keyout<=cp;end process;end;显示模块(程序分两栏排版)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

11、;architecture a of display issignal disp : std_logic_vector(6 downto 0);beginprocess(clk)beginif(clk'event 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;se

12、rout<=disp;end;主控模块library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; -*entity control is port(upone,uptwo,downtwo,downthree : in std_logic;-电梯外乘客的请求信号 one,two,three : in std_logic;-电梯内乘客的请求上或下至几层楼的信号 reset: in std_logic; -复位初始化开关 over,emerge

13、ncy,lock:in std_logic;-超重、紧急停运和上锁信号 clk: in std_logic; -时钟信2MHz alarm,ovelight,locklight : out std_logic;-故障、超重及锁定提示灯 p : out integer range 1 to 3; -电梯当前位置 lightup,lightdown : out std_logic_vector(6 downto 0); -lightup显示'u'则电梯在上升模式, -lightdown显示'd'则电梯在下降模式; arrive: out std_logic); -a

14、rrive为'1'时表明电梯到达楼层,并在开门状态end;-*architecture behave of control is type states is (up1,up2,down1,down2,stop,dw1,dw2,dw3,dw4,dw5);-states为电梯所处的各个状态-up1表示电梯正在从第1层上升-up2表示电梯正在从第2层上升-down1表示电梯正在向第1层下降-down2表示电梯正在向第2层下降-stop表示电梯停止在某一层上-dw1表示电梯开门的第一秒-dw2表示电梯开门的第二秒-dw3表示电梯开门的第三秒-dw4表示电梯开门的第四秒,判断电梯的下一

15、个状态-dw5表示当电梯处于上升或下降状态时,如果没有相应的上升或下降请求信号,则转入-此dw5状态,使其不再在上升或下降状态停留,而响应其它信号signal state: states;signal clear1,clear2,clear3,flag1,flag2,flag3,fl1,fl2,fl3: std_logic;-这些都是标志位,控制电梯的状态转换-flag1、flag2、flag3代表各层相应的请求信号-clear1、clear2、clear3代表相应层的请求已经完成,可以接收新的任务signal position: integer range 1 to 3; -电梯的当前停留位

16、置signal lup,ldown: std_logic_vector(6 downto 0);-与lightup和lightdown功能相同signal arr : std_logic; -与arrive功能相同signal ala,ov,loc : std_logic; -与alarm,ovlight,locklight功能相同begink1:process(clk)variable cnt: integer range 1 to 2000000;variable updown : std_logic; -此变量表明电梯处于上升或下降状态beginif(clk'event and

17、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<='1'elsif clear2 = '1

18、9; 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'

19、;) then ov<='1' elsif(lock='1') then loc<='1' end if; if cnt<2000000 then-通过计数2000000获得1s的时钟信号 cnt:=cnt+1; -计数信号小于20000000则加1 else if reset = '1' then -复位时,电梯初值设置在一层,状态为stop position<=1;state<=stop; ovelight<='0'-各状态指示灯均灭 locklight<='0

20、' 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 if; if(fl2='1')then clear2

21、<='0' end if; if(fl3='1')then clear3<='0' end if;case state is -状态机描述when up1 =>-up1:正在从一层上升if fl2='0' then -若上升期间二层期间无请求,则直接上三层clear1<='0'clear3<='0'state<=up2;position<=2;elsestate<=stop;position<=2;fl2<='0' -完成了

22、对二层请求的响应;clear2<='1'end if;when up2 =>-up2:正在从二层上升clear1<='0'clear2<='0'state<=stop;position<=3;if position =2 then -如果电梯在第二层position<=3; -那么下一个位置在第三层fl3<='0' -完成了对第三层请求的相应clear3<='1'elsif position =1 then -如果电梯在第一层position<=2; -那

23、么下一个位置在第二层fl2<='0' -二层的请求已经完成clear2<='1'end if;when down1 => -正在向第一层下降clear2<='0'clear3<='0'state<=stop; -下一状态是stopif position=2 then -如果电梯在第二层position<=1; -那么下一个位置在第一层fl1<='0' -一层的请求已经完成clear1<='1'elsif position =3 thenposit

24、ion<=2;fl2<='0'clear2<='1'end if;when down2 => -正在向第二层下降 -如果在下降期间,二层没有请求,就直接下到一层if fl2 ='0' thenclear1<='0'clear3<='0'-下一状态转至down1,电梯将会再下降一层state<=down1;position<=2; -电梯的下一个位置在第二层elsestate<=stop; -若下降期间二层有请求,则在二层停下position<=2; -位置

25、转至二层fl2<='0' -完成了对二层请求的响应clear2<='1'end if;when stop => -在停止状态 if(emergency='1' or over='1') then state<=stop; else state<=dw1;-下一状态转至dw1,电梯会进入开门状态arr<='1' -arr置'1',表明电梯到达并开门lup<="1111111" -上升指示灯灭ldown<="1111111&q

26、uot;-下降指示灯灭end if;when dw1 => -在dw1状态时,等待1sstate<=dw2;-下一状态转至dw2when dw2 =>state<=dw3;when dw3 =>state<=dw4;when dw4 =>arr<='0' -开门灯灭if position=1 then -如果电梯在第一层updown :='1' -则进入上升模式fl1<='0' -一层的任务完成clear1<='1'if fl2='1' then -如果二

27、层有请求state<=up1; -先响应二层的请求,再响应上升一层的请求arr<='0' -维持灯熄灭状态lup<="1000001" -上升灯亮,显示字母Uelsif fl3='1' then -若三层有请求state <=up1;-响应完二层请求信号后,再响应第三层的请求arr<='0'-开门灯维持熄灭状态lup<="1000001"-上升灯亮, 显示字母Uend if;elsif position=3 thenupdown :='0'-进入下降状态f

28、l3<='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 pos

29、ition =2 thenfl2<='0' -到达二层的任务已经完成clear2<='1'if updown ='1' then-当电梯处于上升状态,不响应一层的请求if fl3='1' thenstate<=up2;arr<='0'lup<="1000001"elsestate<=dw5;-若三层无请求,就转至dw5状态end if;end if;if updown = '0' then -当处于下降状态,不响应三层的请求if fl1=

30、9;1' then state<=down1;arr<='0'ldown<="1000010"-下降灯亮,显示delsestate<=dw5;-若一层无请求,就转至dw5状态end if;end if;end if;when dw5 =>-只要到了dw5的状态,无论原来处于上升或下降状态,对三层和一层的信号都可相响应if fl3='1' then state<=up2;arr<='0'lup<="1000001"-上升灯亮, 显示字母Uelsif fl

31、1='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<=ar

32、r;end;七.主控模块仿真1.由于显示和消抖模块为通用模块,在此不再赘述仿真结果,主要给出主控模块的仿真分析2.为便于仿真,将主控模块control单列为一个工程,并把计数变量cnt的值由2000000改为2。说明:用数码管显示上升和下降状态时分别显示的是字母U和d。由于是共阳极数码管,所以低电平亮。 显示U时,数码管编码为“1000001”,即十进制65;显示d时,数码管编码为“1000010”,即十进制66;数码管熄灭时,编码为“1111111”,即十进制127;对照以上仿真图形可以检验上行、下行状态灯的正确运行。八.问题及改进以下将讨论一下本次实验中遇到的一些问题,已经改进的部分和尚未

33、完善的部分。1、 开始设计时由于未经老师指导,所以设置了过多的繁琐状态,共计10个,包括dw1、dw2和dw3这几个空闲状态,它们唯一的作用就是占用1秒钟的时间来作为电梯到站开门的等待状态。事实上,若用开门、上行、下行、停止等较精简的几个状态也可以完成设计任务,而且对于以后扩展更多的楼层也是很有利的。而自己目前的设计只能用于三层电梯,一旦要求扩展层数,便会遇到很大困难。我会在之后的学习中自行学习思考如何用老师所建议的状态设置方法来实现4层电梯控制器。2、 在老师帮助修改代码的过程中,发现了一些不必要的冗余代码,如:fl1<=flag1; fl2<=flag2; fl3<=fl

34、ag3; 事实上,这种重复赋值是由于后来改进方案而忘记处理之前的程序造成的。具体如下: 开始设计时,我采用了分频器,将主频2MHz的时钟进行2000000分频分出一个1Hz的信号。两个时钟(主频2Mhz和1Hz)分别以其上升沿控制两个进程k1和k2的运行。其中k1由2MHz时钟触发,控制各输入请求信号和改变状态机的信号,使电梯无论什么时候都快速响应各种操作。k2由1Hz时钟出发,控制电梯的升降及停留。 之后经老师建议,我将分频器模块去掉,也就是说全部系统只有一个主频时钟2MHz来触发。而内部需要控制的升降、停留、开门等待的时间,就由一个计数变量cnt来控制,cnt每计数2000000次,则时间

35、经过1s。这样,原来的两个进程就压缩为一个,进程k2就被略去了,而原来的flag信号是在进程k1中被赋值,进程k2中分别又赋值给了相应的fl信号,所以删除进程k2后就多出了下面的这些语句,fl1<=flag1; fl2<=flag2; fl3<=flag3;虽然不妨碍程序的正确运行,但是给代码的可读性打了折扣,这是在以后的编程中应当力图避免的。3、 同样是因为删除了k2进程,之后没有再改变以前的代码顺序,使得reset,即复位功能被写在了时序代码的部分,和紧急故障及超重状态的判断变成了并行关系。也就是说reset功能的优先级降低了,reset功能应当是异步的,一旦有效,系统立

36、刻停止运行,并所存当前状态。而现在,reset功能在没有紧急故障(或故障消除)或无超重状态时才会有效,而且为使系统能够响应,信号必须至少维持1s的时间。4、 在开始的程序设计中犯了一个小错误,就是电梯如果从一层直接上升到三层(即二楼无请求)时,到达二楼是不会停站开门的,而我忘记了这一点,设计成了每到一层都会有4s的开门等待时间。在之后的修改过程中及时发现了这个问题,并把状态机的转换过程进行了相应的修改,顺利修正了这个错误。5、 从仿真波形来看,复位功能键是有效的,即复位之后电梯会停止在一层,但是在实际电路的运行中,所有功能都可以很完善地实现,唯独复位键无效。在更换了另一套实验箱之后,发现res

37、et功能可以实现,但是复位之后系统便无法相应其他的请求了,这都是和仿真结果相悖的。事实上,可能存在以下问题: 在代码编译的过程中,没有报告错误,即Error;但是会有很多警告,即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 m

温馨提示

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

评论

0/150

提交评论