电梯控制系统设计兰州交通大学.docx

上传人:b****5 文档编号:3793733 上传时间:2022-11-25 格式:DOCX 页数:19 大小:60.96KB
下载 相关 举报
电梯控制系统设计兰州交通大学.docx_第1页
第1页 / 共19页
电梯控制系统设计兰州交通大学.docx_第2页
第2页 / 共19页
电梯控制系统设计兰州交通大学.docx_第3页
第3页 / 共19页
电梯控制系统设计兰州交通大学.docx_第4页
第4页 / 共19页
电梯控制系统设计兰州交通大学.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

电梯控制系统设计兰州交通大学.docx

《电梯控制系统设计兰州交通大学.docx》由会员分享,可在线阅读,更多相关《电梯控制系统设计兰州交通大学.docx(19页珍藏版)》请在冰豆网上搜索。

电梯控制系统设计兰州交通大学.docx

电梯控制系统设计兰州交通大学

单片机原理及系统课程设计

评语:

 

考勤10分

守纪10分

过程30分

设计报告30分

答辩20分

总成绩(100分)

 

专业:

电气工程及其自动化

班级:

姓名:

学号:

指导教师:

兰州交通大学自动化与电气工程学院

2014年1月17日

基于单片机的电梯控制模型设计

1设计说明

1.1设计目的

本文介绍了一种采用单片AT89C52芯片进行电梯控制系统的设计方法,主要阐述如何使用单片机进行编程来实现电子设计的方法,利用单片机编程实现功能。

硬件部分主要由单片机的最小模块、电梯内外按钮控制模块、数码管显示楼层模块、发光二极管显示目的楼层模块、报警显示模块组成。

软件部分使用kiel软件进行C语言程序编写,用proteus软件进行仿真调试。

本设计具有电梯控制系统所需的一些基本功能,能通过方向按键选择方向,能通过数字按键选择楼层,数码管显示实时楼层数,电动机控制部分采用直流电机及H桥驱动电路,使电梯箱能上下运动,基本实现了五层电梯运行的模拟仿真。

1.2设计要求

本设计以五层电梯为研究对象,选用AT89C52单片机作为其控制器,研究微机控制梯系统的设计方法。

根据问题的提出、意义和文献综述,本课题研究的具体内容包括以下四个方面:

(1)对电梯系统常用的控制方法的研究。

(2)电梯控制系统硬件组成及其原理。

(3)电梯的单片机系统软件设计。

(4)电梯在信号传输中遇到的问题。

1.3设计方法

首先,对实际的电梯系统进行模拟,一般情况下,一个电梯应该具备相关按键、显示二极管、数码管等,由于这是一个调度模块,故没有设计具体的轿厢等机械部分。

由于其有诸多按键和显示环节,而单片机的I/O口管脚资源实在有限,故需要I/O口扩展,用以管理二极管;同时要有专门的按键控制芯片,从而便于按键管理。

同时,如果每个选层按钮都采用独立的按键设置,可以很大程度上简化扫描按键程序,采集信号也容易得多,但是由于单片机接口有限,模拟电梯自动控制系统所需按键较多,如此会有接口不足的问题,所以本设计采用4×4按键矩阵开关电路作为外呼内选呼叫控制。

出于同样问题,显示楼层电路采用数码管从串口输出。

为了更接近实际的电梯控制系统,设计中还添加电梯外上下行请求显示,可用五个发光二极管表示目的请求按键是否按下,有则亮,无则灭。

2设计方案及原理

2.1设计方案

本次设计的基本思想是采用AT89C52单片机作为核心,利用其丰富的I/O接口与外围电路配合进行控制。

采用延时函数来控制电梯的位置校验,采用数码管静态显示来实时显示电梯所在楼层。

采用行列式矩阵键盘矩阵作为外呼内选电路,由于是5层楼,故选用4×4矩阵键盘。

