基于EDA的高层电梯控制器设计.docx

上传人:b****0 文档编号:12770857 上传时间:2023-04-22 格式:DOCX 页数:20 大小:275.51KB
下载 相关 举报
基于EDA的高层电梯控制器设计.docx_第1页
第1页 / 共20页
基于EDA的高层电梯控制器设计.docx_第2页
第2页 / 共20页
基于EDA的高层电梯控制器设计.docx_第3页
第3页 / 共20页
基于EDA的高层电梯控制器设计.docx_第4页
第4页 / 共20页
基于EDA的高层电梯控制器设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于EDA的高层电梯控制器设计.docx

《基于EDA的高层电梯控制器设计.docx》由会员分享,可在线阅读,更多相关《基于EDA的高层电梯控制器设计.docx(20页珍藏版)》请在冰豆网上搜索。

基于EDA的高层电梯控制器设计.docx

基于EDA的高层电梯控制器设计

1设计的意义

一种以电动机为动力,装有箱状吊舱,用于多层建筑乘人或载运货物的垂直升降机,就是俗称的自动电梯。

随着电子技术日新月异的发展,集成电路从20世纪60年代的小规模到中规模,再到大规模集成电路,伴随着它的高速发展,EDA技术、CPLD技术也得到充分发展。

同时,随着现代社会的物质水平不断提高,越来越多的建筑是其中标志之一,对于高层建筑来说,电梯是必不可少的。

除了高层建筑需要电梯外,对于服务和生产部门来说,同样需要各种各样的服务电梯和载物电梯。

这使电梯的使用越来越普遍,已从原来只在商业大厦、宾馆使用,过度到在办公室、居民楼等场所使用,并且对电梯功能的要求也不断提高,相应地其控制方式也在不停地发生变化。

对于电梯的控制,随着技术的不断发展,微型计算机在电梯控制上的应用日益广泛,现在已进入全微机化控制的时代。

电梯的微机化控制主要有以下几种形式:

PLC控制,单片机控制,单板机控制,单微机控制,多微机控制,人工智能控制。

随着EDA技术的快速发展,EDA已广泛应用于电子设计与控制的各个方面。

电梯作为高层建筑物的重要交通工具与人们的工作日益紧密FPGA作为新一代工业控制器,以其高可靠性和技术先进性,在电梯控制中得到广泛应用,从而使电梯由传统的继电器控制方式发展为计算机控制的一个重要方向,成为当前电梯控制和技术改造的热点之一。

电梯控制器是控制电梯按顾客要求自动上下的装置。

本课程设计文采用VHDL语言来设计实用16层电梯控制器,其代码具有良好的可读性和易理解性,源程序经QuartusII7.2软件仿真,目标器件选用FPGA器件。

通过对16层电梯控制器的设计,可以发现本设计有一定的扩展性,而且可以作为更多层电梯控制器实现的基础。

 

2设计原理

2.1EDA技术介绍

EDA技术是20世纪90年代初从计算机辅助设计(ComputerAdiedDesign)、计算机辅助制造(ComputerAdiedManufacture)、计算机辅助测试(ComputerAdiedTesting)和计算机辅助工程(ComputerAdiedEngineering)的概念发展而来的。

随着超大规模集成电路(VeryLargeScaleIntegration)规模和技术复杂度的急剧增长,一块芯片内集成门可达几十万甚至几百万门,并且还在迅速增长,电子系统人工设计已十分困难,必须依靠电子设计自动化技术。

EDA技术的基本特征和基本工具总的来说,现代EDA技术的基本特征是采用高级语言描述,具有系统级仿真和综合能力。

它主要采用并行工程和“自顶向下”的设计方法,使开发者从一开始就要考虑到产品生成周期的诸多方面,包括质量、成本、开发时间及用户的需求等等,然后从系统设计入手,在顶层进行功能方框图的划分和结构设计,在方框图一级进行仿真、纠错、并用VHDL、Verilog-HDL、ABEL等硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证,然后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。

利用EDA技术进行电子系统的设计,具有以下几个特点:

用软件的方式设计硬件;用软件方式设计的系统到硬件系统的转换是由相关的开发软件自动完成;设计过程中可用相关软件进行各种仿真;系统可现场编程,在线升级;整个系统可集成在一个芯片上,具有体积小、功耗低及可靠性高的特点。

因此,EDA技术是现代电子设计的发展趋势。

电子设计自动化(EDA)是一种实现电子系统或电子产品自动化的技术,它与电子技术、微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。

2.2系统设计及原理

