文档库 最新最全的文档下载
当前位置:文档库 › 基于FPGA的电梯控制器设计

基于FPGA的电梯控制器设计

基于FPGA的电梯控制器设计
基于FPGA的电梯控制器设计

唐山学院

EDA技术课程设计

题目基于FPGA的电梯控制器设计

系 (部) 信息工程系

班级

姓名

学号

指导教师

2013 年 1 月 7 日至 1 月 11 日共 1 周

2013年 1 月 10 日

《EDA技术》课程设计任务书

一、设计题目、内容及要求

设计题目:《基于FPGA的电梯控制器设计》

设计内容:

设计一个三层电梯控制器,具体要求:

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

(2)设有电梯所处位置指示装置及电梯运行情况指示。

(3)当电梯处于上升时,只响应比电梯所在位置高的上楼请求信号,直到最后一个上楼请求执行完毕,再进入下降模式。

(4)当电梯处于下降时,只响应比电梯所在位置低的下楼请求信号,直到最后一个下楼请求执行完毕,再进入上升模式。

(5)电梯的初始状态为第一楼层。

(6)设计超载报警功能。

设计要求:

(1)根据任务要求确定电路各功能模块;

(2)写出设计代码;

(3)给出时序仿真结果和硬件调试结果;

(4)最后要有设计总结。

二、设计原始资料

QuartusⅡ软件,EDA实验箱。

三、要求的设计成果(课程设计说明书、设计实物、图纸等)

软件仿真和硬件仿真结果;课程设计说明书。

四、进程安排

周1-周4:查阅资料,上机编写并调试代码;

周5:课程设计答辩并提交设计说明书。

五、主要参考资料

[1].Voknei A.Pedroni.《VHDL数字电路设计教程》[M].电子工业出版社,2008.5

[2].潘松,黄继业.《EDA技术实用教程》(第二版)[M].科学出版社,2005.2

[3].焦素敏.《EDA应用技术》[M].清华大学出版社,2002.4

指导教师(签名):教研室主任(签名):

课程设计成绩评定表

出勤情况出勤天数缺勤天数

成绩评定出勤情况及设计过程表现(20分)课设答辩(20分)

设计成果(60分)

总成绩(100分)

提问

(答辩)

问题

情况

指导教师签名:

年月日

目录

1 前言 (1)

2 EDA技术介绍 (2)

2.1 EDA技术简介 (2)

2.2 EDA技术的发展 (2)

3 电梯控制器设计 (3)

3.1 电梯控制器设计总体框图 (3)

3.2 电梯控制器设计思路 (3)

3.3 电梯处于各楼层的具体分析 (4)

3.4 电梯外部端口具体说明 (6)

3.4.1 定义各个端口 (6)

3.4.2 引脚锁定 (6)

4 仿真结果与说明 (8)

5 总结 (10)

参考文献 (11)

附录程序代码 (12)

1 前言

当今社会,随着城市建设的不断发展,高层建筑的不断增多,电梯作为高层建筑中垂直运行的交通工具已与人们的日常生活密不可分。目前电梯控制系统主要有三种控制方式:继电路控制系统(“早期安装的电梯多位继电器控制系统”)、FPGA/CPLD的控制系统、微机控制系统。继电器控制系统由于故障率高、可靠性差、控制方式不灵活以及消耗功率大等缺点,目前已逐渐被淘汰,微机控制系统虽在智能控制方面有较强的功能,但也存在抗扰性差,系统设计复杂,一般维修人员难以掌握其维修技术等缺陷。而FPGA/CPLD控制系统由于运行可靠性高,使用维修方便,抗干扰性强,设计和调试周期较短等优点,倍受人们重视等优点,已经成为目前在电梯控制系统中使用最多的控制方式,目前也广泛用于传统继电器控制系统的技术改造。

随着EDA技术的快速发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。采用EDA设计,拥有电子系统小型化、低功耗、高可靠性、开发过程投资小、周期短等优点,而且还可以通过软件编程对硬件结构和工作方式进行重构,使得硬件设计如软件设计那般方便快捷。本次设计就是应用EDA电子电路技术来设计电梯控制器,从而使用一片芯片就可以实现对电梯的控制的。

