三层电梯控制器实验报告.docx

上传人:b****6 文档编号:3883529 上传时间:2022-11-26 格式:DOCX 页数:14 大小:60.31KB
下载 相关 举报
三层电梯控制器实验报告.docx_第1页
第1页 / 共14页
三层电梯控制器实验报告.docx_第2页
第2页 / 共14页
三层电梯控制器实验报告.docx_第3页
第3页 / 共14页
三层电梯控制器实验报告.docx_第4页
第4页 / 共14页
三层电梯控制器实验报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

三层电梯控制器实验报告.docx

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

三层电梯控制器实验报告.docx

三层电梯控制器实验报告

大连理工大学本科实验报告

 

题目:

三层电梯控制器

 

课程名称:

数字电路与系统设计

学院(系):

电子信息与电气工程学部

专业:

班级:

学生姓名:

学号:

完成日期:

2012-7-5

成绩:

 

2012年7月05日

题目:

三层电梯控制器

1设计要求

随着科技的发展,电梯的使用越来越普遍,在商业大厦、宾馆酒店、办公场所、居民住宅中广泛使用。

并且随着生活水平的提高,人们对电梯功能的要求也不断提高,相应地其控制方式也在不停地方生变化。

对于电梯的控制,传统的方法是使用继电器——接触器控制系统进行控制技术的不断发展,微型计算机在电梯控制上的应用日益广泛,现在已进入全微机化控制的时代。

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

1.PLC控制;2.单板机控制;3.单片机控制;4.单微机控制;5.多微机控制;6.人工智能控制。

目前FPGA已广泛应用与电子设计与控制的各个方面。

本设计就是使用一片FPGA来实现对三层电梯的控制。

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

三层电梯控制器的功能如下:

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

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

(3)电梯每秒升(降)一层楼。

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

(5)能记忆电梯内外的所有请求信号,并按照电梯运行规则按顺序响应,每个请求信号保留至执行后消除。

(6)电梯运行规则:

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

当电梯处于下降模式时与上升模式相反。

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

(8)当收到报警信号时,电梯停止工作,电梯维持当前状态不动。

报警信号解除时,电梯继续工作。

(9)电梯到达指定楼层时有声音提示。

2设计分析及系统方案设计

电梯控制器的设计方法有很多,本文采用状态机来描述,其优点是思路清晰。

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

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

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

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

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

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

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

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

三层电梯控制器的实体设计  

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

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

  

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

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

三层电梯控制器的结构体设计

  首先说明一下状态。

状态机设置了lO个状态,分别是电梯停留在l层(stopon1)、开门(dooropen)、关门(doorclose)、开门等待第1秒(waitl)、开门等待第2秒(wait2)、开门等待第3秒(wait3)、开门等待第4秒(wait4)、上升(up)、下降(down)和停止(stop)。

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

typestate_typeis 

(stopon1,dooropen,doorclose,waitl,wait2,wait3,wait4,up,down,stop);

  signalstate_type:

state;

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

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

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

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

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

3系统以及模块硬件电路设计

系统电路如图2所示。

表1开发系统工作模式:

cycloneII

接口

名称

类型

(输入/输出)

键位名

引脚号

说明

clk

输入

--

PIN_N2

系统时钟

caution

输入

SW16

PIN_V1

报警按键

reset

输入

SW17

PIN_V2

异步复位

up1

输入

SW0

PIN_N25

外部一层上升

up2

输入

SW1

PIN_N26

外部二层上升

down2

输入

SW2

PIN_P25

外部二层下降

down3

输入

SW3

PIN_AE14

外部三层下降

stop1

输入

SW4

PIN_AF14

内部一层停止

stop2

输入

SW5

PIN_AD13

内部二层停止

stop3

输入

SW6

PIN_AC13

内部三层停止

position

输入/输出

--

--

当前位置

udsig

输入/输出

--

--

‘0’下降,’1’上升

doorlight

输入/输出

--

--

‘0’关门,’1’开门

location

输出

HEX6(6…0)

PIN_R2

PIN_P4

PIN_P3

PIN_M2

PIN_M3

PIN_M5

PIN_M4

当前位置数码管显示

udlight1

输出

HEX4(6…0)

PIN_U9

PIN_U1

PIN_U2

PIN_T4

PIN_R7

PIN_R6

PIN_T3

当前状态数码管显示

udlight2

输出

HEX5(6…0)

PIN_T2

PIN_P6

PIN_P7

PIN_T9

PIN_R5

