四层电梯控制器.docx

上传人:b****5 文档编号:6634104 上传时间:2023-01-08 格式:DOCX 页数:13 大小:323.09KB
下载 相关 举报
四层电梯控制器.docx_第1页
第1页 / 共13页
四层电梯控制器.docx_第2页
第2页 / 共13页
四层电梯控制器.docx_第3页
第3页 / 共13页
四层电梯控制器.docx_第4页
第4页 / 共13页
四层电梯控制器.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

四层电梯控制器.docx

《四层电梯控制器.docx》由会员分享,可在线阅读,更多相关《四层电梯控制器.docx(13页珍藏版)》请在冰豆网上搜索。

四层电梯控制器.docx

四层电梯控制器

课程设计任务书

学院

信息科学与项目学院

专业

学生姓名

学号

设计题目

四层电梯控制器

设计目的:

1.掌握电子系统设计方法

2.学会使用PLD和硬件描述语言设计数字电路,掌握MAXPLUSII等开发工具的使用方法

3.培养学生自主学习、正确分析和解决问题的能力

设计要求:

1、设计一个4层电梯全自动控制电路。

2、 每层电梯的入口处设有上下请求开关,电梯内设有乘客到达层次的停站请求开关。

3、 设有电梯所处位置指示装置及电梯运行模式<上升或下降)指示装置。

4、 电梯每秒升降一层。

5、 电梯到达有停站请求的楼层后,经过1s电梯打开,开门只是灯亮,开门4s后,电梯门关闭<关门指示灯灭),电梯继续运行,直至执行完请求信号后停在当前楼层。

6、 能记忆电梯内外的所以请求信号,并按照电梯运行规则依次响应,每个请求信号保留至执行后消除。

7、 电梯运行规则:

当电梯处于上升模式时,只响应比电梯所在位置高的上楼信号,由下至上依次执行,直到最后一个上楼请求执行完毕,如更高层有下楼请求时,则直接升到有下降请求的最高楼接客,然后进入下降模式,但电梯处于下降模式时,则与上升模式相反。

8、 电梯初始状态为一层门开。

进度安排:

周一:

根据设计要求查阅相关资料;

周二:

源代码设计;

周三、四:

程序设计及程序调试;

周五:

写课程设计报告和验收准备。

指导教师<签字):

年月日

学院院长<签字):

年月日

目录第1章引言•••••••••••••••••••••••••••••••••••••••••••••••••••••••2

1.1EDA技术的概念•••••••••••••••••••••••••••••••••••••••••2

1.2EDA技术的特点•••••••••••••••••••••••••••••••••••••••••2

1.3EDA设计流程••••••••••••••••••••••••••••••••••••••••••••2

1.4VHDL介绍••••••••••••••••••••••••••••••••••••••••••••••••3

第2章电梯控制器的设计要求与设计思路••••••••••••••••••4

2.1设计目的••••••••••••••••••••••••••••••••••••••••••••••••••42.2设计要求••••••••••••••••••••••••••••••••••••••••••••••••••4

第3章电梯控制器的综合设计••••••••••••••••••••••••••••••••53.1电梯控制器功能•••••••••••••••••••••••••••••••••••••••••53.2电梯控制器设计方案•••••••••••••••••••••••••••••••••••53.3电梯控制器实体设计•••••••••••••••••••••••••••••••••••63.4电梯控制器结构体设计••••••••••••••••••••••••••••••••63.5电梯控制器VHDL设计••••••••••••••••••••••••••••••7

3.6电梯控制器仿真图形••••••••••••••••••••••••••••••••••10

小结•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••11

参考文献•••••••••••••••••••••••••••••••••••••••••••••••••••••••••12

一、引言

1.1EDA技术的概念

EDA是电子设计自动化

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

1.2EDA技术的特点

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

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

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

1.3EDA设计流程

典型的EDA设计流程如下:

1、文本/原理图编辑与修改。

首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。

  2、编译。

完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。

  3、综合。

将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。

4、行为仿真和功能仿真。

利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。

  5、适配。

利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、布局布线。

适配报告指明了芯片内资源的分配与利用、引脚锁定、设计的布尔方程描述情况。

  6、功能仿真和时序仿真。

7、下载。

如果以上的所有过程都没有发现问题,就可以将适配器产生的下载文件通过FPGA/CPLD下载电缆载入目标芯片中。

8、硬件仿真与测试。

1.4硬件描述语言

VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage>主要用于描述数字系统的结构,行为,功能和接口。

除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。

VHDL的程序结构特点是将一项项目设计,或称设计实体<可以是一个元件,一个电路模块或一个系统)分成外部<或称可是部分,及端口>和内部<或称不可视部分),既涉及实体的内部功能和算法完成部分。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外部分的概念是VHDL系统设计的基本。