2 EDA技术介绍

2.1 EDA技术简介

EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

EDA技术是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。

利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。

2.2 EDA技术的发展

从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用广泛、工具多样、软件功能强大。

现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。EDA设计可分为系统级、电路级和物理实现级。

在EDA软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有ASIC设计工具,但不对外开放。中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具在各地开花并结果。据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年夏合增长率分别达到了50%和30%。

3 电梯控制器设计

3.1 电梯控制器设计总体框图

电梯控制器的功能模块如图所示,包括主控制器、分控制器、楼层选择器、状态显示器、译码器和楼层显示器。乘客在电梯中选择所要到达的楼层,通过主控制器的处理,电梯开始运行,状态显示器显示电梯的运行状态,电梯所在楼层数通过译码器译码从而在楼层显示器中显示。分控制器把有效的请求传给主控制器进行处理,同时显示电梯的运行状态和电梯所在楼层数。由于分控制器相对简单很多,所以主控制器是核心部分。

3.2 电梯控制器设计思路

本系统的主要输入有电梯外上下控制按钮Button (其中Button(0)表示一楼电梯外上升请求,Button(1)表示二楼电梯外上升请求, Button(2)表示二楼电梯外下降请求, Button(3)表示三楼电梯外下降请求);电梯内到达楼层控制按钮floor (其中floor(0)表示请求到达一层, floor(1)表示请求到达二层, floor(2)表示请求到达三层)。

系统的输出包括电梯位置标识position ,表示电梯当前所在楼层;电梯开门关门显示按钮door (当door=1时表示开门,door=0表示关门);电梯当前运行状态按钮up_down (当up_down=1时表示电梯处于上升状态,当up_down=0时表示电梯处于下降状态)。

系统主要通过当前所在楼层以及运行状态、后续请求判断运行方式。电梯处在第一层时,当它收到二层电梯外上下楼请求、三层电梯外下楼请求、一层电梯内到达二层和三层请求时,电梯会按照指令上升到相应楼层并开门、关门;若收到一层电梯外上楼请求只做开门响应,随后根据使用者进入电梯后请求进行响

状态显示器 主控制器

分控制器

译码器 楼层显示

楼层选择器 图 3 – 1 总体框图

应;其他请求不响应。

当电梯处在第二层时,若系统收到二层电梯外上下楼请求只做开门响应;若收到三层电梯外下楼或二层电梯内到达三层请求,则做上楼响应、开门;若收到一层电梯外上楼或二层电梯内到达一层请求,则做下楼楼响应并开门;其他请求不响应。

当电梯处在第三层时,若它收到二层电梯外上下楼请求、一层电梯外上楼请求、电梯内到达二层和一层请求时,电梯会按照指令下降到相应楼层并开门、关门;若收到三层电梯外下楼请求只做开门响应,随后根据使用者进入电梯后请求进行响应;其他请求不响应。

若电梯正处在上升状态中收到外部请求,则只响应比当前所在楼层高的楼层的请求,到达需要到达最高楼层时再响应低层请求。若电梯正处在下降状态中收到外部请求,则只响应比当前所在楼层低的楼层的请求,到达需要到达最低楼层时再响应高层请求。

3.3 电梯处于各楼层的具体分析

处于一楼时,不管是电梯内或电梯外,电梯都只可能接收到上升的请求信号。此时,电梯就进入预上升状态,准备作上升运行,如果电梯没有接收到请求信号,电梯则在一楼待机。

有信号将上升

处于一楼

等待信号

图 3 - 2 电梯处于一楼

处于二楼时,电梯则可能出现三种情况:

1.电梯并没有接受到电梯内或电梯外的任何请求信号时,电梯则停留在当前楼层。

2.电梯接收到上升请求信号,进入预上升状态。

3.电梯接收到下降请求信号,进入预下降状态。

