基于FPGA的六层电梯控制系统课程设计打印终稿

更新时间:2024-07-07 17:28:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于FPGA 的六层电梯控制系统

郑州轻工业学院

电子技术课程设计

题 目 基于FPGA的 六层电梯控制系统 学生姓名 专业班级 电子信息工程10-01 学 号 541001030136 院 (系) 电气信息工程学院 指导教师 杜海明 完成时间 2013年06月22日

基于FPGA 的六层电梯控制系统

郑州轻工业学院 课 程 设 计 任 务 书

题目 基于FPGA 的六层电梯控制系统

专业、班级 电子信息工程10-01 学号 541001030136 姓名 主要内容、基本要求、主要参考资料等:

主要内容:

要求学生使用硬件描述语言设计六层电梯控制系统的FPGA源程序,实现如下功能:(1)每层电梯入口处设有上下请求开关,电梯内设有顾客到达层次的停站请求开关。(2)设有电梯入口处位置指示装置及电梯运行模式(上升或下降)指示装置。(3)电梯到达有停站请求的楼层,开门指示灯亮,开门后,经一段时延后,电梯门关闭电梯继续进行,直至执行完最后一个请求信号后停留在当前层。 (4)电梯运行规则:当处于上升模式时,只响应比所在位置高的请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕;高层有下楼请求,则直接升到请求层,进入下降模式。当电梯处于下降模式时则与上升模式相反。

基本要求:

1、掌握FPGA 的程序设计方法。 2、掌握硬件描述语言语法。

3、掌握有限状态机的原理与实现方法。 4、程序设计完成后要求在软件中实现功能仿真。 主要参考资料:

1、王锁萍.电子设计自动化(EDA)教程[M].成都:成都电子科技大学出版社,2006. 2、何立民.EDA应用技术选编[M].北京:北京航空航天大学出版社,2008.

完 成 期 限: 2013.6.21—2013.6.25 指导教师签名: 课程负责人签名:

基于FPGA 的六层电梯控制系统

2013年 6月 18

目录 摘要 ................................................................................................................ I 1概述 ............................................................................................................ 1

1.1课题背景及意义 ................................................................................ 1 1.2 EDA技术及实现方法概述 ................................................................. 1

1.2.1 EDA技术简介 ................................................................................................ 2 1.2.2 FPGA简介 ...................................................................................................... 3 1.2.3 VHDL语言介绍 .............................................................................................. 4

1.3 状态机简介 ....................................................................................... 5 2 系统方案设计 ............................................................................................ 6

2.1设计要求 ............................................................................................ 6 2.2 总体设计方案 ................................................................................... 6

2.2.1 控制器模块化概述 ....................................................................................... 6 2.2.2 电梯上下层运行流程图 ............................................................................... 7 2.2.3电梯运行控制流程图 .................................................................................... 8 2.2.4 电梯控制器设计思路 ................................................................................... 9

2.3 设计的VHDL实现 .......................................................................... 10

2.3.1 控制器实体设计 ........................................................................................ 10 2.3.2 控制器结构体设计 .................................................................................... 11

3 器件选型 ................................................................................................. 11

基于FPGA 的六层电梯控制系统

3.1 FPGA芯片选型 ................................................................................ 11 3.2 功能模块 ......................................................................................... 12

3.2.1 主控器模块 ................................................................................................ 12 3.2.2 分频器模块 ................................................................................................ 13 3.2.3 译码器模块 ................................................................................................ 13 3.2.4 数据选择器模块 ........................................................................................ 14

4 程序仿真 ................................................................................................. 15

4.1 电梯控制器仿真分析 ..................................................................... 15 4.2 其它模块仿真 ................................................................................. 19 5 结论 ......................................................................................................... 19 参考文献 ..................................................................................................... 21 致谢 ............................................................................................................. 22 附录 ............................................................................................................. 23

基于FPGA 的六层电梯控制系统

基于FPGA 的六层电梯控制系统

基于FPGA 的六层电梯控制系统

摘 要

本设计是基于电子设计自动化(EDA)技术中的甚高速集成电路硬件描述语言(VHDL)语言,运用FPGA所开发的四层电梯控制程序,采用Quartus II软件仿真。运用有限状态机的设计方法,设计了两个进程相互配合,状态机进程作为主要进程,信号灯控制进程作为辅助进程。在主进程中定义了7个状态,在电梯时钟的触发下,通过当前状态和信号灯信号判定下一状态。信号灯控制进程中,信号灯存储按键请求情况,它的熄灭是由状态机进程中传出的信号来控制。

通过程序调试及运行仿真,结果表明,本程序可以完成电梯运行所在楼层显示、电梯运行方向指示、关门延时设置等。