1.用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。

2.VHDL元件的设计与工艺无关,与工艺独立,方便工艺转换。

3.VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。

4.可以进行从系统级到逻辑级的描述,即混合描述。

5.VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。

二、电梯控制器的设计要求与设计思路

2.1设计目的

本次设计的目的就是通过实践深入理解EDA技术并掌握VHDL硬件描述语言的设计方法和思想。

通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。

通过对实用电梯控制系统的设计,巩固和综合运用所学知识,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。

2.2设计要求

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

本文采用VHDL语言来设计实用六层电梯控制器,其代码具有良好的可读性和易理解性,源程序经A1tera公司的MAX+plusII软件仿真。

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

通过独立的设计,能够完整的完成老师分配的课程设计任务。

通过对电梯控制系统的设计,掌握所学EDA课程的基本知识和对VHDL语言的综合设计应用。

通过课程设计,提高设计能力,提高分析解决实际问题的能力,并在设计中了解硬件编程的流程和思路,为以后工作和发挥技术打下基础。

三、电梯控制器的综合设计

3.1电梯控制器功能

1、 每层电梯的入口处设有上下请求开关,电梯内设有乘客到达层次的停站请求开关。

2、 设有电梯所处位置指示装置及电梯运行模式<上升或下降)指示装置。

3、 电梯每秒升降一层。

4、 电梯到达有停站请求的楼层后,经过1s电梯打开,开门只是灯亮,开门4s后,电梯门关闭<关门指示灯灭),电梯继续运行,直至执行完请求信号后停在当前楼层。

5、 能记忆电梯内外的所以请求信号,并按照电梯运行规则依次响应,每个请求信号保留至执行后消除。

6、 电梯运行规则:

当电梯处于上升模式时,只响应比电梯所在位置高的上楼信号,由下至上依次执行,直到最后一个上楼请求执行完毕,如更高层有下楼请求时,则直接升到有下降请求的最高楼接客,然后进入下降模式,但电梯处于下降模式时,则与上升模式相反。

7、 电梯初始状态为一层门开。

3.2电梯控制器设计方案

控制器的功能模块如图1所示,包括主控制器、分控制器、楼层选择器、状态显示器、译码器和楼层显示器。

乘客在电梯中选择所要到达的楼层,通过主控制器的处理,电梯开始运行,状态显示器显示电梯的运行状态,电梯所在楼层数通过译码器译码从而在楼层显示器中显示。

分控制器把有效的请求传给主控制器进行处理,同时显示电梯的运行状态和电梯所在楼层数。

因为分控制器相对简单很多,所以主控制器是核心部分。

电梯控制器采用状态机来实现,思路比较清晰。

可以将电梯等待的每秒钟以及开门、关门都看成一个独立的状态。

因为电梯又是每秒上升或下降一层,所以就可以通过一个统一的1秒为周期的时钟来触发状态机。

根据电梯的实际工作情况,可以把状态机设置10个状态,分别是“电梯停留在第1层”、“开门”、“关门”、“开门等待第1秒”、“开门等待第2秒”、“开门等待第3秒”、“开门等待第4秒”、“上升”、“下降”和“停止状态”。

各个状态之间的转换条件可由上面的设计要求所决定

3.3电梯控制器实体设计

首先考虑输入端口,一个异步复位端口reset,用于在系统不正常时回到初始状态;在电梯外部,必须有升降请求端口,一层是最低层,不需要有下降请求,四层是最高层,不需要有上升请求,二层则上升、下降请求端口都有;在电梯的内部,应该设有各层停留的请求端口:

一个电梯时钟输入端口,该输入时钟以1秒为周期,用于驱动电梯的升降及开门关门等动作;另有一个按键时钟输入端口,时钟频率比电梯时钟高。

  其次是输出端口,有升降请求信号以后,就得有一个输出端口来指示请求是否被响应,有请求信号以后,该输出端口输出逻辑‘l’。

被响应以后则恢复逻辑‘O’;同样,在电梯内部也应该有这样的输出端口来显示各层停留是否被响应;在电梯外部,需要一个端口来指示电梯现在所处的位置;电梯开门关门的状态也能用一个输出端口来指示;为了观察电梯的运行是否正确,可以设置一个输出端口来指示电梯的升降状态。

3.4电梯控制器结构体设计

首先说明一下状态。

