基于FPGA的电梯控制系统的仿真图(附程序)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;