电梯控制器原理图
5.具体程序说明
整段代码由三大部分组成:库声明,实体,结构体。
(1)库声明部分
调用VHDL库,通过library语句本程序应用了VHDL库中的”通用ieee库”和”标准std库”。 library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;
(2) 实体部分
实体部分列出了代码所用到的所用输入输出端口。结构体部分共使用了分频进程,电梯状态进程,读按键、控制指示灯进程和信号灯进程4个进程。主控制器系统由VHDL语言实现,其输入输出端口定义如下: entity flift is
port(clk:in std_logic; ——时钟信号 close :in std_logic; ——立即关门 rightlight:buffer std_logic; ——门灯信号 up1:in std_logic; ——楼上升按钮 up2:in std_logic; —二楼上升按钮 down2:in std_logic; ——二楼下将按钮 down3:in std_logic; ——三楼下将按钮 uplight:buffer std_logic_vector(3 downto 1); ——上升指示灯 dnlight:buffer std_logic_vector(3 downto 1); ——下将指示灯 stop1,stop2,stop3:in std_logic; ——停止按钮 stoplight:buffer std_logic_vector(3 downto 1); ——停止指示灯 position:buffer integer range 1 to 3; ——楼层信号 led: buffer std_logic_vector(3 downto 0); ——楼层指示灯 doorlight:out std_logic; ——门灯信号 udsig:buffer std_logic); ——电梯运行状态
(3)结构体部分
使用状态机来实现电梯功能。
在结构体中,设计了俩个进程互相配合,一个是状态机进程作为主要进程,另外一个是信号灯控制进程作为辅助进程。状态机进程中的很多判断条件是以信
号灯进程产生的信号灯信号为依据的,而信号灯进程中信号灯的熄灭又是由状态机进程中传出的clearup和cleardn信号来控制。
在状态机进程中,在电梯的上升状态中,通过对信号灯的判断,决定下一个状态是继续上升还是停止;在电梯下降状态中,也是通过对信号灯的判断,决定下一个状态是继续下降还是停止;在电梯停止状态中,判断是最复杂的,通过对信号的判断,决定电梯是上升、下降还是停止。
在信号灯控制进程中,由于使用了专门的频率较高的按键时钟,所以使得按键的灵敏度增大,但是时钟频率不能过高,否则容易使按键过于灵敏。按键后产生的点亮的信号灯(逻辑值为‘1’)用于作为状态机进程中的判断条件,而clearup和cleardn信号为逻辑‘l’使得相应的信号灯熄灭。
分频进程:该进程的目的是产生不同频率的两个时钟,电梯控制时钟fliclk和按键控制时钟buttclk。
process(clk) ——产生电梯控制时钟fliclk和按键控制时钟buttclk begin
if (clk'event and clk='1') then q<=q+1; end if; buttclk<=q(0); fliclk<=q(3); end process;
状态机进程:该部分是整个设计的核心,根据电梯的工作模式,将电梯的工作分为10个状态,分别为停一层stopno1、开门状态dooropen、关门状态doorclose、开门等待1秒wait1、开门等待2秒wait2、开门等待3秒wait3、开门等待4秒wait4、上升up、下降down和停止stop。在每个状态下,判断输入信号的请求,转入下一状态且产生对应得输出信号。
停一层状态:电梯开门同时转入下一状态wait1。
when stoponl=>doorlight<='1'; position<=1; pos:=1;state<=wait1;
开门等待1秒:该状态时重新计入上升下降请求。如果此时有关门请求,则转入下一状态doorclose;如果没有请求,则下一状态为wait2。 when wait1=>clearup<='0'; cleardn<='0'; if(close='1') then state<=doorclose; else state<=wait2; end if;
开门等待2秒:如果此时有关门请求,则转入下一状态doorclose;如果没有请求,则下一状态为wait3。
开门等待3秒:如果此时有关门请求,则转入下一状态doorclose;如果没
有请求,则下一状态为wait4。
开门等待4秒:该状态的下一状态为doorclose。
关门状态:此时电梯开门。该状态要分为2种情况进行分析即电梯处于上升情况或下降情况。
当处于上升模式,同时电梯位于三层,如果此时电梯的内部与外部都没有请求,电梯转为下降模式,并进入下一状态doorclose;如果此时电梯内部有在三层下的请求或三层外部有下楼请求,电梯进入下一状态dooropen;否则电梯转为下降模式,并进入下一状态down。
if (position=3) then
if (stoplight=\ then udsig<='1'; state<=doorclose; elsif(stoplight(3)='1' or downlight(3)='1') then state<=dooropen; else udsig<='1'; state<=down; end if;
当处于上升模式,同时电梯位于二层,如果此时电梯的内部与外部都没有请求,电梯仍为上升模式,并进入下一状态doorclose;如果此时电梯内部有在二层下的请求或二层外部有下楼请求或上楼请求,电梯进入下一状态dooropen;如果此时电梯内部有在三层下的请求或三层外部有下楼请求,电梯仍为上升模式,并进入下一状态up;否则电梯转为下降模式,并进入下一状态down。 elsif (position=2) then if(stoplight=\ then udsig<='0'; state<=doorclose; elsif (stoplight(3)='1' or downlight(3)='1') then udsig<='0'; state<=up; else udsig<='1'; state<=down; end if;
当处于上升模式,同时电梯位于一层,如果此时电梯的内部与外部都没有请求,电梯仍为上升模式,并进入下一状态doorclose;如果此时电梯内部有在一层下的请求或一层外部有上楼请求,电梯进入下一状态dooropen;否则电梯仍为上升模式,并进入下一状态up。
当处于下降模式,同时电梯位于一层,如果此时电梯的内部与外部都没有请求,电梯转为上升模式,并进入下一状态doorclose;如果此时电梯内部有在一层下的请求或一层外部有上楼请求,电梯进入下一状态dooropen;否则电梯转为上升模式,并进入下一状态up。当处于下降模式,同时电梯位于二层,如果
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库EDA课程设计(2)在线全文阅读。
相关推荐: