urr<=(urrORsel);
ENDIF;
ELSIF(state=down)THEN
IF(downlift/=downdANDur/='1'ANDposition>downlift)THEN
drr<=(drrORdownlift);
ELSIFsel/=seldANDur/='1'ANDposition>selTHEN
drr<=(drrORsel);
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ur<='1'WHENurr/="000"ELSE'0';
dr<='1'WHENdrr/="000"ELSE'0';
U2:
PROCESS(swich,clk)--暂停、上升、下降三个状态之间转换
BEGIN
IFswich='0'THEN--开关关闭时,处于暂停状态
state<=pause;up_s<='0';do_s<='0';pa_s<='1';openonce<='1';opendoor<='0';
clrrun<='1';enrun<='0';clropen<='1';en<='0';
ELSIFRISING_EDGE(CLK)THEN--开关打开后,三个状态之间变化
CASEstateIS
WHENup=>IFruntime="100"THENclrrun<='1';enrun<='0';
IFposition=(urrANDposition)THEN
state<=pause;up_s<='0';do_s<='0';pa_s<='1';clropen<='0';en<='1';
ENDIF;
ELSEclrrun<='0';enrun<='1';up_s<='1';do_s<='0';pa_s<='0';
ENDIF;
WHENdown=>IFruntime="100"THENclrrun<='1';enrun<='0';
IFposition=(drrANDposition)THEN
state<=pause;up_s<='0';do_s<='0';pa_s<='1';clropen<='0';en<='1';
ENDIF;
ELSEclrrun<='0';enrun<='1';up_s<='0';do_s<='1';pa_s<='0';
ENDIF;
WHENpause=>IF(opentime="010"ANDopenonce='0')OR(uplift/=updANDposition=uplift)
OR(downlift/=downdANDposition=downlift)THEN
opendoor<='1';clropen<='0';en<='1';openonce<='0';
ENDIF;
IF(opentime="101"OR(openonce='1'AND(ur='1'ORdr='1')))THEN
IFur='1'THEN
state<=up;
opendoor<='0';up_s<='1';
en<='0';do_s<='0';
clropen<='1';pa_s<='0';
openonce<='0';
ELSIF(dr='1')THEN
state<=down;
opendoor<='0';up_s<='0';
en<='0';do_s<='1';
clropen<='1';pa_s<='0';
openonce<='0';
ELSE
state<=pause;
opendoor<='0';pa_s<='1';
en<='0';do_s<='0';
clropen<='1';up_s<='0';
openonce<='1';
ENDIF;
ENDIF;
ENDCASE;
ENDIF;
ENDPROCESSU2;
U3:
PROCESS(clk)--将按键请求记录、防抖电路
BEGIN
IFCLK'EVENTANDCLK='1'THEN
downd<=downlift;upd<=uplift;
seld<=sel;
ENDIF;
ENDPROCESS;
U4:
PROCESS(clk4hz,swich)
BEGIN
IFswich='0'THENposition<="001";--开关没开时,电梯停在第一层
ELSIFRISING_EDGE(CLK4HZ)THEN
IFruntime="011"THEN
IFstate=upTHEN
position<=position(2downto1)&'0';--电梯处于上升时position循环左移
ELSIFstate=downTHENposition<='0'&position(3downto2);
ENDIF;--电梯处于下降时position循环右移
ENDIF;
ENDIF;
ENDPROCESS;
U5:
PROCESS(clk1hz,clropen)--用于控制开门时间计时的进程
BEGIN
IFclropen='1'THENopentime<="000";
ELSIFRISING_EDGE(CLK1HZ)THEN
IFen='1'THEN
IFopentime="101"THENopentime<="101";
ELSEopentime<=opentime+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
U6:
PROCESS(CLK4HZ,clrrun)--用于控制运行时间的进程
BEGIN
IFclrrun='1'THENruntime<="000";
ELSIFRISING_EDGE(CLK4HZ)THEN
IFenrun='1'THEN
IFruntime="100"THENruntime<=runtime;
ELSEruntime<=runtime+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
U7:
PROCESS(clk)--将电梯所处楼层显示在数码管上
BEGIN
IFRISING_EDGE(CLK)THEN
IFposition="001"THENdis<="0001";
ELSIFposition="010"THENdis<="0010";
ELSIFposition="100"THENdis<="0011";
ELSEdis<="0000";
ENDIF;
ENDIF;
ENDPROCESS;
ENDbehave;
4编译及仿真
Altera公司的Quartuii是一个全面的、易于使用且具有独立解决问题能力的软件,可以完成设计流程中的输入、综合、布局布线、时序分析、仿真和编程下载等功能。
与第三代设计工具MAX+plusii相比,其功能更加完善,特别适合大规模逻辑电路的设计。
上升情况:
下降情况:
仿真中遇到的情况:
起初设置的时钟周期比较短,所以仿真时出现很多不稳定情况,当把时钟周期调大后不稳定情况消除。
另外,信号赋值存在延时,所以要想达到精确的时间是比较困难的。
5硬件调试与结果分析
选择电路图五
引脚锁定:
clk>inputpin=126;--时钟信号
swich>inputpin19按键8--电梯开关
uplift1>inputpin=18;按键7--一楼上升按键
uplift2>inputpin=17;按键6--二楼上升按键
downlift3>inputpin=13;按键5--三楼下降按键
downlift2>inputpin=12;按键4--二楼下降按键
sel3>inputpin=10;按键3
sel2>inputpin=9;按键2--电梯内楼层选择按键
sel1>inputpin=8;按键1
opendoor>outputpin=23;二极管4--开门信号灯
pa_s>outputpin=22:
二极管3--暂停指示灯
up_s>outputpin=21;二极管2--上升指示灯
do_s>outputpin=20;二极管1--下降指示灯
dis0>outputpin=30
dis1>outputpin=31
dis2>outputpin=32;数码管1--楼层显示
dis3>outputpin=33
重新编译后,下载仿真!
运行结果:
电梯初始状态为一层,处在关门状态,开门指示灯不亮。
一层电梯入口处设有上楼请求开关,二层电梯入口设有上、下楼请求开关,三层电梯入口处设有下楼请求开关,电梯内部设有乘客到达楼层的停站请求开关。
当一楼有请求上楼时,等待一秒开门,四秒后关门执行所选楼层请求。
电梯到达有停站请求的楼层后,电梯门打开,开门指示灯亮,数码管显示所在楼层,暂停状态灯亮。
开门4秒后,电梯门关闭,开门指示灯灭,暂停状态灯灭。
电梯继续运行,直至执行完最后一个请求信号后停在当前层。
若起初高层有请求,电梯则直接到达有请求的楼层,开门等待下一个请求。
电梯控制系统能记忆电梯内外的请求信号,并按照电梯运行规则工作,每个请求信号执行完毕后随即清除。
6参考文献
[1] 焦素敏.EDA课程设计指导书.郑州:
河南工业大学,2008
[2] 潘松,黄继业.EDA技术实用教程.北京:
科学出版社,2002
[3]亦华,延明.数字电路EDA入门.北京:
电子工业出版社,2003
[4]江国强,EDA技术与应用(第三版):
电子工业出版社,2010
[5]http:
//www.ele-中国电子制作网网站
心得体会
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,第一次课程设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
要完成一个设计,必须先把整个设计的思路理楚,把设计分为几个单独的模块,然后再把每个模块联系起来组成一个大程序,
不能想了一点就急着编写,否则一旦出问题,将很难分析。
电子信息科学与技术专业课程设计任务书
学生姓名
吕炯炯
专业班级
电科0901
学号
200948360118
题目
三层电梯控制器
课题性质
工程设计
课题来源
自拟课题
指导教师
焦素敏
同组姓名
主要内容
设计一个三层电梯的控制器。
要求:
(1)用数码管显示电梯所在的楼层号,电梯初始状态为第一楼层。
(2)每楼层电梯外都有上下楼请求开关,用发光二极管显示电梯是上升模式还是下降模式。
(3)电梯每秒升降一层,电梯到达有停站请求的楼层后,经1秒电梯门打开,开门指示灯亮,开门4秒后,指示灯灭,关门,电梯继续运行。
(4)当电梯处于上升模式时,只响应比电梯所在位置高的楼请求信号,直到最后一个上楼请求执行完毕,再进入下降模式。
任务要求
(1)根据设计题目要求编写相应程序代码
(2)对编写的VHDL程序代码进行编译和仿真
(3)利用实验箱完成硬件验证
(4)总结设计内容,完成课程设计说明书
参考文献
[1] 焦素敏.EDA课程设计指导书.郑州:
河南工业大学,2008
[2] 潘松,黄继业.EDA技术实用教程.北京:
科学出版社,2002
[3] 王国栋,潘松等.VHDL实用教程.成都:
电子科技大学出版社,2000
[4]张亦华,延明.数字电路EDA入门.北京:
电子工业出版社,2003
[5]http:
//www.ele-中国电子制作网网站
审查意见
指导教师签字:
焦素敏
教研室主任签字:
张庆辉2012年2月20日
说明:
本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页