处于三楼时,不管电梯内或电梯外电梯都只可能接收到下降的请求信号。此时,电梯就进入预下降状态,准备作下降运行。如果电梯没有接收到请求信号,电梯则停留在三楼。

电梯的运行规则确立后,需对整个控制程序的设计做一个流程规范。对程序进行模块化构思。根据VHDL 语言的规则,程序必须由最基本的实体和结构体构成。实体对控制器的端口进行定义,结构体对各端口的行为进行描述。因此程序运行需经过以下流程:VHDL 库调用:确立控制器的端口及相关的寄存器;根据电梯运行规则,设计相关运行描述;对电梯内信号进行处理。总流程图如下

处于二楼

有信号等待上升

等待信号 有信号等待下降

图 3 - 3 电梯处于二楼

处于三楼

有信号等待下降

等待信号

图 3 - 4 电梯处于三楼

3.4 电梯外部端口具体说明

3.4.1 定义各个端口

1. 时钟信号(clk );

2. 一楼电梯外人的上升请求信号(Button[0]),二楼电梯外人的上升请求信号

(Button[1]);二楼电梯外人的下降请求信号(Button[2]),三楼电梯外人的下降请求信号(Button[3]);

3. 电梯内人请求到达一楼的信号(fllor[0]),电梯内人请求到大二楼的信号

(floor[1]),电梯内人请求到大三楼的信号(floor[2]); 4. 电梯控制复位信号(reset ); 5. 电梯所在楼层显示(position[3..0]); 6. 电梯开门状态(door ); 7. 电梯上下指示(up-down );

3.4.2 引脚锁定

图 3 - 5 总流程图

表 3 - 1 :输入引脚锁定

输入信号锁定的引脚

clk PIN(76)

Button[3] PIN(68)

Button[2] PIN(69)

Button[1] PIN(70)

Button[0] PIN(73)

floor[2] PIN(80)

floor[1] PIN(81)

floor[0] PIN(82)

reset PIN(83)

warm PIN (57)

输入共10个信号,clk为输入脉冲,提供时钟,信号Button[3]为三楼外下降请求信号,Button[2]为二楼外下降请求信号,Button[1]为二楼外上升请求信号,Button[0]为一楼外上升请求信号;floor[2]为电梯内三层请求信号,floor[1]为电梯内二层请求信号,floor[0]为电梯内一层请求信号;reset为复位信号;warm为警告信号。

表 3 - 2 :输出引脚锁定

输出信号锁定的引脚

door PIN(78)

Position[3] PIN(46)

Position[2] PIN(45)

Position[1] PIN(44)

Position[0] PIN(39)

q PIN(94)

up_down PIN(95)

输出信号共7个door为门信号,当door=’1’时表示为门开,当door=’0’时表示门关;position[3]、position[2]、position[1]、position[0],为控制数码管显示的输出引脚;q为警告指示信号,当触发警告warm时q=’1’’则超载,当q=’0’时则没事;up_down为上下楼层显示信号,当up_down=’1’时表示电梯正在向上运行,当up_down=’0’时表示电梯正在向下运行。

4

仿真结果与说明

使用者在一楼给予电梯上升请求信号,即button[0]置1,随后门打开,即door 置1,使用者在电梯内给予三楼请求信号,随后门关闭,即door 置0,并电梯上升,即up_down 置1,最后到达三楼后门打开,door 置1

使用者在三楼给予电梯一下降请求,即button[3]置1,随后门打开,即door 置1,使用者在电梯内给予一层请求信号,随后门关闭,即door 置0,当到达一楼时门打开,即door 置1,随后门关闭,door 置0,到达二楼后,门打开,door

图 4 - 1 从一楼到三楼

图 4 - 2 三楼下一楼同时二楼有上升请求

1.

电梯上升过程中可以接收较高楼层的要求。开始时有人按下一层外上升(Button(0)=1)按钮,电梯开门使用者进入并按下到达三层(floor(2)=1)请求,此时电梯关门并上升。在电梯上升但未到达二层时,二层外有人按下上楼(Button(1)=1)请求,因此当电梯到达二层(position=2)后停止并开门,待二层使用者进入后再完成第一个使用者的请求到达三层。

