EDA课程设计电梯控制器设计.docx
- 文档编号:3705029
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:13
- 大小:112.37KB
EDA课程设计电梯控制器设计.docx
《EDA课程设计电梯控制器设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计电梯控制器设计.docx(13页珍藏版)》请在冰豆网上搜索。
EDA课程设计电梯控制器设计
课程设计
题目:
********
班级:
********
姓名:
********
学号:
******
指导教师:
******
成绩:
电子与信息工程学院
信息与通信工程系
引言
1.1EDA技术的概念
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
1.2EDA技术的特点
利用EDA技术进行电子系统的设计,具有以下几个特点:
①用软件的方式设计硬件;②用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③设计过程中可用有关软件进行各种仿真;④系统可现场编程,在线升级;⑤整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。
因此,EDA技术是现代电子设计的发展趋势。
1.3EDA设计流程
典型的EDA设计流程如下:
1、文本/原理图编辑与修改。
首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。
2、编译。
完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。
3、综合。
将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。
4、行为仿真和功能仿真。
利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。
5、适配。
利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、布局布线。
适配报告指明了芯片内资源的分配与利用、引脚锁定、设计的布尔方程描述情况。
6、功能仿真和时序仿真。
7、下载。
如果以上的所有过程都没有发现问题,就可以将适配器产生的下载文件通过FPGA/CPLD下载电缆载入目标芯片中。
8、硬件仿真与测试。
1.4VHDL的介绍
VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage)主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本。
1.用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。
2.VHDL元件的设计与工艺无关,与工艺独立,方便工艺转换。
3.VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。
4.可以进行从系统级到逻辑级的描述,即混合描述。
5.VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。
2电梯控制器的设计要求
2.1课程设计的目的
本次设计的目的就是通过实践深入理解EDA技术并掌握VHDL硬件描述语言的设计方法和思想。
通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。
通过对实用电梯控制系统的设计,巩固和综合运用所学知识,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。
2.2课程设计的基本要求
电梯控制器是控制电梯按顾客要求自动上下的装置。
本文采用VHDL语言来设计实用六层电梯控制器,其代码具有良好的可读性和易理解性,源程序经A1tera公司的MAX+plusII软件仿真。
通过对四层电梯控制器的设计,可以发现本设计有一定的扩展性,而且可以作为更多层电梯控制器实现的基础。
通过独立的设计,能够完整的完成老师分配的课程设计任务。
通过对电梯控制系统的设计,掌握所学EDA课程的基本知识和对VHDL语言的综合设计应用。
通过课程设计,提高设计能力,提高分析解决实际问题的能力,并在设计中了解硬件编程的流程和思路,为以后工作和发挥技术打下基础。
3电梯控制器的综合设计
3.1电梯控制器的功能
1、 每层电梯的入口处设有上下请求开关,电梯内设有乘客到达层次的停站请求开关。
2、 设有电梯所处位置指示装置及电梯运行模式(上升或下降)指示装置。
3、 电梯每秒升降一层。
4、 电梯到达有停站请求的楼层后,经过1s电梯打开,开门只是灯亮,开门4s后,电梯门关闭(关门指示灯灭),电梯继续运行,直至执行完请求信号后停在当前楼层。
5、 能记忆电梯内外的所以请求信号,并按照电梯运行规则依次响应,每个请求信号保留至执行后消除。
6、 电梯运行规则:
当电梯处于上升模式时,只响应比电梯所在位置高的上楼信号,由下至上依次执行,直到最后一个上楼请求执行完毕,如更高层有下楼请求时,则直接升到有下降请求的最高楼接客,然后进入下降模式,但电梯处于下降模式时,则与上升模式相反。
7、 电梯初始状态为一层门开。
3.2电梯控制器的设计方案
控制器的功能模块如图1所示,包括主控制器、分控制器、楼层选择器、状态显示器、译码器和楼层显示器。
乘客在电梯中选择所要到达的楼层,通过主控制器的处理,电梯开始运行,状态显示器显示电梯的运行状态,电梯所在楼层数通过译码器译码从而在楼层显示器中显示。
分控制器把有效的请求传给主控制器进行处理,同时显示电梯的运行状态和电梯所在楼层数。
由于分控制器相对简单很多,所以主控制器是核心部分。
电梯控制器采用状态机来实现,思路比较清晰。
可以将电梯等待的每秒钟以及开门、关门都看成一个独立的状态。
由于电梯又是每秒上升或下降一层,所以就可以通过一个统一的1秒为周期的时钟来触发状态机。
根据电梯的实际工作情况,可以把状态机设置10个状态,分别是“电梯停留在第1层”、“开门”、“关门”、“开门等待第1秒”、“开门等待第2秒”、“开门等待第3秒”、“开门等待第4秒”、“上升”、“下降”和“停止状态”。
各个状态之间的转换条件可由上面的设计要求所决定。
3.3电梯控制器的实体设计
首先考虑输入端口,一个异步复位端口reset,用于在系统不正常时回到初始状态;在电梯外部,必须有升降请求端口,一层是最低层,不需要有下降请求,四层是最高层,不需要有上升请求,二层则上升、下降请求端口都有;在电梯的内部,应该设有各层停留的请求端口:
一个电梯时钟输入端口,该输入时钟以1秒为周期,用于驱动电梯的升降及开门关门等动作;另有一个按键时钟输入端口,时钟频率比电梯时钟高。
其次是输出端口,有升降请求信号以后,就得有一个输出端口来指示请求是否被响应,有请求信号以后,该输出端口输出逻辑‘l’。
被响应以后则恢复逻辑‘O’;同样,在电梯内部也应该有这样的输出端口来显示各层停留是否被响应;在电梯外部,需要一个端口来指示电梯现在所处的位置;电梯开门关门的状态也能用一个输出端口来指示;为了观察电梯的运行是否正确,可以设置一个输出端口来指示电梯的升降状态。
3.4电梯控制器的结构体设计
首先说明一下状态。
状态机设置了lO个状态,分别是电梯停留在l层(stoponl)、开门(dooropen)、关门(doorclose)、开门等待第1秒(doorwaitl)、开门等待第2秒(doorwait2)、开门等待第3秒(doorwait3)、开门等待第4秒(doorwait4)、上升(up)、下降(down)和停止(stop)。
在实体说明定义完端口之后,在结构体architecture和begin之间需要有如下的定义语句,来定义状态机。
TYPElift_stateIS
(stoponl,dooropen,doorclose,doorwaitl,doorwait2,doorwait3,doorwait4,up,down,stop):
SIGNALmylift:
lift_state:
在结构体中,设计了俩个进程互相配合,一个是状态机进程作为主要进程,另外一个是信号灯控制进程作为辅助进程。
状态机进程中的很多判断条件是以信号灯进程产生的信号灯信号为依据的,而信号灯进程中信号灯的熄灭又是由状态机进程中传出的clearup和cleardn信号来控制。
在状态机进程中,在电梯的上升状态中,通过对信号灯的判断,决定下一个状态是继续上升还是停止;在电梯下降状态中,也是通过对信号灯的判断,决定下一个状态是继续下降还是停止;在电梯停止状态中,判断是最复杂的,通过对信号的判断,决定电梯是上升、下降还是停止。
在信号灯控制进程中,由于使用了专门的频率较高的按键时钟,所以使得按键的灵敏度增大,但是时钟频率不能过高,否则容易使按键过于灵敏。
按键后产生的点亮的信号灯(逻辑值为‘1’)用于作为状态机进程中的判断条件,而clearup和cleardn信号为逻辑‘l’使得相应的信号灯熄灭。
3.5电梯控制器的VHDL
libraryieee;--库声明
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
--实体代码
entityfourliftis
port(reset:
instd_logic;
sys_clk,key_clk:
instd_logic;--系统时钟按键时钟
f1_up_key:
instd_logic;--一楼上升按键
f2_up_key:
instd_logic;--二楼上升按键
f2_dn_key:
instd_logic;--二楼下降按键
f3_up_key:
instd_logic;--三楼上升按键
f3_dn_key:
instd_logic;--三楼下降按键
f4_dn_key:
instd_logic;--四楼下降按键
stop1_key:
instd_logic;--一层停站请求端口
stop2_key:
instd_logic;--二层停站请求端口
stop3_key:
instd_logic;--三层停站请求端口
stop4_key:
instd_logic;--四层停站请求端口
close_key:
instd_logic;--关门请求端口
f_up_status:
bufferstd_logic_vector(4downto1);--上升的状态寄存信号
f_dn_status:
bufferstd_logic_vector(4downto1);--下降的状态寄存信号
f_stop_status:
bufferstd_logic_vector(4downto1);--停站的状态寄存信号
position:
bufferintegerrange1to4;--楼层的位置状态
lift_mode:
bufferstd_logic;--电梯运行模式1为上升0为下降
door_status:
outstd_logic);--电梯门的状态1为开0为关
endentityfourlift;
--结构体代码
architectureoneoffourliftis
typestatesis(stop_on1,door_open,door_close,door_wait1,door_wait2,door_wait3,door_wait4,up,down,stop);--定义各状态子类型
signallift_state:
states;
signalclear_up:
std_logic;--上升和停站请求清除信号
signalclear_dn:
std_logic;--下降和停站请求清除信号
begin
reg:
process(reset,sys_clk)--状态进程
variablepos1:
integerrange4downto1;--定义一个楼层的局部变量
begin
ifreset='1'then--复位有效
lift_state<=stop_on1;
clear_up<='0';
clear_dn<='0';
else
if(sys_clk'eventandsys_clk='1')then--上升沿
caselift_stateis
whenstop_on1=>door_status<='1';--
position<=1;pos1:
=1;
lift_state<=door_wait1;
whendoor_wait1=>lift_state<=door_wait2;
whendoor_wait2=>lift_state<=door_wait3;clear_up<='0';clear_dn<='0';
whendoor_wait3=>lift_state<=door_wait4;
whendoor_wait4=>lift_state<=door_close;
whendoor_close=>door_status<='0';--关门判断电梯的下一个运行方式
iflift_mode='0'then--下降模式
ifposition=4then--在4层
if(f_up_status="0000"andf_dn_status="0000"andf_stop_status="0000")then--没有请求信号时电梯停在当前层
lift_mode<='0';lift_state<=door_close;
elsif(f_dn_status(4)='1'andf_stop_status(4)='1')then--本层有请求信号时开门
lift_mode<='0';lift_state<=door_open;
elselift_mode<='0';lift_state<=down;--否则下降
endif;
elsifposition=3then--
if(f_up_status="0000"andf_dn_status="0000"andf_stop_status="0000")then--没有请求信号时电梯停在当前层
lift_mode<='1';lift_state<=door_close;
elsif(f_up_status(3)='1'orf_stop_status(3)='1')then--本层有上升和停站请求时
lift_mode<='1';lift_state<=door_open;
elsif(f_up_status="0000"andf_dn_status="0100"andf_stop_status="0000")then--只有3层有下降请求电梯开门
lift_mode<='0';lift_state<=door_open;
elsif(f_dn_status(4)='1'orf_stop_status(4)='1')then--当四层有下降和停请求信号时
lift_mode<='1';lift_state<=up;
elselift_mode<='0';lift_state<=down;
endif;
elsifposition=2then--
if(f_up_status="0000"andf_dn_status="0000"andf_stop_status="0000")then--没有请求信号时电梯停在当前层
lift_mode<='1';lift_state<=door_close;
elsif(f_up_status
(2)='1'orf_stop_status
(2)='1')then--本层有上升和停站请求时
lift_mode<='1';lift_state<=door_open;
elsif(f_up_status="0000"andf_dn_status="0010"andf_stop_status="0000")then--只有2层有下降请求电梯开门
lift_mode<='0';lift_state<=door_open;
elsif(f_dn_status(4)='1'orf_stop_status(4)='1'orf_dn_status(3)='1'orf_stop_status(3)='1'orf_up_status(3)='1')then
lift_mode<='1';lift_state<=up;
elselift_mode<='0';lift_state<=down;
endif;
elsifposition=1then--
if(f_up_status="0000"andf_dn_status="0000"andf_stop_status="0000")then--没有请求信号时电梯停在当前层
lift_mode<='1';lift_state<=door_close;
elsif(f_up_status
(1)='1'orf_stop_status
(1)='1')then--本层有上升和停站请求时
lift_mode<='1';lift_state<=door_open;
elselift_mode<='1';lift_state<=up;
endif;
endif;
endif;
whenup=>position<=position+1;pos1:
=pos1+1;--电梯楼层数加一
ifpos1<4and(f_up_status(pos1)='1'orf_stop_status(pos1)='1')then
lift_state<=stop;
elsifpos1=4and(f_up_status(pos1)='1'orf_stop_status(pos1)='1')then
lift_state<=stop;
elselift_state<=door_close;
endif;
whendown=>position<=position-1;pos1:
=pos1-1;--电梯楼层数减一
ifpos1>1and(f_dn_status(pos1)='1'orf_stop_status(pos1)='1')then
lift_state<=stop;
elsifpos1=1and(f_dn_status(pos1)='1'orf_stop_status(pos1)='1')then
lift_state<=stop;
elselift_state<=door_close;
endif;
whenstop=>lift_state<=door_open;
whendoor_open=>door_status<='1';
iflift_mode='1'then
ifposition<4and(f_up_status(pos1)='1'orf_stop_status(pos1)='1')then
clear_up<='1';
else
clear_up<='1';
clear_dn<='1';
endif;
elsiflift_mode='0'then
ifposition>1and(f_dn_status(pos1)='1'orf_stop_status(pos1)='1')then
clear_dn<='1';
else
clear_up<='1';
clear_dn<='1';
endif;
endif;
endcase;
endif;
endif;
endprocessreg;
com:
process(reset,key_clk)--控制进程
begin
ifreset='1'then--复位寄存器信号清零
f_up_status<="0000";f_dn_status<="0000";f_stop_status<="0000";
else
if(key_clk'eventandkey_clk='1')then--key—clk上升沿触发
iff1_up_key='1'then--记忆各层上升请求
f_up_status
(1)<='1';
endif;
iff2_up_key='1'then--记忆各层上升请求
f_up_status
(2)<='1';
endif;
iff3_up_key='1'then--记忆各层上升请求
f_up_status(3)<='1';
endif;
ifclear_up='1'then
f_up_status(position)<='0';f_stop_status(position)<='0';--
endif;
iff4_dn_key='1'then--记忆各层下降请求
f_dn_status(4)<='1';
endif;
iff3_dn_key='1'then--记忆各层下降请求
f_dn_status(3)<='1';
endif;
iff2_dn_key='1'then--记忆各层下降请求
f_dn_status
(2)<='1';
endif;
ifclear_dn='1'then
f_dn_status(position)<='0';f_stop_status(position)<='0';--
endif;
ifstop1_key='1'then
f_stop_status
(1)<='1';
endif;
ifstop2_key='1'then
f_stop_status
(2)<='1';
endif;
ifstop3_key='1'then
f_stop_status(3)<='1';
endif;
ifstop4_key='1'then
f_stop_status(4)<='1';
endif;
endif;
endif;
endprocesscom;
enda
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 电梯 控制器 设计