基于EDA技术的电梯控制器Word格式.docx
《基于EDA技术的电梯控制器Word格式.docx》由会员分享,可在线阅读,更多相关《基于EDA技术的电梯控制器Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
![基于EDA技术的电梯控制器Word格式.docx](https://file1.bdocx.com/fileroot1/2022-11/27/179d6804-a19b-4ddb-8e4c-61028bb88a5d/179d6804-a19b-4ddb-8e4c-61028bb88a5d1.gif)
电梯开门关门的状态也能用一个输出端口来指示;
为了观察电梯的运行是否正确,可以设置一个输出端口来指示电梯的升降状态。
在端口的定义中定义position时选用的是整型数据类型(INTEGRER),主要是为了在电梯运行是便于观察。
整型直接可以看出电梯运行是楼层的变化,在第一层就显示1,第二层就显示2,很直观。
当然,position的定义也可以用标准逻辑矢量(STD_LOGIC_VECTOR)来定义,但是如果选用标准逻辑矢量,在电梯运行时就不是那么好观察。
这里是四层的电梯控制器,那么只需定义一个两位的就足够显示了。
”00”的时候对应电梯的第一层,”11”的时候就对应第四层。
但是”11”的十进制值为3,没有和层次显示的第四层想对应起,所以就放弃选用标准逻辑矢量来定义position,而选用的整型。
(2)四层电梯控制系统的结构体设计
首先说明一下状态。
状态机设置了10个状态,分别是电梯停留在1层(stopon1)、开门(dooropen)、关门(doorclose)、开门等待第1秒(doorwait1)、开门等待第2秒(doorwait2)、开门等待第3秒(doorwait3)、开门等待第4秒(doorwait4)、上升(up)、下降(down)和停止(stop)。
在实体说明中定义完端口之后,在结构体个之间需要有如下的定义语句,来定义状态机。
TYPElift_stateIS
(stopon1,dooropen,doorclose,doorwait1,doorwait2,doorwait3,
doorwait4,up,down,stop)--电梯的10个状态
SIGNALmylift:
lift_state;
--定义为lift类型的信号mylift
在结构体中,设计了两个进程互相配合,一个状态机进程作为主要进程,另外一个是信号灯控制进程作为辅助进程。
状态机进程中的很多判断条件是以信号灯进程产生的信号灯信号为依据的,而信号灯进程中信号灯的熄灭又是有状态机进程中传出clearup和cleardn信号来控制。
在状态机进程中,在电梯上升状态中,通过对信号灯的判断,决定下一个状态是继续上升还是停止;
在电梯下降状态中,也是通过对信号灯的判断,决定下一个状态是继续下降还是是停止;
在电梯停止状态中,判断是最复杂的,通过对信号的判断,决定电梯是上升、下降还是停止。
在信号灯控制进程中,由于使用了专门的频率较高的按键时钟,所以使得按键的灵敏度增大,但是时钟频率不能过高,否则容易使按键过于灵敏。
按键后产生的点亮的信号灯(逻辑值为’1’)用于作为状态机进程中的判断条件,而clearup和cleardn信号为逻辑’1’使得相应的信号灯熄灭。
(3)四层电梯控制系统的设计
输入输出端口定义表
Buttonclk
按键时钟
Liftclk
电梯时钟
Reset
异步复位信号
f1upbutton
第一层上升请求
f2upbutton
第二层上升请求
f3upbutton
第三层上升请求
f2dnbutton
第二层下降请求
f3dnbutton
第三层下降请求
f4dnbutton
第四层下降请求
Fuplight
上升指示灯(1到4)
Fdnlight
下降指示灯(1到4)
stop1button
第一层到站请求
stop2button
第二层到站请求
stop3button
第三层到站请求
stop4button
第四层到站请求
Stoplight
停止指示灯(1到4)
Position
电梯位置(1到4)
Doorlight
门灯
Udsig
电梯模式
表2-1输入输出端口定义表
Table2-1inputandoutputportdefinitiontable
源程序见附录
3系统仿真
图3-1系统仿真
Figure3-1systemsimulation
图3-1描述的是系统的仿真波形。
电梯初始状态是停在一楼,电梯门打开,当有人操作是会先关闭然后升到相应楼层,门打开。
因为不可以自行关门,所以,停留四秒之后自动关闭电梯门。
人在电梯内部按相应楼层,电梯到达相应楼层后门打开。
并且在相应楼层等待。
4结束语
由于CPLD具有性能稳定、抗干扰能力强、设计配置灵活等特点,配合VHDL语言的突出的优点,因此在工业控制方面得到了广泛应用。
相信以后必将受到世界范围内电子工程设计人员人员的广泛关注和普遍欢迎。
本文中设计的电梯控制器利用以CPLD为实现载体,以VHDL为描述语言实现了电梯的升降舒适感和运行的可靠性,更相信在以后的智能建筑中得到广泛的应用和推广。
参考文献
[1]潘松,黄继业.EDA技术实用教程.北京:
科学出版社,2002.
[2]徐志军,徐光辉编著《CPLD/FPGA的开发与应用》,电子工业出版社,2005.
附录:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYdiantiIS
PORT(buttonclk:
INSTD_LOGIC;
liftclk:
reset:
f1upbutton:
f2upbutton:
f2dnbutton:
f3upbutton:
f3dnbutton:
f4dnbutton:
fuplight:
BUFFERSTD_LOGIC_VECTOR(4DOWNTO1);
fdnlight:
stop1button,stop2button,stop3button,stop4button:
stoplight:
position:
BUFFERINTEGERRANGE1TO4;
doorlight:
OUTSTD_LOGIC;
udsig:
BUFFERSTD_LOGIC);
ENDdianti;
ARCHITECTUREartOFdiantiIS
TYPElift_stataIS
(stopon1,dooropen,doorclose,doorwait1,doorwait2,doorwait3,doorwait4,up,down,stop);
lift_stata;
SIGNALclearup:
STD_LOGIC;
SIGNALcleardn:
BEGIN
ctrlift:
PROCESS(reset,liftclk)
VARIABLEpos:
INTEGERRANGE4DOWNTO1;
IFreset='
1'
THEN
mylift<
=stopon1;
clearup<
='
0'
;
cleardn<
ELSE
IFliftclk'
EVENTANDliftclk='
CASEmyliftIS
WHENstopon1=>
doorlight<
position<
=1;
pos:
=doorwait1;
WHENdoorwait1=>
mylift<
=doorwait2;
WHENdoorwait2=>
clearup<
=doorwait3;
WHENdoorwait3=>
=doorwait4;
WHENdoorwait4=>
=doorclose;
WHENdoorclose=>
IFudsig='
IFposition=4THEN
IF
stoplight="
0000"
ANDfuplight="
ANDfdnlight="
udsig<
ELSEudsig<
=down;
ENDIF;
ELSIFposition=3THEN
IF
ANDfuplight="
andfdnlight="
ELSIF
stoplight(4)='
ORfdnlight(4)='
=up;
ELSIFposition=2THEN
ELSIF
(stoplight(3)='
ORfuplight(3)='
)THEN
(stoplight(4)='
)THEN
(fdnlight(3)='
ELSIFposition=1THEN
stoplight<
="
ANDfuplight<
ANDfdnlight<
ELSIFudsig='
IFposition=1THEN
THEN
cleardn<
stoplight
(1)='
ORfuplight
(1)='
(stoplight
(2)='
ORfdnlight
(2)='
(stoplight
(1)='
(fuplight
(2)='
ELSIFposition=4THEN
WHENup=>
position<
=position+1;
pos:
=pos+1;
IFpos<
4AND(stoplight(pos)='
ORfdnlight(pos)='
)
THENmylift<
=stop;
ELSIFpos=4AND(stoplight(pos)='
ELSEmylift<
WHENdown=>
=position-1;
=pos-1;
IFpos>
1AND(stoplight(pos)='
ORfuplight(pos)='
ELSIFpos=1AND(stoplight(pos)='
WHENstop=>
=dooropen;
WHENdooropen=>
=3AND(stoplight(position)='
ORfuplight(position)='
)THEN
ELSEclearup<
position>
=2AND(stoplight(position)='
ORfdnlight(position)='
ENDCASE;
ENDprocessctrlift;
ctrlight:
PROCESS(reset,buttonclk)
fuplight<
fdnlight<
ELSE
IFbuttonclk'
EVENTANDbuttonclk='
IFclearup='
stoplight(position)<
fuplight(position)<
IFf1upbutton='
THENfuplight
(1)<
ELSIFf2upbutton='
THENfuplight
(2)<
ELSIFf3upbutton='
THENfuplight(3)<
IFcleardn='
fdnlight(position)<
IFf2dnbutton='
THENfdnlight
(2)<
ELSIFf3dnbutton='
THENfdnlight(3)<
ELSIFf4dnbutton='
THENfdnlight(4)<
IFstop1button='
THENstoplight
(1)<
ELSIFstop2button='
THENstoplight
(2)<
ELSIFstop3button='
THENstoplight(3)<
ELSIFstop4button='
THENstoplight(4)<
ENDIF;
ENDprocessctrlight;
ENDart;