当有超载信号时警报指示等亮起,即q 置1,电梯将一直在一楼。当警告信号结束时电梯才正常运行。

图 4 - 3 一楼到三楼在二楼时接另一人

图 4- 4 有警告信号存在时

这次EDA课程设计虽然时间较短但是收获普丰,使得我对VHDL语言的理解与应用能力得到了较大的提升,让我认识到只要深入学习,提升的空间永远是存在的。在本次课程设计中凸显了我的不足之处,比如软件运用不太熟练,对VHDL语言语法有诸多不清楚的认识,使在课程设计中遇到诸多困难。但是好在通过查阅资料和老师同学的帮助得以解决,使课程设计顺利完成。用VHDL 硬件描述语言的形式进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误。降低了开发成本,这中设计方法必将在未来的数字系统设计中发挥越来越重的作用。

动手实践是理论知识得以灵活运用的必要前提,也是今后走上工作岗位之后能够很好的完成设计工作的技术保证。只有遇到实际问题并根据自己对课堂上获得的专业知识的理解来解决才能真正的提高自己的能力。这也提醒我在平时的学习生活中不能一味埋头于课本知识,当今社会竞争越来越激烈,社会对人才的要求越来越全面,只有理论知识是远远不够的,必须靠实践作支撑。时间是检验真理的唯一标准这句话在这里同样适用。想要更加了解EDA技术这一领域必然还要经过更多的实践与努力,了解更多的这方面的知识,与时代共同进步,达到学以致用的效果。

再次感谢在本次课程设计中帮助我完成设计的老师与同学们,没有你们的帮助我不能顺利的完成此次课程设计,在这里提前祝老师与同学新年快乐。

[1].Voknei A.Pedroni.《VHDL数字电路设计教程》[M].电子工业出版社, 2008.5

[2].潘松,黄继业.《EDA技术实用教程》(第二版)[M].科学出版社,2005.2

[3].焦素敏.《EDA应用技术》[M].清华大学出版社,2002.4

[4]梁延东主编。电梯控制技术[M]。中国建筑工业出版社,1997

[5]李鼎培,当前电梯研制开发技术动态[J],中国电梯,1995

附录程序代码

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.all;

USE IEEE.STD_LOGIC_UNSIGNED.all;

ENTITY li IS

PORT( CLK: IN STD_LOGIC;

reset,warm: IN STD_LOGIC;

Button : IN STD_LOGIC_VECTOR(3 DOWNTO 0);

--button(0)为一层外上升请求,button(1)为二层外上升请求button(2)为二楼外下降请求,Button(3)为三层外下降请求;

floor : IN STD_LOGIC_VECTOR(2 DOWNTO 0); --floor(0)为电梯内一层请求按钮,floor(1)为电梯内二层请求按钮,

--floor(2)为电梯内三层请求按钮;

position : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

--position表示电梯当前位置信息;

door : OUT STD_LOGIC; -- '1'为开门,'0'为关门;

up_down,q: OUT STD_LOGIC -- '1'为上楼,'0'为下楼;

);

END li;

ARCHITECTURE happen OF li IS

TYPE State IS (S0,S1U,S1D,S2);

--S1U为二楼上状态,S1D为二楼下状态;

SIGNAL current_state : State; --中间变量:当前状态

SIGNAL next_state : State; --中间变量:下一状态

SIGNAL up : STD_LOGIC; --中间变量:上升下降状态

SIGNAL dor : STD_LOGIC; --中间变量:开门关门状态BEGIN

P1:PROCESS(CLK) --状态转换进程;

BEGIN

IF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿

if warm='0'then

current_state <= next_state;

END IF;

end if;

END PROCESS;

P2:PROCESS(reset,clk,current_state,up,button,floor)

V ARIABLE button_var: STD_LOGIC_VECTOR( 3 DOWNTO 0);

