当前位置:文档之家› 基于51单片机的电梯控制器设计

基于51单片机的电梯控制器设计

题目:基于单片机控制的电梯控制器目录1引言 (1)2总体设计方案 (1)2.1设计思路 (1)2.2总体设计框图 (2)3电梯控制系统原理分析 (2)3.1单片机最小系统电路的 (2)3.2控制电路的设计 (3)3.2.1电梯内部呼叫电路和电机状态显示电路 (3)3.2.2电梯外部呼叫电路 (3)3.2.3电机控制电路 (4)3.3显示楼层电路 (4)4 程序流程图 (5)4.1 主程序流程图 (5)4.2选择要去的楼层子程序流程图 (6)5总结与体会 (7)参考文献 (8)附录 1 (9)附录 2 (9)附录 (10)电梯控制器课程设计任务书1.设计目的与要求1.1 基本功能(1)显示:本设计要求实现6层控制,实时显示电梯所在楼层位置。

(2)升降控制:采用一台电动机的正反转来实现电梯的升降。

(3)具备不可逆响应的功能:电梯上升途中只响应上升呼叫,下降途中只响应下降呼叫,任何反方向呼叫均无效。

1.2 扩展功能(1)可增加人性化的按键语音服务功能。

(2)可增加遥控或感应操作功能。