当电梯到达目的楼层时电机停止,此时即可进、出乘客,乘客进入电梯之后可选择去哪一层,然后电梯根据乘客的选择判断去哪一层,继续运行。

通过单片机控制电梯在上升过程中只响应上升呼叫,下降过程中只响应下降呼叫。

电梯的正常运行通过单片机的控制来实现。

2.2设计原理

本设计主要由6大部分电路组成:

键盘电路、单片机最小系统电路、楼层显示电路、电机驱动显示电路、目的楼层显示电路、警报电路。

其中单片机最小系统主要由复位电路组成。

电路复位后楼层显示数字1表示电梯此时在一楼,显示电路数码管显示,电梯楼层位置是由延时电路控制的,延时电路包括1秒延时和2秒延时,每层之间通过2秒延时控制即每延时2秒表示电梯走了一层,1秒延时是控制电梯的开门时间,1秒延时后电梯关门继续运行。

电梯状态是通过两个发光管显示的,上行灯亮表示电梯在向上运行,下行灯亮表示电梯在向下运行。

键盘电路采用4×4键盘矩阵共16个按键分,其中8个按键是各层楼外呼按键,5个按键是电梯内部的选择键。

电梯的正常工作是通过对单片机写入程序控制的。

系统组成框图如图1所示。

图1系统组成框图

3硬件设计

用AT89C52单片机作为核心,利用其丰富的I/O接口与外围电路配合进行控制。

采用延时函数来控制电梯的位置校验,采用数码管静态显示来实时显示电梯所在楼层。

采用行列式矩阵键盘矩阵作为外呼内选电路,由于是5层楼,故选用4×4矩阵键盘。

当电梯到达目的楼层时电机停止,此时即可进、出乘客,乘客进入电梯之后可选择去哪一层,然后电梯根据乘客的选择判断去哪一层,继续运行。

通过单片机控制电梯在上升过程中只响应上升呼叫,下降过程中只响应下降呼叫。

电梯的正常运行通过单片机的控制来实现。

在本设计中,最小系统应该包括:

单片机、晶振电路、复位电路等。

晶振电路由C1与C2和晶振组成,晶振是给单片机提供工作信号脉冲的。

它的速率就是单片机的工作速率,简单地说,没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。

并在晶振的两引脚处接入两个10pF-50pF的瓷片电容接地用来削减偕波对电路的稳定性的影响。

复位电路采取的为手动按键复位电路,由电容C3,电阻R1、R2和开关RESET组成,当单片机的复位引脚RESET出现2个机器周期以上的高电平时,单片机就执行复位操作。

如果RST持续为高电平,单片机就处于循环复位状态。

每次复位后,单片机的程序都会从第一条开始从新执行。

根据上述分析,设计出基于A89C52单片机电梯控制的电路仿真图如附录2所示。

4软件设计

4.1软件分析

软件设计是智能化系统进行数据采集、处理、控制等工作的基础。

系统的软件设计直接影响整个系统的运转和硬件作用的发挥。

本设计由于采用键盘矩阵来代替外呼内选按钮,而电梯的运行方向是根据这些呼叫按键和选择按键来决定的,所以单片机要不断的扫描键盘来获取各层呼叫状态。

从而来控制电梯的运行。

故键盘矩阵扫描是本系统软件设计的重要一部分,另外要把键盘扫描到的各层的按键信息存储起来,然后和电梯的运行状态比较,判断是否响应各层呼叫(电梯只响应同方向呼叫),最后就是楼层显示部分和警报部分了。

整个软件设计包括以下几部分:

(1)初始化程序使数码管显示“1”表示电梯处在一楼。

(2)主程序主要包括:

①判断乘客进入电梯后选择去哪一层,根据判断情况来控制电梯运行;

②电梯在运行过程中要不断的扫描键盘,从而来判断各楼层有无呼叫请求;

③电梯在运行过程中只响应同方向的呼叫请求;

④实时显示电梯所在位置及运行状态(上行/下行);

