基于FPGA的电梯控制系统的仿真图(附程序)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

系统主体模块的设计与仿真

本设计是以9层的电梯控制系统为模型。主要实现电梯运行开关的控制,楼层的请求,电梯运行遵循的方向优先原则,提前、延时开关门等基本的功能。以下是对不同的状态进行仿真,以验证本设计的可行性。

电梯进入运行状态控制进程,通过判断上升、下降请求寄存器每一位的值,决定电梯运行状态,并通过状态指示信号输出该状态,本设计都是使用高电平触发。

(1)当电梯处于1楼时,上升请求:

图4.1 电梯处于第一层时仿真图

(2)提前/延时关门功能

没有提前/延时关门时的情况下:

图4.2 没有提前/延时关门时的仿真图

从图4.2知道,运行或停止输出信号“lamp”为高电平时电梯进入运行状态,低电平时停止。圈内显示电梯在75.36us后从停止状态转入运行状态。

当设置提前关门“close”为高电平时:

图4.3 有提前关门时的仿真图

图4.3与图4.2对比可知,由于设置了提前关门进程“close”,电梯提前到75.36us 以前从停止状态转入运行状态。

2

当设置了延时关门“delay”为高电平时:

图4.4 延时关门时的仿真图

图4.4与图4.2对比可知,由于设置了延时关门进程“delay”,电梯延时到80.48us 后才从停止状态转入运行状态。

(3)当电梯处于较高层数时

图4.5 电梯处于较高层数时的仿真图

(5)电梯轿厢内楼层选择开关功能仿真

图4.6 轿厢内楼层选择开关仿真图4

(4)电梯的次态功能仿真

如图4.7所示,当运行或等待时间“run_wait”计数到0110时,电梯运行状态变量“ladd”给出电梯的下一个状态。如图 4.7圈内显示,“ladd”从0

显示模块的设计与仿真

图4.8 显示模块仿真图

本设计的显示模块一共有3个显示部分,分别是电梯运行/等待时间显示run_wait、楼层选择指示direct以及所在楼层批示st_out。这3个显示部分的设计结构都是一样的,所以以其中一个仿真作为例子。

从图4.8圈内看到,当电梯处于楼层2时,ledin收到信号‘0010’,经过系统内部自动转化为‘1011011’并通过ledout输出到共阴极LED数码显示。根据设计原理,共阴极LED数码显示的管脚a、b、e、d、g有高电平输入,所以发光,显示数字‘2’。

6

附录A 电梯控制器总体框图

附录B 电梯控制器主体的程序

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_arith.all;

use IEEE.std_logic_unsigned.all;

entity lift is

port (

clk: in STD_LOGIC; --2hz信号

upin: in STD_LOGIC; --上升请求键

downin: in STD_LOGIC; --下降请求键

st_ch: in STD_LOGIC; --楼层选择键

close: in STD_LOGIC; --提前关门键

delay: in STD_LOGIC; --延时关门键

run_stop: in STD_LOGIC; --电梯运行开关

lamp: out STD_LOGIC; --运行或停止灯

run_wait: out STD_LOGIC_VECTOR (3 downto 0); --运行或等待时间st_out: out STD_LOGIC_VECTOR (3 downto 0); --电梯所在楼层指示direct: out STD_LOGIC_VECTOR (3 downto 0) --楼层选择指示

);

end lift;

architecture rtl of lift is

component led

port(ledin:in std_logic_vector(3 downto 0);

ledout:out std_logic_vector(6 downto 0));

end component;

8

signal ur,dr:STD_LOGIC_VECTOR (9 downto 1); signal dir,liftor:integer range 0 to 8;

signal wai_t:STD_LOGIC_VECTOR (2 downto 0); signal divide,hand,clkin:STD_LOGIC;

signal ladd:STD_LOGIC_VECTOR (1 downto 0); signal closex,delayx:STD_LOGIC;

--signal run_wait: STD_LOGIC_VECTOR (3 downto 0); --signal st_out: STD_LOGIC_VECTOR (3 downto 0); --signal direct: STD_LOGIC_VECTOR (3 downto 0);

begin

direct<=conv_std_logic_vector(dir,4)+1;

st_out<=conv_std_logic_vector(liftor,4)+1;

run_wait<='0'&wai_t;

lamp<=ladd(1);

hand<=wai_t(2) and (not wai_t(1)) and wai_t(0); closex<=close and (not ladd(1));

delayx<=delay and (not ladd(1));

--urun_wait:led port map(run_wait,run_waitdis);

--ust_out:led port map(st_out,st_outdis);

--udirect:led port map(direct,directdis);

p0:process(clk)

begin

if (clk'event and clk='1') then

clkin<=not clkin;

相关文档
最新文档