DSP 六层电梯控制器.docx
- 文档编号:30077700
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:26
- 大小:296.46KB
DSP 六层电梯控制器.docx
《DSP 六层电梯控制器.docx》由会员分享,可在线阅读,更多相关《DSP 六层电梯控制器.docx(26页珍藏版)》请在冰豆网上搜索。
DSP六层电梯控制器
《IC设计课程设计》报告
六
层
电
梯
控
制
器
姓名:
陈刚祥
学号:
080110011106
班级:
2008级1班
院系:
文华学院信息学部
专业:
电子科学与技术
2011年12月25日
成绩评定
教师签名
一、设计题目描述
针对我国楼层层数的基本水平,利用VHDL语言编程实现六层电梯控制器各个模块的功能,并用QuartusII对本文进行设计,讨论六层电梯控制器设计的思路、示意图、结构图、流程图及程序仿真图。
将设计在EDA工具QuartusII下进行时序仿真,得到仿真结果,验证六层电梯控制器设计的正确性。
本设计希望通过简单的六层电梯控制器的设计,为广大电梯设计者提供一个基础。
针对目前中小型电梯所能实现的功能,本控制器虚拟实现以下功能:
指示电梯所在楼层;
(1)电梯基本运行;
(2)关门延时设置;
(3)提前关门设置;
(4)看门狗设置;
(5)超载报警;
二、模块定义及功能描述
2.1算法分析
2.1.1电梯运行规则
(1)请求信号分析:
电梯的请求信号分为梯内请求和梯外请求,如果从这个角度就很难去进行对电梯运行可能情况的分析,因为电梯的运行是根据梯内和梯外的请求信号、行程信号进行控制的,而梯内和梯外的请求是随机且不能以有限的规则去对其进行说明的。
因此,很难对电梯的运行情况作出一个统一的分析。
出于这方面的考虑,本设计把电梯的请求信号划分为上升请求和下降请求。
电梯接收到请求信号后,都必须作预操作。
使电梯进入预上升状态的请求信号就是上升请求信号。
具体来说,就是当电梯所在楼层低于发出请求的楼层所要到达的目的楼层时,电梯必须在下一操作中作出上升运行,这时的请求信号就是上升请求信号。
反之,则是下降请求信号。
(2)电梯处于各楼层时的运行情况:
处于一楼时,电梯只可能接收到上升的请求信号。
此时,电梯就进入预上升状态,准备作上升运行。
如果电梯没有接收到请求信号,电梯则在一楼待机。
处于二楼到五楼时,电梯可能出现三种情况:
<1>电梯没有接收到请求信号,电梯返回一楼待机;
<2>电梯收到上升请求信号,进入预上升状态;
<3>电梯受到下降请求信号,进入预下降状态。
处于六楼时,电梯只可能接收到下降的请求信号。
此时,电梯就进入预下降状态,准备作下降运行。
如果电梯没有接收到请求信号,电梯则返回一楼待机。
对上述电梯的运行情况进行汇总,可以得到如图1的电梯运行状态图。
图1电梯运行状态图
在电梯运行过程中,存在一个如何处理信号优先的问题。
电梯实际上是一个人机交互式的控制系统,单纯用顺序优先或逻辑优先是不能满足控制要求的,因此,控制系统采用随机逻辑方式控制去解决信号优先的问题。
即在以顺序逻辑控制实现电梯的基本控制要求的基础,根据随机的输入信号,以及电梯的相应状态时的控制电梯的运行。
本设计采用以下规则:
电梯以前一状态为基准,即前一状态为上升,则操作完所以上升请求再操作下降请求;前一状态为下降,则反之。
(3)对电梯开门、关门、报警等内部信号处理分析。
其流程图如图2所示。
图2信号处理
当电梯接收到请求信号后,将以随机逻辑控制的方式到达发出请求的楼层。
开门使能信号促使电梯开门载客,同时驱动关门延时信号、超重检测以及故障检测。
在电梯进行完关门倒数计时、超重排除以及故障排除后,关门使能信号将促使电梯关门进入预操作状态。
如果此前出现提前关门信号而且电梯也已经进行完超重排除和故障排除,电梯同样关门进入预操作状态。
电梯在超重检测时发现超重,关门中断信号会促使电梯发出超重报警并且进行开门操作以减少乘客,重新进入载客操作;电梯在故障检测时,发现电梯某部分出现故障,关门中断信号会促使电梯发出故障报警并且进入开门操作的同时停止关门延时,作故障处理待机。
电梯控制器的原理图如图3所示。
图3控制器原理图
2.1.2程序流程分析
电梯的运行规则确立后,需对整个控制程序的设计作一个流程规范。
对程序进行模块化构思。
根据VHDL语言的规则,程序必须由最基本的实体和结构体构成。
实体对控制器的端口进行定义,结构体对各端口的行为进行描述。
因此程序运行需经过以下流程:
VHDL库调用;确立控制器的端口及相关的寄存器;根据电梯运行规则,设计相关运行描述;对电梯内外信号进行处理。
具体流程图如图4所示。
图4总程序流程图
2.2程序设计说明
2.2.1端口、寄存器设计说明
(1)由功能要求得到本程序设计的端口必须包括:
输入端口:
时钟(clk,频率为2Hz)、超载(full)、关门中断(deng)、提前关门(quick)、清除报警(clr)、电梯外人的上升请求信号(c_u1,c_u2,c_u3,,c_u4,c_u5)、电梯外人的下降请求信号(c_d2,c_d3,c_d4,c_d5,c_d6)、电梯内人的请求信号(d1,d2,d3,d4,d5,d6)、到达楼层信号(g1,g2,g3,g4,g5,g6)。
输出端口:
电梯门控制信号(door)、电梯所在楼层显示(led)电梯外人上升请求信号显示(led_c_u)、电梯外人下降请求信号显示(led_c_d)、电梯内请求信号显示(led_d)、看门狗报警信号(wahaha)、电梯运动方向显示(ud)、超载警告信号(alarm)、电机控制信号(up,down)。
其分布如图5所示。
图5控制器端口分布
(2)程序要求的寄存器(中间信号)包括:
电梯内人请求信号寄存信号(d11,d22,d33,d44,d55,d66)、电梯外人上升请求信号寄存信号(c_u11,c_u22,c_u33,c_u44,c_u55)、电梯外人下降请求信号寄存信号(c_d22,c_d33,c_d44,c_d55,c_d66)、分频信号(q)、关门延时计数器(q1)、看门狗计数器(q2)、电梯内外请求信号寄存器(dd,cc_u,cc_d,dd_cc)、开门使能信号(opendoor)、电梯运动方向信号寄存器(updown)、预备上升、预备下降预操作使能信号(en_up,en_dw)。
2.2.2模块设计说明
本程序由三个基本模块组成,包括调用VHDL库模块、实体设计模块和结构体设计模块。
而在结构体模块中又内嵌有进程执行单元。
(1)调用VHDL库
使用library语句,本程序应用了VHDL库中的“通用ieee库”和“标准std库”。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
(2)entity实体设计模块
entitydiantiis
port(clk:
instd_logic;--时钟信号(频率为2Hz)
full,deng,quick,clr:
instd_logic;--超载、关门中断、提前关门、清除报警信号
c_u1,c_u2,c_u3,c_u4,c_u5:
instd_logic;--电梯外人的上升请求信号
c_d2,c_d3,c_d4,c_d5,c_d6:
instd_logic;--电梯外人的下降请求信号
d1,d2,d3,d4,d5,d6:
instd_logic;--电梯内人的请求信号
g1,g2,g3,g4,g5,g6:
instd_logic;--到达楼层信号
door:
outstd_logic_vector(1downto0);--电梯门控制信号
led:
outstd_logic_vector(6downto0);--电梯所在楼层显示(数码管显示)
led_c_u:
outstd_logic_vector(5downto0);--电梯外人上升请求信号显示
led_c_d:
outstd_logic_vector(5downto0);--电梯外人下降请求信号显示
led_d:
outstd_logic_vector(5downto0);--电梯内请求信号显示
wahaha:
outstd_logic;--看门狗报警信号
ud,alarm:
outstd_logic;--电梯运动方向显示,超载警告信号
up,down:
outstd_logic);--电机控制信号和电梯运动
enddianti;
(3)archi结构体设计模块和process进程执行单元
architecturebehavofdiantiis
signald11,d22,d33,d44,d55,d66:
std_logic;--电梯内人请求信号寄存信号
signalc_u11,c_u22,c_u33,c_u44,c_u55:
std_logic;--电梯外人上升请求信号寄存信号
signalc_d22,c_d33,c_d44,c_d55,c_d66:
std_logic;--电梯外人下降请求信号寄存信号
signalq:
integerrange0to1;--分频信号
signalq1:
integerrange0to6;--关门延时计数器
signalq2:
integerrange0to9;--看门狗计数器
signaldd,cc_u,cc_d,dd_cc:
std_logic_vector(5downto0);--电梯内外请求信号寄存器
signalopendoor:
std_logic;--开门使能信号
signalupdown:
std_logic;--电梯运动方向信号寄存器
signalen_up,en_dw:
std_logic;--预备上升、预备下降预操作使能信号
begin
process(clk)
begin
。
。
。
(进程语句具体看附录)
endbehav;
2.2.3具体语句设计说明
况的具体说明。
elsifg2='1'thenled<="0010010";--电梯到达2楼,数码管显示2
ifupdown='1'then--电梯前一运动状态位上升
ifd22='1'orc_u22='1'then
d22<='0';c_u22<='0';opendoor<='1';--有当前层的请求,则电梯进入开门状态
elsifdd_cc>"00000011"then
en_up<='1';en_dw<='0';opendoor<='0';--有上升请求,则电梯进入预备上升状态
elsifdd_cc<"00000010"then
en_dw<='1';en_up<='0';opendoor<='0';--有下降请求,则电梯进入预备下降状态
endif;
--电梯前一运动状态为下降
elsifd22='1'orc_d22='1'then
d22<='0';c_d22<='0';opendoor<='1';--有当前层的请求,则电梯进入开门状态
elsifdd_cc<"00000010"then
en_dw<='1';en_up<='0';opendoor<='0';--有下降请求,则电梯进入预备下降状态
elsifdd_cc>"00000011"thenen_up<='1';en_dw<='0';opendoor<='0';--有上升请求,电梯进入预备上升状态endif;
在上述语句中的“elsifg2=‘1’thenled<=“0010010;”,led的赋值之所以为“0010010”是根据共阳极七段数字显示器的发光段排列的,如图6所示。
可发光段a、b、c、e、g形成一个2字。
以此类推,在一楼时led赋值为“100111”
,三楼时为“0000110”,四楼时为……
在进程执行单元里,对电梯在楼层时的操作情况作出了描述,例如:
开门、关门延时、超载报警、故障报警以及电梯内的请求信号处理,具体说明给出如下:
process(clk)
begin
ifclk'eventandclk='1'then
ifclr='1'thenq1<=0;q2<=0;wahaha<='0';--清除故障报警
elsiffull='1'thenalarm<='1';q1<=0;--超载报警
ifq1>=3thendoor<="10";
elsedoor<="00";
endif;
elsifq=1thenq<=0;alarm<='0';
ifq2=3thenwahaha<='1';--故障报警
else
ifopendoor='1'then
door<="10";q1<=0;q2<=0;up<='0';down<='0';--开门操作
elsifen_up='1'then--上升预操作
ifdeng='1'thendoor<="10";q1<=0;q2<=q2+1;--关门中断
elsifquick='1'thenq1<=3;--提前关门
elsifq1=6thendoor<="00";updown<='1';up<='1';--关门完毕,电梯进入上升状态
elsifq1>=3thendoor<="01";q1<=q1+1;--电梯进入关门状态
elseq1<=q1+1;door<="00";--电梯进入等待状态
endif;
elsifen_dw='1'then--下降预操作
ifdeng='1'thendoor<="10";q1<=0;q2<=q2+1;
elsifquick='1'thenq1<=3;
elsifq1=6thendoor<="00";updown<='0';down<='1';
elsifq1>=3thendoor<="01";q1<=q1+1;
elseq1<=q1+1;door<="00";
endif;
endif;
elseq<=1;alarm<='0';--清除超载报警
ifd1='1'thend11<=d1;--对电梯内人请求信号进行检测和寄存
elsifd2='1'thend22<=d2;
elsifd3='1'thend33<=d3;
elsifd4='1'thend44<=d4;
elsifd5='1'thend55<=d5;
elsifd6='1'thend66<=d6;
endif;
ifc_u1='1'thenc_u11<=c_u1;--对电梯外人上升请求信号进行检测和寄存
elsifc_u2='1'thenc_u22<=c_u2;
elsifc_u3='1'thenc_u33<=c_u3;
elsifc_u4='1'thenc_u44<=c_u4;
elsifc_u5='1'thenc_u55<=c_u5;
endif;
ifc_d2='1'thenc_d22<=c_d2;--对电梯外人下降请求信号进行检测和寄存
elsifc_d3='1'thenc_d33<=c_d3;
elsifc_d4='1'thenc_d44<=c_d4;
elsifc_d5='1'thenc_d55<=c_d5;
elsifc_d6='1'thenc_d66<=c_d6;
endif;
dd<=d66&d55&d44&d33&d22&d11;-电梯内人请求信号并置
cc_u<='0'&c_u55&c_u44&c_u33&c_u22&c_u11;--电梯外人上升请求信号并置
cc_d<=c_d66&c_d55&c_d44&c_d33&c_d22&'0';--电梯外人下降请求信号并置
dd_cc<=ddorcc_uorcc_d;--电梯内、外人请求信号进行综合
endif;
ud<=updown;--电梯运动状态显示
led_d<=dd;--电梯内人请求信号显示
led_c_u<=cc_u;--电梯外人上升请求信号显示
led_c_d<=cc_d;--电梯外人下降请求信号显示
endif;
三、Verilog源代码
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitydiantiis
port(clk:
instd_logic;--时钟信号(频率为2Hz)
full,deng,quick,clr:
instd_logic;--超载、关门中断、提前关门清除报警信号
c_u1,c_u2,c_u3,c_u4,c_u5:
instd_logic;--电梯外人的上升请求信号
c_d2,c_d3,c_d4,c_d5,c_d6:
instd_logic;--电梯外人的下降请求信号
d1,d2,d3,d4,d5,d6:
instd_logic;--电梯内人的请求信号
g1,g2,g3,g4,g5,g6:
instd_logic;--到达楼层信号
door:
outstd_logic_vector(1downto0);--电梯门控制信号
led:
outstd_logic_vector(6downto0);--电梯所在楼层显示
led_c_u:
outstd_logic_vector(5downto0);--电梯外人上升请求信号显示
led_c_d:
outstd_logic_vector(5downto0);--电梯外人下降请求信号显示
led_d:
outstd_logic_vector(5downto0);--电梯内请求信号显示
wahaha:
outstd_logic;--看门狗报警信号
ud,alarm:
outstd_logic;--电梯运动方向显示,超载警告信号
up,down:
outstd_logic);--电机控制信号和电梯运动
enddianti;
architecturebehavofdiantiis
signald11,d22,d33,d44,d55,d66:
std_logic;--电梯内人请求信号寄存信号
signalc_u11,c_u22,c_u33,c_u44,c_u55:
std_logic;--电梯外人上升请求信号寄存信号
signalc_d22,c_d33,c_d44,c_d55,c_d66:
std_logic;--电梯外人下降请求信号寄存信号
signalq:
integerrange0to1;--分频信号
signalq1:
integerrange0to6;--关门延时计数器
signalq2:
integerrange0to9;--看门狗计数器
signaldd,cc_u,cc_d,dd_cc:
std_logic_vector(5downto0);--电梯内外请求信号寄存器
signalopendoor:
std_logic;--开门使能信号
signalupdown:
std_logic;--电梯运动方向信号寄存器
signalen_up,en_dw:
std_logic;--预备上升、预备下降预操作使能信号
begin
process(clk)
begin
ifclk'eventandclk='1'then
ifclr='1'thenq1<=0;q2<=0;wahaha<='0';--清除故障报警
elsiffull='1'thenalarm<='1';q1<=0;--超载报警
ifq1>=3thendoor<="10";
elsedoor<="00";
endif;
elsifq=1thenq<=0;alarm<='0';
ifq2=3thenwahaha<='1';--故障报警
else
ifopendoor='1'thendoor<="10";q1<=0;q2<=0;up<='0';down<='0';--开门操作
elsifen_up='1'then--上升预操作
ifdeng='1'thendoor<="10";q1<=0;q2<=q2+1;--关门中断
elsifquick='1'thenq1<=3;--提前关门
elsifq1=6thendoor<="00";updown<='1';up<='1';--关门完毕,电梯进入上升状态
elsifq1>=3thendoor<="01";q1<=q1+1;--电梯进入关门状态
elseq1<=q1+1;door<="00";--电梯进入等待状态
endif;
elsifen_dw='1'then--下降预操作
ifdeng='1'thendoor<="10";q1<=0;q2<=q2+1;
elsifquick='1'thenq1<=3;
elsifq1=6thendoor<="00";updown<='0';down<='1';
elsifq1>=3thendoor<="01";q1<=q1+1;
elseq1<=q1+1;door<="00";
endif;
endif;
ifg1='1'thenled<="1001111";--电梯到达1楼,数码管显示1
ifd11='1'orc_u11='1'thend11<='0';c_u11<='0';opendoor<='1';
--有当前层的请求,则电梯进入开门状态
elsifdd_cc>"00000001"thenen_up<='1';en_dw<='0';opendoor<='0';
--有上升请求,则电梯进入预备上升状态
elsifdd_cc="00000000"thenopendoor<='0';--无请求时,电梯停在1楼待机
endif;
elsifg2='1'thenled<="0010010";--电梯到达2楼,数码管显示2
ifupdown='1'then--电梯前一运动状态位上升
ifd22='1'orc_u22='1'thend22<='0';c_u22<='0';opendoor<='1';
--有当前层的请求,则电梯进入开门状态
elsifdd_cc>"00000011"thenen_up<='1';en_dw<='0';opendoor<='0';
--有上升请求,则电梯进入预备上升状态
elsifdd_cc<"00000010"thenen_dw<='1';en_up<='0';opendoor<='0';
--有下降请求,则电梯进入预备下降状
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 六层电梯控制器 电梯 控制器