单电梯微控制器.docx

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

单电梯微控制器.docx

《单电梯微控制器.docx》由会员分享,可在线阅读,更多相关《单电梯微控制器.docx(27页珍藏版)》请在冰豆网上搜索。

单电梯微控制器.docx

单电梯微控制器

HUBEINORMALUNIVERSITY

Verilog课程设计

VerilogCurriculumDesign

 

所在院系

教育信息与技术学院

专业名称

信息工程

班级

1202

题目

单电梯微控制器设计

指导教师

梁赫西

成员

完成时间

2014年5月27日——2014年6月12日

一、设计任务及要求:

设计任务:

单电梯微控制器

要求:

(1)用S0和S1作为手动上下开关

(2)数码管指示当前所在楼层

(3)用led灯表示电梯当前状态(上/下/停)

(4)利用modelsim和QuartusII仿真综综合

指导教师签名:

2014年6月12日

二、指导教师评语:

 

指导教师签名:

2014年6月12日

三、成绩

 

验收盖章

2014年6月12日

单电梯微控制器的设计

1设计目的

采用VerilogHDL,源程序经Multisim软件仿真。

在电梯时钟的触发下,通过当前状态和信号灯信号来判定下一状态。

设计要求:

(1)用S0和S1作为手动上下开关

(2)数码管指示当前所在楼层

(3)用led灯表示电梯当前状态(上/下/停)

(4)利用modelsim和QuartusII仿真综综合

2设计思路

将电梯运行定义为6个状态,具体的状态定义如下:

  S1:

floor1,表示在楼层1;

  S2:

floor2,表示在楼层2;

  S3:

floor3,表示在楼层3;

  S4:

floor4,表示在楼层4;

  S5:

direction==2'b11,表示电梯向上运动;

S6:

direction==2'b00,表示电梯向下运动;

S7:

direction==2'b10,表示电梯在等待状态;

 

状态转换图:

 

 

表一电梯控制器状态转换条件

现态

次态

转换条件

S1

S5

r_up1==f1|r_up2==f2|r_up3==f3|r_down2==f2|r_down3==f3|r_down4==f4|r_inter2==f2|r_inter3==f3|r_inter4==f4

S2

S5

direction==2'b11的情况下(r_up2==f2|r_up3==f3|r_down4==f4|r_down3==f3|r_inter3==f3|r_inter4==f4)或direction==2'b00的情况下(r_up2==f2|r_up3==f3|r_down4==f4|r_down3==f3|r_inter3==f3|r_inter4==f4)

S2

S6

direction==2'b11的情况下(r_up1==f1|r_down2==f2|r_inter1==f1)或direction==2'b00的情况下(r_up1==f1|r_down2==f2|r_inter1==f1)

S2

S7

S2的下一状态不为S5/S6

S3

S5

direction==2'b11的情况下(r_inter4==f4|r_up3==f3|r_down4==f4)或direction==2'b00的情况下(r_up3==f3|r_down4==f4|r_inter4==f4)

S3

S6

direction==2'b11的情况下(r_inter1==f1|r_inter2==f2)或(r_down2==f2|r_up2==f2)或(r_up1==f1)或direction==2'b00的情况下(r_up1==f1|r_up2==f2|r_down2==f2|r_down3==f3|r_inter1==f1|r_inter2==f2)

S3

S7

S3的下一状态不为S5/S6

S4

S6

r_up1==f1|r_up2==f2|r_up3==f3|r_down2==f2|r_down3==f3|r_down4==f4|r_inter1==f1|r_inter2==f2|r_inter3==f3

S7

S7

没有任何信号请求

3设计过程

系统描述:

1、这是一个4层电梯控制系统

2、在电梯的内部有一个控制面板,它负责按下请求到的楼层,并且显示当前尚未完成的目的地请求,当到达该楼层以后自动撤销本楼层的请求,即将面板灯熄灭.

3、除1层和4层分别只有上/下按钮外,每个楼层(电梯门口旁)的召唤面板都有两个按钮,分别指示上楼和下楼请求.

