专业综合课程设计基于VHDL的电梯控制器设计.docx

上传人:b****8 文档编号:9613554 上传时间:2023-02-05 格式:DOCX 页数:20 大小:253.71KB
下载 相关 举报
专业综合课程设计基于VHDL的电梯控制器设计.docx_第1页
第1页 / 共20页
专业综合课程设计基于VHDL的电梯控制器设计.docx_第2页
第2页 / 共20页
专业综合课程设计基于VHDL的电梯控制器设计.docx_第3页
第3页 / 共20页
专业综合课程设计基于VHDL的电梯控制器设计.docx_第4页
第4页 / 共20页
专业综合课程设计基于VHDL的电梯控制器设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

专业综合课程设计基于VHDL的电梯控制器设计.docx

《专业综合课程设计基于VHDL的电梯控制器设计.docx》由会员分享,可在线阅读,更多相关《专业综合课程设计基于VHDL的电梯控制器设计.docx(20页珍藏版)》请在冰豆网上搜索。

专业综合课程设计基于VHDL的电梯控制器设计.docx

专业综合课程设计基于VHDL的电梯控制器设计

目录

一、设计题目2

二、设计目的2

三、设计要求2

四、设计的基础依据2

(一)FPGA芯片介绍2

(二)VHDL语言介绍3

五、电梯控制器的基本设计原理4

(一)电梯控制器的工作原理4

(二)电梯控制器的设计7

七、参考文献10

附录1、VHDL源代码11

附录2、三层电梯的电路总图17

 

一、设计题目

基于VHDL的三层电梯控制器设计

二、设计目的

掌握电梯控制器的工作原理,对系统进行基于VHDL的设计与实现。

三、设计要求

1、阐述电梯控制器系统工作原理

2、画出电梯控制器的结构方框图

3、基于VHDL的设计实现

4、写出详细的设计报告

四、设计的基础依据

(一)FPGA芯片介绍

FPGA是Field-ProgrammableGateArray(现场可编程门阵列)的缩写,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

它是专用集成电路中一种半定制电路。

具克服了传统可编程器件数有限的缺点,又具有可编程的特点。

FPGA器件是由美国XILINX公司于1985年首先推出。

一般把FPGA定义为基于查找表技术(LOOK-UPTablc,LUT)和SRAM工艺的PLD,目前的FPGA已远超出先前产品的基本功能,并且整合了许多常用功能(如RAM、时钟管理和DSP),在新型的的系统级可编程逻辑器件中还可以以IP核的形式来进行功能设计,或许只需要一块FPGA芯片就可以实现所有功能,成为片上系统。

 

FPGA芯片的结构如图4-1所示。

图4-1FPGA芯片结构图

近几年来FPGA有了很快的发展,按照传统观点,FPGA仅用于产品原型设计和ASIC的验证,用于大规模的数字系统开发就过于昂贵且功耗巨大。

随着FPGA的研究突破了低功率、低成本和先进工艺的瓶颈后,FPGA的应用领域日益扩张,随着功能和性能的进一步提高,FPGA应用领域已成可编程逻辑领域扩展到了高性能DSP、高性能嵌入式等领域。

[2]

(二)VHDL语言介绍

VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,于1983年由美国国防部(DOD)发起创建,由IEEE(TheInstituteofElectricalandEngineers)进一步发展并在1987年作为“IEEE标准1076”发布,从此VHDL成为硬件描述语言的业界标准之一。

至IEEE公司发布了VHDL语言标准版之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具支持VHDl。

此后VHDL语言在电子设计领域的得到了广泛的应用,并逐步取代了原有的非标准硬件描述语言。

VHDL语言作为一个规范语言和建模语言,具有和强的电路描述和建模能力,能从多个多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。

VHDL具有与具体硬件无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述能力。

用VHDL语言进行电子系统设计的最大优点是设计者专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。

其具体的流程图如图4-2所示。

图4-2VHDL语言的设计流程

五、电梯控制器的基本设计原理

(一)电梯控制器的工作原理

1、请求信号分析:

电梯控制器的请求信号分为电梯内部请求和外部请求,如果从这角度就很难对电梯运行情况进行分析,因为电梯梯内梯外的请求是随机且不能以有限的规则去对进行说明的,因此本设计把电梯的请求信号划分为上升信号和下降信号。

