智能电梯控制器设计报告.docx

上传人:b****6 文档编号:8392153 上传时间:2023-01-31 格式:DOCX 页数:31 大小:378.53KB
下载 相关 举报
智能电梯控制器设计报告.docx_第1页
第1页 / 共31页
智能电梯控制器设计报告.docx_第2页
第2页 / 共31页
智能电梯控制器设计报告.docx_第3页
第3页 / 共31页
智能电梯控制器设计报告.docx_第4页
第4页 / 共31页
智能电梯控制器设计报告.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

智能电梯控制器设计报告.docx

《智能电梯控制器设计报告.docx》由会员分享,可在线阅读,更多相关《智能电梯控制器设计报告.docx(31页珍藏版)》请在冰豆网上搜索。

智能电梯控制器设计报告.docx

智能电梯控制器设计报告

(封面)

XXXXXXX学院

 

智能电梯控制器设计报告

 

题目:

院(系):

专业班级:

学生姓名:

指导老师:

时间:

年月日

 

一、设计要求与思路

1.1设计要求

①楼层的高度大于等于6,根据降低运行成本的原则,设计并实现一个以方向优先电梯调度算法。

②要求能够使用按键模拟对电梯的控制,为了便于观察,将电梯所在的楼层(1~6)用数码管显示出来,将电梯的上下楼状态(上,下,开门,关门,静止)用发光管或数码管显示出来,并且能够实现对电梯实现锁定禁止运行。

③画出电梯控制器的状态机,写出状态编码方案。

④用Verilog语言对设计进行描述,并下载到实验板上调试成功,适当增加比较符合现实的控制限制。

⑤写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。

并谈谈此次实验的收获、感想及建议

1.2设计思路

我把电梯的状态分为三种:

上升、下降、停留(其中包括开门、关门、禁止),状态分别编码为00、01、10来识别。

楼层设计为六层,一般的电梯在每层外面都有上下请求的按钮,还有电梯内部的一楼到六楼的请求,以及持续开门、关门的请求。

我们可以通过按键的输入对各种变量进行赋值,代表不同的请求,然后用case语句分各个楼层进行条件判断,每层分为两大块的响应,即本层有无需求,若有需求,则进行开门动作,若无需求,则分上升的状态和下降和停留的状态,分别又有不同的请求(除第一层和第六层特殊,只有上升的或下降的请求),上升下降分别作不同的响应(主要对i值进行变化)即可

输入主要用按键实现(六个楼层加向上向下两个,共八个),电梯的状态分为4种,上升,下降,停留,禁止分别用4个LED灯来表示,用数码管显示电梯所在楼层。

对电梯的锁定操作,是同时按上下两个按键,电梯锁定的操作是电梯自动回到一楼,并对请求无任何响应。

之后对该系统进行了改进,对于开门与关门的区别,我采用LCD显示,主要是对停留状态进行进一步分解,停留时对LCD显示进行控制,从而显示开门关门状态。

二、系统设计

2.1系统框图和说明

系统分为四个模块,分别为分频模块、LCD模块、数码管显示模块、主控制模块,各模块协调工作,共同实现电梯系统的正常运行。

外界请求时钟

时钟50MHz输入1Hz1Hz

 

时钟输入为开发板上自带的50MHz的晶体振荡器,外界请求表示拨动各种开关来实现不同的请求。

LCD显示包括LCD的初始延时,LCD的主程序,LCD的控制程序。

2.2各模块的详细说明

分频模块

分频模块的实现是靠对输入的时钟进行计数来实现的,计数到一定的数后对输出的时钟进行取反,同时计数清零,重新进行计数,这样就实现了分频。

主程序模块

主程序模块主要是对楼层i进行划分,分别写其对输入信号的响应。

开始是把各种input与所设的变量进行联系,这样对变量就可以对整个系统进行控制。

情况可分为以下几种,首先是本层有无需求,若有,则进行停留,并进行开门关门动作,若无,则又根据电梯的状态进行分类,上升,下降或者停留,其中都各有上升的请求、下降的请求;对情况进行分析,然后对变量重新赋值,这样再下一个时钟来时就会继续产生不同的响应,此时的状态也有变化。

其中上升下降的操作用i+1,i-1来实现。

LCD模块

LCD模块主要是主控制程序中的control变量进行控制,对于每次control变化,LCD都会重新写一次数据,并且数据也是根据control的不同进行选择。

数码管模块

数码管模块是对楼层i进行译码然后进行显示,这里不赘述。

2.3系统转态转换图

状态图分析:

每当条件变化时,状态再一定的时间后更新,然后通过LED灯和数码管可以看到状态的变化。