⑤开关门有一定的延时来保证乘客走出/进入电梯。

4.2系统流程图

软件流程图如图2所示。

图2软件流程图

 

4.3实验源程序

判断乘客进入电梯后选择去哪一层,根据判断情况来控制电梯运行,电梯在运行过程中要不断的扫描键盘,从而来判断各楼层有无呼叫请求,电梯在运行过程中只响应同方向的呼叫请求,实时显示电梯所在位置及运行状态(上行/下行),开关门有一定的延时来保证乘客走出/进入电梯。

程序如附录1。

5系统仿真及实际调试

系统仿真调试的过程中,根据操作电梯的实际情况进行了测试,数码管作出与测试一致的显示。

测试条件:

电梯位于1楼,进入三人,其中一人要到3楼,另两人到4楼。

电梯运行后,3楼和4楼有人向上呼叫,3楼有人向下呼叫到1楼。

在该测试部分,外部按钮和内部按钮都有涉及,能充分的考验单片机对所有按钮的区分和响应。

测试结果如表1所示。

表1综合测试

停止楼层电梯方向显示

3上3楼内部和向上呼叫注销,内部4楼呼叫

4上4楼向上呼叫注销

3下3楼向下呼叫注销,内部1楼呼叫

1下内部1楼呼叫注销

测试结论:

系统具有方向优先、距离优先的功能,基本模拟了实际电梯运行,完成题目设计指标。

6总结

 本次课程设计对电梯控制系统这一设计做了详细的报告与总结,其中包括硬件部分与软件部分两大模块,而且对其中各个重要的子模块加以了重点详细地说明。

总的来说,本程序的编写不仅仅是为了应对五层楼的电梯,而且更多层的电梯也可以实现,如果对单片机的其他I/O再进行扩展的话,可以实现十几层电梯的需求。

当然,如果更高层的电梯,就会受到单片机管脚资源的限制了。

而程序本身的思想本身是可以支持更多层电梯的运行调度的,如果用其他管脚多的处理器的话(如ARM型处理器),则这一设想完全可以实现。

参考文献

[1]陈宏希.51单片机应用技术(C语言版)[M].兰州石化职业技术学院出版社,2011.10.

[2]李学礼.基于Proteus的8051单片机实例教程[M].北京:

电子工业出版社,2008.03.

[3]王思明,张金敏,苟军年等.单片机原理及应用系统设计[M].北京:

科学出版社,2012.05.

 

附录1

实验源程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitalarm1=P1^0;

sbitalarm2=P0^0;

sbitfz=P1^1;

sbitzz=P1^2;

sbitL1=P1^3;

sbitL2=P1^4;

sbitL3=P1^5;

sbitL4=P1^6;

sbitL5=P1^7;

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x00};

uintshang[6]={0,0,0,0,0,0};

uintxia[6]={0,0,0,0,0,0};

uintnei[6]={0,0,0,0,0,0};

uintnum,temp,flag=0,lc=1,i,n;

//函数声明语句

voiddelay(uintz);

voiddelay1();

voiddelay2();

voidkeyscan();

voiddisplay(uintaa);

voidinit();

voidzhishideng();

//主函数

voidmain()

