电梯控制器设计论文.docx
- 文档编号:27644616
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:21
- 大小:151.98KB
电梯控制器设计论文.docx
《电梯控制器设计论文.docx》由会员分享,可在线阅读,更多相关《电梯控制器设计论文.docx(21页珍藏版)》请在冰豆网上搜索。
电梯控制器设计论文
电梯控制器设计论文
随着我国城市化进程的推进,高层建筑越来越多,作为建筑物中最重要的垂直运
输工具的电梯,得到了广泛的应用。
.最初的电梯控制技术普遍采用继电器控制,由
于成本高,故障率高,在实际运用中已经被逐渐淘汰出市场,而可编程控制器CPLD由于可靠性高、编程和接口简洁易懂,因此,在电梯控制方面逐步得到了更加广泛的
应用。
复杂可编程逻辑器件(ComplexProgrammableLogicDevice,缩写:
CPLD),CPLD适合用来实现各种运算和组合逻辑(combinationallogic)。
一颗CPLD内等于包含了数颗的PAL(ProgrammableArrayLogic),各PAL(逻辑区块)间的互接连接也可
以进行程序性的规划、烧录,CPLD运用这种多合一(All-In-One)的集成作法,使其一颗就能实现数千个逻辑门,甚至数十万个逻辑门才能构成的电路。
CPLD不仅具有可以满足电子系统小型化、低功耗、高可靠性、开发过程投资小、周期短等优点而且可
以通过软件编程对硬件的结构和工作方式进行重构,使得硬件设计如同软件设计那样
方便快捷。
VHDL是美国国防部20世纪80年代开发的一种硬件描述语言,现已经成为IEEE的工业标准硬件描述语言。
具有强大的语言结构、多层次的描述功能、良好的移植性
和快速的ASIC转换功能,支持硬件设计、综合、验证和测试。
基于功能、价格、功耗以及电梯控制器的实际需要等多方面的考虑,本系统选用
超低功耗CPLD——EPM1270TI44C5作为系统的处理核心,它是Altera公司推出的一款低功耗CPLD,它具丰富的逻辑处理单元和外围接口,是一款性价比较高的CPLD。
利用它作电梯控制,显示运行状态和层数,不仅极大的简化了系统硬件电路,还大大
提高了性价比。
QuartusII是Altera公司开发的功能强大的PLD编译工具,全面取代MAX+PLUS,下面将利用VHDL语言在CPLD器件上实现电梯控制器,源程序经QuartusII软件调试优化,最后下载到Altera公司的CPLD芯片EPM1270TI44C5中实现。
1.利用CPLD的强大的逻辑处理能力实现对电梯的各种运行的控制
2.利用点阵清晰的显示电梯运行的方向和所在层数
3.外围按钮开关输入请求信号
4.硬件电路很简化
4
本系统结合实际需要以CPLD开发平台(以EPM1270TI44C5为核心)为处理核
心并运用其外围接口来实现对电梯的控制、显示电梯运行状态(上下)、显示电梯运
行所在的层数,用发光二极管来显示请求,和蜂鸣器提醒等。
其结构见图3-1:
显示电梯运行方向(上下)指示灯模块EPM1270TI44C5
CPLD
显示所在层数蜂鸣器模块
图3-1系统结构3.2
图3-2是VHDL描述模块流程图
定义元件库
输入端口
定义threeflift实体
输出端口
状态机进程(主要进程)结构体
信号灯控制进程
(补助进程)结束按键信号灯进程
图3-2模块流程
3.2.1
软件的主要功能是:
根据外围开关的输入请求信号对电梯的运行进行处理,实现
信号的显示和时间的控制。
3.333
5
图3-3总体电路图
根据设计要求,此设计可分为请求信号输入模块、主控模块和输出显示模块3个
部分,各个模块功能如下:
3.4
A主模块dianti
该模块见图3-4是整个程序的核心,主要的设计思想是:
通过外围输入请求信
号,把电梯分为四个状态:
一楼状态、二楼状态、三楼状态、和开状态,对每一个状
态分析其所有可能。
图3-4模块A
以下是主模块源程序:
6
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydiantiis
port(up1,up2,clk,down2,down3,k1,k2,k3:
instd_logic;
site,mode:
outstd_logic_vector(1downto0);
a1,a2,a3:
outstd_logic;
b1,b2,b3,b4:
outstd_logic;
fmq,door:
outstd_logic);
enddianti;
architectureveryhard_arcofdiantiistypestate_typeis(c1,c2,c3,kai);
begin
process(clk)
variableting:
std_logic_vector(3downto1);
variableup,ceng:
std_logic_vector(2downto1);
variabledown:
std_logic_vector(3downto2);
variablex,y,z:
std_logic;
variablemo:
std_logic_vector(1downto0);
variablecnt1:
std_logic_vector(9downto0);
variablecnt2:
std_logic_vector(1downto0);
variablestate:
state_type;
begin
ifclk'eventandclk='1'then
ifup1='0'then
up
(1):
='1';
endif;
ifup2='0'then
up
(2):
='1';
endif;
ifdown3='0'then
down(3):
='1';
7
endif;
ifdown2='0'then
down
(2):
='1';
endif;
ifk1='0'then
ting
(1):
='1';
endif;
ifk2='0'then
ting
(2):
='1';
endif;
ifk3='0'then
ting(3):
='1';
endif;
cnt1:
=cnt1+1;
ifcnt1="0000000001"then
casestateis
whenc1=>ceng:
="01";
ifup
(1)='0'andup
(2)='0'anddown(3)='0'anddown
(2)='0'
andting
(1)='0'andting
(2)='0'andting(3)='0'then
z:
='1';
endif;
ifz='0'then
door<='1';
else
door<='0';
ifting
(1)='1'orup
(1)='1'then
state:
=kai;
fmq<='1';
ting
(1):
='0';
up
(1):
='0';
elsifup
(2)='1'orting
(2)='1'then
state:
=c2;
8
elsifdown(3)='1'orting(3)='1'then
state:
=c2;
x:
='1';
elsifdown
(2)='1'then
state:
=c2;
mo:
="10";
endif;
endif;
ifup
(1)='0'andup
(2)='0'anddown(3)='0'anddown
(2)='0'
andting
(1)='0'andting
(2)='0'andting(3)='0'then
mo:
="00";
else
mo:
="01";
endif;
whenc2=>ceng:
="10";
ifmo="01"then
ifting
(2)='1'orup
(2)='1'then
state:
=kai;
fmq<='1';
ting
(2):
='0';
up
(2):
='0';
elsifdown(3)='1'orting(3)='1'orx='1'then
state:
=c3;
x:
='0';
elsifdown
(2)='1'orup
(1)='1'orting
(1)='1'then
mo:
="10";
endif;
else
ifting
(2)='1'ordown
(2)='1'then
state:
=kai;
fmq<='1';
ting
(2):
='0';
9
down
(2):
='0';
elsifup
(1)='1'orting
(1)='1'ory='1'then
state:
=c1;
y:
='0';
elsifup
(2)='1'ordown(3)='1'orting(3)='1'then
mo:
="01";
endif;
endif;
ifup
(1)='0'andup
(2)='0'anddown(3)='0'anddown
(2)='0'
andting
(1)='0'andting
(2)='0'andting(3)='0'then
mo:
="00";
endif;
whenc3=>
ceng:
="11";
ifting(3)='1'ordown(3)='1'then
state:
=kai;
fmq<='1';
ting(3):
='0';
down(3):
='0';
elsifdown
(2)='1'orting
(2)='1'then
state:
=c2;
elsifup
(1)='1'orting
(1)='1'then
state:
=c2;
y:
='1';
elsifup
(2)='1'then
state:
=c2;
mo:
="01";
endif;
ifup
(1)='0'andup
(2)='0'anddown(3)='0'anddown
(2)='0'
andting
(1)='0'andting
(2)='0'andting(3)='0'then
mo:
="00";
else
10
mo:
="10";
endif;
whenkai=>door<='1';
cnt2:
=cnt2+1;
fmq<='0';
ifcnt2="11"then
door<='0';
ifceng="01"then
state:
=c1;
elsifceng="10"then
state:
=c2;
else
state:
=c3;
endif;
endif;
endcase;
endif;
endif;
site<=ceng;
a1<=ting
(1);
a2<=ting
(2);
a3<=ting(3);
b1<=up
(1);
b2<=up
(2);
b3<=down
(2);
b4<=down(3);
mode<=mo;
endprocess;
endveryhard_arc;
以下图3-5为主模块dianti的仿真结果图
11
图3-5模块A仿真结果
B模块floor
该模块图3-6的功能是将楼层信号利用8*8点阵显示。
该模块主要设计思想是主模块提供的楼层信号site[1..0],通过程序处理,由输出信号sel[2..0]和q[0..7]动态逐行地点亮点阵管。
输出信号sel[2..0]通过74LS138译码控制点
阵的行电平输出信号q[0..7]直接控制点阵的列电平。
图3-6模块B
以下是模块floor源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityflooris
port(clk:
instd_logic;
a:
instd_logic_vector(1downto0);
sel:
outstd_logic_vector(2downto0);
q:
outstd_logic_vector(0to7));
12
endfloor;
architecturedian_arcoffloorisbegin
process(clk)
variableseel:
std_logic_vector(2downto0);
begin
ifclk'eventandclk='1'then
seel:
=seel+1;
ifa="01"then
caseseelis
when"001"=>q<="00000010";
when"010"=>q<="00000010";
when"011"=>q<="00000010";
when"100"=>q<="00000010";
when"101"=>q<="00000010";
when"110"=>q<="00000010";
when"111"=>q<="00000010";
whenothers=>q<="00000000";
endcase;
elsifa="00"then
q<="00000000";
elsifa="10"then
caseseelis
when"001"=>q<="01111110";
when"010"=>q<="00000010";
when"011"=>q<="00000010";
when"100"=>q<="01111110";
when"101"=>q<="01000000";
when"110"=>q<="01000000";
when"111"=>q<="01111110";
whenothers=>q<="00000000";
13
endcase;
elsifa="11"then
caseseelis
when"001"=>q<="01111110";
when"010"=>q<="00000010";
when"011"=>q<="00000010";
when"100"=>q<="01111110";
when"101"=>q<="00000010";
when"110"=>q<="00000010";
when"111"=>q<="01111110";
whenothers=>q<="00000000";
endcase;
endif;
endif;
sel<=seel;
endprocess;
enddian_arc;
以下图3-7为模块floor的仿真结果:
图3-7模块floor的仿真结果
C模块updown
该模块图3-8的功能是将电梯工作模式利用8*8点阵显示。
该模块主要设计思想
是主模块提供的电梯运行模式信号,通过程序处理,由输出信号sel[2..0]和qq[0..7]动
态逐行地点亮点阵管。
输出信号sel[2..0]通过74LS138译码控制点阵的行电平,输出
信号qq[0..7]直接控制点阵的列电平
14
图3-8模块updown
以下是模块updown源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityupdownis
port(clk:
instd_logic;
mode:
instd_logic_vector(1downto0);
sel:
outstd_logic_vector(2downto0);
qq:
outstd_logic_vector(0to7));endupdown;
architecturedian_arcofupdownis
begin
process(clk)
variableseel:
std_logic_vector(2downto0);
begin
ifclk'eventandclk='1'then
seel:
=seel+1;
ifmode="01"then
caseseelis
when"000"=>qq<="00000000";
when"001"=>qq<="00010000";
when"010"=>qq<="00111000";
when"011"=>qq<="01010100";
when"100"=>qq<="00010000";
15
when"101"=>qq<="00010000";
when"110"=>qq<="00010000";
when"111"=>qq<="00010000";
whenothers=>qq<="00000000";
endcase;
elsifmode="10"then
caseseelis
when"000"=>qq<="00000000";
when"001"=>qq<="00010000";
when"010"=>qq<="00010000";
when"011"=>qq<="00010000";
when"100"=>qq<="00010000";
when"101"=>qq<="01010100";
when"110"=>qq<="00111000";
when"111"=>qq<="00010000";
whenothers=>qq<="00000000";
endcase;
elsifmode="00"then
qq<="00000000";
endif;
endif;
sel<=seel;
endprocess;
enddian_arc;
以下图3-9为模块updown的仿真结果:
图3-9模块updown的仿真结果
16
D模块clk_div10
该模块图3-10的功能是将时钟信号进行50万分频,平台时钟信号不适合设计要
求,故设计分频模块
图3-10模块clk_div10
以下是模块clk_div10源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityclk_div10is
port(clk:
instd_logic;
clk_div:
outstd_logic);
endclk_div10;
architecturertlofclk_div10is
signalcount:
std_logic_vector(2downto0);
signalclk_tmp:
std_logic;
begin
process(clk)
begin
if(clk'eventandclk='1')then
if(count="100")then
count<=(others=>'0');
clk_tmp<=notclk_tmp;
17
else
count<=count+1;
endif;
endif;
endprocess;
clk_div<=clk_tmp;
endrtl;
以下图3-11是模块clk_div10的仿真结果:
图3-11模块clk_div10的仿真结果
3.5
当K1与down3有请求时的波形图见图3-12:
18
图3-12当K1与down3有请求时的波形仿真图3.6
8X8点阵共需要64个发光二极管组且每个发光二极管是放置在行线和列线的交
叉点上见图3-13,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。
我们设计思想是列输入直接由平台IO控制输入,行输入是74L138译码控制。
图3-1374L138译码控制电路4
本产品主要使用了行思科技提供的CPLD平台,平台上的资源就可实现电梯控制
器的功能,但为了更具有实际功能,通过平台的接口添加一些外围模块。
19
整个系统的各个模块分别调试,然后再逐级联乘从而确保调试的成功率。
难点在
于对时钟信号以及延时多少的处理,还有点阵的显示。
系统采用VHDL硬件描述语言编写,用QuartusII的波形仿真和平台进行调试。
程序编写及调试时采用的是自上而下
的调试方法,先单独调试好每个模块,然后再连接成一个完整的系统进行调试。
软件调试的主要目的是测试显示于输出之间的控制,开关输入请求的处理与优先
级处理,以确保在各种情况下都能正常实现其功能。
20
系统利用Altera公司的CPLD芯片EPM1270TI44C,外围电路少、成本低、可靠
性高。
采用这样的设计,使电路设计由硬件设计转变为软件设计,可以简化硬件的开
发制造过程。
通过修改VHDL源程序,就可以实现更高层的电梯控制或者增加一些新
的功能,提高设计的灵活性。
我们设计制作的基于CPLD的电梯控制器完成了实际所需要的基本功能和指标,
同时在操作界面和操作方式以及显示上有很大发挥,并且还有很大发展空间,如:
利
用传感技术,当电梯到达时利用传感器的信号来实现电梯的停止来提高电梯的稳定性
和精确性,还可通过串口与上位机软件进行通信等。
本电梯控制器的主要特色有:
1:
运用CPLD强大的逻辑处理能力来实现对电梯的软件控制,大大的简化了硬件
电路,节省了成本,降低了功耗;
2:
利用外围8*8点阵显示,醒目清楚;
3:
外围用开关输入请求,操作简单易懂。
21
[1]潘松,黄继业.EDA技术实用教程[M].北京:
科学出版社,2005:
32-78.[2]谭会生,张昌凡.EDA技术及应用[M].西安:
电子科技大学出版社,2004:
21-69.[3]陈伯时.电力拖动自动控制系统[M].北京:
机械工业出版社,1997:
34-68.[4]潘松,黄继业.EDA技术与VHDL[M].北京:
清华大学出版社,2006:
1-78.[5]张汉杰.现代电梯控制技术[M].哈尔滨:
工业大学出版社,2001:
21-56.
22
在此我由衷的感谢李清波老师的大力支持,通过他的指导,我不光顺利的完成了
这篇论文的创作,而且学会了很多的道理:
做人要扎扎实实,一丝不苟。
大学学习生
涯中,没有一个学习任务能有如此繁重,幸亏有了李老师指点迷津,教会我正确的方
法,使我按时完成了任务。
在创作过程中,我多次打扰了李老师,但
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电梯 控制器 设计 论文