EDA电梯控制器设计.docx
院面理工辔院EDA技术综合课程设计课程:EDA技术综合课程设计题目:电梯限制器所属院系:电气工程学院专业班级:自控1304班姓名:王军学号:92指导老师:张立众完成地点:陕西理工学院书目1 .设计任务22 .可选器材23 .设计框图24 .设计思路45 .引脚安排56WT清单97 .主控模块仿真168 .问题与改进179 .总结与感受1810 .参考文献19一 .设计任务1、设计一个三层的电梯限制器。2、用数码管显示电梯所在的楼层号,电梯初始化后状态在第层楼。3、每层电梯外都有上下楼恳求开关,电梯内部有到各楼层的恳求开关与紧急故障开关;用数码管显示上行或卜行状态,用发光二极管显示是否有紧急状况。4、电梯每秒升(降)层,电梯到达有停站恳求的楼层后,经1秒电梯开门,开门指示灯亮,开门4秒后指示灯灭,关门,电梯接着运行。5、当电梯被锁定或发生紧急状况后,电梯停止运行,直到解除锁定或紧急故障后才可以从停止时的状态接着运行。6、当电梯处于上升状态时,只响应比电梯所在位置高的上楼恳求信号,直到最终一个上楼恳求执行完毕,再进入下降模式:同理,电梯处于下降状态时,只响应比电梯所在位置低的卜楼恳求信号,直到最终个卜楼恳求执行完毕,再进入上升模式。二 .可选器件1 .计算机组成/1SP试验箱一台(含电源)2 .电源线一根1;PGA/CP1.D下载板一块(或多块,可选)(其中下载版选择以下型号CyCloneEP1C6Q240C8)3 .并行口下载电缆一根4 .电压表棒一付5 .试验指导书一份6 .配套集成电路芯片若干三.设计框图系统主要分为:主限制模块ContrO1,包含状态机,限制电梯的运行与状态转换:消抖模块UnShake,消退开关电路的抖动现象,确保逻辑的IE确性;显示模块display,内含译码功能,协作限制器显示电梯的工作状态。模块框图见图1,总体框图详见图2。图1各模块框图MflBMEM明吕吕豳B(IIIH图2系统总体框图四.设计思路1.对于电梯限制逻辑的实现,主要是限制模块control,故下面主要介绍限制模块ControI的设计思想。限制模块COntrOI有个进程kl,其中又设置了个计数变量ent,范围为:2000000。计数变殳Cnl其实是起到分频器的作用,产生/一个IHZ的时钟,在Cnt计数2000000次的时间内(BPls),运行限制电梯升降、停留的程序,这些部分相当于以IHZ的时钟触发;而系统主频时钟2MHz作为触发时钟不断检测用户是否有恳求输入,或者电梯是否有异样状况。对于一、二、三层伯号,分别由flagl、flag2.flag3和CIear1、Clear2、Clear3两套标记为来限制输入恳求是否有效,是否应当对标记位清零。2.主要规则是:当一层(UPone、one)、二层(UPlWo、downtwo、two)或三层(downthree,three)的输入信号有效时,相应标记位flagl、flag2,flag3StV,表明该层有恳求。当一层(upone.one)、二层(UPlWo、downtwotwo)或三层(downthree,three)的输入信号无效时,相应标记位Clear1、CIear2、Clear3置'1',表明相应得到达楼层恳求已经在上一个时钟沿完成;同时对应的标记位flagl、flag2、flag3置T,表明相应楼层无恳求。UPdoWn信号值为tV时表明电梯处于上升状态,为'0'时处于卜.降状态。程序有两个信号表示电梯的状态:一是位置状态,二是运行状态.POSitiOn表明电梯的位置状态,是一个取值1'3的整数,分别表示电梯处于第一、二、三层;State表示电梯的运行状态,使枚举数据类型,共10个值,分别是:-SlaIeS为电梯所处的各个状态-upl表示电梯正在从第1层上升-up2表示电梯正在从第2层上升-down1表示电梯正在向第1层下降-down2表示电梯正在向第2层下降一st。P表示电梯停止在某一层上-Ywl表示电梯开门的第一秒小2表示电梯开门的其次秒一dw3表示电梯开门的第三秒一dw4表示电梯开门的第四秒,推断电梯的下一个状态-dw5表示当电梯处于上升或下降状态时,假如没有相应的上升或下降恳求信号,则转入dw5状态,使其不再在上升或卜降状态停留,而响应其它信号程序利用CaSe语句实现这10个状态间的相互转移。五.引脚安排详见下图HnCxy号SaM0/1烟*SwtM济S31BlFosaQ/JM01.*SO10/1攻SsGAlQFjUUOtssa¾au11o<tssa0/1UUIICoOelW$GM(VltWT81CxycVSSGAlCuujpzsafssoM0Iux11PD0tba,s5i0/ico<¼SG10/1bg=flOilF0/1”QH<SG1Om9Saal0/1UttrifOD9S010iurfo<9S0M0u0E9SG1CyIUtfo9SG10/】u11oo*9SaMOil«*<¥>0US9SGA1Cutro-10/1UlnO<SSOA1iumpK)9SQ1OO9551QHUtflfOOU19SOA10/1U1.nPo01W59SaAIBl-00011U2rpTOwa/叱sanOhNetiMdSGlo/】e<>SO1QJo5XDSOAVwrDWD问P9Q由2S(M1(V1Qpa,wyucq)SPOdSuoqjjRW3QIWn£8NIdOnlMD26XIIIyn98NIds<*n>481IwnS8Nl<i>dn14>a1U1bNldd11j>91工脑ZBNIdz<*jOst31eNIdtdm<IUlZIIE31二£1"I1.1166Nld9u*0RM6iOZl3186NldSuvjl-O11Wl£6-NId:卜取新尸.OXTl1.Al96Nld:S>8P3×-.6IWnS6NIdfc*0R!<*8U1.M>k6NId13刖。GTUjM£6NId(O)UMOPhAC9UlAIXIZ-NIdAXe6»W1U1£Khfld0MjU*0p11111.1£SEiiNIdIWiIISZNIdZIjJynBNIdKX1_1.PWPIMS0/11*aoUoqwOlIllAlIl1.Al,ui'IHAIUIynIlMl'NIdNid,z"hfle11-RId611-Md*一11fld91MdSn-MItT厂NIdE-Md长丁NldHmm8"<192<3s4Sh6<ibl110SOC4n052jno6ilJino»5.nojc41102«076.XIOdI411F92SZ411而,iOZ状态流程图1、顶层流程图解2、以卜.是较详细的状态转化图*六.程序清单消抖模块(程序分两栏排版)1ibraryieee:useieee.std_logic_l164.al1;useieee.std_logic_unsigned.al1;useieee.std_logic_arith.all;entityunshakeisport(elk:instd_logic;时钟,10HZ;key:instd_logic:开关信号;keyout:outstd_logic);一消抖之后的开关信号architectureaofunshakeissignalcp:std_logic;signaljsp:integerrange0to3:beginprocess(elk)beginif(clk'eventandclk三,)thenifkey='1'thenifjsp=3thenend:jsp<=jsp:cp<=,O'elsejsp<=jsp+l;jsp<=0:endif;endif;ifjsp=lendif;thenkeyoul<=cp:endprocess;cp<='T;end:elseelseendif;显示模块(程序分两栏排版)libraryieee:useieee.std_logic_l164.al1;useieee.std_logic_unsigned.all;useieee.std_logic_arith.al1;entitydisplayisport(elk:instd_logic:light:inintegerrangeserout:outstd_logic_vector(6downto0);end;1to3;architectureaofdisplayissignaldisp:std_logic_vector(6downto0);beginprocess(elk)beginif(dk,eventandclk=')theniflight=1thendisp<=*100111:主控模块libraryieee:useieee.stdlogic1164.all;useieee.std_logic_unsigned.all;useieee.stdlogicarith.alI;elsiflight=2thendisp<=,0010010,;elsiflight=3thendisp<="0000U0”;endif;endif;endprocess;serout<=disp;end;*姓*entitycontrolisport(upone,uptwo,downtwo,downthree:instdlogic;一电梯外乘客的恳求信号one,two,three:instdIOgic;一电梯内乘客的恳求上或下至几层楼的信号reset:instd_logic;一更位初始化开关over,emergency,lock:inStdj1.Ogic;一超盅、紧急停运和上锁信号elk:instd_logic:一时钟信2MHzalarm,ovelight,locklight:outstd_logic:一故障、超重与锁定提示灯p:outintegerrange1to3;一电梯当前位置Iightup,lightdown:outstd_logic_vector(6downto0);-Iighlup显示'u,则电梯在上升模式,-IighldoWn显示'd'则电梯在卜降模式;arrive:outstd_logic);一arrive为'T时表明电梯到达楼层,并在开门状态end;*东*东*architecturebehaveofcontrolistypestatesis(upl,up2,down1,down2,stop,dwl,dw2,dw3,dw4,dw5);SlaIeS为电梯所处的各个状态FPI表示电梯正在从第1层上升-UP2表示电梯正在从第2层上升-downI表示电梯正在向第1层卜,降-down2表示电梯正在向第2层下降-Stop表示电,梯停止在某层上一dwl表示电梯开门的第一秒一dw2表示电梯开门的其次秒-dw3表示电梯开门的第三秒-dw4表示电梯开门的第四秒,推断电梯的卜.个状态一dw5表示当电梯处于上升或下降状态时,假如没有相应的上升或下降恳求信号,则转入一此dw5状态,使其不再在上升或下降状态停留,而响应其它信号signalstate:states:signalclearl,clear2,clear3,flagl,flag2,flag3,fl1,f12,f13:std_logic:一这些都是标记位,限制电梯的状态转换-flagl、flag2、门ag3代表各层相应的恳求信号-clearl,CIear2、Clear3代表相应层的恳求已经完成,可以接收新的任务signalposition:integerrange1to3:一电梯的当前停留位置signallup,!down:stdlogicvector(6downto0);一与IightUP和IightdoWn功能相同signalarr:std,logic;与arrive功能相同signalala,ov,Ioc:std_logic;alarm,ovlighl,Iocklighl功能相同beginkl:process(elk)variableent:integerrange1to2000000;variableupdown:std_logic;此变量表明电梯处卜上升或下降状态beginif(clk,eventandelk=,)thenif(upone='1'orone=')then一层有上楼恳求flagl<=V;elsifclearl=>then一一层的恳求已完成fIagK='0>一当没有新恳求信号则清endif;if(UPtWo='1'ordowntwo="1ortwo=,)then-二层有恳求flag2<='1>:elsifclear2=,then一二层的恳求已完成flag2<='0>:-当没有新恳求信号则二层清零endif;if(downthree=>orthree=")then-三层有恳求flag3<=*1>:elsifcIear3=>then-三层的恳求已完成flag3<='0'一当没有新恳求信号则三层清零endif:if(emergency=*)thenala<-;elsif(over->)thenov<=:elsif(lock,)thenloc<-;endif;ifcnl<2000000then一通过计数2000000获得IS的时钟信号cnt:=cnt+l;一计数信号小于20000000则加1elseifreset=>then一复位时,电梯初值设置在层,状态为SIoPPoSitionO1;state<=slop;ovelight<='0,;一各状态指示灯均灭IocklighK='0,:alarm<='0'1up<=H1111:ldown<=*l111111*;elsefll<=flagl:f12<=flag2;fl3<=flag3:一门1、门2、门3置1'表示相应楼层有恳求信号,并把相应的任务完成信号CIear一置'0',表示有新的任务等待完成if(fll-)thenCleark='0'endif:if(fl2=)thenclear2<=,0,;endif;if(113=)thenclear3<=0'endif:casestateis-状态机描述whenupl=>upl:正在从一层上升iffl2=,0,then若上升期间二层期间无恳求,则干脆上三层clearl<=,0,;Clear3<='0'state<=up2:position<-2;elsestate<=stop;position<=2;fl2<=>0'一完成了对二层恳求的响应;clear2<=,;endif;whenup2=>up2:正在从二层上升clearl<-0'CIear2<='0'state<=stop;position<=3;ifposition=2then假如电梯在其次层position<3;一那么下一个位置在第二.层fl3<=0'一完成了对第三层恳求的相应clear3<='elsifposition=1then一假如电梯在第一层PoSilion<=2;那么下一个位置在其次层fl2<=0'一二层的恳求已经完成CIear2<='1'endif;whendown1=>一正在向第一层下降Clear2<='0'CIear3<='0>state<=stop;一下,状态是StoPifposition=2then假如电梯在其次层position<=l;一那么卜<个位置在第一层fll<=<0'一一层的恳求已经完成clear1<=>elsifposition=3thenposition<=2;fl2<=0,;clear2<,;endif:whendown2=>一正在向其次层卜,降-假如在下降期间,二层没有恳求,就干脆下到一层iff12='0'thenclearK='0>CIear3<='O'一下一状态转至downl,电梯将会再下降一层StateCdownl;position<=2;一电梯的下一个位置在其次层elsestate<=stop;一若下降期间二层有恳求,则在二层停下position<=2;一位置转至二层fl2<=>0':一完成了对二层恳求的响应CIear2<='T;endif:whenstop=>一在停止状态if(emergency='orover=')thenstate<=stop;elsestate<=dwl:下一状态转至dwl,电梯会进入开门状态arr<=,;一arr置1',表明电梯到达并开门IUPe="1111111”;一上升指示灯灭IdoWn<="1111111”;一下降指示灯灭endif;whendwl=>一在dwl状态时,等待ISSlale<=dw2;一下一状态转至dw2dw2=>state<=dw3:dw3=>state<=dwl;dw4=>ar<='O'一开门灯灭ifposition=lthen一假如EU梯在第层UPdOWn:='1'一则进入上升模式fll<=0':一一层的任务完成clearl<=,;iffl2=then一假如二层有恳求SIaIeOupl;先响应二层的恳求,再响应上升一层的恳求arr<='O'一维持灯熄灭状态lp<=*lOOOOO;一上升灯亮,显示字母'U'elsiffl3=*1,then一若三层有恳求state<=upl;响应完二层恳求信号后,再响应第三层的恳求arr<='O'1.-开门灯维持熄灭状态lup<="1000001”;一上升灯亮,显示字母1.elsifposition=3thenUPdOwn:=,O*:一进入卜,降状态113<=,0,;-到达三层的任务已完成clear3<,1,;iffl2三,1,then一若二层有恳求state<=down2;先响应二层恳求,再转入下降一层的状态arr<三,O'IdoWn<="1000010”;一下降灯亮,显示'd,elsifflI='thenstate<=down2;一响应完二层恳求信号后再响应层的恳求arr<三,0'IdOWn<="1000010”;endif:elsifposition=2thenfl2<='0'一到达二层的任务已经完成clear2<,;ifupdown='then一当电梯处于上升状态,不响应层的恳求iffl3=thenarr<=O'lup<=*lOOOOOr;elsestate<=dw5;一若三层无恳求,就转至d*5状态endif;endif:ifpdown='0,then一当处于下降状态,不响应三层的恳求iff11='Tthenstate<=downl;arr<三,0,:IdoWn<="1000010”;一下降灯亮,显示'd,elsestate<=dw5;一若一层无恳求,就转至dw5状态endif:endif;endif:whendw5=>-只要到J'dw5的状态,无论原来处于上升或下降状态,对三层和一层的信号都可相响应iffl3=tthenstate<=up2;arr<='O'lup<="1000001"一上升灯亮,显示字母U'elsiffl1=,thenstate<=downl:arr<='0>ldown<=*1000010"一下降灯亮,显示'd,endif:endcase;Cnl:=1;一进程完成一次全部的状态、条件推断并执行相应操作后,计数信号重置Iendif;alarm<=ala;ovelight<=ov:Iocklight<=loc;endif;endif;endprocess;p<=position;一给输出信号赋值1ightup<=lup:lightdown<=ldown;arrive<=arr;end七.主控模块仿真1 .由显示和消抖模块为通用模块,在此不再赘述仿真结果,主要给出主控模块的仿真分析2 .为使仿真,将主控模块control单列为一个工程,并把计数变量Cnt的值由改为2。由于是共阳极数码管,所以低电平亮。即十进制65;fb显示'd'时,数码管编码为“”,即十进制66:°C数码管熄灭时,编码为“”,即十d进制127:比照以上仿真图形可以检验上行、显示弋'时,数码管编码为,下行状态灯的正确运行。八.问题与改进以卜将探讨卜.本次试验中遇到的些问题,已经改进的部分和尚未完善的部分。1、起先设计时由于未经老师指导,所以设置了过多的繁琐状态,共计10个,包括dwl、dw2和dw3这几个空闲状态,它们唯一的作用就是占用1秒钟的时间来作为电梯到站开门的等待状态。事实上,若用开门、上行、下行、停止等较精简的几个状态也可以完成设评任务,而且对于以后扩展更多的楼层也是很有利的。而自己目前的设计只能用于三层电梯,一旦要求扩展层数,便会遇到很大困难。我会在之后的学习中自行学习思索如何用老师所建议的状态设置方法来实现4层电梯限制器。2,在老师帮助修改代码的过程中,发觉了一些不必要的冗余代码,如:fll<=flagl:fl2<=flag2;fl3<=flag3:事实上,这种申复赋值是由于后来改进方案而遗忘处理之前的程序造成的。详细如下:起先设计时,我采纳了分频器,将主频2MHz的时钟进行2000000分频分出一个IHZ的信号。两个时钟(主频2Mhz和IHZ)分别以其上升沿限制两个进程kl和k2的运行。其中Id由2MHz时钟触发,限制各输入恳求信号和变更状态机的信号,使电梯无论什么时候都快速响应各种操作。k2由IHZ时钟动身,限制电梯的升降与停留。之后经老师建议,我将分频器模块去掉,也就是说全部系统只有个主频时钟2MHz来触发。而内部须要限制的升降、停留、开门等待的时间,就由一个计数变:Senl来限制,Cnt每计数2000000次,则时间经过1s。这样,原来的两个进程就压缩为一个,进程k2就被略去了,而原来的门ag信号是在进程kl中被赋值,进程k2中分别又赋值给了相应的门信号,所以删除进程k2后就多出了下面的这些语句,fll<=flagl;fl2<=flag2;fl3<=flag3;虽然不阻碍程序的正确运行,但是给代码的可读性打J'折扣,这是在以后的编程中应当力图避开的。3、同样是因为删除rk2进程,之后没有再变更以前的代码依次,使得reset,即复位功能被写在了时序代码的部分,和紧急故障与超重状态的推断变成r并行关系。也就是说resel功能的优先级降低了,reset功能应当是异步的,旦有效,系统立即停止运行,并所存当前状态。而现在,resel功能在没有紧急故障(或故障消退或无超重状态时才会有效,而且为使系统能够响应,信号必需至少维持IS的时间。4、在起先的程序设计中犯J'一个小错误,就是电梯假如从一层干脆上升到三层(即二楼无恳求)时,到达二楼是不会停站开门的,而我遗忘了这一点,设计成了每到一层都会有4s的开门等待时间。在之后的修改过程中与时发觉了这个问.尊,并把状态机的转换过程进行了相应的修改,顺当修正了这个错误。5,从仿真波形来看,更位功能键是有效的,即复位之后电梯会停止在层,但是在实际电路的运行中,全部功能都可以很完善地实现,唯独巨位键无效。在更换了另套试验箱之后,发觉reset功能可以实现,但是发位之后系统便无法相应其他的恳求广,这都是和仿真结果相悖的。事实上,可能存在以下问题:在代码编译的过程中,没有报告错误,即ErrOr:但是会有很多警告,即Warning。很多状况下,Warning会给出类似这样的指示Warning:OutputpinsarestuckatVCCorGNDWarning:Designcontains1inputpin(三)thatdonotdrivelogicWarning:Following7pinshavenothing,GND,orVCCdrivingdatainport-changestothisconnectivitymaychangefittingresultsInfo:PinalarmhasVCCdrivingitsdetainportInfo:PinovelighthasVCCdrivingitsdatainportInfo:PinlocklighthasVCCdrivingitsdatainportInfo:Pin1ightup0hasVCCdrivingi1.sdatainportInfo:Pinlightup6hasVCCdrivingitsdatainportInfo:PinIighldoWn1hasVCCdrivingitsdatainportInfo:Pinlightdown6JhasVCCdrivingitsdatainport说明实际电路并非都能很好很完善地执行全部的逻辑表达,特殊是在高频和态转换的特殊条件卜.,对逻辑电路有特殊的要求。一旦实际的物理电路无法完全满意程序代码所叙述的逻辑,那么很可能出现实际电路运行和仿真结果不同的现象。另外,后来发觉状态机的描述中缺少了WhenoIherS的语句,即对其他未知状态的描述。这样,程序很可能由于实际电路中的干扰而运行到正常状态循环体之外的无效状态中,并且无法预知是否再能回到正常状态,即所谓的程序“跑飞”。以上所述的问题都是须要不断积累阅历、不断摸索才能解决的,但是给我以后的学习带来了更加深刻和全面的相识。总结与感受通过这次课程设计,让我在学习EDA理论学问的基础上,增加了的实践动手实力。在参考了很多相关资料后,充分理解了三层电梯的设计要求基本上完成了设计的功能要求,但本代码中可能仍存在些不能解决的实际问题,很多工程实际问题不能完全用理论学问去解决,须要不断吸取现场阅历,找寻解决问.题方法虽然能完成设计的基本功能,但仍有可拓展的空间,比如超载报警、多层电梯等,都是可以接着探讨以满意更多的功能要求,但以我现在对EDA学问的了解可能不太简单完成,希望以后有机会再深化地学习EDA,设计出更符合实际功能需求的代码。参考资料1、VHD1.数字电路与系统设计江思敏编著机械工业出版社2、GCP1.D/FPGA可编程逻辑器件好用教程马暧王丹利王丽英编著机械工业出版社参考文献:1陈清华,唐友喜,周佳晶等著.大频偏犷频信号载波同步算法与实现.2006年恒润科技用户大会论文集,2006年10月。2詹亚锋,曹志刚,马正新,干脆扩频序列信号的参数估计,系统工程与电子技术,2004年9月第26卷第9期Pl176-1179.3张天骐,林孝康,周正中,种直扩信号伪因周期与序列的盲估计方法,电波科学学报,2005年6月,第20卷第3期P400-4054邓振淼,刘渝,王志忠,正弦波频率估计的修正Rife尊法.数据采集与处理,2006年12月第21卷第4期P473-477