从设计要求中可以看出,分控制器设计相对简单,主控制器是系统的核心部分,也是设计的难点,下面讨论主控制器的设计方法。

首先讨论主控制器的设计状态。

根据电梯的实际工作情况,可以将主控制器的运行状态分为6种:

停止、等待、上升、连续上升、下降和连续下降。

电梯开关未打开时,处于停止状态,开关打开后,处于等待状态,之后,响应用户的请求进入上升或下降状态。

连续上升状态发生在电梯不在中间层停留的情形,例如,用户在1层进入电梯,直到5层,那么在2、3、4层都处于连续上升状态,连续下降状态同理。

这里,状态划分与具体楼层无关,因此,具有很强的通用性。

其次考虑输入输出端口,一个电梯开关,供电梯管理员控制电梯,开关无效时,电梯不工作;用户在进入电梯后,可以不必等待5秒,而提前关门,提供close请求服务;用户需要时也可以延迟关门,延迟时间随意,提供delay请求服务;电梯内部有16位按键,供用户输入请求楼层;16个分控制器的上升/下降请求,即2个16位的矢量输入;还有时钟方面,根据电梯的运行速度和等待时间,系统时钟设计为20Hz。

输出端口比较简单,一个是开门信号,控制电梯开门和关门,另一个输出当前所在楼层。

2.3模块设计与实现

2.3.1主控制器模块

首先说明一下电梯状态。

状态机设置了6个状态,分别是停止、等待、上升、连续上升、下降和连续下降。

在结构体ARCHITECTURE和BEGIN之间有如下定义。

typestatetypeis(stop,pause,up,midup,down,middown);

signalstate:

statetype;

打开电梯开关后,尚无请求,电梯处于等待状态。

如果有用户发出请求,则电梯响应,上升至用户所在楼层(初始电梯在1层)。

响应的过程是:

判断请求是否符合规则,如果符合,则将请求保存在上升请求寄存器(urr)中,由等待状态转为上升状态,然后启动运行定时器,1秒钟后,到达上一层,如果此层被用户请求,则转入等待状态,自动打开电梯门;否则,转入连续上升状态,将运行计时器清零,然后返回上升状态,重新启动运行定时器,再上升一层,直至到达用户所在楼层。

下降的过程同理。

在等待状态中,逻辑判断最为复杂。

首先是判断下一步状态,是继续上升,继续下降,还是一直等待,抑或从上升转入下降,从下降转入上升,这些都是通过对方向标志位ur、dr的判断得到。

其次是开门问题,电梯刚刚到达某一层时,必定是用户准备出梯,或者准备入梯,电梯须自动开门,启动开门计时器,5秒后关门;如果电梯在过去一段时间内处于等待状态,现在,用户发出请求,则必须判断用户的位置,如果用户和电梯在同一层,则须立即开门使用户入梯,否则,直接到达用户所在楼层再开门。

电梯内部设有提前关门和延迟关门请求按钮,用户可以根据实际情况,发出请求。

这两项功能是通过对开门计时器的计数控制实现的,开门计时器与运行计时器一样,都是带清零端、置位端和使能端的8位计数器。

按下提前关门按钮,等于将开门计时器置位,所以计时提前结束,从而实现提前关门的功能;同理,按下延迟开关按钮,等于将使能端置为无效,暂停计时,从而实现延迟关门的功能。

在主控制器的VHDL程序中定义了几个信号用于描述电梯运行状态,例如urr(上升请求寄存器)、drr(下降请求寄存器)、ur(上升标志)和dr(下降标志)。

opentime和runtime分别是开门计时器和运行计时器的输出。

结构体中有6个进程,说明如下:

第一个进程对系统时钟分频得到运行计时器时钟;

第二个进程对运行计时器时钟分频得到开门计时器时钟;

第三个进程是延迟进程,用于检测信号跳变;

第四个进程是对上升/下降请求寄存器置位和清零;

第五个进程控制电梯运行状态;

第六个进程记录电梯位置变化及响应提前、延迟关门请求。

2.3.2分控制器模块

分控制器设在每层的电梯人口处,作为是检测用户按键,转换为上升/下降请求信号。

在请求被执行后,清除相应信号。

同时,将电梯当前位置显示给用户。

3仿真分析

3.1主控制器仿真

对主控制器的仿真需要设计一些符合实际情况的假设,比如在外部发出上升请求的乘客,进入电梯内部后一定会按高层的请求按钮;在外部发出下降请求的乘客,进入电梯内部后一定会按低层的请求按钮,而且乘客进入电梯后必定会按键。