关键词:电梯控制器 VHDL 状态机 FPGA

基于FPGA 的六层电梯控制系统

1概述

1.1课题背景及意义

随高层楼宇的增加,电梯越来越多的走进了人们的生活,对人们的生活的影响越来越大。为了让电梯更好的服务人们,各种电梯新技术不断地发展起来。随着人们生活水平的不断提高,经济的快速发展和生产生活的需要,城市高层建筑如雨后春笋拔地而起。与此相应,作为一种可以垂直升降运输的工具一电梯也得到迅猛的发展。现在,电梯已完全融入我们的生活、工作及学习中,人们越来越离不开它。因此,它的安全可靠性、迅速准确性、舒适性,对人们来说都是非常重要的。为了确保电梯正常运行、安全使用,一般电梯都有专业的维修管理人员。他们必须对电梯原理、性能、特点、控制、运行要全面认识和掌握,才能做到对电梯的正确使用、管理及维护。根据我国有关部门的规定,电梯作业属于特种作业,其作业人员必须经过专门培训,并经理论考试和实践考核合格后,发给《特种作业操作证》方可上岗操作。同时,对电梯操作人员定期考核,让他们定期参加安全技术学习,扎扎实实地做好电梯维护和保养工作,才能使人们平安长久的使用电梯。

电梯控制系统是一个相当复杂的逻辑控制系统.系统要同时对几百个信号进行接收、处理。由于用户对电梯功能的要求不断提高.其相应控制方式也在不断发生变化。随着EDA技术的快速发展.基于FPGA的微机化控制已广泛应用于电梯电路设计与控制的各个方面。

在经济不断发展,科学技术日新月异的今天,楼的高度已和经济发展同样的速度成长起来。作为建筑的中枢神经,电梯起着不可或缺的作用,电梯作为建筑物内的主要运输工具,像其他的交通工具一样,已经成为我们日常生活的一个不可缺少的组成部分。一个国家的电梯需求总量,主要受其经济增长速度、城市化水平、人口密度及数量、国家产业结构等综合因素的影响。在全球经济持续低迷的情况下,我国国民经济仍然以较高的速度持续增长,城市化水平不断提高。这从客观上导致了我国电梯行业的空前繁荣景象,我国已经成为全球最大的电梯市场。上世纪80年代以来,随着经济建设的持续高速发展,我国电梯需求量越来越大。总趋势是上升的,电梯行业进入了“第三次浪潮”。如此庞大的市场需求为我国电梯行业的发展创造了广阔的舞台!

1.2 EDA技术及实现方法概述

1

基于FPGA 的六层电梯控制系统

1.2.1 EDA技术简介