电梯收到请求信号后,都必需做预操作。

使电梯进入预上升状态的请求信号就是上升请求信号,具体来说就是当电梯所在楼层低于发出电梯外部请求的楼层或者低于楼内请求所要达到的目的楼层时,电梯必需在下一操作中上升,这时的请求信号就是上升信号。

反之,则是下降信号。

 

2、电梯处于各层时的情况:

当电梯在一楼时,不管电梯内部还是外部,电梯只能收到上升请求信号,此时电梯进入预上升状态,准备上升,如果没有收到上升请求,则电梯待在一楼。

如图5-1a所示。

当电梯在二楼时,如电梯外部内部均没有收到任何请求,电梯将返回一楼待机;如电梯接收到上升请求信号,则进入预上升状态;如电梯接收到下降请求信号,电梯进入预下降状态。

如图5-1b所示。

当电梯在三楼时,电梯只能接收到下降请求信号,此时电梯进入预下降状态,准备下降,没有收到请求信号则返回一楼。

如图5-1c所示。

图5-1a电梯处于一楼的情况分析

图5-1b电梯处于二楼的情况分析

图5-1c电梯处于三楼的情况分析

对三个楼层的情况进行汇总,可得到如图5-2的状态图。

图5-2电梯运行状态图

电梯运行过程中,还存在处理信号优先的问题,单纯的顺序优先或逻辑优先是不能满足控制要求的,因此采用随机逻辑的方式控制去解决信号优先的问题,即在顺序逻辑控制的基础上根据随机的信号输入,以及电梯的相应状态适时的控制电梯运行,如当电梯在三楼时,一楼、二楼均有上升请求,电梯则在二楼不停止,先直接到一楼接客。

 

(二)电梯控制器的设计

本设计由3个模块组成:

控制模块、楼层显示模块、电梯状态显示模块。

电梯控制的结构框图如图5-3所示,电梯控制器的电路总图见附录1。

图5-3电梯控制器整体框图

1、控制模块

控制模块如图5-4,该模块是整个程序的核心,设计思想是将电梯的状态分为四个状态:

一层状态c1,二层状态c2,三层状态c3,开门状态kai,对每一个状态分析其所有可能。

程序见附录1。

图5-4控制模块

端口up1,up2,down2,down3分别是电梯外部一层上升请求、二层上升请求、二层下降请求、三层下降请求。

端口k1、k2、k3是电梯内部所要到达的楼层请求。

端口clk为时钟信号。

端口site[3..1]输出的是电梯所在的楼层。

端口mode输出的是电梯运行状态。

端口door是电梯开门关门状态。

3、楼层显示模块

楼层显示模块如图5-5,该模块的主要功能是将电梯所在的楼层显示的信号转换成数码管显示信号。

图5-5楼层显示模块

端口a[3..1]输入的是电梯楼层信号。

端口clk为时钟信号。

端口p[6..0]为输出数码管显示信号。

七段数码管显示的原理是:

当a、b、c、d、e、f、g输入正电源时,对应的LED灯就会亮,如当b、c接入正电源时,数码管就的b、c所对应的LED灯亮,达到显示“1”的效果。

数码管显示器的发光排列如图5-6.

图5-6七段数码管

4、电梯状态显示模块

电梯状态显示模块

图5-7译码显示模块

端口clk为时钟输入信号。

端口mode为电梯状态信号输入。

端口sel[3..0]为输出sel信号。

端口q[0..15]输出的是点阵显示信号。

5、VHDL源代码语法的说明

(1)本程序设计调用了ieee库,ieee库是VHDL设计中最为常用的库,它包含有ieee标准的程序包和其他一些支持工业标准的程序包。

本设计采用std-logic-1164、std-logic-unsigned、std-logic-arith程序包。

(2)以关键词entity引导,endentitythreelift结尾的部分是程序的实体部分。

VHDL的实体描述了电路器件的外部情况,本设计定义了关于三层电梯控制器用到的各类时钟、异步复位按键、信号灯指示端口、电梯的请求端口。

它描述了端口模式主要有in、buffer、out,以及各端口信号的数据类型主要有std-logic、std-logic-vector、integer。