4、电梯的外部面板会显示电梯当前所在的楼层,及上行还是下行(暂停显示刚才运行时的状态).当电梯在运行时,对应的楼层灯间固定显示一段时间进入下一楼层.

5、电梯向一个方向运行时,只对本方向前方的请求进行应答,直到本方向前方无请求时,才对反方向的请求进行应答。

当前内部控制面板上有的请求,只要经过所在楼层均会立即响应.

 

设计图:

3.1方案论证

1方案的选择

1、当电梯开始启动的时候,将当前所处的楼层置为第一层,电梯为暂停状态,方向向上,然后等待控制器的调度.

2、等待过程当中(FLOOR保持在该楼层),判断当前楼层(第I层)以上的楼层是否发出召唤或者已经有人已经发请求,若有则向上运行;否则以同样的方法判断是否向下运行;若不向下运行则重复等待状态.      

3、若已经判明要向上运行,则首先使运行/暂停触发器置为运行,且标志向上运行,控制LED在该楼层亮后将所在楼层加1,接着判断当前楼层是否发出向上召唤或者已经有人已经发出目的地为第i+1层的请求,若有则在第i+1层停靠;否则判断第i+1层以上的楼层是否发出召唤或者已经有人已经发出目的地为第i+1层以上的请求,若有则向上运行.若不在当前的第i+1层停靠,就使灯闪烁,继续3中开始的操作.如果停靠就修改运行状态为停止,撤销所在楼层的召唤请求和目的地任务,接受用户的目的地请求,然后为等待状态.

3.2模块设计

3.1电梯门控模块设计:

该模块用于控制电梯门的开关

模块定义如下:

moduledoor(

door,//电梯门状态

close_door,//关门信号

open_door,//开门信号

cnt_time,//开门时间计数

status,//电梯运行状态

floor,//到达楼层信号

);

I/O管脚描述

(二)

名称

方向

位宽

功能

clk

input

1

时钟脉冲

rst

input

1

复位信号(高电平有效)

close_door

input

1

关门信号

open_door

input

1

开门信号

door

output

1

电梯门状态

3.2楼层显示模块设计:

该模块用于译码器显示当前所在楼层。

模块定义如下:

modulestorey(

floor,//到达楼层信号

direction,//电梯运行方向

status,//电梯运行状态

cnt,//电梯楼层计数

number,//电梯楼层数

);

I/O管脚描述

(一)

名称

方向

位宽

功能

clk

input

1

时钟脉冲

rst

input

1

复位信号(高电平有效)

floor

input

1

所到楼层信号(高电平有效)

number

output

1

电梯楼层数

 

3.3电梯控制模块设计:

该模块控制电梯的运行方向,运行状态,并设置指示灯。

模块定义:

modulecontrol(

up1toup3,//电梯外部上升请求

down2todown4,//电梯外部下降请求

inter_button1tointer_button4,//电梯内部靠站请求

led_up1toled_up3,//电梯上升指示灯

led-down2toled_down4,//电梯下降指示灯

status,//电梯运行状态

direction,//电梯运行方向

r_up1tor_up3,

r_down2tor_down4,

r_inter1tor_inter4,

cnt,//楼层计数

floor,//所到楼层信号

);

 

I/O管脚描述(三)

名称

方向

位宽

功能

clk

input

1

时钟脉冲

rst

input

1

复位信号(高电平有效)

up1toup3

input

1

电梯外部上升请求

down2todown4

input

1

电梯外部下降请求

inter_button1tointer_button4

input

1

电梯内部停站请求

led_up1toled_up3

output

1

电梯上升指示灯

led-down2toled_down4

output

1

电梯下降指示灯

r_up1tor_up3

output

2

电梯上升寄存信号

r_down2tor_down4

output

2

电梯下降寄存信号

r_inter1tor_inter4

output

2

电梯内部请求寄存信号

status

output

1

电梯运行状态

direction

output

1

电梯运行方向

4仿真测试:

在波形仿真中,根据实际,我们有必要做一些假设,即是:

a、外部请求上升的乘客,进入电梯后一定是按更高层的停站按钮;