PIN_R4

PIN_R3

当前状态数码管显示

dlight1

输出

HEX0(6…0)

PIN_AF10

PIN_AB12

PIN_AC12

PIN_AD11

PIN_AE11

PIN_V14

PIN_V13

门状态数码管显示

dlight2

输出

HEX1(6…0)

PIN_V20

PIN_V21

PIN_W21

PIN_Y22

PIN_AA24

PIN_AA23

PIN_AB24

门状态数码管显示

dlight3

输出

HEX2(6…0)

PIN_AB23

PIN_V22

PIN_AC25

PIN_AC26

PIN_AB26

PIN_AB25

PIN_Y24

门状态数码管显示

uplight

输出

LEDR(2…0)

PIN_AD21

PIN_AD23

PIN_AD22

外部上升位置显示

downlight

输出

LEDR(6…4)

PIN_AB21

PIN_AF23

PIN_AE23

外部下降位置显示

stoplight

输出

LEDG(7…5)

PIN_U17

PIN_AA20

PIN_Y18

内部停止位置显示

clearup

中间信号

--

清除上升请求指示灯信号

cleardn

中间信号

--

清除下降请求指示灯信号

4系统的VHDL设计

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityfliftis

port(clk:

instd_logic;--系统时钟

reset:

instd_logic;--异步复位按键

caution:

instd_logic;--报警按键

up1:

instd_logic;--第一层上升请求按钮

up2:

instd_logic;--第二层上升请求按钮

down2:

instd_logic;--第二层下降请求按钮

down3:

instd_logic;--第三层下降请求按钮

stop1,stop2,stop3:

instd_logic;--电梯内部请求按钮

uplight:

bufferstd_logic_vector(3downto1);--电梯外部上升请求指示灯

downlight:

bufferstd_logic_vector(3downto1);--电梯外部下降请求指示灯

stoplight:

bufferstd_logic_vector(3downto1);--电梯内部各层请求指示灯

position:

bufferintegerrange1to3;--电梯位置指示

location:

outstd_logic_vector(6downto0);--电梯位置数码管显示

udsig:

bufferstd_logic;--电梯升降指示

doorlight:

bufferstd_logic;--电梯门开关指示灯

dlight1,dlight2,dlight3:

outstd_logic_vector(6downto0);--电梯门开关数码管显示

udlight1,udlight2:

outstd_logic_vector(6downto0));--电梯升降数码管指示

endflift;

architecturebehavoffliftis

typestate_typeis

(stopon1,dooropen,doorclose,waitl,wait1,wait2,wait3,wait4,up,down,stop);

signalstate:

state_type:

=stopon1;

signalclearup:

std_logic;--用于清除上升请求指示灯信号

signalcleardn:

std_logic;--用于清除下降请求指示灯信号

signalbuttonclk,fliclk:

std_logic;--按键时钟与电梯时钟

signalcount:

integerrange0to49999999;--计数器

signalclk1:

std_logic;--计数器时钟

begin

process(clk)--1秒时钟进程

begin

ifreset='1'then

count<=0;clk1<='0';

elsifrising_edge(clk)then

ifcount=49999999then

count<=0;clk1<='1';

elsecount<=count+1;clk1<='0';

endif;

endif;

buttonclk<=clk;

fliclk<=clk1;

endprocess;

process(reset,fliclk)--控制电梯状态进程

variablepos:

integerrange3downto1;

begin

ifreset='1'then

state<=stopon1;

clearup<='0';

cleardn<='0';

elsifrising_edge(fliclk)andcaution/='1'then

casestateis--状态转移

whenstopon1=>doorlight<='1';

position<=1;

pos:

=1;

state<=wait1;

whenwaitl=>state<=wait2;

whenwait2=>clearup<='0';cleardn<='0';state<=wait3;

whenwait3=>state<=wait4;

whenwait4=>state<=doorclose;

whendoorclose=>doorlight<='0';

ifudsig='0'andcaution/='1'then--上升情况

ifposition=3then--电梯在三楼

ifstoplight="000"anduplight="000"anddownlight="000"then

udsig<='1';state<=doorclose;

elsifstoplight="100"oruplight="100"ordownlight="100"then

udsig<='1';state<=dooropen;

else

udsig<='1';state<=down;

endif;

elsifposition=2then--电梯在二楼

ifstoplight="000"anduplight="000"anddownlight="000"then

udsig<='0';state<=doorclose;

elsifstate=doorcloseandstoplight="010"then