(3)以关键词architecture引导,endarchitectureone结尾的语句部分是结构体部分,结构体描述电路器件的内部逻辑功能。

VHDL源代码见附录1

 

七、参考文献

[1]陈雪松,VHDL入门与应用.北京人民邮电出版社2000

[2]侯伯亨,VHDL硬件描述语言与数字逻设计.西安电子科技大学出版社2001

[3]臧春华,蒋璇.数字系统设计与PLD应用.北京电子工业出版社2009

[4]段吉海,数字通信系统建模与设计.电子工业出版社2004

[5]程佩青,数字信号处理教程.清华大学出版社2013

 

附录1、VHDL源代码

libraryieee;--库的说明

useieee.std_logic_1164.all;--程序包的说明

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitythreeliftis--实体

port(buttonclk:

instd_logic;--按键时钟信号

liftclk:

instd_logic;--电梯时钟信号

reset:

instd_logic;--异步复位端口

f1upbutton:

instd_logic;--一层上升请求端口

f2upbutton:

instd_logic;--二层上升请求端口

f2dnbutton:

instd_logic;--二层下降请求端口

f3dnbutton:

instd_logic;--三层下降请求端口

stop1button:

instd_logic;--一层停站请求端口

stop2button:

instd_logic;--二层停站请求端口

stop3button:

instd_logic;--三层停站请求端口

position:

bufferintegerrange1to3;--电梯位置信号

udsig:

bufferstd_logic;--电梯模式(上升或下降)信号

fuplight,fdnlight,stoplight:

bufferstd_logic_vector(3downto1);

--上升、下降、停站请求寄存信号

doorlight:

outstd_logic;--开关门信号

dout1:

outstd_logic_vector(3downto0));

endentitythreelift;

architectureoneofthreeliftis--结构体

typelift_stateis--定义十个状态

(stopon1,dooropen,doorclose,doorwait1,doorwait2,doorwait3,doorwait4,up,down,stop);

signalmylift:

lift_state;

signalclearup:

std_logic;--上升和停站请求清除信号

signalcleardn:

std_logic;--下降和停站请求清除信号

begin

ctrlift:

process(reset,liftclk)--状态机进程

variablepos:

integerrange3downto1;

begin

ifreset='1'then--异步复位,电梯的初始状态为一层开门状态

mylift<=stopon1;

clearup<='0';

cleardn<='0';

else

ifliftclk'eventandliftclk='1'then

casemyliftis

whenstopon1=>

doorlight<='1';

position<=1;

pos:

=1;

mylift<=doorwait1;--电梯等待4s

whendoorwait1=>

mylift<=doorwait2;

whendoorwait2=>

clearup<='0';

cleardn<='0';

mylift<=doorwait3;

whendoorwait3=>

mylift<=doorwait4;

whendoorwait4=>

mylift<=doorclose;

whendoorclose=>--关门,判定电梯下一个运行方式

doorlight<='0';

ifudsig='1'then--电梯处在上升模式

ifposition=3then

iffuplight="000"andfdnlight="000"andstoplight="000"then--没有请求信号时,电梯停在当前层

udsig<='0';

mylift<=doorclose;

elsiffdnlight(3)='1'orstoplight(3)='1'then

--本层有请求信号是,电梯开门

udsig<='0';

mylift<=dooropen;

else--否则下降

udsig<='0';

mylift<=down;

endif;

elsifposition=2then

iffuplight="000"andfdnlight="000"andstoplight="000"then

udsig<='1';

mylift<=doorclose;

elsiffuplight

(2)='1'orstoplight

(2)='1'then

--本层有上升或停站请求时时,电梯开门

udsig<='1';

mylift<=dooropen;

elsiffuplight="000"andstoplight="000"andfdnlight="010"then--只有二层有下降请求时,电梯开门

udsig<='0';

mylift<=dooropen;

elsifstoplight(3)='1'orfdnlight(3)='1'then

--三层有停站请求或下降请求,则上升

udsig<='1';

mylift<=up;

else

udsig<='0';

mylift<=down;

endif;

elsifposition=1then

iffuplight="000"andfdnlight="000"andstoplight="000"then

udsig<='1';

mylift<=doorclose;

elsifstoplight

(1)='1'orfuplight

(1)='1'then

udsig<='1';

mylift<=dooropen;

