logo资料库

基于VHDL的电梯系统设计.pdf

第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
资料共29页,剩余部分请下载后查看
数字系统设计 电梯控制系统 小组成员: 设计日期:
目 录 一、设计要求分析………………………………………………3 二、设计思想方法………………………………………………3 三、小组分工情况………………………………………………4 四、信号变量解释………………………………………………4 五、流程状态设计………………………………………………5 六、程序源代码…………………………………………………6 七、波形仿真……………………………………………………25 八、课题设计小结………………………………………………29
一、设计要求分析: 题目: 电梯控制系统 要求简介:大楼为 3 层,2 部电梯,每部电梯内部都有如下按键:1‐3 楼 的按键选择键,开门键,关门键,报警键。每部电梯的每层楼外面都有上楼键和 下楼键(1 楼只有上楼键,三楼只有下楼键)。电梯的设计参照日常生活中电梯 实际运行规律设计。 两部电梯之间互相联动,即同时按下任何一部电梯的外部 向上或向下键之后,两部电梯同时接受此指令,然后由系统判断,与该请求所在 楼层最近并且运行方向相同的电梯执行指令,另一部电梯不执行该指令。 分析: 如题所述,课题所需要做的是一个简化了的实际电梯控制系统,麻雀虽小, 五脏俱全,该控制器需要参照实际运行规律设计,且两部电梯之间相互联动。经 过组内分析,我们决定采用 quartus 软件用 VHDL 语言进行描述编写。 二、设计思想方法: 由于电梯的运行状态不多,能使状态发生变化的关键信号也不多,所以我们 决定采用状态机的编写方法,即将电梯设为有限的几个状态,然后在信号的改变 下进行响应,使得电梯可以正常工作;电梯联动则由控制器进行判断,将相应的 信号传给电梯状态机;将报警信号的优先级设为最高,使之可以及时响应,其次
为其他信号,如关门信号,开门信号(运行状态不予响应)等;将电梯的楼层显 示设为与主进程并行的辅进程,及时更新楼层显示。 三、小组分工情况: 四、 信号变量解释: liftclk:电梯时钟信号,上升沿触发。 reset:重置信号,将所有信号设为初始状态。 awarn,bwarn:a 电梯和 b 电梯的报警按钮。 aopen,bopen:a 电梯和 b 电梯的开门按钮。 aclose,bclose:a 电梯和 b 电梯的关门按钮 arequest,brequest:a 电梯和 b 电梯的请求信号(0001 为一楼上楼请求,0010 为二楼下楼请求,0100 为二楼上楼请求,1000 为三楼下楼请求) astop1,astop2,astop3,bstop1,bstop2,bstop3:a 电梯和 b 电梯的停站按钮 aposition,bposition:a 电梯和 b 电梯的位置信号(01 表示一楼,10 表示二楼, 11 表示三楼) amode,bmode:a 电梯和 b 电梯的运行状态(00 表示向上运行,01 表示向下 运行,10 表示停止,11 表示报警) adoor,bdoor:a 电梯和 b 电梯的门状态(1 表示开门状态,0 表示关门状态) aupinfo,adninfo,astopinfo,bupinfo,bdninfo,bstopinfo 系统内部的请求信号( upinfo 中,“000”左数第一位表示三楼有上升请求,第二位表示二楼有上楼 请求,以此类推。 dninfo 中,“000”左数第一位表示三楼有下楼请求,以此类推。 stopinfo 中,“000”左数第一位表示三楼有停站请求,以此类推。) aout,bout :a 电梯和 b 电梯的显示输出。 f1,f2,f3,warn,opening,waiting:电梯内部状态(f1 表示一楼,f2 表示二楼,f3
表示三楼,warn 表示报警状态,opening 表示打开状态,waiting 表示处于上升或 下降状态。) alift,blift:a 电梯和 b 电梯的运行状态表示。 awarn1,bwarn1 :a 电梯和 b 电梯的内部报警信号。 pos,pos2:a 电梯和 b 电梯的内部楼层变量。 atemp,btemp:a 电梯和 b 电梯的内部运行状态变量。 doorwait,liftwait:分别为开门延时和升降延时计数。 五、状态流程设计: 程序流程如下图所示: 如图所示,有两个进程,一个主进程,负责电梯的运行调度,一个辅进程, 负责电梯的显示输出:主进程以 liftclk 为敏感信号,首先采集外部输入信号,然 后进行判断哪部电梯进行响应,并送入状态机循环,这样依次执行,直到电梯停 止运行。 程序状态图如下:
如图所示,我们定义了六个状态,分别是 f1,f2,f3,opening,waiting,warn,意义 已经在前面的变量信号解释中予以说明,这里不再赘述,我们把 warn 状态单独 列出来,以方便实际情况中进行特殊处理。 六、程序源代码: library ieee; --库文件声明 use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity slift is------实体定义 port(liftclk,reset,awarn,bwarn,aopen,bopen,aclose,bclose:in std_logic; arequest,brequest:in std_logic_vector(4 downto 1); astop1,astop2,astop3,bstop1,bstop2,bstop3:in std_logic; ---输入信号 aposition,bposition:buffer std_logic_vector(1 downto 0);
amode,bmode:buffer std_logic_vector(1 downto 0); adoor,bdoor:buffer std_logic; aupinfo,adninfo,astopinfo,bupinfo,bdninfo,bstopinfo:buffer std_logic_vector(3 downto 1); ---缓存信号 aout,bout:out std_logic_vector(1 downto 0)); ----输出信号 end entity slift; architecture center of slift is type lift_state is (f1,f2,f3,warn,opening,waiting);-----定义电梯状态 signal alift,blift:lift_state; signal awarn1,bwarn1:std_logic; begin ----以 reset 和电梯时钟为敏感信号 aplift:process(reset,liftclk) variable pos,pos2:integer range 3 downto 1;-----定义变量 variable atemp,btemp:lift_state; variable doorwait,liftwait:integer:=0; begin --reset 及报警,开关门信号处理:(设为初始状态) if (liftclk'event and liftclk='1') then if reset='1' then alift<=f1; atemp:=f1; awarn1<='0'; aposition<="01";
amode<="10"; aupinfo<="000"; adninfo<="000"; astopinfo<="000"; adoor<='0'; blift<=f1; atemp:=f1; bwarn1<='0'; bposition<="01"; bmode<="10"; bupinfo<="000"; bdninfo<="000"; bstopinfo<="000"; bdoor<='0'; else if awarn='1' or bwarn='1' then if awarn='1' then awarn1<='1'; end if; if bwarn='1' then bwarn1<='1'; end if; else if aclose='1' then adoor<='0'; end if; if bclose='1' then bdoor<='0'; end if; if aopen='1' then
分享到:
收藏