{

init();

while

(1)

{

keyscan();

zhishideng();

if(flag==0)

{

zz=fz=0;

shang[lc]=0;

xia[lc]=0;

nei[lc]=0;

n=lc;

for(i=n+1;i<=5;i++)

{

keyscan();

zhishideng();

if(shang[i]==1||xia[i]==1||nei[i]==1)

{

flag=1;

break;

}

}

for(i=n-1;i>=1;i--)

{

keyscan();

zhishideng();

if(shang[i]==1||xia[i]==1||nei[i]==1)

{

flag=2;

break;

}

}

}

if(flag==1)

{

keyscan();

zhishideng();

zz=1;

fz=0;

delay5();

lc++;

display(lc);

if(shang[lc]==1||nei[lc]==1)

{

shang[lc]=0;

nei[lc]=0;

zhishideng();

fz=0;

zz=0;

delay3();

}

flag=0;

n=lc;

for(i=n+1;i<=5;i++)

{

keyscan();

zhishideng();

if(shang[i]==1||xia[i]==1||nei[i]==1)

{

flag=1;

break;

}

}

if(flag==0||lc>=5)

{

n=lc;

if(shang[n]==0&&nei[n]==0)

{

fz=0;

zz=0;

delay3();

}

xia[n]=0;

for(i=n-1;i>=1;i--)

{

keyscan();

zhishideng();

if(shang[i]==1||xia[i]==1||nei[i]==1)

{

flag=2;

break;

}

}

}

}

if(flag==2)

{

keyscan();

zhishideng();

zz=0;

fz=1;

zz=0;

fz=1;

delay5();

lc--;

display(lc);

if(xia[lc]==1||nei[lc]==1)

{

xia[lc]=0;

nei[lc]=0;

zhishideng();

fz=0;

zz=0;

delay3();

}

flag=0;

n=lc;

for(i=n-1;i>=1;i--)

{

keyscan();

zhishideng();

if(shang[i]==1||xia[i]==1||nei[i]==1)

{

flag=2;

break;

}

}

if(flag==0||lc<=1)

{

n=lc;

if(xia[n]==0&&nei[n]==0)

{

fz=0;

zz=0;

delay3();

}

shang[n]=0;

for(i=n+1;i<=5;i++)

{

keyscan();

zhishideng();

if(shang[i]==1||xia[i]==1||nei[i]==1)

{

flag=1;

break;

}

}

}

}

}

}

//端口初始化函数。

voidinit()

{

P0=0xff;

P1=0xf8;

P2=table[lc];

P3=0x00;

}

//二极管点亮熄灭函数。

voidzhishideng()

{

L1=!

nei[1];

L2=!

nei[2];

L3=!

nei[3];

L4=!

nei[4];

L5=!

nei[5];

}

//数码管显示函数。

voiddisplay(uintaa)

{

P2=table[aa];

}

//延迟二秒函数。

voiddelay2()

{

uintx,y;

for(x=120;x>0;x--)

for(y=110;y>0;y--)

{

keyscan();

zhishideng();

}

}

//延迟一秒函数。

voiddelay1()

{

uintx,y;

for(x=80;x>0;x--)

for(y=110;y>0;y--)

{

keyscan();

zhishideng();

}

}

//ms级延函数。

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

//键盘扫描函数。

voidkeyscan()

{

num=0;

P3=0xfe;

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xee:

num=1;

break;

case0xde:

num=2;

break;

case0xbe:

num=3;

break;

case0x7e:

num=4;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xed:

num=5;

break;

case0xdd:

num=6;

break;

case0xbd:

num=7;

break;

case0x7d:

num=8;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xeb:

num=9;

break;

case0xdb:

num=10;

break;

case0xbb:

num=11;

break;

case0x7b:

num=12;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

P3=0xf7;

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xe7:

num=13;

break;

case0xd7:

num=14;

break;

case0xb7:

num=15;

break;

case0x77:

num=16;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

switch(num)

{

case1:

shang[1]=1;

break;

case2:

shang[2]=1;

break;

case3:

shang[3]=1;

break;

case4:

shang[4]=1;

break;

case5:

xia[2]=1;

break;

case6:

xia[3]=1;

break;

case7:

xia[4]=1;

break;

case8:

xia[5]=1;

break;

case9:

nei[1]=1;

break;

case10:

nei[2]=1;

break;

case11:

nei[3]=1;

break;

case12:

nei[4]=1;

break;

case13:

nei[5]=1;

break;

case14:

break;

case15:

break;

case16:

alarm1=1;alarm2=0;zz=fz=0;while

(1);

break;

}

}

附录2

电梯控制系统仿真图

 

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

当前位置:首页 > 自然科学 > 生物学

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

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