else

udsig<='1';

mylift<=up;

endif;

endif;

elsifudsig='0'then--电梯处在下降模式

ifposition=3then

iffuplight="000"andfdnlight="000"andstoplight="000"then

udsig<='0';

mylift<=doorclose;

elsiffdnlight(3)='1'orstoplight(3)='1'then

udsig<='0';

mylift<=dooropen;

else

udsig<='0';

mylift<=down;

endif;

elsifposition=2then

iffuplight="000"andfdnlight="000"andstoplight="000"then

udsig<='0';

mylift<=doorclose;

elsiffdnlight

(2)='1'orstoplight

(2)='1'then

udsig<='0';

mylift<=dooropen;

elsiffdnlight="000"andstoplight="000"andfuplight="010"then

udsig<='1';

mylift<=dooropen;

elsiffuplight

(1)='1'orstoplight

(1)='1'then

--一层有停站请求或上升请求,则下降

udsig<='0';

mylift<=down;

else

udsig<='1';

mylift<=up;

endif;

elsifposition=1then

iffuplight="000"andfdnlight="000"andstoplight="000"then

udsig<='1';

mylift<=doorclose;

elsifstoplight

(1)='1'orfuplight

(1)='1'then

udsig<='1';

mylift<=dooropen;

else

udsig<='1';

mylift<=up;

endif;

endif;

endif;

whenup=>--电梯处于上升状态

position<=position+1;--电梯楼层数加一

pos:

=pos+1;

ifpos<3and(stoplight(pos)='1'orfuplight(pos)='1')then

mylift<=stop;

--电梯在一层或二层,本层有停站或上升请求时,则停止

elsifpos=3and(stoplight(pos)='1'orfdnlight(pos)='1')then

mylift<=stop;

--电梯处在三层,并且有三层停站或下降请求,则停止

else

mylift<=doorclose;

endif;

whendown=>--电梯处在下降状态

position<=position-1;--电梯楼层数减一

pos:

=pos-1;

ifpos>1and(stoplight(pos)='1'andfdnlight(pos)='1')then

mylift<=stop;

elsifpos=1and(stoplight(pos)='1'orfuplight(pos)='1')then

mylift<=stop;

else

mylift<=doorclose;

endif;

whenstop=>

mylift<=dooropen;

whendooropen=>

doorlight<='1';

ifudsig='1'then

ifposition<3and(fuplight(pos)='1'orstoplight(pos)='1')then

clearup<='1';--清除当前层上升和停站请求

else

clearup<='1';

cleardn<='1';

endif;

elsifudsig='0'then

ifposition>1and(fdnlight(pos)='1'orstoplight(pos)='1')then

cleardn<='1';--清除当前层下降和停站请求

else

clearup<='1';

cleardn<='1';

endif;

endif;

mylift<=doorwait1;

endcase;

endif;

endif;

endprocessctrlift;

ctrlight:

process(reset,buttonclk)--信号灯控制进程

begin

ifreset='1'then--复位,寄存信号清零

fuplight<="000";

fdnlight<="000";

stoplight<="000";

else

ifbuttonclk'eventandbuttonclk='1'then

ifclearup='1'then--上升和停站请求清零

fuplight(position)<='0';

stoplight(position)<='0';

else

iff1upbutton='1'then--记忆各层上升请求

fuplight

(1)<='1';

elsiff2upbutton='1'then

fuplight

(2)<='1';

endif;

endif;

ifcleardn='1'then--下降和停站请求清零

fdnlight(position)<='0';

stoplight(position)<='0';

else

iff2dnbutton='1'then--记忆各层下降请求

fdnlight

(2)<='1';

elsiff3dnbutton='1'then

fdnlight(3)<='1';

endif;

endif;

ifstop1button='1'then--记忆各层停站请求

stoplight

(1)<='1';

elsifstop2button='1'then

stoplight

(2)<='1';

elsifstop3button='1'then

stoplight(3)<='1';

endif;

endif;

endif;

endprocessctrlight;

process(position)--楼层显示进程

begin

ifposition=1then

dout1<="0001";

elsifposition=2then

dout1<="0010";

elsifposition=3then

dout1<="0011";

endif;

endprocess;

endarchitectureone;

附录2、三层电梯的电路总图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1