b、外部请求下降的乘客,进入电梯后一定是按更低层的停站按钮;

c、如果有乘客进入电梯,则一定有停站请求;

d、同一时刻有很多人按键的概率很小,所以我们认为请求信号都有一定的先后顺序。

1、给定测试的总过程是:

开始电梯停在一楼,二楼有人按了向上的请求,电梯未到达二楼前,有人按了三楼停靠请求,紧接着二楼又有人按了向下的请求,然后有人按了一楼的停靠请求,电梯到达三楼后,一楼有人按了向上的请求。

 

图一仿真结果示意总图

2、这是电梯从一楼运动到三楼的波形,由于电梯向一个方向运行时,只对本方向前方的请求进行应答,直到本方向前方无请求时,才对反方向的请求进行应答。

所以该电梯只回应了从一楼向上的请求。

图二电梯上升过程

 

3、这时电梯从三楼到一楼的仿真波形,原因同上,当电梯响应完向上的请求后,才处理反方向的信号器2的时钟输入。

 

图三电梯下降过程

5结论:

在本学期做课程设计的过程中,我学习了VHDL语言的基本语法,也学到了很多东西,本课题在选题及研究过程中遇到了很多难题,让我深刻的意识到课外拓展及自学的重要性。

同时感谢那些给予帮助的同学们,在他们的帮助下,我才能顺利完成设计,另外,在以后的课程设计中,一定要敢于克服难题,多动脑,这样才会有所收获。

 

参考文献

[1]夏宇闻.《verilog数字系统设计教程》第二版.北京航空航天大学出版社.2006.01

附件

完整程序

modulelift2(clk,//1KHz

reset,//resetsignal,low(0)active

up1,//1stfloor,requestforup,highactive

up2,//2ndfloor,requestforup,highactive

up3,//3rdfloor,requestforup,highactive

down2,//2thfloor,requestfordown,highactive

down3,//3thfloor,requestfordown,highactive

down4,//4thfloor,requestfordown,highactive

inter_button1,//insideofthelift,requestfor1stfloor,highactive

inter_button2,//insideofthelift,requestfor2ndfloor,highactive

inter_button3,//insideofthelift,requestfor3rdfloor,highactive

inter_button4,//insideofthelift,requestfor4thfloor,highactive

close_door,//thesignalforclosethelift'door,highactive

open_door,//thesignalforopenthelift'door,highactive

floor,//thesignalfortheliftarrivingatthefloor,highactive

led_up1,//output

led_up2,//output

led_up3,//output

led_down2,//output

led_down3,//output

led_down4,//output

inter1,//output

inter2,//output

inter3,//output

inter4,//output

status,//output1--operate0--stop

door,//output0--close,1--open

number,//output

r_up1,r_up2,r_up3,r_down2,r_down3,r_down4,

r_inter1,r_inter2,r_inter3,r_inter4

);

inputclk,reset/*,maintain*/;

inputup1,up2,up3,down2,down3,down4;

inputinter_button1,inter_button2,inter_button3,inter_button4;

inputclose_door,open_door;

inputfloor;

outputled_up1,led_up2,led_up3;

outputled_down2,led_down3,led_down4;

outputinter1,inter2,inter3,inter4;

outputdoor;//0--close,1--open

output[1:

0]number;

outputstatus;

output[1:

0]r_up1,r_up2,r_up3,r_down2,r_down3,r_down4,r_inter1,r_inter2,r_inter3,r_inter4;

regled_up1,led_up2,led_up3;

regled_down2,led_down3,led_down4;

reginter1,inter2,inter3,inter4;

regdoor;

reg[1:

0]direction;//11--up,00--down

reg[1:

0]cnt;//countforthefloor

reg[2:

0]cnt_time;//countthetimeforthedoor

regstatus;//operate--1,stop--0

reg[1:

0]r_up1,r_up2,r_up3,r_down2,r_down3,r_down4;

reg[1:

0]r_inter1,r_inter2,r_inter3,r_inter4;

parameterf1=2'd0,//1stfloor