EDA代表了当今电子设计技术的最新发展方向,它的基本特征是:设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(HDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件,这样的设计方法被称为高层次的电子设计方法。下面介绍与EDA基本特征有关的几个概念。

1.“自顶向下”的设计方法,10年前,电子设计的基本思路还是选用标准集成电路“自底向上”地构造出一个新的系统,这样的设计方法就如同一砖一瓦建造金字塔,不仅效率低、成本高而且容易出错。

高层次设计是一种“自顶向下”的全新设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后,用综合优化工具生成具体门电路的网络表,其对应的物理实现级可以是印刷电路板或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的,这既有利于早期发现结构设计上的错误,避免设计工作的浪费,又减少了逻辑功能仿真的工作量,提高了设计的一次成功率。

2.ASIC设计现代电子产品的复杂度日益提高,一个电子系统可能由数万个中小规模集成电路构成,这就带来了体积大、功耗大、可靠性差的问题。解决这一问题的有效方法就是采用ASIC芯片进行设计。ASIC按照设计方法的不同可分为全定制ASIC、半定制ASIC和可编程ASIC(也称为可编程逻辑器件)。

设计全定制ASIC芯片时,设计师要定义芯片上所有晶体管的几何图形和工艺规则,最后将设计结果交由IC厂家去进行掩模制造,做出产品。这种设计方法的优点是芯片可以获得最优的性能,即面积利用率高、速度快、功耗低,而缺点是开发周期长,费用高,只适合大批量产品开发。

半定制ASIC芯片的版图设计方法分为门阵列设计法和标准单元设计法,这两种方法都是约束性的设计方法,其主要目的就是简化设计,以牺牲芯片性能为代价来缩短开发时间可编程逻辑芯片与上述掩模ASIC的不同之处在于:设计人员完成版图设计后,在实验室内就可以烧制出自己的芯片,无须IC厂家的参与,大大缩短了开发周期。

2

基于FPGA 的六层电梯控制系统

可编程逻辑器件自70年代以来,经历了PAL、GAL、CPLD、FPGA几个发展阶段,其中CPLD/FPGA属高密度可编程逻辑器件,目前集成度已高达200万门/片,它将掩模ASIC集成度高的优点和可编程逻辑器件设计生产方便的特点结合在一起,特别适合于样品研制或小批量产品开发,使产品能以最快的速度上市,而当市场扩大时,它可以很容易地转由掩模ASIC实现,因此开发风险也大为降低。

上述ASIC芯片,尤其是CPLD/FPGA器件,已成为现代高层次电子设计方法的实现载体

1.2.2 FPGA简介

目前以硬件描述语言(Verilog或 VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可

编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。 系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。

FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD(复杂可编程逻辑器件备)。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程

3

基于FPGA 的六层电梯控制系统

数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。 1.2.3 VHDL语言介绍

VHDL 的英文全名是 Very-High-Speed Integrated Circuit Hardware Description Language,诞生于 1982 年。1987 年底,VHDL被 IEEE 和美国国防部确认为标准硬件描述语言。

VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。

VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路 , 也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。同时,VHDL 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL 语言的强大描述能力还体现在它具有丰富的数据类型。VHDL 语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。

VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述 , 它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。

采用 VHDL 语言描述硬件电路时, 设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化, 而不需要考虑其他的问题。当硬件电路的设计描述完成以后 ,VHDL 语言允许采用

4

基于FPGA 的六层电梯控制系统

多种不同的器件结构来实现。

VHDL 语言采用基于库 ( library) 的设计方法。在设计过程中 , 设计人

员可以建立各种可再次利用的模块 , 一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计 , 而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块, 将这些模块存放在库中 , 就可以在以后的设计中进行复用。

由于 VHDL 语言是一种描述、模拟、综合、优化和布线的标准硬件描述语言 , 因此它可以使设计成果在设计人员之间方便地进行交流和共享, 从而减 小硬件电路设计的工作量, 缩短开发周期

1.3 状态机简介

关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。

包含一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函(transition function)的计算模型。当输入符号串,模型随即进入起始状态。它要改变到新的状态,依赖于转换函数。在有限状态机中,会有有许多变量,例如,状态 机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有 限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态,等等。

传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地执行。很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况。“命令行实用程序”是这种传统应用程序的典型例子。

有限状态机是一种概念性机器,它能采取某种操作来响应一个外部事件。具体采取的操作不仅能取决于接收到的事件,还能取决于各个事件的相对发生顺序。之所以能 做到这一点,是因为机器能跟踪一个内部状态,它会在收到事件后进行更新。为一个事件而响应的行动不仅取决于事件本身,还取决于机器

5

基于FPGA 的六层电梯控制系统

的内部状态。另外,采取 的行动还会决定并更新机器的状态。这样一来,任何逻辑都可建模成一系列事件/状态组合。

状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。详解如下: ①现态:是指当前所处的状态。

②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。

③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。

④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

2 系统方案设计

2.1设计要求

(1) 每层电梯入口处设有上下请求开关,电梯内设有顾客到达层次的停站请求开关。 (2) 设有电梯入口处位置指示装置及电梯运行模式(上升或下降)指示装置。 (3) 电梯到达有停站请求的楼层,开门指示灯亮,开门后,经一段时延后,电梯门关闭电梯继续进行,直至执行完最后一个请求信号后停留在当前层。

(4) 电梯运行规则:当处于上升模式时,只响应比所在位置高的请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕;高层有下楼请求,则直接升到请求层,进入下降模式。当电梯处于下降模式时则与上升模式相反。

2.2 总体设计方案

2.2.1 控制器模块化概述

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

6

基于FPGA 的六层电梯控制系统

图2-1 总体设计方案

2.2.2 电梯上下层运行流程图

电梯上升流程图,如图2-2:

图2-2 电梯上升流程图

7

基于FPGA 的六层电梯控制系统

电梯下降流程图,如图2.3:

图2-3 电梯下降流程图

2.2.3电梯运行控制流程图

如图2.4:

8

基于FPGA 的六层电梯控制系统

图2-4 电梯运行控制流程图

2.2.4 电梯控制器设计思路

电梯控制器运用状态机的设计方法,思路比较清晰。可以将电梯等待的每秒钟以及开门、关门都看成一个独立的状态。由于电梯又是每秒上升或下降一层,所以就可以通过一个统一的1秒为周期的时钟来触发状态机。根据电梯的实际工作情况,可以把状态机设置7个状态,分别是“电梯停留在第1层”、“开门”、“关门”、 “开门等待4秒”、“上升”、“下降”和“停止状态”。各个状态之间的转换条件可由上面的设

9

基于FPGA 的六层电梯控制系统

计要求所决定。初始化状态为1楼等待门是关闭的。各状态机之间转换图如图2.5:

Doorwait4

图2-5 状态机转换图

2.3 设计的VHDL实现

2.3.1 控制器实体设计

首先考虑输入端口,一个异步复位端口reset,用于在系统不正常时回到初始状态;在电梯外部,必须有升降请求端口,一层是最低层,不需要有下降请求,六层是最高层,不需要有上升请求[3],二三四五层则上升、下降请求端口都有;在电梯的内部,应该设有各层停留的请求端口:一个电梯时钟输入端口,该输入时钟以1秒为周期,用于驱动电梯的升降及开门关门等动作;另有一个按键时钟输入端口,时钟频率比电梯时钟高。

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

10

基于FPGA 的六层电梯控制系统

2.3.2 控制器结构体设计

首先说明一下状态。状态机设置了7个状态,分别是电梯停留在l层(stoponl)、开门(dooropen)、关门(doorclose)、开门等待4秒(doorwait4)、上升(up)、下降(down)和停止(stop)。在实体说明定义完端口之后,在结构体architecture和begin之间需要有如下的定义语句,来定义状态机。 type lift_state is

(stoponl,dooropen,doorclose, doorwait4,up,down,stop): signal mylift:lift_state:

在结构体中,设计了两个进程互相配合,一个是状态机进程作为主要进程,另外一个是信号灯控制进程作为辅助进程。状态机进程中的很多判断条件是以信号灯进程产生的信号灯信号为依据的,而信号灯进程中信号灯的熄灭又是由状态机进程中传出的clearup和cleardn信号来控制。

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

在信号灯控制进程中,由于使用了专门的频率较高的按键时钟,所以使得按键的灵敏度增大,但是时钟频率不能过高,否则容易使按键过于灵敏。(由于时间限制本设计并未考虑按键消抖)按键后产生的点亮的信号灯(逻辑值为‘1’)用于作为状态机进程中的判断条件,而clearup和cleardn信号为逻辑‘l’使得相应的信号灯熄灭。

3 器件选型

3.1 FPGA芯片选型

主控芯片选用Altera公司ACEX系列FPGA芯片EP1K30TC144-3, Altera公司是20世纪90年代以来发展较快的可编程逻辑器件生产厂家,在激烈的市场竞争中, 凭借其雄厚的技术实力,独特的设计构思和功能齐全的芯片系列,跻身于世界最大的器件供应商之列。EP1K30TC144-3芯片属于Altera公司的ACEX 1K系列,集成典型逻辑门数达30000个, 工作频率最高可达178.6MHz,最小传输延时为

11

基于FPGA 的六层电梯控制系统

5.0ns,它将查找表(LUT)与嵌入式阵列块(EAB)结合起来,提供了一种具有高效管芯的低成本结构。该芯片支持1.8到2.5V供电电压,其I/O接口支持多电压的连接:1.8V,2.5V,3.3V,5V仅在外接电阻时可承受,还提供可编程的节能工作模式。在编程工艺上,采用SRAM(静态随机存储器)工艺,可插写上万次。这些特点使该芯片适用于复杂的逻辑功能和存储功能的应用场合。

3.2 功能模块

3.2.1 主控器模块

如图3-1:

电梯主控制模块端口说明:buttonclk 按钮时钟信号 reset 复位键 f2upbutton 二楼上楼按钮 f4upbutton 四楼上楼按钮 f2dnbutton 二楼下楼按钮 f4dnbutton 四楼下楼按钮

图3-1 电梯主控制模块

liftclk 电梯时钟信号 f1upbutton 一楼上楼按钮 f3upbutton 三楼上楼按钮 f5upbutton 五楼上楼按钮 f3dnbutton 三楼下楼按钮 f5dnbutton 五楼下楼按钮

12

基于FPGA 的六层电梯控制系统

f6dnbutton 六楼下楼按钮 stop1button 电梯内部一楼按钮 stop2button 电梯内部二楼按钮 stop3button 电梯内部三楼按钮 stop4button 电梯内部四楼按钮 stop5button 电梯内部五楼按钮 stop6button 电梯内部六楼按钮 fuplight[6..1] 每楼层上升指示灯 fdnlight[6..1] 每楼层下降指示灯 stoplight[6..1] 电梯内部楼层指示灯 position[2..0] 楼层位置显示 doorlight 电梯门状态显示 udsig 电梯上升下降显示

3.2.2 分频器模块

如图3-2:

图3-2 分频器模块

模块端口说明:

clk_in 电源输入端 div_out 分频后时钟输出端

3.2.3 译码器模块

如图3-3:

图3-3译码器模块

aaa[2..0] 楼层位置输出端 bbb[3..0] 译码输出端 译码器逻辑功能表如表3-1

13

基于FPGA 的六层电梯控制系统

表3-1 译码器逻辑功能表

3.2.4 数据选择器模块

如图3-4:

图 3-4 数据选择器模块

数据选择器模块端口说明:

input[3..0] 译码器输入端 output[6..0] 数据选择器输出端 译码器逻辑功能表如表3-2

表3-2 译码器逻辑功能表

14

基于FPGA 的六层电梯控制系统

4 程序仿真

4.1 电梯控制器仿真分析

仿真示例1:

图4-1所示仿真的是在第五层电梯外部有上升请求,也就是f5upbuttton信号的一个脉冲[9],可以看到电梯从一层上升到五层,position信号由1变到5,doorlight信号‘1’表示开门,‘0’表示关门。当乘客进入电梯以后,在电梯内部要求上升到第六层,也就是stop6button产生一个脉冲,电梯上升到第6层,开门4秒以后关门,停留在第六层,position最后的值为6。在仿真图中看不到buttonclk,只显示为一条黑色的线,是因为采用了频率较大的时钟。

再看fuplight信号灯,当五层有上升请求的时候,它的值由0变到16。(注意fuplight和fdnlight是6位的二进制向量,这里的“010000”,表示五层有请求;“000100”也就是4,表示三层有请求)。当电梯停留到第五层以后,表明该请求被响应,所以它的值变为0,由于没有下降请求信号,所以fdnlight信号灯的值一盲都为0。当电梯处于第五层时,udsig=0,即此时若没有其他请求,电梯处于上升模式;当stop6button=1,即电梯内部按了六层请求时,电梯门灯灭电梯开始上升udsig=0,即处于上升模式[10],抵达六层时,udsig=即无论什么请求电梯都开始下降,且doorlight=1,即灯亮,电梯门开。四秒之后灯灭,电梯门关。

15

基于FPGA 的六层电梯控制系统

图4-1 仿真示例1

仿真示例2:

图4-2是有下降请求的情况,它是图4.1的继续,当电梯停留在第六层的时候,在电梯外第四层有下降请求,这时候fdnlight信号灯由0变为8,说明第四层有下降请求。电梯下降到第四层,响应了下降请求,所以fdnlight信号灯清0。电梯开始下降,即udsig=1,抵达四楼后电梯门开,doorlight=1, 这时候,在电梯内部有一楼向上请求,接着电梯内部有三楼的请求,所以电梯继续下降,到达三层后,电梯门开[11],四秒后电梯门关,又因为一楼有请求所以最终到达一楼停止响应,position信号的值保持在1,电梯处于上升模式。四秒后电梯门关。

16

基于FPGA 的六层电梯控制系统

图4-2 仿真示例2

仿真示例3:

图4-3仿真的情况是,原先电梯停留在第一层,这时候电梯外第六层有下降请求,电梯上升到第六层,乘客进入电梯以后要求下降到一层,与此同时,在电梯外第三层有上升请求,电梯首先要响应下降请求然后再响应这个上升请求,所以电梯得先下降到第一层,然后再上升到第三层来,接着电梯内部五楼,三楼都有请求信号,于是电梯升到五楼然后下降到三楼,这是符合常理的。从仿真的波形看,电梯的位置变化和想象是一致的。电梯的运行情况完全正确。最后乘客在电梯内部要求上升到三层,所以电梯最后的停留位置为三层。

17

基于FPGA 的六层电梯控制系统

图4-3 仿真示例3

仿真示例4:

图4-4所示的仿真,原先电梯停留在第一层,电梯外第六层有下降请求,电梯上升到六层,乘客进入电梯以后要求下降到一层,此时,二层有下降请求,接着又有上升请求,电梯首先在二层停留。然后下降到一层。随后要响应二层上升请求,上升到二层,乘客进入电梯以后要求上升到三层,所以电梯最后的停留位置在三层。

18

基于FPGA 的六层电梯控制系统

图4-4 仿真示例4

4.2 其它模块仿真

鉴于以上主控器模块仿真完全符合预期要求,可以推知其它模块设计正确,故不再做数据选择器模块和译码器模块的仿真分析。

5 结论

本电梯系统实现了如下功能:

1.各层电梯内部信号:各楼层请求按键。外部信号:上升下降请求按键,所在楼层显示,电梯运行状态显示。

2.能够存储请求信号,电梯上升(下降)过程中,根据电梯的运行状态,首先按方向优先、循环次序响应各请求。

3.电梯每秒升(降)一层楼。电梯到达有停站请求的楼层,经过1秒电梯门打开,开门指示灯亮,开门4秒后,电梯门关闭(开门指示灯灭),电梯继续进行,直至执行

19

基于FPGA 的六层电梯控制系统

完最后一个请求信号后停留在当前层。电梯初始状态为一层关门状态。

综上所述,完成了课题的所有要求,该设计采用模块化编程,升级可实现任意多层电梯系统,具有很强的适应性和实用性。

在本设计中,因为考虑了扩展性,所以在信号定义的时候就使用了二进制的向量,而不是整数。在设计方法上也做了特殊的设计,所以使得扩展性较好。如果要实现n层电梯的控制,首先在端口的地方就要加入所有的按键,而指示灯只要把向量中的6改成n就可以了。同时需要在按键控制进程里加入其他按键触发指示灯的语句。在电梯的升降状态将6改成n,在电梯的开门状态中将2改成n一1,在关门状态,将position=6改成position=n,关键是修改position=6的部分,如果按照每层罗列,将十分烦琐,所以得寻求各层判断条件的共性,解决方法之一就是,新建一个全局向量abc为std_logic_vector(n downto 1),abc的赋值为abc<=(pos=>’1’,other=>'

0’)。在电梯的上升模式时,如果有本层请求信号,则电梯开门;如果没有任何请求信号,则电梯停在当前层;否则用abc和stoplight与fuplight向量比较,如果stoplight或fupligh比abc大,则说明更高层还有上升或者停战请求,电梯需继续上升;如果abc更大,则用abc与fdnlight作比较,如果fdnlight更大,则说明更高层有下降请求,电梯继续上升,否则电梯下降。电梯处在下降模式时同原理分析判定下一状态。这样可以大大简化程序,但要注意的是abc向量作为判断依据,需实时更新,可以单独写一个进程,触发时钟周期要设置得很小。在电梯的上升状态和开门状态中,把6改为n,在信号灯控制进程中加入其它按键触发指示灯的语句。

20

基于FPGA 的六层电梯控制系统

参考文献

[1]潘松,黄继业.EDA技术实用教程.科学出版社,2006

[2]付家才.EDA原理与应用[M].北京:化学工业出版社,2001:15-23

[3]王振红.VHDL数字电路设计应用实践教程[M].北京:机械工业出版社,2003:2-14 [4]黄智伟.FPGA系统设计与实践[M].北京:电子工业出版社,2005:12-24 [5] 梁延东.电梯控制技术[M].北京:中国建筑工业出版社,1997:23-47

21

基于FPGA 的六层电梯控制系统

致谢

在这里对老师在平时授课中的耐心教导表示衷心感谢。

通过此次课程设计,学到了很多之前不了解的知识,也意识到了大学课程对我们今后的学习有很大的帮助。在课程设计中,我虽然碰到了很多困难和问题,到最后还是靠自己的努力与坚持独立的完成了任务。这次设计给我最深的印象就是扩大自己的知识面,学习了很多以前不了解的知识,了解更多与本专业有关的科技信息,与时代共同进步,才能在将来成为有用的科技人才,觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。再次感谢老师的谆谆教诲!

22

基于FPGA 的六层电梯控制系统

附录

源程序: 电梯控制程序: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity sixlift is port(

buttonclk:in std_logic; --按钮时钟信号

liftclk: in std_logic; --电梯时钟信号

reset:in std_logic; --复位键

f1upbutton:in std_logic; --一楼上升按钮 f2upbutton:in std_logic; --二楼上升按钮

f3upbutton:in std_logic; --三楼上升按钮 f4upbutton:in std_logic; --四楼上升按钮 f5upbutton:in std_logic;

f2dnbutton:in std_logic; --二楼下降按钮 f3dnbutton:in std_logic; --三楼下降按钮 f4dnbutton:in std_logic; --四楼下降按钮 f5dnbutton:in std_logic; --五楼下降按钮

f6dnbutton:in std_logic; --六楼下降按钮

fuplight:buffer std_logic_vector(6 downto 1); --上升指示灯

fdnlight:buffer std_logic_vector(6 downto 1); --下降指示灯 stop1button,stop2button,stop3button,

stop4button,

stop5button,

stop6button:in std_logic; --电梯内部按钮

stoplight:buffer std_logic_vector(6 downto 1); --内部停止指示灯

position:buffer integer range 1 to 6; --楼层位置显示

doorlight:out std_logic; --电梯门指示灯 ‘1’ 开 ‘0’关

23

基于FPGA 的六层电梯控制系统

udsig:buffer std_logic ); --‘0’处于上升模式,‘1’处于下降模式 end sixlift;

architecture art of sixlift is type

lift_state

is

(stopon1,dooropen,doorclose,doorwait4,up,down,stop); --电梯所处的7个状态

signal mylift:lift_state; --内部电梯状态信号

signal clearup:std_logic; --上升清除信号 signal cleardn:std_logic; --下降清除信号

signal waitcnt:integer range 0 to 2; --waitcnt为完成四秒延时而设置 begin

controllift:process(reset,liftclk) variable pos:integer range 1 to 6; --楼层位置变量 begin

if reset='1' then mylift<=stopon1; --起始状态 clearup<='0'; --上楼信号清除 cleardn<='0'; --下楼信号清除 pos:=1; --处于一楼 position<=1; --处于一楼 else

if liftclk'event and liftclk='1' then --四秒后门关 case mylift is

when stopon1 => doorlight<='1'; --电梯门开 position<=1; --电梯处于一楼 pos:=1;

mylift<=doorwait4; when doorwait4 => waitcnt<=waitcnt+1; --waitcnt计数够两个电梯时钟脉冲后状态跳转到doorclose,加上中间过程完成延时四秒

24

基于FPGA 的六层电梯控制系统

if waitcnt=’2’ then waitcnt<=0 mylift<=doorclose; else mylift<=doorwait4; end if;

;

when doorclose =>

doorlight<='0'; --电梯门关

if udsig='0' then --电梯处于上升模式

if position=6 then if

stoplight=\

and

fuplight=\

fdnlight=\

udsig<='1';mylift<=doorclose;

else udsig<='1';mylift<=down; end if;

elsif position=5 then if

stoplight=\

and

fuplight=\

fdnlight=\

udsig<='0';mylift<=doorclose; elsif stoplight(6)='1' or fdnlight(6)='1' then udsig<='0';mylift<=up;

else udsig<='1';mylift<=down; end if;

elsif position=4 then if

stoplight=\

and

fuplight=\

fdnlight=\

udsig<='0';mylift<=doorclose; elsif

stoplight(5)='1'

or

stoplight(6)=

'1'

fdnlight(6)='1' or fdnlight(5)='1' then

25

and

and

and

or

基于FPGA 的六层电梯控制系统

udsig<='0';mylift<=up;

else udsig<='1';mylift<=down; end if;

elsif position=3 then if

stoplight=\

and

fuplight=\

and

fdnlight=\

udsig<='0';mylift<=doorclose; elsif

stoplight(4)='1'

or

stoplight(5)='1'

or

stoplight(6)= '1' or fdnlight(6)='1' or fdnlight(5)='1' or fdnlight(4)='1' then

udsig<='0';mylift<=up;

else udsig<='1';mylift<=down; end if;

elsif position=2 then if

stoplight=\

and

fuplight=\

and

fdnlight=\

udsig<='0';mylift<=doorclose; elsif

stoplight(3)='1'

or

stoplight(4)='1'

or

stoplight(5)='1' or stoplight(6)= '1' or fdnlight(6)='1' or fdnlight(5)='1' or fdnlight(4)='1' or fdnlight(3)='1' then udsig<='0';mylift<=up;

else udsig<='1';mylift<=down; end if;

elsif position=1 then if

stoplight=\

and

fuplight=\

and

fdnlight=\

udsig<='0';mylift<=doorclose; else udsig<='0';mylift<=up; end if;

26

基于FPGA 的六层电梯控制系统

end if;

elsif udsig='1' then

if position=1 then if

stoplight=\

and

fuplight=\

and

fdnlight=\

udsig<='0';mylift<=doorclose;

else udsig<='0'; mylift<=up; end if;

elsif position=2 then if

stoplight=\

and

fuplight=\

fdnlight=\

udsig<='1';mylift<=doorclose; elsif stoplight(1)='1' or fuplight(1)='1' then

udsig<='1';mylift<=down;

else udsig<='0'; mylift<=up; end if;

elsif position=3 then if

stoplight=\

and

fuplight=\

fdnlight=\

udsig<='1';mylift<=doorclose; elsif

stoplight(1)='1'

or

stoplight(2)='1'

fuplight(1)='1' or fuplight(2)='1' then

udsig<='1';mylift<=down;

else udsig<='0'; mylift<=up; end if;

elsif position=4 then if

stoplight=\

and

fuplight=\

fdnlight=\

udsig<='1';mylift<=doorclose;

27

and

and

or

and

基于FPGA 的六层电梯控制系统

elsif stoplight(1)='1' or stoplight(2)='1' or

stoplight(3)='1' or fuplight(1)='1' or fuplight(2)='1' or fuplight(3)='1' then

udsig<='1';mylift<=down;

else udsig<='0'; mylift<=up; end if;

elsif position=5 then if

stoplight=\

and

fuplight=\

and

fdnlight=\

udsig<='1';mylift<=doorclose; elsif

stoplight(1)='1'

or

stoplight(2)='1'

or

stoplight(3)='1' or stoplight(4)='1' or fuplight(1)='1' or fuplight(2)='1' or fuplight(3)='1' or fuplight(4)='1' then

udsig<='1';mylift<=down;

else udsig<='0'; mylift<=up; end if;

elsif position=6 then if

stoplight=\

and

fuplight=\

and

fdnlight=\

udsig<='1';mylift<=doorclose; else udsig<='1'; mylift<=down; end if; end if; end if;

when up => position<=position+1;pos:=pos+1; if position <6 and( stoplight(pos)='1' or fuplight(pos)='1') then

mylift<=stop;

elsif pos=6 and (stoplight(pos)='1' or fdnlight(pos)='1')

28

基于FPGA 的六层电梯控制系统

then

mylift<=stop; else mylift<=doorclose; end if;

when down =>

position<=position-1; pos:=pos-1; if position>1 and (stoplight(pos)='1' or fdnlight(pos)='1') then mylift<=stop;

elsif pos=1 and (stoplight(pos)='1' or fuplight(pos)='1') then mylift<=stop; else mylift<=doorclose; end if;

when stop => mylift<=dooropen; when dooropen => doorlight<='1'; if udsig='0' then

if position<6 and (stoplight(position)='1' or fuplight(position)='1') then clearup<='1';

else clearup<='1';cleardn<='1'; end if;

elsif udsig='1' then

if position>1 and (stoplight(position)= '1' or fdnlight(position)='1') then cleardn<='1';

else clearup<='1';cleardn<='1'; end if; end if;

mylift<=doorwait1; end case; end if;

29

基于FPGA 的六层电梯控制系统

end if;

end process controllift;

controllight:process(reset,buttonclk) begin

if reset='1' then stoplight<=\ elsif buttonclk'event and buttonclk='1' then

if clearup='1' then

stoplight(position)<='0';fuplight(position)<='0'; elsif f1upbutton='1' then fuplight(1)<='1'; elsif f2upbutton='1' then fuplight(2)<='1'; elsif f3upbutton='1' then fuplight(3)<='1'; elsif f4upbutton='1' then fuplight(4)<='1'; elsif f5upbutton='1' then fuplight(5)<='1';

end if; if cleardn='1' then

stoplight(position)<='0'; fdnlight(position)<='0'; elsif f2dnbutton='1' then fdnlight(2)<='1'; elsif f3dnbutton='1' then fdnlight(3)<='1'; elsif f4dnbutton='1' then fdnlight(4)<='1'; elsif f5dnbutton='1' then fdnlight(5)<='1'; elsif f6dnbutton='1' then fdnlight(6)<='1';

end if; if stop1button='1' then stoplight(1)<='1'; elsif stop2button='1' then stoplight(2)<='1'; elsif stop3button='1' then stoplight(3)<='1'; elsif stop4button='1' then stoplight(4)<='1'; elsif stop5button='1' then stoplight(5)<='1'; elsif stop6button='1' then stoplight(6)<='1';

30

基于FPGA 的六层电梯控制系统

end if; end if;

end process controllight; end art; 分频器程序: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity div is port(

clk_in:in std_logic; div_out:out std_logic ); end;

architecture a of div is

signal fre_N:integer range 0 to 10; signal clk_tmp:std_logic; begin

div_out<=clk_tmp; process(clk_in) begin

if falling_edge(clk_in) then if fre_N>10 then fre_N<=0;

clk_tmp<=not clk_tmp; else fre_N<=fre_N+1; end if;

31

基于FPGA 的六层电梯控制系统

end if; end process; end a; 译码器程序: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity yima is port(

aaa:integer range 1 to 6;

bbb:out std_logic_vector(3 downto 0) ); end;

architecture a of yima is begin process(aaa) begin

if aaa=1 then bbb<=\ elsif aaa=2 then bbb<=\ elsif aaa=3 then bbb<=\ elsif aaa=4 then bbb<=\ elsif aaa=5 then bbb<=\ elsif aaa=6 then bbb<=\end if; end process; end a;

数据选择器程序: library ieee;

use ieee.std_logic_1164.all;

32

基于FPGA 的六层电梯控制系统

entity led is port(

input:in std_logic_vector(3 downto 0); output:out std_logic_vector(6 downto 0) ); end;

architecture a of led is begin

process(input)

output<=\ \ \ \ \ \ \end process; end a;

33

本文来源:https://www.bwwdw.com/article/e4i.html

Top