三层电梯控制器实验报告.docx
- 文档编号:11321978
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:17
- 大小:60.30KB
三层电梯控制器实验报告.docx
《三层电梯控制器实验报告.docx》由会员分享,可在线阅读,更多相关《三层电梯控制器实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
三层电梯控制器实验报告
大连理工大学本科实验报告
题目:
三层电梯控制器
课程名称:
数字电路与系统设计
学院(系):
电子信息与电气工程学部
专业:
班级:
学生姓名:
学号:
完成日期:
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技术与CPL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三层 电梯 控制器 实验 报告