四层电梯控制器
学号:61011207
姓名:姜蘅育
1、申请题目:四层电梯控制器
n 设计一个四层电梯控制系统,能够实现电梯的一些基本功能,并实现楼层输出显示,并运用VGA,将电梯运行呈现在显示器上。
2、课题背景:
n 随着高层楼宇的增加,电梯已经成为了人们日常生活中不可缺少的一部分。
电梯的安全性、迅捷性成为人们极为关心的指标。设计安全指数高的电梯控制器,可大范围的应用到日常生活中,为人们的生活、工作和学习增加保障。
3、项目规划:
n 目标是设计四层楼电梯控制器。可实现优先权控制、手动开关门、关门过程可开门、任何时候可以实现电梯内报警、关门时有超载检测以及报警闪烁显示。
基本要求:1.电梯有上、下两个运行方向,并有上行下行LED指示灯。分别用directup,directdown信号表示。
2.电梯外每层有上行下行请求按钮,在底层只有上行按钮,在中间层有上行、下行按钮,在最顶层只有下行按钮,高电平有效,分别用 u1,u2,u3,d4,d3,d2信号表示。
3.电梯内设有乘客到达层次的停站要求开关,高电平有效,分别用k1,k2,k3,k4信号表示
4.电梯内设有开关门按钮,高电平有效,分别用od,cd信号表示。
5.电梯内外设有楼层数码管LED,指示当前层,直到到达下一停靠层更新,用floor向量信号表示。
运行规则(优先权控制):上行时优先满足当前层以上的上行请求及停靠请求,到达顶层后下行;下行时优先满足当前层以下的下行及停靠请求,到达底层后变为上行。上行时若没有当前层以上的请求,且当前层以下有请求,则变为下行;下行时若没有当前层以下的请求,且当前层以上有请求,则变为上行;没有请求时停在当前层。
总之,系统能记忆电梯内、外的所有有效的请求信号,并按照电梯的运行规则依次响应,请求信号保留至响应后撤除。并有相应的指示灯指示运行情况。
上电锁控制:电梯有控制锁,用lock信号表示。开锁上电,锁上时电梯不能运行。电梯运行锁用一拨动开关代替,低电平上锁,高电平解锁。上电后初始化系统各按钮指示灯,内部变量。
上下行时间控制:电梯的行驶速度设定为常数,上下行一层需时2秒。用计数器cnt1控制。
故障控制:电梯有重量限制,超重用一拨动开关代替,用overweight信号表示,在关门时检测,高电平有效,超载时电梯不能运行,直到超载信号被清除,电梯内设有超载灯; 电梯内设有事故报警alarm按钮(通话器),用一拨动开关代替,用alarm信号表示,高电平有效,任何时候报警时电梯不能继续运行,保持当前状态不变,并有alarming指示灯,信号保留至事故消除。
电梯门控制:到达停靠层时电梯门自动打开,设有开关门LED指示开关门情况,用door表示。默认开门停留时间是6秒,电梯内设有手动开关门按钮,可以人为控制延长开门时间或立即关门。
FPGA硬件显示。
输入为上下行按钮、确定楼层按钮和开关门按钮以及报警按钮。输出为电梯楼层显示和电梯停站、超载警报以及报警响应。
4、实现方案:
n 核心问题
核心问题为电梯的多楼层状态编写;电梯初始化后进入状态机开始运行。
n 解决方案
多楼层状态虽然很多,但是是有一定规律的。只要写好一层的状态,剩下三层就可以根据规律很快写好。
5、系统结构:
n 系统框图
n 模块功能描述
主模块:在主模块进行了电梯锁的编写,电梯正常运行状态机的编写,控制上下行时间,并编写程序使电梯进入状态机工作。在这里,还细致的编写了各个楼层的状态。除此之外,还编写了电梯开关门的程序。
辅助报警信号模块:这个模块实现了电梯超载、电梯故障的故障报警,并显示在绑定的LED灯的亮暗上。
楼层显示模块:这个模块包含了译码部分,状态机的楼层输出给此模块,通过译码电路显示到绑定的七段数码管上。
VGA模块:在电脑显示器上显示当前电梯运行状态——上行、下行、停止,用向上、向下和横线来表示。
n 模块接口标注(参数、协议)
输入输出名称
|
芯片引脚号
|
实验箱标注
|
钉子线连接
|
clk
|
D11
|
clk
|
无
|
lock
|
V5
|
SWT<0>
|
无
|
alarma
|
U4
|
SWT<1>
|
无
|
overweight
|
V3
|
SWT<2>
|
无
|
k1
|
E6
|
BTN0
|
无
|
k2
|
D5
|
BTN1
|
无
|
k3
|
A3
|
BTN2
|
无
|
k4
|
AB9
|
BTN3
|
无
|
directup
|
W3
|
LED<0>
|
无
|
directdown
|
Y4
|
LED<1>
|
无
|
door
|
AA4
|
LED<7>
|
无
|
alarmled
|
Y3
|
LED<3>
|
无
|
row_in[0]
|
E4
|
ROW[0]
|
无
|
row_in[1]
|
F3
|
ROW[1]
|
无
|
row_in[2]
|
G8
|
ROW[2]
|
无
|
row_in[3]
|
G7
|
ROW[3]
|
无
|
col_out[0]
|
H8
|
COL[0]
|
无
|
col_out[1]
|
J7
|
COL[1]
|
无
|
col_out[2]
|
K8
|
COL[2]
|
无
|
col_out[3]
|
K7
|
COL[3]
|
无
|
q[0]
|
AA21
|
SEG(0)
|
无
|
q[1]
|
AA22
|
SEG(1)
|
无
|
q[2]
|
Y22
|
SEG(2)
|
无
|
q[3]
|
N15
|
SEG(3)
|
无
|
q[4]
|
AB19
|
SEG(4)
|
无
|
q[5]
|
P20
|
SEG(5)
|
无
|
q[6]
|
Y21
|
SEG(6)
|
无
|
6、状态流程图:
n 系统工作状态流程
7、各主要模块仿真结果波形
n 各模块的仿真波形,详细注释输入输出功能端口
8、课程设计总结
n 预期的目标与当前实现功能的差异详细注释
预期要做VGA显示器显示电梯上行、下行、静止,但是由于时间上分配不好,最终没能成功。对于VGA还不是很熟悉,相应程序编写出错。
由于是验收的最后才仿真成功,时间上紧张,就没有下到板子里运行,但是仿真结果是正确的。
比预期的目标增加了键盘输入。当初设计时,没有考虑到输入按键的多少,所以在程序设计过程中加入键盘来解决这个问题。
可以进一步发挥提高的部分
可以设计成电梯层数n可有键盘输入控制的电梯;并使其状态在液晶屏上显示。
n 课程设计体会
1.首先是编译不通过的问题,这个问题几乎存在于整个系统设计的过程中,其中大都由于编程不细心造成,比如用了中文输入方式,分号忘了写了,if 和 end if 不对应,信号和变量赋值运算符用错了,以及一些输入方面的错误等等等。这些小的错误往往会报出一代堆错误出来,这是由于编译的原理决定的,编译器只会按照固有的规则进行语法检查,它不像人脑那样会灵活的思维,所以前面的一个错会多米诺效应般的推倒后面,从而弄出一大堆错,这是编程中常见的事,从第一个错开始检查。问题就会解决的。
另一方面,我们也要养成良好的编程习惯,书写要工整,结构要有层次感,if else end if对应好。
2.稍复杂的程序不可能一次就能考虑的十分全面的。在调试的过程中,我遇到以下问题:
(1)报过一次警以后,alarming就一直亮着了!后来发现程序中只有alarm为高电平时将alarming置1,反之就没有了,所以当alarm不为高时就清alarming,这个放在了每个时钟上升沿开始来处理的,解决了问题。
(2)新的问题来了,当电梯开门时,如果overweight报警时,门的确一直开着,貌似是有反应了,但是报警灯就是不闪烁!奇怪了,后来发现就是在时钟上升沿时清了alarming,要知道程序中故障报警和overweight我都用的是alarming来显示的,所以就不能仅仅只根据alarm为低就清了alarming。后来我就加了一个mark_ alarm来标记超载的报警,成功解决了问题。详见开门状态的编写部分。
反思:其实这个问题是由于设计不好造成的,我完全可以用两个信号来分别表示故障报警和超载报警,想要使用一个LED来显示报警也很简单,只要二者有一个为有效时就闪烁报警就可以了。所以初始设计的时候还是很难做到周到。
(3)调试时发现电梯的优先权不对。这就奇怪了,明明程序中是严格的按照优先权控制规则来编写的啊。仔细观察发现有的请求根本就没有被响应。比如在一楼时按下2楼下和三楼上,电梯现在2楼听开门了,然后到3楼把3楼的送到了4楼,完了,电梯不下来载2楼的乘客了!后来发现原来在关门时我没有根据运行模式直接把当前层所有请求都清掉了!这就是问题了,比如在刚才上行时在2楼就把2楼的那个下行请求也给清掉了。所以后来电梯没有下来载2楼的乘客。
反思:当然这个问题是由于编程时考虑问题没有严谨的逻辑思维所致。而这在编程中十分重要。我开始用了一大堆辅助变量来记忆各个请求信号。这样做显然逻辑思路不清晰,事实上只要我们锁存了所有有效的请求信号,并在信号被响应的时候清掉相应的信号不就行了吗?根本不需要那么多允余的变量。上行时清掉当前层的上行请求,下行时同样,这又是多么简单的逻辑啊,但我却犯了这个低级错误。所以说在设计时就要细心的考虑,逻辑上一定要严谨。
(4)实际上调试的时候遇到了很多小的问题,让我很郁闷着急,甚至抱怨板子有问题,自己真倒霉。其实,硬件的问题绝对属于少数,几乎没有,问题来源于程序!出现问题时我们要冷静,问题一定对应着程序中的相应语句,只要这样冷静的分析,问题都会被很快的解决的,实际上我发现的重大问题都是这么解决的,可是说我收获了很多。
另外要想使程序完善人性化,很多问题都需要加一系列的标记变量,而这些标记信号的设置就带了何时清除它们的问题,我的程序就遇到了很多这样的问题。详见解析部分。
9、参考文献
⑴ 王爱英.计算机组成与结构.北京:清华大学出版社,2001.2
⑵ 黄仁欣.EDA技术实用教程.北京:清华大学出版社,2006
⑶ 曹昕燕,周凤臣,聂春燕.EDA技术实验与课程设计.北京:清华大学出版社,2006.5
⑷ 杨亦华,延明.数字电路EDA入门.北京:北京邮电大学出版社,2003
⑸ 邹彦,庄严,邹宁,王宇鸿《EDA技术与数字系统设计>北京:电子工业出版社,2008
⑹ 潘松 ,黄继业《EDA技术与VHDL》,北京,清华大学出版社,2006
注:程序清单不要放在报告中,将最后能下载的正确的程序打包上传(程序中请写明注释)。