2.设计内容(1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出;3.编写设计报告写出设计的全过程,附上有关资料和图纸,有心得体会。

4.答辩在规定时间内,完成叙述并回答问题。

基于单片机控制的电梯控制器摘要:单片机即单片微型计算机(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。

其中51单片机是各种单片机中最为典型和最有代表性的一种,广泛应用于各个领域.电梯是集机械原理应用、电气控制技术、微处理器技术、系统工程学等多学科和技术分支于一体的机电设备,它是建筑中常用的交通工具。

本设计选择AT89S51为核心控制元件,设计了一个六层电梯系统,使用C语言进行编程,实现运送乘客到任意楼层,并且实时显示电梯的楼层和电梯上下情况。

利用单片机控制电梯有成本低,通用性强,灵活性大及易于实现复杂控制等优点。

关键词:电梯 AT89S51 LED显示电机正反转控制楼层显示1 引言随着人们生活水平的不断提高和国名经济的迅速发展。

各大城市建筑物在不断向高层化发展。

因此电梯在我们的生活中起着举足轻重的作用。

电梯已不仅是一种生产环节中的重要设备,更是一种人们频繁乘用的交通运输设备。

因此电梯控制技术也在不断的进步和完善,常用的控制技术主要的有两种技术:基于PLC控制和基于单片机控制两大技术。

用PLC控制的电梯性能可靠、稳定,但是造价太高。

基于单片机控制的电梯可以大大的降低成本而且运行也较可靠,所以现在电梯控制中大多数采用单片机控制。

本文基于单片机89SC51来控制各部分电路,采用单片机构成控制系统,可大大降低成本,而且做成专用控制系统,程序被固化,加强了保密性,提高了可靠性。

2 总体设计方案电梯控制系统由外部呼叫,内部呼叫,电机控制电路,楼层显示部分等组成。

电梯在各楼层的定位本应采用行程开关或者传感器,由于条件限制,采用延时控制。

相邻楼层间升降时间设为3秒。

2.1 设计思路本次设计的总思想是,用开关按钮做单片机的控制端来做作为输入信号,说明人在那一层,用七段数码管来显示电梯位置。

当电梯到达要求的楼层时,停止、开门,并继续查询有无呼叫信号,如此循环,同时可以利用单片机外部的复位按钮使电梯复位。

用单片机来控制电机的正反转来运行电梯的上、下,用发光二极管来显示电梯是上升还是下降,并且整体电梯全部采用独立键盘来控制,各个楼层的上下按钮、电梯内部的选层按钮均用独立键盘来实现。

由于设计中有不可逆控制,当上升或下降过程中,只相应同方向的呼叫相应。

2.1 总体设计框图本电路主要由5大部分电路组成:键盘电路、单片机最小系统电路、楼层显示电路、电机状态显示电路、电机控制电路。

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

电路复位后楼层显示数字1 表示电梯此时在一楼,显示电路通过74ls164串入并出驱动8位数码管显示,电梯楼层位置是由延时电路控制的,每层之间通过3秒延时控制即每延时3秒表示电梯走了一层。

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

键盘电路采用独立键盘(共16个按键),其中10个按键是各层楼外呼按键,6个表示电梯内部的选择键。

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

总体设计方框图如图1所示:图1.体设计方框图3 电梯控制系统原理分析3.1单片机最小系统电路的设计此电路组要是复位电路和时钟电路两部分,其中复位电路采用按键手动复位和上电自动复位组合,电路如图4(右)所示:其中9 脚为单片机的复位端。

时钟电路如图2(左)所示:晶振采用的是12MHZ的,XATL2和XATL1分别为单片机的18和19脚。

图2.单片机最小系统电路图3.2 控制电路的设计3.2.1 电梯内部呼叫电路和电机状态显示电路电梯内部呼叫电路和电机状态显示电路,如图3所示,六个目标楼层选择按键K1、K2、K3、K4、K5、K6与单片机P0口的P0.0、P0.1、P0.2、P0.3、P0.4、P0.5连接(P0口作为输出端驱动外部电路时须外接上拉电阻)。

电机状态是通过两个发光管显示的,绿灯、红灯与单片的P1.6、P1.7连接(须外接上拉电阻),绿灯亮表示电梯在向上运行,黄灯亮表示电梯在向下运行。

人进入电梯内按下要去的楼层对应的按键,就会控制电机转动,达到相应楼层。

图3.电梯内部呼叫电路和电机状态显示电路3.2.2 电梯外部呼叫电路电梯外部呼叫电路如图4所示,按键UP1、UP2、DOWN2、UP3、DOWN3、UP4、DOWN4、UP5、DOWN5、DOWN6接单片机的P2口和P1.0、P1.1。

若按下上升键,则电梯在上升过程中只响应上升呼叫,不响应下降键;反之亦然。

图4.电梯外部呼叫电路3.2.3 电机控制电路电机采用普通直流电机,直流电机具有优良的调速特性,调速平滑、方便,调整范围广;过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速启动、制动和反转。

用电机驱动芯片L298来驱动。

电机控制电路用来控制电机的正反转,当按下上升键时,电机正转,按下下降键时,电机反转。

电路如图5所示。

图5.电机控制电路3.3 显示楼层电路显示电路的作用是实时显示电梯所在楼层,用一个八段数码管来实现,本设计用74ls164驱动数码管,其管脚1、2接单片机P3.0口,管脚8接P3.1口。

电路如图6所示。

图6.显示楼层电路4 程序流程图4.1主程序流程图图7.主程序流程图4.2 选择要去的楼层子程序流程图图8.选择要去的楼层子程序流程图5 总结与体会通过这次单片机实习,使我在各方面都有了很大的提高,特别是在单片机编程方面让我有了很大的进步。

以前学习理论知识的时候我就对一些指令的应用不理解,现在自己动手编程了,通过这前两星期查找资料和单片机的实例应用,我对以前的不懂知识进行了全面的复习和新的学习。

这次实习在硬件设计方面我没遇到多大的问题,遇到的主要问题是在软件设计方面,由于刚开始我对编程没一点经验,所以没有很好的设计思路就开始编程了,结果刚编的过程中遇到了很多的问题,最后经过同学的帮助,我的程序才慢慢的编成了。

我设计的电梯自动控制用到了电机我们用二极管模拟,实物出来时,没能成功实现功能,让我们知道了理论与实际的差距,也意识到理论与实际相结合的重要性。

在写程序时需要极大的耐心,一点一点的改正,达到想要的效果,使自己的编程能力不断的提高!参考文献:[1] 沈德全.mcs51系列单片机接口电路与应用程序实例[M].北京:北京航空航天大学出版社[2] 张毅刚,彭喜元.单片机原理与应用设计[M].北京:电子工业出版社,2008 .4[3] 张大明.单片机微机控制应用技术[M].北京:机械工业出版社,2006.4[4] 刘瑞新.单片机原理及应用教程[M].机械工业出版社, 2003.7[5] 李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,2006附录1:总体电路图#include<reg51.h>#include"电梯.h"sbit k1=P0^0;sbit k2=P0^1;sbit k3=P0^2;sbit k4=P0^3;sbit k5=P0^4;sbit k6=P0^5;sbit LedDown=P0^6;sbit LedUp=P0^7;sbit up1=P2^0;sbit up2=P2^1;sbit down2=P2^2;sbit up3=P2^3;sbit down3=P2^4;sbit up4=P2^5;sbit down4=P2^6;sbit up5=P2^7;sbit down5=P1^0;sbit down6=P1^1;sbit d11=P1^2;sbit d12=P1^3;sbit d21=P1^4;sbit d22=P1^5;sbit pwm1=P1^6;sbit pwm2=P1^7;void DianTiKey();#define uchar unsigned charchar KeyValueOld; //内部按键上次值char KeyValueOOld; //外部按键上次值char NowFloor; //当前所在楼层char KeyValue; //电梯内部按键暂存值char KeyValueO; //电梯外部按键暂存值char GoFloor[5]; //要去楼层暂存GoFloor[1]=1 2楼在呼叫上升 GoFloor[1]=2 2楼在呼叫下降char t; //电梯运行/停止标/上升/下降志位 t=0电梯没有运行t=11电梯在上升 t=10电梯下降uchar code play[]={0xff,0xd7,0x32,0x92,0xd4,0x98,0x18}; //串口显示字型码unsigned int TimeValue; // 定时器计数char Num;void delay(unsigned int a)// unsigned int i;TH0=(65535-10000)/256;TL0=(65535-10000)%256;TimeValue=0;TR0=1;while(TimeValue<a){DianTiKey(); //多人电梯功能添加部分}TR0=0;}void ShangSheng()//驱动电机上升函数{int i;t=11;LedUp=0;LedDown=1;for(i=0;i<10;i++){d11=1,d12=0,d21=0,d22=0;delay(5);d11=1,d12=1,d21=0,d22=0;delay(5);d11=0,d12=1,d21=0,d22=0;delay(5);d11=0,d12=1,d21=1,d22=0;delay(5);d11=0,d12=0,d21=1,d22=0;delay(5);d11=0,d12=0,d21=1,d22=1;delay(5);d11=0,d12=0,d21=0,d22=1;delay(5);d11=1,d12=0,d21=0,d22=1;delay(5);}t=0;// d11=1,d12=1,d21=1,d22=1;LedDown=1;LedUp=1;}void XiaJiang()//驱动电机下降函数int i;t=10;LedDown=0;LedUp=1;for(i=0;i<10;i++){d11=0,d12=0,d21=0,d22=1;delay(5);d11=0,d12=0,d21=1,d22=1;delay(5);d11=0,d12=0,d21=1,d22=0;delay(5);d11=0,d12=1,d21=1,d22=0;delay(5);d11=0,d12=1,d21=0,d22=0;delay(5);d11=1,d12=1,d21=0,d22=0;delay(5);d11=1,d12=0,d21=0,d22=0;delay(5);d11=1,d12=0,d21=0,d22=1;delay(5);}t=0;// d11=1,d12=1,d21=1,d22=1;LedDown=1;LedUp=1;}void Go() //电梯内部按键响应程序{char temp;if(KeyValue!=KeyValueOld){KeyValueOld=KeyValue;temp=NowFloor-KeyValue;if(t==0){if(temp>0) //电梯执行上升{while(temp>0){ShangSheng();Num++;if(GoFloor[Num]!=0){if(((GoFloor[Num]&0x01)+(GoFloor[Num]&0x04))>0);}temp--;SBUF=play[--NowFloor];while(!TI);TI=0;}NowFloor=KeyValue;}if(temp<0) //电梯执行下降{while(temp<0){XiaJiang();temp++;SBUF=play[++NowFloor];while(!TI);TI=0;}NowFloor=KeyValue;}} //此电梯功能只适合一个人乘车}}void OutKey() //外部按键响应程序{char temp;if(KeyValueO!=KeyValueOOld)//按键是否按下{KeyValueOOld=KeyValueO;temp=NowFloor-KeyValueO;if(t==0){if(temp>0) //电梯执行上升{while(temp>0){ShangSheng();temp--;SBUF=play[--NowFloor];while(!TI);TI=0;}NowFloor=KeyValueO;}if(temp<0) //电梯执行下降{while(temp<0){XiaJiang();temp++;SBUF=play[++NowFloor];while(!TI);TI=0;}NowFloor=KeyValueO;}}}}void DianTiKey() //电梯按键扫描函数{switch(~P0){case 0x01:KeyValue=1;GoFloor[0]|=4;break;case 0x02:KeyValue=2;GoFloor[1]|=4;break;case 0x04:KeyValue=3;GoFloor[2]|=4;break;case 0x08:KeyValue=4;GoFloor[3]|=4;break;case 0x10:KeyValue=5;GoFloor[4]|=4;break;case 0x20:KeyValue=6;GoFloor[5]|=4;break;case 0x40:break;case 0x80:break;}if(t==0){switch(~P2) //上升按键扫描{case 0x01:GoFloor[0]|=1;KeyValueO=1;break;//1楼呼叫上升case 0x02:GoFloor[1]|=1;KeyValueO=2;break;//2楼呼叫上升case 0x04:GoFloor[2]|=1;KeyValueO=3;break;//3楼呼叫上升case 0x08:GoFloor[3]|=1;KeyValueO=4;break;//4楼呼叫上升case 0x10:GoFloor[4]|=1;KeyValueO=5;break;//5楼呼叫上升case 0x20:GoFloor[0]|=2;KeyValueO=2;break;//2楼呼叫下降case 0x40:GoFloor[1]|=2;KeyValueO=3;break;//3楼呼叫下降case 0x80:GoFloor[2]|=2;KeyValueO=4;break;//4楼呼叫下降}if(!down6){GoFloor[4]|=2; //6楼呼叫下降KeyValueO=6;}if(!down5) //5楼呼叫下降{GoFloor[3]|=2;KeyValueO=5;}}else{if(t==11) //电梯在上升时响应上升呼叫switch(~P2) //上升按键扫描{case 0x01:GoFloor[0]|=1;KeyValueO=1;break;//1楼呼叫上升case 0x02:GoFloor[1]|=1;KeyValueO=2;break;//2楼呼叫上升case 0x04:GoFloor[2]|=1;KeyValueO=3;break;//3楼呼叫上升case 0x08:GoFloor[3]|=1;KeyValueO=4;break;//4楼呼叫上升case 0x10:GoFloor[4]|=1;KeyValueO=5;break;//5楼呼叫上升}else if(t==10) //电梯在下降时响应下降呼叫{switch(~P2){case 0x20:GoFloor[0]|=2;KeyValueO=2;break;//2楼呼叫下降case 0x40:GoFloor[1]|=2;KeyValueO=3;break;//3楼呼叫下降case 0x80:GoFloor[2]|=2;KeyValueO=4;break;//4楼呼叫下降}if(!down6){GoFloor[4]|=2; //6楼呼叫下降KeyValueO=6;}if(!down5) //5楼呼叫下降{GoFloor[3]|=2;KeyValueO=5;}}}}void start(){SCON=0X00;//串口工作在零模式TMOD=0X01;ET0=1;EA=1;TI=0;NowFloor=1;KeyValueOld=KeyValueOOld=KeyValue=KeyValueO=1;pwm1=pwm2=1;SBUF=play[1];while(!TI);TI=0;}void main(){start();while(1){DianTiKey(); //电梯按键扫描OutKey(); //外部按键响应Go(); //内部按键响应}}void t0() interrupt 1{TH0=(65535-10000)/256;TL0=(65535-10000)%256;TimeValue++;}。

相关主题