S=00表示电梯处于停留状态,此间可进行开门关门操作,即用LCD显示开门关门状态;S=01代表电梯处于上升阶段,S=10代表电梯处于下降阶段,其状态的转换是根据有无上升下降的需求来进行条件判断的,每一次状态转换都会对已完成的需求进行清零操作,然后进行下一步的请求执行。

实例说明:

当此时电梯处于一楼,我们将六楼的开关向上拨动并复位,此时将变量floor3[5]=1,符合向上的要求,即只需floor3[1]~floor[5]任意一个为一,都会执行i+1操作,并将状态识别为S=01,直到电梯到达六楼,此时i=6,floor[5]=1,满足开门的条件判断,将状态转换为00,并改变control的值来实现LCD的显示,control=10,显示开门,0.5S后改为control=11,显示关门,最后control=00,即清屏,关门结束,不显示任何信息。

2.4输入输出设计

按键输入

上面左边的六个键分别是各层楼的需求按钮(从右到左分别是1~6)右边单独的两个是A、B两个键,分别表示外面有需求(配合楼层键进行)。

注意楼层键拨动后要复位,然后是A、B两键都拨上去的时候,电梯自动锁定,并且自动回到一楼。

数码管和LCD

LCD显示的箭头方向表示开门和关门,最右端的数码管显示电梯所在楼层。

LED灯

左边单个亮表示电梯处于停留状态,后面三个,第一个表示上升状态,第二个表示电梯锁定状态,第三个表示下降状态。

三、系统仿真

3.1各个情况下的仿真波形

注意,这里是在使用时钟分频前仿真的。

有以下各种情况:

上升请求

下降请求

多个上升请求

多个下降请求

电梯锁定

四、实验总结

4.1心得体会

本次的电子课程设计我选择了智能电梯控制。

选择题目时,因为电梯是我们再熟悉不过的了,所以以为设计会比较简单,然而真正实现起来并没有那么容易。

首先电梯请求会有多种情况,如何选取最有效率的步骤才是关键。

后来我通过实际了解电梯的流程,来通过状态图表示了算法。

本次课设我觉得给我最大的收获就是对Verilog语言的掌握和模块思想的更深刻的理解。

在大二时,我们学习了数字电路中的Verilog,并通过它进行了FPGA的数字钟设计。

然而此次的课程设计却要远远难于数字钟。

因此经过分析之后,我决定把大工程分成几个子模块来进行分别设计,这样会降低难度,也利于管理。

之后我又学习了Verilog语言,通过Altera公司网站上的教程,因此对它也有了更好的掌握。

 

附录:

源代码

moduledianti(ledup,leddown,ledforbid,ledstay,A,B,c1,c2,c3,c4,c5,c6,clock,out,LCD_DATA,LCD_EN,LCD_RS,LCD_RW,LCD_ON,LCD_BLON,test);

outputledup,leddown,ledstay,ledforbid;

output[6:

0]out;

outputLCD_EN,LCD_RS,LCD_RW,LCD_ON,LCD_BLON;

output[1:

0]test;//用于测试开门关门状态

inputA,B,clock,c1,c2,c3,c4,c5,c6;

inout[7:

0]LCD_DATA;//.输入输出变量的声明

reg[4:

0]floor1;

reg[5:

1]floor2;

reg[5:

0]floor3;

reg[3:

0]i;

reg[1:

0]s;

reg[6:

0]out;

reg[3:

0]t;

reg[1:

0]control;//寄存器变量

wireclk_out;//分频后的输出时钟

wire[1:

0]test;

regledup,leddown,ledforbid,ledstay;

assigntest=control;

Clockc(clock,clk_out);//分频

LCDd(clock,control,LCD_DATA,LCD_EN,LCD_RS,LCD_RW,LCD_ON,LCD_BLON);//LCD显示

always@(posedgeclk_out)

begin

t<=t+4'b0001;

ledup<=(s==2'b01&&!

(A==1&&B==1));//电梯上升中

leddown<=(s==2'b10&&!

(A==1&&B==1));//电梯下降中

ledforbid<=(A==1&&B==1);//电梯处于锁定

ledstay<=(s==2'b00&&!

(A==1&&B==1));//电梯停留

if(A==1&&B==0)

begin//requestup

if(c5==1)

floor1[4]<=1;

if(c4==1)

floor1[3]<=1;

if(c3==1)

floor1[2]<=1;

if(c2==1)

floor1[1]<=1;

if(c1==1)

floor1[0]<=1;

end

elseif(B==1&&A==0)

begin//requestdown

if(c6==1)

floor2[5]<=1;

if(c5==1)

floor2[4]<=1;

if(c4==1)

floor2[3]<=1;

if(c3==1)

floor2[2]<=1;

if(c2==1)

floor2[1]<=1;

end

elseif(A==0&&B==0)//requestintheelv

begin

if(c6==1)

floor3[5]<=1;

if(c5==1)