state<=dooropen;

elsifstate=doorcloseanduplight="010"then

udsig<='0';state<=dooropen;

elsifstate=doorcloseanddownlight="010"then

udsig<='1';state<=dooropen;

elsifstoplight(3)='1'ordownlight(3)='1'then

udsig<='0';state<=up;

else

udsig<='1';state<=down;

endif;

elsifposition=1then--电梯在一楼

ifstoplight="000"anduplight="000"anddownlight="000"then

udsig<='0';state<=doorclose;

elsifstoplight="001"oruplight="001"ordownlight="001"then

udsig<='0';state<=dooropen;

else

udsig<='0';state<=up;

endif;

endif;

endif;

ifudsig='1'andcaution/='1'then--下降情况

ifposition=1then--电梯在一楼

ifstoplight="000"anduplight="000"anddownlight="000"then

udsig<='0';state<=doorclose;

elsifstoplight="001"oruplight="001"ordownlight="001"then

udsig<='0';state<=dooropen;

else

udsig<='0';state<=up;

endif;

elsifposition=2then--电梯在二楼

ifstoplight="000"anduplight="000"anddownlight="000"then

udsig<='1';state<=doorclose;

elsifstate=doorcloseandstoplight="010"then

state<=dooropen;

elsifstate=doorcloseanduplight="010"then

udsig<='0';state<=dooropen;

elsifstate=doorcloseanddownlight="010"then

udsig<='1';state<=dooropen;

elsifstoplight

(1)='1'oruplight

(1)='1'then

udsig<='1';state<=down;

else

udsig<='0';state<=up;

endif;

elsifposition=3then--电梯在三楼

ifstoplight="000"anduplight="000"anddownlight="000"then

udsig<='1';state<=doorclose;

elsifstoplight="100"oruplight="100"ordownlight="100"then

udsig<='1';state<=dooropen;

else

udsig<='1';state<=down;

endif;

endif;

endif;

whenup=>position<=position+1;pos:

=pos+1;

ifpos=2and(stoplight(3)='1'ordownlight(3)='1')then

state<=up;

else

state<=stop;

endif;

whendown=>position<=position-1;pos:

=pos-1;

ifpos=2and(stoplight

(1)='1'oruplight

(1)='1')then

state<=down;

else

state<=stop;

endif;

whenstop=>state<=dooropen;

whendooropen=>doorlight<='1';

clearup<='1';

cleardn<='1';

state<=waitl;

whenothers=>state<=doorclose;

endcase;

endif;

endprocess;

process(clk)--控制按键指示灯进程

begin

ifreset='1'then

stoplight<="000";uplight<="000";downlight<="000";

elsifrising_edge(buttonclk)andcaution/='1'then

ifclearup='1'then

stoplight(position)<='0';uplight(position)<='0';

else

ifup1='1'thenuplight

(1)<='1';endif;

ifup2='1'thenuplight

(2)<='1';endif;

endif;

ifcleardn='1'then

stoplight(position)<='0';downlight(position)<='0';

else

ifdown2='1'thendownlight

(2)<='1';endif;

ifdown3='1'thendownlight(3)<='1';endif;

endif;

ifstop1='1'thenstoplight

(1)<='1';endif;

ifstop2='1'thenstoplight

(2)<='1';endif;

ifstop3='1'thenstoplight(3)<='1';endif;

endif;

endprocess;

process(position)--楼层数码管显示进程

begin

casepositionis

when1=>location<="1111001";

when2=>location<="0100100";

when3=>location<="0110000";

endcase;

endprocess;

process(doorlight)--电梯门数码管显示进程

begin

casedoorlightis

when'1'=>dlight1<="1001000";dlight2<="1000000";dlight3<="1111111";

when'0'=>dlight1<="0001110";dlight2<="0001110";dlight3<="1000000";

endcase;

endprocess;

process(udsig)--电梯升降显示进程

begin

caseudsigis

when'0'=>udlight1<="0001100";udlight2<="1000001";

when'1'=>udlight1<="0101011";udlight2<="0100001";

endcase;

endprocess;

endbehav;

5结论以及结果说明

调试环境:

软件:

Altera’sQuartusII

硬件:

AlteraDE2Board

参数:

clk为50MHz信号。

系统运行结果:

系统运行良好。

参考文献

[1]刘爱荣,王振成,曹瑞,卢印举,等.EDA技术与CPLD/FPGA开发应用简明教程

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

当前位置:首页 > 高中教育 > 语文

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

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