f2=2'd1,//2ndfloor

f3=2'd2,//3rdfloor

f4=2'd3;//4thfloor

parameters1=2'd0,//1stfloor

s2=2'd1,//2ndfloor

s3=2'd2,//3rdfloor

s4=2'd3;//4thfloor

wiret1=(r_up1!

=f1|r_inter1!

=f1);

//-----------------judgethelift'sstorey----------------//

always@(posedgeclkornegedgereset)

begin

if(!

reset)

cnt<=f1;

elseif(status==0)

cnt<=cnt;

elseif(status==1'b1&&floor==1'b1)

begin

if(direction==2'b11)

cnt<=cnt+1;

elseif(direction==0)

cnt<=cnt-1;

elsecnt<=cnt;

end

elsecnt<=cnt;

end

assignnumber=cnt;

//-----------------thelift'sdoor------------------------//

always@(posedgeclkornegedgereset)

begin

if(!

reset)

door<=1'b0;

elseif(status==1'b1)//theliftisoperating.

door<=1'b0;

elseif(close_door&&(status==0&&floor==1))

door<=1'b0;

elseif(cnt_time==3'd5&&(status==0&&floor==1))

door<=1'b0;

elseif(cnt==f1&&s1==0)

door<=1'b0;

elseif(status==0&&floor==1/*&&cnt_time==3'd0*/)//theliftisstopping.

door<=1'b1;

elseif(open_door&&(status==1'b0&&floor==1'b1))

door<=1'b1;

elsedoor<=door;

end

always@(posedgeclkornegedgereset/*orposedgedoor*/)

begin

if(!

reset)

cnt_time<=3'd0;

elseif(door==1'b1)

cnt_time<=cnt_time+1;

elsecnt_time<=3'd0;

end

//------------------theliftcontrol---------------------//

always@(posedgeclkornegedgereset)//thelift'srequest----the1stfloor

begin

if(!

reset)

begin

led_up1<=1'b0;

r_up1<=2'b11;

end

elseif(up1)

begin

r_up1<=f1;

led_up1<=1'b1;

end

elseif(cnt==s1)

begin

led_up1<=1'b0;

r_up1<=2'b11;

end

end

always@(posedgeclkornegedgereset)//thelift'srequest----the2ndfloor

begin

if(!

reset)

begin

led_up2<=1'b0;

r_up2<=2'b00;

end

elseif(up2)

begin

r_up2<=f2;

led_up2<=1'b1;

end

elseif(cnt==s2)

begin

led_up2<=1'b0;

r_up2<=2'b00;

end

end

always@(posedgeclkornegedgereset)//thelift'srequest

begin

if(!

reset)

begin

led_up3<=1'b0;

r_up3<=2'b00;

end

elseif(up3)

begin

r_up3<=f3;

led_up3<=1'b1;

end

elseif(cnt==s3)

begin

led_up3<=1'b0;

r_up3<=2'b00;

end

end

always@(posedgeclkornegedgereset)//thelift'srequest

begin

if(!

reset)

begin

led_down2<=1'b0;

r_down2<=2'b00;

end

elseif(down2)

begin

r_down2<=f2;

led_down2<=1'b1;

end

elseif(cnt==s2)

begin

led_down2<=1'b0;

r_down2<=2'b00;

end

end

always@(posedgeclkornegedgereset)//thelift'srequest

begin

if(!

reset)

begin

led_down3<=1'b0;

r_down3<=2'b00;

end

elseif(down3)

begin

r_down3<=f3;

led_down3<=1'b1;

end

elseif(cnt==s3)

begin

led_down3<=1'b0;

r_down3<=2'b00;

end

end

always@(posedgeclkornegedgereset)//thelift'srequest

begin

if(!

reset)

begin

led_down4<=1'b0;

r_down4<=2'b00;

end

elseif(down4)

begin

r_down4<=f4;

led_down4<=1'b1;

end

elseif(cnt==s4)

begin

led_down4<=1'b0;

r_down4<=2'b00;

end

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

当前位置:首页 > PPT模板 > 其它模板

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

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