毕业设计电梯的控制器电路设计eda技术课程设计文档格式.docx
《毕业设计电梯的控制器电路设计eda技术课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《毕业设计电梯的控制器电路设计eda技术课程设计文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
电梯每2秒升降一层,到达有停站请求的楼层后,经4秒电梯门打开,开门指示灯亮,开门4秒后,指示灯灭,关门,关门时间3秒,电梯继续运行。
可以通过快速关门和关门中断信号控制;
能记忆电梯内外的请求信号,当电梯处于上升模式时,只响应比电梯所在位置高的楼请求信号,直到最后一个上楼请求执行完毕,再进入下降模式。
2、进一步巩固理论知识,培养所学理论知识的在实际中的应用能力;
掌握EDA设计的一般方法;
熟悉一种EDA软件,掌握一般EDA系统的调试方法;
利用EDA软件设计一个电子技术综合问题,培养VerilogHDL编程、书写技术报告的能力。
为以后进行工程实际问题的研究打下设计基础。
2设计原理
2.1设计实现原理
根据系统设计要求,并考虑到系统的可检验性,整个系统的输入输出接口设计如图1所示:
系统工作用2Hz基准时钟信号CLKIN,楼层上升请求键UPIN,楼层下降请求键DOWNIN,楼层选择键入键ST_CH,提前关门输入键CLOSE,延迟关门输入键DELAY,电梯运行的开关键RUN_STOP,电梯运行或停止指示键LAMP,电梯运行或等待时间指示键RUN_WAIT,电梯所在楼层指示数码管ST_OUT,楼层选择指示数码管DIRECT。
DTKZQ
CLKINLAMP
UPIN
DOWNIN
ST_CH[1]RU_WAIT
CLOSEST_OUT
DELAYDIRECT
RUN_STOP
图1.电梯控制器DTKZQ的输入输出接口图
各输入端口的功能如下:
CLKIN:
基准时钟信号,为系统提供2Hz的时钟脉冲,上升沿有效;
UPIN:
电梯上升请求键。
由用户向电梯控制器发出上升请求。
高电平有效;
DOWNIN:
电梯下降请求键,由用户向电梯控制器发出下降请求。
ST_CH[2..0]:
楼层选择键入键,结合DIRECT完成楼层选择的键入,高电平有效;
CLOSE:
提前关门输入键。
可实现无等待时间的提前关门操作,高电平有效;
DELAY:
延迟关门输入键。
可实现有等待时间的延迟关门操作,高电平有效;
RUN_STOP:
电梯运行或停止开关键。
可实现由管理员控制电梯的运行或停止,高电平有效。
一下为输出端口:
LAMP:
电梯运行或等待指示键,指示电梯的运行或等待状况。
RUN_WAIT:
电梯运行或等待时间指示键,指示电梯运行状况或等待时间的长短,高电平有效;
ST_OUT:
电梯所在楼层指示数码管,只是电梯当前所在的楼层数。
即1~6层,高电平有效;
DIRECT:
楼层选择指示数码管,指示用户所要选择的楼层数,高电平有效。
2.2项目分块及其实现方案
电梯的控制状态包括运行状态﹑停止状态及等待状态,其中运行状态又包含向上状态和向下状态。
主要动作有开、关门,乘客可通过键入开、关门按键,呼唤按键,指定楼层按钮等来控制电梯的行与停。
据此,整个电梯控制器DTLZQ应包括如下几个组成部分:
①时序输出及楼选计数器;
②电梯服务请求处理器;
③电梯升降控制器;
④上升及下降寄存器;
⑤电梯次态生成器。
该电梯控制器设计的关键是确定上升及下降寄存器的置位与复位。
整个系统的内部组成结构图2所示。
图2.电梯控制器的内部组成结构图
图3.电梯控制器系统框图
2.3电梯控制器的流程图
图4总流程图
3设计内容
3.1基本状态设计
1、采用信号并置处理很多输入信号的方式:
always@(call_up_1orcall_up_2orcall_up_3orcall_up_4orcall_up_5)
up_all={1'
b0,call_up_5,call_up_4,call_up_3,call_up_2,call_up_1};
//将各下降请求信号实时地合并(1楼为底层,无下降请求,考虑到通用性,将第1位填零)
always@(call_down_2orcall_down_3orcall_down_4orcall_down_5orcall_down_6)
down_all={call_down_6,call_down_5,call_down_4,call_down_3,call_down_2,1'
b0};
//将各停靠请求信号实时地合并
always@(request_1orrequest_2orrequest_3orrequest_4orrequest_5orrequest_6)
request_all={request_6,request_5,request_4,request_3,request_2,request_1};
2、通过参数定义把信号并置的方法和有限状态机联系起来
parameterWAIT=7'
b0000001,UP=7'
b0000010,DOWN=7'
b0000100,UPSTOP=7'
b0001000,DOWNSTOP=7'
b0010000,OPENDOOR=7'
b0100000,CLOSEDOOR=7'
b1000000;
//定义楼层的符号常量
parameterFLOOR1=6'
b000001,FLOOR2=6'
b000010,FLOOR3=6'
b000100,FLOOR4=6'
b001000,FLOOR5=6'
b010000,FLOOR6=6'
b100000;
parameterTRUE=1'
b1,FALSE=1'
b0;
//定义门打开和门关闭的符号常量
parameterOPEN=1'
b1,CLOSED=1'
//定义电梯上升,下降和静止的符号常量
parameterUPFLAG=2'
b01,DNFLAG=2'
b10,STATIC=2'
b00;
3、采用了七个状态实现了有限状态机
图6.状态转换图
黑线:
WAITTOUPTOUPSTOPTOOPENDOORTOCLOSEDOORTOWAIT
粉红线:
WAITTODOWNTODOWNSTOPTOOPENDOORTOCLOSEDOORTOWAIT
3.2模块设计
1、电梯主控制器模块elevator_controller:
此段智能电梯控制器由三个重要部分组成的。
(a)信号并置部分,完成对5路向上请求、5路向下请求、6路内部请求的信号并置,化繁为简。
(b)三段式有限状态机部分。
在有请求的情况下,电梯控制器还要根据电梯的当前状态和当前的楼层去判断电梯的下一步该如何运作。
(c)计数器部分。
完成电梯的开门、关门的时间管理。
图7.电梯主控模块
2、分频模块frequence_div:
这段分频器完成对50Mhz的1分频操作。
采用传统的“一半就翻转”的计数技巧。
图8.分频模块
3、数码管译码模块
3.3波形仿真
1、当电梯处于初始状态时,电梯在高层有向下的请求时:
图9
2、当电梯停在6楼处于等待状态时,在1楼和2楼同时有向上的请求时:
图10
3、当电梯停在1楼处于等待状态时,在6楼和5楼同时有向下的请求时:
图11
4、当电梯停在6楼时,有在5楼的向下的请求时,电梯应该先到五楼,电梯内部请求到1楼,如果电梯在下降的过程中,有在2楼的向上的请求时,电梯应该先相应内部请求,然后相应外部请求:
图12
5、电梯的强制运行按钮forbid:
图13
总结与致谢
通过本次课程设计进一步熟悉QuartusII软件的使用和操作方法,以及硬件实现时的下载方法与运行方法;
对VerilogHDL语言的自顶向下设计方法有了进一步的认识,对其中的许多语句也有了新了解,掌握;
对自己独立思考和解决问题的能力也有了很大的锻炼。
本次课程设计设计的选题、课题调研与撰写工作是在和老师的指导下完成的。
在我的课程设计期间,同课题的同学都给予了我热情的帮助和无私的指导,在此向这些同学们表示衷心的感谢。
在我的学习过程中,杨红娟和王涛老师也给了我耐心的指导和帮助。
我在此对各位老师表示诚挚的感谢!
参考文献
[1]黄仁欣.EDA技术实用教程.北京:
清华大学出版社,2006
[2]潘松,黄继业.EDA技术与VHDL.北京:
清华大学出版社,2009
[3]江国强编著.EDA技术与应用(第三版)..北京:
电子工业出版社,2010
[4]夏宇闻编著.VerilogHDL数字系统设计教程..北京:
北京航空航天大学出版社,2008
[5]周祖成,程晓军,马卓钊编著.数字电路与系统教学实验教程.北京:
科学出版社,2010
[6]周润景,苏良碧.基于QuartusII的数字系统VerilogHDL设计实例详解.北京:
[7](美国)SanirPalnitkar译者:
夏宇闻胡燕祥刁岚松.VerilogHDL数字设计与综合(第2版).北京:
电子工业出版社,2009
[8]云创工作室.VerilogHDL程序设计与实践.北京:
人民邮电出版社,2009
[9]刘福奇,刘波.VerilogHDL应用程序设计实例精讲.北京:
[10]张延伟,杨金岩,葛爱学.veriloghdl程序设计实例详解.北京:
人民邮电出版社,2008
附录
1、分频模块
modulefrequence_div(cp_50M,cp_1);
inputcp_50M;
//板子提供的最高时钟
outputcp_1;
//要求得到的秒脉冲
reg[27:
0]counter_1;
//计数器
regcp_1;
//类型声明
always@(posedgecp_50M)
begin
if(counter_1==28'
h17D7840)//50M的一半到了,秒脉冲翻转
begin
cp_1<
=~cp_1;
//翻转
counter_1<
=28'
h0000000;
end
else
=counter_1+1'
b1;
//否则加1
endmodule
2、智能电梯主控制模块
moduleelevator_controller(//inputports:
cp_50M,clk,reset,forbid,
call_up_1,call_up_2,call_up_3,
call_up_4,call_up_5,
call_down_2,call_down_3,call_down_4,
call_down_5,call_down_6,
request_1,request_2,request_3,
request_4,request_5,request_6,
//outputports:
out,LiftState,over_alarm,count_out,count
);
//outputports:
output[6:
0]out;
//输出楼层
0]LiftState;
//输出电梯状态
outputover_alarm;
//出错
0]count_out;
//计数器输出,便于我控制开关门的状态显示
output[2:
0]count;
//inputports:
inputclk,reset,call_up_1,call_up_2,call_up_3,call_up_4,call_up_5,call_down_2,call_down_3,call_down_4,call_down_5,call_down_6,request_1,request_2,request_3,request_4,request_5,request_6;
inputforbid;
//pos与Posout的关系:
当前状态一改变,pos立即作相应改变,而PosOut则是当前状态在要变到下一状态的瞬间
//,将PosOut作相应改变。
如从WAIT切换到第一个UP时,pos立即加一,而PosOut则要等到第一个UP
//即将切换到第二个UP时,才加一。
//这个说的简单一点,就是移位寄存器,便于对电梯状态的实时的控制
wireover_alarm;
wire[6:
reg[5:
0]pos,PosOut;
reg[2:
0]count;
//门开后要持续5个时钟周期,用count来计数
regDoorFlag;
reg[1:
0]UpDnFlag;
reg[6:
0]LiftState,NextState;
//分别表示电梯的当前状态和下一状态
wirereal_clk;
//up_all,down_all,request_all分别用来合并向上请求的各信号,向下请求的各信号和停靠请求的各信号
//以便判断电梯在状态间如何转移时更简洁
reg[5:
0]up_all,down_all,request_all;
//定义电梯7种状态的符号常量
parameterWAIT=7'
b0001000
DOWNSTOP=7'
parameterFLOOR1=6'
b000001,FLOOR2=6'
b000010,FLOOR3=6'
//定义门打开和门关闭的符号常量
//定义电梯上升,下降和静止的符号常量
assignreal_clk=(clk&
(~forbid));
//采用屏蔽时钟的方法来实现“电梯强制禁止运行”。
方法虽然违反了“同步电路最好
//没有时钟门控”的要求,但是在此只要“负面影响”不是很大还是可以接受的。
//将各上升请求信号实时地合并(6楼为顶层,无上升请求,考虑到通用性,将第4位填零)
always@(call_up_1orcall_up_2orcall_up_3orcall_up_4orcall_up_5)
always@(posedgereal_clkorposedgereset)
if(reset)
count<
=0;
elseif((NextState==OPENDOOR)&
&
(count<
5))//orelseif(NextState==OPENDOOR)
=count+1;
//如果计数不到5且下一状态为OPENDOOR的话,继续计数
else
//清零,以备下次计数
//displaywhichfloortheelevatoris....
display_decodeh1(cp_50M,PosOut,out,over_alarm);
display_decode_counth2(cp_50M,count,count_out);
//finitestatemachineinthestyleofthreesegments,三段式
//1stStateShiftalwaysblock,sequentialstatetransition,有限状态机第一段
LiftState<
=WAIT;
=NextState;
//2ndStateShiftalwaysblock,combinationalconditionjudgement,有限状态机第二段
always@(LiftStateorup_allordown_allorrequest_allorposorcountorUpDnFlag)
case(LiftState)
WAIT:
if(request_all>
0)//有停靠请求否
if((request_all&
pos)>
0)//停靠请求中有当前楼层停靠请求否
NextState=OPENDOOR;
//有当前楼层请求,则下一状态转开门
elseif(request_all>
pos)//有当前楼层之上的停靠请求否(优先向上的请求)
NextState=UP;
//有则,下一状态转上升
NextState=DOWN;
//只有当前楼层之下的停靠请求,下一状态转下降
end
elseif((up_all&
pos)||(down_all&
pos))//上下请求中有当前楼层请求否
elseif((up_all>
pos)||(down_all>
pos))//上下请求中有当前楼层之上的请求否
elseif(up_all||down_all)//上下请求中有当前楼层之下的请求否
NextState=WAIT;
//无任何请求,继续处于WAIT模式
UP:
if((request_all&
pos)||(up_all&
pos))//停靠或上升请求中有当前楼层的请求否
NextState=UPSTOP;
//有,下一状态转为UPSTOP(停靠后要1s才开门,UPSTOP即为这1s的过渡期)
elseif((request_all>
pos)||(up_all>
pos))//停靠或上升请求中有当前楼层之上的请求否
elseif(down_all>
0)//有下降请求否
if((down_all>
pos)&
((down_all^pos)>
pos))//下降请求中有当前楼层的请求否
elseif((down_all&
pos)||(pos<
FLOOR6))//其实这样做意义不大,只是使上下标志提前变化
(pos==FLOOR6))//事实上不满足第一条件的话,电梯根本不会到达第四层
NextState=DOWNSTOP;
else//下降请求中只有当前楼层之下的请求
elseif(request_all||up_all)//只有当前楼层之上的停靠或上升请求否
//无任何请求,转为WAIT模式
//DOWN的状态转移请参见UP的状态转移
DOWN:
if((request_all&
pos))
elseif(((request_all&
FLOOR1)<
pos&
(request_all&
FLOOR1))||((request_all&
FLOOR2)<
FLOOR2))||((request_all&
FLOOR3)<
FLOOR3))||((request_all&
FLOOR4)<
FLOOR4))||((request_all&
FLOOR5)<
FLOOR5))||((request_all&
FLOOR6)<
FLOOR6)))
elseif(((down_a