这些假设都是符合实际情况的。

如图2所示,仿真的使乘客由1层进入电梯,在电梯内部按键,请求上升至10层。

可以看到,初始电梯在1层,收到用户请求后,开门请用户入梯,然后关门并上升到10层,中间不作停留。

到达10层后,自动开门,请用户出梯。

如图3所示,仿真的是图2的继续,电梯在10层停留一段时间后,有用户在2层发出请求,电梯下将至2层,开门请用户入梯,然后关门。

如图4所示,仿真的是电梯在1层,有2位用户进入,分别请求上升至5层和10层。

图中,用户在1层按上升请求按钮,由于电梯也在1层,自动开门,

用户入梯。

用户在电梯内部按键来选择自己要到达的楼层,假设按键有先后顺序,即不是多用户同一时间按键。

上升请求寄存器(urr)保存了用户按键请求,每次到达用户所请求的楼层后,自动清除对应请求。

如图5所示,仿真的是电梯响应延迟关门。

开始时,电梯停留在16层一段时间,有用户在11层发出下降请求,电梯直接下降至11层,到达11层后自动开门,用户而人数较多,难以在5秒内全部进入电梯,于是,用户按延迟关门按钮,等到所有人都进入电梯后,才释放按钮,电梯关门。

按键请求到1层,电梯下降至1层,自动开门,用户出梯。

3.2分控制器仿真

如图6所示,仿真的是一用户在2层发出上升请求信号,另一用户在9层发出下降请求信号。

电梯从1层到达2层后停止,用户进入电梯后电梯到达5层后,该用户出梯。

然后,电梯继续上升直至9层,让另一用户入梯。

 

 

4设计总结

两周的课程设计,使我对EDA有了更多的了解。

在编写主控制器程序时,由于程序较为复杂,导致某些地方出现了一些问题,从而影响了仿真波形的准确性,为此我花费了大量的时间去纠正程序的错误。

虽然我遇到了很大的困难,但当仿真出最终的波形时,又让我有一种成就感。

在进行软件仿真和硬件仿真时,一定要细心,包括软件仿真的信号给定,硬件仿真的引脚锁定。

在EDA课程设计的日子里,可以说是苦多于甜,不断地发现问题,不断地思考问题,并解决问题。

不过,通过这些学到很多东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能真正达到为我们的生活服务为社会服务的目的。

在设计的过程中遇到的问题,反映出来我的许多不足之处,我以后要努力克服缺点,提高自己的实际动手能力和独立思考的能力。

总而言之,EDA课程设计的高层电梯控制器还是比较成功的。

在设计中遇到了很多问题,但在老师的辛勤的指导下和同学们的帮助以及自己的努力之下,终于都得到了解决,这让我感觉平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。

最后我要感谢那些在我遇到问题时是帮助过我的老师和同学们。

 

参考文献

1.孟庆海,张洲编.《VHDL基础及经典实例开发》.西安交通大学出版社,2008年

2.杜建国.《verilogHDL硬件描述语言》.国防工业出版社,2004年

3.VolneiA.Pedroni著.《VHDL数字电路设计教程》.电子工业出版社,2010年

4.潘松,黄继业.《EDA技术实用教程》.科学出版社,2010.6.

5.刘玉海.《EDA技术课程设计》.华中科技大学出版社,2009.5.

 

附录

------主控制器------

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitymaincontrolleris

port(clk:

instd_logic;

switch:

instd_logic;

close:

instd_logic;

delay:

instd_logic;

sel,uplift,downlift:

instd_logic_vector(16downto1);

qout:

outstd_logic_vector(16downto1);

opendoor:

outstd_logic

);

endmaincontroller;

architecturebhvofmaincontrolleris

componentcounteris

port(clk:

instd_logic;

preset:

instd_logic;

clr:

instd_logic;

en:

instd_logic;

q:

outstd_logic_vector(2downto0)

);

endcomponent;

typestatetypeis(stop,pause,up,midup,down,middown);

signalstate:

statetype;

signalclk4hz:

std_logic;

signalclk1hz:

std_logic;

signalur:

std_logic;

signaldr:

std_logic;

signalenrun:

std_logic;

signalenstop:

std_logic;

signalenstop1:

std_logic;

signalclrrun:

std_logic;

signalclrstop:

std_logic;

signalurr:

std_logic_vector(16downto1);

signaldrr:

std_logic_vector(16downto1);

signalposition:

std_logic_vector(16downto1);

signaluplift_d:

std_logic_vector(16downto1);

signaldownlift_d:

std_logic_vector(16downto1);

signalsel_d:

std_logic_vector(16downto1);

signalruntime:

std_logic_vector(2downto0);

signalopentime:

std_logic_vector(2downto0);

signalopenonce:

std_logic;

signalvoidpreset:

std_logic;

begin

qout<=position;

U0:

process(clk)

variablecnt:

integerrange0to4;

begin

if(clk'eventandclk='1')then

if(cnt=4)then

clk4hz<='1';

cnt:

=0;

elseclk4hz<='0';

cnt:

=cnt+1;

endif;

endif;

endprocess;

U1:

process(clk4hz)

variablenum:

integerrange0to3;

begin

if(clk4hz'eventandclk4hz='1')then

if(num=3)then

clk1hz<='1';

num:

=0;

else

clk1hz<='0';

num:

=num+1;

endif;

endif;

endprocess;

U2:

process(switch,clk,uplift,downlift)

begin

if(clk'eventandclk='1')then

uplift_d<=uplift;

downlift_d<=downlift;

sel_d<=sel;

endif;

endprocess;

U3:

process(switch,clk,uplift,downlift)

begin

if(clk'eventandclk='1')then

if(state=pause)then

drr<=drrandnot(position);

urr<=urrandnot(position);

if(uplift/=uplift_dandur/='1'andposition>uplift)then

drr<=drroruplift;

elsif(downlift/=downlift_dandur/='1'andposition>downlift)then

drr<=drrordownlift;

elsif(uplift/=uplift_danddr/='1'andposition

urr<=urroruplift;

elsif(downlift/=downlift_danddr/='1'andposition

urr<=urrordownlift;

elsif(sel/=sel_d)then

if(sel

drr<=drrorsel;

elsif(sel>positionanddr/='1')then

urr<=urrorsel;

endif;

endif;

elsif(state=uporstate=midup)then

if(uplift/=uplift_danddr/='1'andposition

urr<=urroruplift;

endif;

elsif(state=downorstate=middown)then

if(downlift/=downlift_danddr='1'andposition>downlift)then

drr<=drrordownlift;

endif;

endif;

endif;

endprocess;

ur<='1'whenurr/="0000000000000000"else

'0';

dr<='1'whendrr/="0000000000000000"else

'0';

U4:

process(switch,clk)

begin

if(switch='0')then

state<=stop;

opendoor<='0';

openonce<='1';

elsif(clk'eventandclk='1')then

casestateis

whenstop=>

state<=pause;

whenpause=>

if((opentime="000"andopenonce='0'and(ur='1'ordr='1'))or(uplift/=uplift_dandposition=uplift)or(downlift/=downlift_dandposition=downlift))then

opendoor<='1';

clrstop<='0';

enstop1<='1';

endif;

if(opentime="101"or(openonce='1'and(ur='1'ordr='1')))then

if(ur='1')then

state<=up;

opendoor<='0';

enstop1<='0';

clrstop<='1';

openonce<='0';

elsif(dr='1')then

state<=down;

opendoor<='0';

enstop1<='0';

clrstop<='1';

openonce<='0';

else

state<=pause;

opendoor<='0';

enstop1<='0';

clrstop<='1';

openonce<='1';

endif;

endif;

whenup=>

if(runtime="100")then

enrun<='0';

clrrun<='1';

if(position=(urrandposition))then

state<=pause;

else

state<=midup;

endif;

else

clrrun<='0';

enrun<='1';

endif;

whenmidup=>

state<=up;

whendown=>

if(runtime="100")then

clrrun<='1';

enrun<='0';

if(position=(drrandposition))then

state<=pause;

elsestate<=middown;

endif;

else

clrrun<='0';

enrun<='1';

endif;

whenmiddown=>

state<=down;

endcase;

endif;

endprocess;

U5:

process(switch,clk4hz,delay)

begin

if(switch='0')then

position<="0000000000000001";

elsif(clk4hz'eventandclk4hz='1')then

enstop<=not(delay)andenstop1;

if(runtime="001")then

if(state=up)then

position<=position(15downto1)&'0';

elsif(state=down)then

position<='0'&position(16downto2);

endif;

endif;

endif;

endprocess;

voidpreset<='0';

run_timer:

counterportmap(

clk=>clk4hz,

preset=>voidpreset,

clr=>clrrun,

en=>enrun,

q=>runtime

);

door_timer:

counter

portmap(clk=>clk1hz,preset=>close,clr=>clrstop,en=>enstop,q=>opentime);

endbhv;

------计数器------

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitycounteris

port(clk:

in

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1