状态机设置了lO个状态,分别是电梯停留在l层(stoponl>、开门(dooropen>、关门(doorclose>、开门等待第1秒(doorwaitl>、开门等待第2秒(doorwait2>、开门等待第3秒(doorwait3>、开门等待第4秒(doorwait4>、上升(up>、下降(down>和停止(stop>。

在实体说明定义完端口之后,在结构体architecture和begin之间需要有如下的定义语句,来定义状态机。

  TYPElift_stateIS

  (stoponl,dooropen,doorclose,doorwaitl,doorwait2,doorwait3,door。

wait4,up,down,stop>:

  SIGNALmylift:

lift_state:

  在结构体中,设计了俩个进程互相配合,一个是状态机进程作为主要进程,另外一个是信号灯控制进程作为辅助进程。

状态机进程中的很多判断条件是以信号灯进程产生的信号灯信号为依据的,而信号灯进程中信号灯的熄灭又是由状态机进程中传出的clearup和cleardn信号来控制。

  在状态机进程中,在电梯的上升状态中,通过对信号灯的判断,决定下一个状态是继续上升还是停止;在电梯下降状态中,也是通过对信号灯的判断,决定下一个状态是继续下降还是停止;在电梯停止状态中,判断是最复杂的,通过对信号的判断,决定电梯是上升、下降还是停止。

  在信号灯控制进程中,因为使用了专门的频率较高的按键时钟,所以使得按键的灵敏度增大,但是时钟频率不能过高,否则容易使按键过于灵敏。

按键后产生的点亮的信号灯(逻辑值为‘1’>用于作为状态机进程中的判断条件,而clearup和cleardn信号为逻辑‘l’使得相应的信号灯熄灭。

3、5电梯控制器仿真图形

libraryieee。

useieee.std_logic_1164.all。

useieee.std_logic_unsigned.all。

useieee.std_logic_arith.all。

entitydiantiis

port(clk:

instd_logic。

full,deng,quick,clr:

instd_logic。

c_u1,c_u2,c_u3:

instd_logic。

c_d2,c_d3,c_d4:

instd_logic。

d1,d2,d3,d4:

instd_logic。

g1,g2,g3,g4:

instd_logic。

door:

outstd_logic_vector(1downto0>。

led:

outstd_logic_vector(6downto0>。

led_c_u:

outstd_logic_vector(3downto0>。

led_c_d:

outstd_logic_vector(3downto0>。

led_d:

outstd_logic_vector(3downto0>。

wahaha:

outstd_logic。

ud,alarm:

outstd_logic。

up,down:

outstd_logic>。

enddianti。

architecturebehaveofdiantiis

signald11,d22,d33,d44:

std_logic。

signalc_u11,c_u22,c_u33:

std_logic。

signalc_d22,c_d33,c_d44:

std_logic。

signalq:

integerrange0to1。

signalq1:

integerrange0to6。

signalq2:

integerrange0to9。

signaldd,cc_u,cc_d,dd_cc:

std_logic_vector(3downto0>。

signalopendoor:

std_logic。

signalupdown:

std_logic。

signalen_up,en_dw:

std_logic。

begin

com:

process(clk>

begin

if(clk'eventandclk='1'>then

if(clr='1'>thenq1<=0。

q2<=0。

wahaha<='0'。

elsiffull='1'thenalarm<='1'。

q<=0。

if(q1>=3>thendoor<="10"。

elsedoor<="00"。

endif。

elsifq=1thenq<=0。

alarm<='0'。

ifq2=3thenwahaha<='1'。

else

if(opendoor='1'>thendoor<="10"。

q1<=0。

q2<=0。

up<='0'。

down<='0'。

elsifen_up='1'then

if(deng='1'>thendoor<="10"。

q1<=0。

q2<=q2+1。

elsifquick='1'thenq1<=3。

elsifq1=6thendoor<="00"。

updown<='1'。

up<='1'。

elsifq1>=3thendoor<="01"。

q1<=q1+1。

elseq1<=q1+1。

door<="00"。

endif。

elsifen_dw='1'then

if(deng='1'>thendoor<="10"。

q1<=0。

q2<=q2+1。

elsifquick='1'thenq1<=3。

elsifq1=6thendoor<="00"。

updown<='0'。

down<='1'。

elsifq1>=3thendoor<="01"。

q1<=q1+1。

elseq1<=q1+1。

door<="00"。

endif。

endif。

if(g1='1'>thenled<="1001111"。

ifd11='1'orc_u11='1'thend11<='0'。

c_u11<='0'。

opendoor<='1'。

elsifdd_cc>"0001"thenen_up<='1'。

opendoor<='0'。

elsifdd_cc="0000"thenopendoor<='0'。

endif。

elsifg2='1'thenled<="0010010"。

ifupdown='1'then

ifd22='1'orc_u22='1'thend22<='0'。

c_u22<='0'。

opendoor<='1'。

elsifdd_cc>"0011"thenen_up<='1'。

opendoor<='0'。

elsifdd_cc<"0010"thenen_dw<='1'。

opendoor<='0'。

endif。

elsifd22='1'orc_d22='1'thend22<='0'。

c_d22<='0'。

opendoor<='1'。

elsifdd_cc>"0011"thenen_up<='1'。

opendoor<='0'。

elsifdd_cc<"0010"thenen_dw<='1'。

opendoor<='0'。

endif。

elsifg3='1'thenled<="0000110"。

ifupdown='1'then

ifd33='1'orc_u33='1'thend33<='0'。

c_u33<='0'。

opendoor<='1'。

elsifdd_cc>"0111"thenen_up<='1'。

opendoor<='0'。

elsifdd_cc<"0100"thenen_dw<='1'。

opendoor<='0'。

endif。

elsifd33='1'orc_d33='1'thend33<='0'。

c_d33<='0'。

opendoor<='1'。

elsifdd_cc>"0111"thenen_up<='1'。

opendoor<='0'。

elsifdd_cc<"0100"thenen_dw<='1'。

opendoor<='0'。

endif。

elsifg4='1'thenled<="1001100"。

ifd44='1'orc_d44='1'thend44<='0'。

c_d44<='0'。

opendoor<='1'。

elsifdd_cc<"1000"thenen_dw<='1'。

opendoor<='0'。

endif。

elseen_up<='0'。

en_dw<='0'。

endif。

endif。

elseq<=1。

alarm<='0'。

if(d1='1'>thend11<=d1。

elsifd2='1'thend22<=d2。

elsifd3='1'thend33<=d3。

elsifd4='1'thend44<=d4。

endif。

ifc_u1='1'thenc_u11<=c_u1。

elsifc_u2='1'thenc_u22<=c_u2。

elsifc_u3='1'thenc_u33<=c_u3。

endif。

ifc_d2='1'thenc_d22<=c_d2。

elsifc_d3='1'thenc_d33<=c_d3。

elsifc_d4='1'thenc_d44<=c_d4。

endif。

dd<=d44&d33&d22&d11。

cc_u<='0'&c_u33&c_u22&c_u11。

cc_d<=c_d44&c_d33&c_d22&'0'。

dd_cc<=ddorcc_uorcc_d。

endif。

ud<=updown。

led_d<=dd。

led_c_u<=cc_u。

led_c_d<=cc_d。

endif。

endprocess。

endbehave。

3、6电梯控制器仿真图形

仿真1:

在一楼的电梯内部有一个去向三楼的申请,在二楼有一个电梯向上的外部的申请信号,在四楼有个电梯向下的外部申请信号。

电梯先响应二楼外部的申请信号,关门、向上,led显示1、2、3、4,到二楼时执行开门动作,二楼的申请清零,到达三楼时,执行开门动作,去向三楼的申请信号清零,并向四楼运行,到达四楼后,响应四楼向下的申请信号并把该信号清零。

仿真2:

在一楼的电梯内部有一个去向二楼和四楼的申请,在二楼有一个电梯向下的外部的申请信号,在三楼有个电梯向上的外部申请信号。

电梯先响应一楼内部的申请信号,关门、向上,led显示1、2、3、4,到二楼时执行开门动作,二楼的内部申请清零,到达三楼时,执行开门动作,三楼的外部申请信号清零,并向四楼运行,到达四楼后,电梯向下运行,到二楼时响应二楼向下的申请信号并把该信号清零。

小节

  在本设计中,因为考虑了扩展性,所以在信号定义的时候就使用了二进制的向量,而不是整数。

在设计方法上也做了特殊的设计,所以使得扩展性较好。

如果要实现n层电梯的控制,首先在端口的地方就要加入所有的按键,而指示灯只要把向量中的4改成n就可以了。

同时需要在按键控制进程里加入其他按键触发指示灯的语句。

在电梯的升降状态将4改成n,在电梯的开门状态中将3改成n一1,在关门状态,将position=4改成position=n,关键是修改position=2的部分,如果按照每层罗列,将十分烦琐,所以得寻求各层判断条件的共性,解决方法之一就是,新建一个全局向量one为std—logic—veoter(ndownto3>应改写成0,然后和stoplight与fuplight向量比较,如果有更高层次的请求,那么stoplight或fuplight向量,如果stoplight和fuplight向量都小于one向量,表示没有更高层次的内部上升请求,此时将fdnlight向量和one向量比较,如果大于,则表示高层有下降要求,电梯得上升。

如果没有任何请求信号,则电梯停止,否则电梯下降。

如此就可以大大简化程序,但是要注意的是one向量必须实时更新,以作为判断依据,可

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

当前位置:首页 > 医药卫生 > 基础医学

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

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