floor3[4]<=1;

if(c4==1)

floor3[3]<=1;

if(c3==1)

floor3[2]<=1;

if(c2==1)

floor3[1]<=1;

if(c1==1)

floor3[0]<=1;

end

else

begin

floor1[4:

0]<=floor1[4:

0];

floor2[5:

1]<=floor2[5:

1];

floor3[5:

1]<=floor3[5:

1];

floor3[0]<=1;

end

case(i)

1:

//the1stfloor

begin

if(floor1[0]==1'b1||floor3[0]==1'b1)//openthendoor

begin

if(t==2)

begin

s<=2'b00;//stop

control<=2'b10;

end

if(t==4)

begin

control<=2'b11;

end

if(t==6)

begin

floor1[0]<=1'b0;

floor3[0]<=1'b0;

control<=2'b00;

t<=0;

end

end

elseif(floor1[0]!

=1'b1&&floor3[0]!

=1'b1&&t==2)

begin

t<=0;

if(floor1[4:

1]==4'b0000&&floor2[5:

1]==5'b00000&&floor3[5:

1]==5'b00000)

i<=1;

else

begin

s<=2'b01;//up

i<=i+4'b0001;

end

end

end

2:

//the2edfloor

begin

if((floor1[1]==1'b1||floor3[1]==1'b1))//本层有需求,停留后开门和关门

begin

if(t==2)

begin

s<=2'b00;

control<=2'b10;

end

if(t==4)

begin

control<=2'b11;//开门

end

if(t==6)

begin

floor1[1]<=1'b0;

floor3[1]<=1'b0;

control<=2'b00;//关门

t<=0;

end

end