V ARIABLE floor_var : STD_LOGIC_VECTOR( 2 DOWNTO 0);

V ARIABLE cat : STD_LOGIC;

V ARIABLE ca_time : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

IF reset = '1' THEN --复位处理,初始状态为一层

next_state <= S0;

position <= "0001";

cat:='0';

ca_time:="0000";

up<='Z';

dor<='0';

button_var( 3 DOWNTO 0):="0000";

floor_var(2 DOWNTO 0):="000";

ELSIF clk'event and clk='1' THEN

--若无复位信号,则将外部按钮信号存储到7个变量之中;

IF button(0) ='1' THEN button_var(0):='1'; ELSE NULL; END IF;

IF button(1) ='1' THEN button_var(1):='1'; ELSE NULL; END IF;

IF button(2) ='1' THEN button_var(2):='1'; ELSE NULL; END IF;

IF button(3) ='1' THEN button_var(3):='1'; ELSE NULL; END IF;

IF floor(0)='1' THEN floor_var(0):='1'; ELSE NULL; END IF;

IF floor(1)='1' THEN floor_var(1):='1'; ELSE NULL; END IF;

IF floor(2)='1' THEN floor_var(2):='1'; ELSE NULL; END IF;

IF cat='0' THEN ca_time:=ca_time+1; END IF; --开门,关门计时;

CASE current_state IS

WHEN S0 => --一楼状态处理;

position <= "0001";

cat:='0';

IF (button_var(0) or floor_var(0))='1' THEN

CASE ca_time IS

WHEN "0011" => dor<='1';

WHEN "1101" => dor<='0';

button_var(0):='0';

floor_var(0):='0';

IF (floor_var(1) or floor_var(2))='1' THEN

next_state<=S1U;

ca_time:="0000";

up<='1';

ELSE

next_state<=S0;

ca_time:="0000";

END IF;

WHEN others => NULL;

END CASE;

ELSIF (button_var(1) OR button_var(2) or button_var(3) or floor_var(2) or floor_var(1))='1' THEN

next_state <= S1U;

ca_time:="0000";

up <= '1';

ELSE

next_state <= S0;

ca_time:="0000";

END IF;

WHEN S1U => --二楼上状态处理;

position <= "0010";

cat:='0';

IF floor_var(1)='1' THEN --二楼内上升请求;

CASE ca_time IS

WHEN "0011" => dor<='1';

WHEN"1101"=> dor<='0';

floor_var(1):='0';

IF (button_var(1) or button_var(3) or floor_var(2))='1' THEN

next_state<=S2;

ca_time:="0000";

button_var(1):='0';

ELSIF ( button_var(0) or button_var(2) or floor_var(0))='1' THEN next_state<=s0;

ca_time:="0000";

button_var(2):='0';

ELSE

next_state<=S1U;

ca_time:="0000";

END IF;

WHEN others => NULL;

END CASE;

ELSE

IF button_var(1)='1' THEN --二楼外上升请求;

CASE ca_time IS

WHEN "0011" => dor<='1';

WHEN "1101" => dor<='0';

button_var(1):='0';

IF (floor_var(2) or button_var(3))='1'

THEN

next_state<=S2;

ca_time:="0000";

ELSIF ( button_var(0) or floor_var(0) or button_var(2))='1' THEN

next_state<=s0;

ca_time:="0000";

up<='0';

ELSE next_state<=S1U;

button_var(1):='0';

END IF;

WHEN others => NULL;

END CASE;

ELSE

IF (button_var(3) or floor_var(2))='1' THEN

--二楼无上楼,开门请求,但三层有下楼或开门请求;

next_state<=S2;

ca_time:="0000";

ELSIF button_var(2)='1' THEN

--二楼无上楼,开门请求,三层也无下楼或开门请求,此

--时二楼有下楼请求;

CASE ca_time IS

WHEN "0011" => dor<='1';

WHEN "1101" => dor<='0';

button_var(2):='0';

IF(floor_var(0) or button_var(0))='1'

THEN

next_state<=s0;

ca_time:="0000";

相关文档