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

下载本文档

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

文档简介

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/CP

3、LD 下载板一块(或多块,可选) (其中下载版选择以下型号 CycloneEP1C6Q240C8)3. 并行口下载电缆一根4. 电压表棒一付5. 实验指导书一份6. 配套集成电路芯片若干三.设计框图 系统主要分为:主控制模块control,包含状态机,控制电梯的运行及状态转换;消抖模块unshake消除开关电路的抖动现象,确保逻辑的正确性; 显示模块display,内含译码功能,配合控制器显示电梯的工作状态 模块框图见图1,总体框图详见图2。ahmi口詳卜战oveli-s*itcickbg tP|i D|二三两牡4【三:thmarrive-= versrrr&B,;£rtyk

4、«kL茹诟厂1L4图1各模块框图|rtrout9.0Lhdk ictyoutI'irtst12r'I,lf“1E 1'I1啊 D.1!'SB!Tfrhlc,胃L-E:HInuSTjj- TJ护*iri才£r-a"n'-oE=1r c-a sr E 3 迥=t=i.劇 m-l.1JinKL 團恻?订苛扑 -I'削mrLmLIIRill总!/2iGzjdt71JTi1 3芟1*7*gjl'ltrf1JA /1 I 1 I!IUnd.TU.III;JJ1$A图2系统总体框图r» 1.-.10善四 .设计思

5、路 1. 对于电梯控制逻辑的实现,主要是控制模块 control ,故下面主要介绍控制模 块 control 的设计思想。控制模块control有一个进程k1,其中又设置了一个计数变量ent,范围为 12000000b计数变量ent其实是起到分频器的作用,产生了一个1HZ勺时钟, 在ent计数2000000次的时间内(即1s),运行控制电梯升降、停留的程序,这 些部分相当于以1HZ的时钟触发;而系统主频时钟2MH作为触发时钟不断检测用户是否有请求输入, 或者电梯是 否有异常情况。对于一、二、三层信号,分别由flagl、flag2、flag3和elearl、 elear2 、 elear3 两套

6、标志为来控制输入请求是否有效, 是否应该对标志位清零。2. 主要规则是:当一层(upone、one)、二层(uptwo、downtwo two)或三层(downthree、 three )的输入信号有效时,相应标志位 flag1 、 flag2 、 flag3 置1',表明 该层有请求。当一层(upone、one)、二层(uptwo、downtwo two)或三层(downthree、 three )的输入信号无效时,相应标志位 elear1 、 elear2 、 elear3 置1',表 明相应得到达楼层请求已经在上一个时钟沿完成;同时对应的标志位 flag1 、 flag2

7、 、 flag3 置1 ',表明相应楼层无请求。updown 信号值为 1'时表明电梯处于上升状态,为 0'时处于下降状 态。程序有两个信号表示电梯的状态: 一是位置状态,二是运行状态。 position 表明电梯的位置状态,是一个取值 13的整数 ,分别表示电梯处于第一、二、 三层; state 表示电梯的运行状态,使枚举数据类型,共 10个值,分别是: -states 为电梯所处的各个状态 -up1 表示电梯正在从第 1层上升 -up2 表示电梯正在从第 2层上升 -down1 表示电梯正在向第 1层下降-down2表示电梯正在向第2层下降-stop 表示电梯停止在