elseif(!

(s==2'b01&&(floor1[1]==1'b1||floor3[1]==1'b1))&&!

(s==2'b10&&(floor2[1]==1'b1||floor3[1]==1'b1))&&t==2)//本层无需求

begin

t<=0;

if(s==2'b01)//若处于上升中

if(floor1[4:

2]!

=3'b000||floor2[5:

2]!

=4'b0000||floor3[5:

2]!

=4'b0000)//上面有需求

i<=i+4'b0001;

elseif(floor1[4:

2]==3'b000&&floor2[5:

2]==4'b0000&&floor3[5:

2]==4'b0000&&floor3[0]==1'b1)//下面有需求

begin

s<=2'b10;//down

i<=i-4'b0001;

end

else

s<=2'b00;

elseif(s==2'b10)//down//若处于下降中

if(floor3[0]!

=1'b0||floor1[0]!

=1'b0)//下面有需求

i<=i-4'b0001;

elseif(floor1[0]==1'b0&&floor3[0]==1'b0&&floor1[4:

2]!

=3'b000)//上面有需求

begin

s<=2'b01;//up

i<=i+4'b0001;

end

else

s<=2'b00;

elseif(s==2'b00)//若处于停留

if(floor1[4:

2]!

=3'b000||floor2[5:

2]!

=4'b0000||floor3[5:

2]!

=4'b0000)//上面有需求

begin

s<=2'b01;//up

i<=i+4'b0001;

end

elseif(floor1[0]!

=1'b0||floor3[0]!

=1'b0)//下面有需求

begin

s<=2'b10;//down

floor2[1]<=1'b0;

floor3[1]<=1'b0;

i<=i-4'b0001;

end

end

end

//下面几层都和二层的情况一样,故不做相应的注释

3:

//the3rdfloor

begin

if((floor1[2]==1'b1||floor3[2]==1'b1))//openthendoor

begin

if(t==2)

begin

s<=2'b00;

control<=2'b10;

end

if(t==4)

begin

control<=2'b11;

end

if(t==6)

begin

floor1[2]<=1'b0;

floor3[2]<=1'b0;

control<=2'b00;

t<=0;

end

end

elseif((floor2[2]==1'b1||floor3[2]==1'b1))//openthendoor

begin

if(t==2)

begin

s<=2'b00;

control<=2'b10;

end

if(t==4)

begin

control<=2'b11;

end

if(t==6)

begin

floor2[2]<=1'b0;

floor3[2]<=1'b0;

control<=2'b00;

t<=0;

end

end

elseif(!

(s==2'b01&&(floor1[2]==1'b1||floor3[2]==1'b1))&&!

(s==2'b10&&(floor2[2]==1'b1||floor3[2]==1'b1))&&t==2)

begin

t<=0;

if(s==2'b01)//up

if(floor1[4:

3]!

=2'b00||floor2[5:

3]!

=3'b000||floor3[5:

3]!

=3'b000)

i<=i+4'b0001;

elseif(floor1[4:

3]==2'b00&&floor2[5:

3]==3'b000&&floor3[5:

3]==3'b000&&(floor2[1]!

=1'b0||floor3[1:

0]!

=2'b00))

begin

s<=2'b10;//down

i<=i-4'b0001;

end

else

s<=2'b00;

elseif(s==2'b10)//down

if(floor1[1:

0]!

=2'b00||floor3[1:

0]!

=2'b00||floor2[1]!

=1'b0)

i<=i-4'b0001;

elseif(floor2[1]==1'b0&&floor3[1:

0]==2'b00&&floor3[1:

0]==2'b00&&floor1[4:

3]!

=2'b00)

begin//up

s<=2'b01;

i<=i+4'b0001;

end

else//stop

s<=2'b00;

elseif(s==2'b00)

if(floor1[4:

3]!

=2'b00||floor2[5:

3]!

=3'b000||floor3[5:

3]!

=3'b000)//up

begin

s<=2'b01;

i<=i+4'b0001;

end

elseif(floor1[1:

0]!

=2'b00||floor2[1]!

=1'b0||floor3[1:

0]!

=2'b00)//down

begin

s<=2'b10;

i<=i-4'b0001;

end

else

s<=2'b00;

end

end

4:

//the4thfloor

begin

if((floor1[3]==1'b1||floor3[3]==1'b1))//openthendoor

begin

if(t==2)

begin

s<=2'b00;

control<=2'b10;

end

if(t==4)

begin

control<=2'b11;

end

if(t==6)

begin

floor1[3]<=1'b0;

floor3[3]<=1'b0;

control<=2'b00;

t<=0;

end

end

elseif((floor2[3]==1'b1||floor3[3]==1'b1))//openthendoor

begin

if(t==2)

begin

s<=2'b00;

control<=2'b10;

end

if(t==4)

begin

control<=2'b11;

end

if(t==6)

begin

floor2[3]<=1'b0;

floor3[3]<=1'b0;

control<=2'b00;

t<=0;

end

end

elseif(!

(s==2'b01&&(floor1[3]==1'b1||floor3[3]==1'b1))&&!

(s==2'b10&&(floor2[3]==1'b1||floor3[3]==1'b1))&&t==2)

begin

t<=0;

if(s==2'b01)//up

if(floor1[4]!

=1'b0||floor2[5:

4]!

=2'b00||floor3[5:

4]!

=2'b00)

i<=i+4'b0001;

elseif(floor1[4]==1'b0&&floor2[5:

4]==4'b00&&floor3[5:

4]==4'b00&&(floor2[2:

1]!

=2'b00||floor3[2:

0]!

=3'b000))

begin

s<=2'b10;//down

i<=i-4'b0001;

end

else

s<=2'b00;

elseif(s==2'b10)//down

if(floor1[2:

0]!

=3'b000||floor3[2:

0]!

=3'b000||floor2[2:

1]!

=2'b00)

i<=i-4'b0001;

elseif(floor2[2:

1]==2'b00&&floor3[2:

0]==3'b000&&floor1[4]==1'b1)

begin

s<=2'b01;//up

i<=i+4'b0001;

end

else

s<=2'b00;

elseif(s==2'b00)

if(floor1[4]!

=1'b0||floor2[5:

4]!

=2'b00||floor3[5:

4]!

=4'b00)

begin

s<=2'b01;//up

i<=i+4'b0001;

end

elseif(floor1[2:

0]!

=3'b000||floor2[2:

1]!

=2'b00||floor3[2:

0]!

=3'b000)

begin

s<=2'b10;//down

i<=i-4'b0001;

end

end

end

5:

//the5thfloor

begin

if((floor1[4]==1'b1||floor3[4]==1'b1))//openthendoor

begin

if(t==2)

begin

s<=2'b00;

control<=2'b10;

end

if(t==4)

begin

control<=2'b11;

end

if(t==6)

begin

floor1[4]<=1'b0;

floor3[4]<=1'b0;

control<=2'b00;

t<=0;

end

end

elseif((floor2[4]==1'b1||floor3[4]==1'b1))//openthendoor

begin

if(t==2)

begin

s<=2'b00;

control<=2'b10;

end

if(t==4)

begin

control<=2'b11;

end

if(t==6)

begin

floor2[4]<=1'b0;

floor3[4]<=1'b0;

control<=2'b00;

t<=0;

end

end

elseif(!

(s==2'b01&&(floor1[4]==1'b1||floor3[4]==1'b1))&&!

(s==2'b10&&(floor2[4]==1'b1||floor3[4]==1'b1))&&t==2)

begin

t<=0;

if(s==2'b01)//up

if(floor3[5]==1'b1||floor2[5]==1'b1)

i<=i+4'b0001;

elseif(floor2[5]==1'b0&&floor3[5]==1'b0&&(floor2[3:

1]!

=3'b000||floor3[3:

0]!

=4'b0000))

begin

s<=2'b1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1