8、某一层上 -dw1 表示电梯开门的第一秒 -dw2表示电梯开门的第二秒 -dw3表示电梯开门的第三秒 -dw4表示电梯开门的第四秒,判断电梯的下一个状态 -dw5表示当电梯处于上升或下降状态时,如果没有相应的上升或下降请求信 号,则转入dw5 状态,使其不再在上升或下降状态停留,而响应其它信号 程序利用case语句实现这10个状态间的相互转移。五 .引脚分配 详见下图状态流程图1、顶层流程图解2、以下是较具体的状态转化图二楼前一状态为上升前一状态为下降无继续等待六程序清单消抖模块(程序分两栏排版)en tity un shake isport(clk :in std_logic; -时钟,10

9、HZ; key :in std_logic;-开关信号;keyout :out std_logic);-消抖之后的 开关信号en d;architecture a of un shake issig nal cp :std_logic;sig nal jsp:i nteger range 0 to 3;beginprocess(clk)beginif(clk'event and clk='1')thenlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_ un sig ned.all;use ieee.

10、std_logic_arith.all;if key='1' the nif jsp=3 the n jsp<=jsp;elsejsp<=jsp+1; end if;if jsp=1 the ncp<='1' elsecp<='0' end if; else jsp<=0;end if;end if;keyout<=cp;end process;en d;显示模块(程序分两栏排版)library ieee;use ieee.std _lo gic_1164.all;use ieee.std_logic_ un

11、sig ned.all;use ieee.std_logic_arith.all;en tity display isport(clk : in stdo gic;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 downto 0);beginprocess(clk)beginif(clk'event and clk='1')thenif ligh

12、t =1 then disp<="1001111"elsif light=2 then disp<="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;*entity control

13、 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;- 时钟信 2MHzalarm,ovelight,locklight : out std_logic;- 故障、超重及锁定提示灯 p : out integer range

14、 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 istype states is (up1,up2,down1,down2,stop,dw1,dw2,dw3,dw4,dw5);-stat

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

16、g2,flag3,fl1,fl2,fl3: std_logic;-这些都是标志位,控制电梯的状态转换-flagl、flag2、flag3代表各层相应的请求信号-clearl、clear2、clear3代表相应层的请求已经完成,可以接收新的任务signal position : integer range 1 to 3; - 电梯的当前停留位置signal lup,ldown: std_logic_vector(6 downto 0);- 与 lightup 禾口 lightdown 功能相同 sig nal arr: std_logic;-与 arrive 功能相同signal ala,ov,

17、loc : std_logic;-与alarm,ovlight,locklight 功能相同begink1:process(clk)-此变量表明电梯处于上升或下降状态variable cnt: integer range 1 to 2000000; variable updown : std_logic;beginif(clk'event and clk ='1')thenif(upone='1' or one='1')thenflag1<='1'elsif clear1='1' thenflag1&

18、lt;='0'end if;if (uptwo='1' or downtwo = '1 flag2<='1'elsif clear2 = '1' thenflag2<='0' end if; if (downthree= '1' or three = '1')then -flag3<='1'elsif clear3 = '1' thenflag3<='0' end if;-一层有上楼请求-一层的请求已完成

19、-当没有新请求信号则清零or two = '1') then - 二层有请求-二层的请求已完成-当没有新请求信号则二层清零三层有请求-三层的请求已完成-当没有新请求信号则三层清零if(emergency='1') thenala<='1'elsif(over='1') thenov<='1'elsif(lock='1') thenloc<='1'end if;if cnt<2000000 then-通过计数2000000获得1s的时钟信号 cnt:=cnt+1

20、;-计数信号小于 20000000则加 1elseif reset = '1' then -复位时,电梯初值设置在一层,状态为 stopposition<=1;state<=stop;ovelight<='0'- 各状态指示灯均灭 locklight<='0'alarm<='0'lup<="1111111" ldown<="1111111"else fl1<=flag1;fl2<=flag2;fl3<=flag3;clear-fl1

21、、fl2、fl3置'1'表示相应楼层有请求信号,并把相应的任务完成信号-置 '0',表示有新的任务等待完成if(fl1='1')then clear1<='0'end if;if(fl2='1')thenclear2<='0'end if;if(fl3='1')thenclear3<='0'end if;case state is -状态机描述when up1 =>up1 :正在从一层上升if fl2='0' then-若上升期

22、间二层期间无请求,则直接上三层clear1<='0'clear3<='0'state<=up2;position<=2;elsestate<=stop; position<=2;fl2<='0' - 完成了对二层请求的响应; clear2<='1'end if;when up2 =>up2 :正在从二层上升clear1<='0'clear2<='0'state<=stop;position<=3;if position =

23、2 then - 如果电梯在第二层 position<=3;- 那么下一个位置在第三层fl3<='0'-完成了对第三层请求的相应clear3<='1'elsif position =1 then - 如果电梯在第一层 position<=2;- 那么下一个位置在第二层fl2<='0'-二层的请求已经完成clear2<='1'end if;when down1 =>- 正在向第一层下降clear2<='0'clear3<='0'state<=

24、stop; -下一状态是 stopif position=2 then - 如果电梯在第二层 position<=1;-那么下一个位置在第一层fl1<='0'- 一层的请求已经完成clear1<='1'elsif position =3 then position<=2; fl2<='0' clear2<='1'end if;when down2 =>- 正在向第二层下降-如果在下降期间,二层没有请求,就直接下到一层if fl2 ='0' thenclear1<=&#

25、39;0'clear3<='0'-下一状态转至 down1 ,电梯将会再下降一层 state<=down1;position<=2; - 电梯的下一个位置在第二层elsestate<=stop; -若下降期间二层有请求,则在二层停下position<=2; - 位置转至二层fl2<='0' -完成了对二层请求的响应 clear2<='1'end if;when stop =>- 在停止状态if(emergency='1' or over='1') then s

26、tate<=stop;elsestate<=dw1;-下一状态转至dw1,电梯会进入开门状态 arr<='1: -arr置 '1',表明电梯到达并开门 lup<="1111111"-上升指示灯灭ldown<="1111111"- 下降指示灯灭 end if;when dw1 =>-在 dw1 状态时,等待 1sstate<=dw2;-下一状态转至 dw2when dw2 => state<=dw3;when dw3 => state<=dw4;when dw4 =&

27、gt; arr<='0' -开门灯灭 if position=1 then -如果电梯在第一层 updown :='1'-则进入上升模式fl1<='0'-一层的任务完成clear1<='1'if fl2='1' then - 如果二层有请求 state<=up1; -先响应二层的请求,再响应上升一层的请求 arr<='0'-维持灯熄灭状态lup<="1000001" -上升灯亮,显示字母 'U' elsif fl3='1

28、' then - 若三层有请求state <=up1;-响应完二层请求信号后,再响应第三层的请求 arr<='0'-开门灯维持熄灭状态lup<="1000001"- 上升灯亮 , 显示字母 'U' end if;elsif position=3 thenupdown :='0'- 进入下降状态fl3<='0'-到达三层的任务已完成clear3<='1'if fl2='1' then - 若二层有请求 state<=down2;-先响应二

29、层请求,再转入下降一层的状态 arr<='0'ldown<="1000010"- 下降灯亮,显示 'd'elsif fl1='1' thenstate<=down2;-响应完二层请求信号后再响应一层的请求arr<='0'ldown<="1000010"end if;elsif position =2 thenfl2<='0' - 到达二层的任务已经完成clear2<='1'if updown ='1'

30、then-当电梯处于上升状态,不响应一层的请求if fl3='1' thenstate<=up2;arr<='0' lup<="1000001"elsestate<=dw5;-若三层无请求,就转至 dw5 状态end if;end if;if updown = '0' then-当处于下降状态,不响应三层的请求if fl1='1' thenstate<=down1;arr<='0' ldown<="1000010"- 下降灯亮,显示

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

32、;ldown<="1000010"- 下降灯亮,显示 'd' end if;end case;cnt:=1;-进程完成一次全部的状态、条件判断并执行相应操作后,计数信号重end if;alarm<=ala; ovelight<=ov; locklight<=loc;end if;end if;end process;p<=position;-给输出信号赋值 lightup<=lup;lightdow n<=ldow n; arrive<=arr;en d;七主控模块仿真1. 由于显示和消抖模块为通用模块,在此不

33、再赘述仿真结果,主要给出主控模块的仿真分析2. 为便于仿真,将主控模块 control单列为一个工程,并把计数变量cnt的值由2000000改为2。Simuktion WaveformsMuttr 7ith B*r:Kantal aimarriveelkdjovnlkraedovntvoli ghldo-riLli ghtup lo>ck lo-ckLiitoneoverP reset thr鮭up oneup twoPoinltr.-15.51 ns801 0 nsI123.0 u160. 0 hi300.0 nsi32X0 tsiIT 0OLIT 1总令客丘信号就J 运U戟12712

34、7宀IT 1ir jV jV 0IT 3U'和 d'。由于是共阳极数Value17 7SujuuuuuuuiiwwinnmuiXD:紧骨皆配岸号无效剔电梯曰痔止前橄态魅巻运. 栄歷,車董T降到1层 层才开门等壳H.75 ni0 HU EE56iniwr说明:用数码管显示上升和下降状态时分别显示的是字母码管,所以低电平亮。显示 U '时,数码管编码为“1000001”即十进制65 ;显示d '时,数码管编码为“ 1000010 ” 即十进制66 ;数码管熄灭时,编码为“1111111 ”,即十进制127 ;对照以上仿真图形可以检验上行、下行状态灯的正确运行。八.问

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

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

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

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

39、,所有功能都可以很完善地实现,唯独复位键无效。在更换了另一套实验箱之后,发现 reset 功能可以实现,但是复位之后系统便无法相应其他的请求了,这都是和仿真结果相悖的。事实上,可能存在以下问题: 在代码编译的过程中,没有报告错误,即Error ;但是会有很多警告,即Warning很多情况下, Warning 会给出类似这样的指示Warning: Output pins are stuck at VCC or GNDWarning: Design contains 1 input pin(s) that do not drive logicWarning: Following 7 pins have nothin

温馨提示

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

评论

0/150

提交评论