《基于51单片机的电梯控制器设计要点.pdf》由会员分享,可在线阅读,更多相关《基于51单片机的电梯控制器设计要点.pdf(19页珍藏版)》请在三一文库上搜索。
1、单片机原理与应用技术 课程设计报告(论文) 题目: 基于单片机控制的电梯控制器 专业班级:河南科技学院 姓名:_X_X_ X 时间:20XX.05.2106.5 指导教师: 20XX年 6 月 5 日 目录 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 附录
2、 1 9 附录 2 9 附录 10 电梯控制器课程设计任务书 1设计目的与要求 1.1 基本功能 (1)显示 : 本设计要求实现6 层控制 , 实时显示电梯所在楼层位置。 (2)升降控制 : 采用一台电动机的正反转来实现电梯的升降。 (3)具备不可逆响应的功能: 电梯上升途中只响应上升呼叫, 下降途中只响应下降呼叫, 任何反方向呼叫均无效。 1.2 扩展功能 (1)可增加人性化的按键语音服务功能。 (2)可增加遥控或感应操作功能。 2设计内容 (1)画出电路原理图,正确使用逻辑关系; (2)确定元器件及元件参数; (3)进行电路模拟仿真; (4)SCH文件生成与打印输出; 3编写设计报告 写出
3、设计的全过程,附上有关资料和图纸,有心得体会。 4答辩 在规定时间内,完成叙述并回答问题。 基于单片机控制的电梯控制器 摘要:单片机即单片微型计算机(Single-Chip Microcomputer ) ,是集 CPU ,RAM ,ROM ,定时,计数和多 种接口于一体的微控制器。其中51 单片机是各种单片机中最为典型和最有代表性的一种, 广泛应用于各个 领域 . 电梯是集机械原理应用、电气控制技术、 微处理器技术、系统工程学等多学科和技术分支于一体的机 电设备,它是建筑中常用的交通工具。本设计选择AT89S51为核心控制元件,设计了一个六层电梯系统, 使用 C语言进行编程,实现运送乘客到任
4、意楼层,并且实时显示电梯的楼层和电梯上下情况。利用单片机 控制电梯有成本低,通用性强,灵活性大及易于实现复杂控制等优点。 关键词:电梯 AT89S51 LED 显示电机正反转控制楼层显示 1 引言 随着人们生活水平的不断提高和国名经济的迅速发展。各大城市建筑物在不断向高层化 发展。因此电梯在我们的生活中起着举足轻重的作用。电梯已不仅是一种生产环节中的重要 设备 , 更是一种人们频繁乘用的交通运输设备。因此电梯控制技术也在不断的进步和完善, 常用的控制技术主要的有两种技术:基于 PLC控制和基于单片机控制两大技术。用 PLC控制 的电梯性能可靠、稳定, 但是造价太高。 基于单片机控制的电梯可以大
5、大的降低成本而且运 行也较可靠,所以现在电梯控制中大多数采用单片机控制。 本文基于单片机89SC51来控制各部分电路,采用单片机构成控制系统,可大大降低成 本,而且做成专用控制系统,程序被固化,加强了保密性,提高了可靠性。 2 总体设计方案 电梯控制系统由外部呼叫,内部呼叫,电机控制电路,楼层显示部分等组成。电梯在各 楼层的定位本应采用行程开关或者传感器,由于条件限制, 采用延时控制。 相邻楼层间升降 时间设为3 秒。 2.1 设计思路 本次设计的总思想是,用开关按钮做单片机的控制端来做作为输入信号,说明人在那一 层,用七段数码管来显示电梯位置。当电梯到达要求的楼层时,停止、开门,并继续查询有
6、 无呼叫信号, 如此循环, 同时可以利用单片机外部的复位按钮使电梯复位。用单片机来控制 电机的正反转来运行电梯的上、下,用发光二极管来显示电梯是上升还是下降,并且整体电 梯全部采用独立键盘来控制,各个楼层的上下按钮、电梯内部的选层按钮均用独立键盘来实 现。由于设计中有不可逆控制,当上升或下降过程中,只相应同方向的呼叫相应。 2.1 总体设计框图 本电路主要由5 大部分电路组成:键盘电路、单片机最小系统电路、楼层显示电路、电 机状态显示电路、电机控制电路。 其中单片机最小系统主要由复位电路和时钟电路组成。电 路复位后楼层显示数字1 表示电梯此时在一楼,显示电路通过74ls164 串入并出驱动8
7、位 数码管显示,电梯楼层位置是由延时电路控制的,每层之间通过3 秒延时控制即每延时3 秒表示电梯走了一层。电梯状态是通过两个发光管显示的,绿灯亮表示电梯在向上运行,黄 灯亮表示电梯在向下运行。键盘电路采用独立键盘(共16 个按键),其中 10 个按键是各层 楼外呼按键, 6 个表示电梯内部的选择键。电梯的正常工作是通过对单片机写入程序控制的。 总体设计方框图如图1 所示: 图 1. 体设计方框图 3 电梯控制系统原理分析 3.1 单片机最小系统电路的设计 此电路组要是复位电路和时钟电路两部分,其中复位电路采用按键手动复位和上电自动 复位组合,电路如图4(右)所示:其中9 脚为单片机的复位端。时
8、钟电路如图2(左)所 示:晶振采用的是12MHZ 的, XATL2和 XATL1分别为单片机的18 和 19 脚。 图 2. 单片机最小系统电路图 AT89C51 楼层显示电路 键盘电路 时钟电路 复位电路电机控制电路 电机状态显示 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口作为 输出端驱动外部电路时须外接上拉电阻)。电机状态是通过两个发光管显示的,绿灯、红灯
9、 与单片的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 电机控制电路 电机采用普通直
10、流电机,直流电机具有优良的调速特性,调速平滑、 方便,调整范围广; 过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速启动、制动和反转。用电机驱 动芯片 L298 来驱动。电机控制电路用来控制电机的正反转,当按下上升键时,电机正转, 按下下降键时,电机反转。电路如图5 所示。 图 5. 电机控制电路 3.3 显示楼层电路 显示电路的作用是实时显示电梯所在楼层,用一个八段数码管来实现,本设计用 74ls164 驱动数码管,其管脚1、2 接单片机P3.0 口,管脚 8 接 P3.1 口。电路如图6 所示。 图 6. 显示楼层电路 4 程序流程图 4.1 主程序流程图 图 7. 主程序流程图 调
11、用选择当前要去的 楼层子程序 停留 3s 电梯未运行或虽运行 但还没停止 电梯已到目的层? 是 否 是 否 启动电梯显示在一楼 4.2 选择要去的楼层子程序流程图 图 8. 选择要去的楼层子程序流程图 电梯改为上升 电梯改为下降 电梯到达最顶层 电梯到达最底层 电梯在下降 当前楼层 =目的楼层 继续下行查找下一个要去的楼层 若无下行需求,则反向查询 向上查找下一个要去的楼层 若无按键需求则停止 当前楼层 =目的楼 层 延时等待 3s 开始 是 是 是 是 是 延时等待 3s 否 否 否 否 5 总结与体会 通过这次单片机实习,使我在各方面都有了很大的提高,特别是在单片机编程方面让我 有了很大的
12、进步。 以前学习理论知识的时候我就对一些指令的应用不理解,现在自己动手编 程了,通过这前两星期查找资料和单片机的实例应用,我对以前的不懂知识进行了全面的复 习和新的学习。 这次实习在硬件设计方面我没遇到多大的问题,遇到的主要问题是在软件设 计方面, 由于刚开始我对编程没一点经验,所以没有很好的设计思路就开始编程了,结果刚 编的过程中遇到了很多的问题,最后经过同学的帮助,我的程序才慢慢的编成了。 我设计的电梯自动控制用到了电机我们用二极管模拟,实物出来时, 没能成功实现功能, 让我们知道了理论与实际的差距,也意识到理论与实际相结合的重要性。在写程序时需要极 大的耐心,一点一点的改正,达到想要的效
13、果,使自己的编程能力不断的提高! 参考文献: 1 沈德全 .mcs51 系列单片机接口电路与应用程序实例. 北京 : 北京航空航天大学出版社 2 张毅刚,彭喜元 . 单片机原理与应用设计. 北京:电子工业出版社,2008 .4 3 张大明 . 单片机微机控制应用技术. 北京:机械工业出版社,2006.4 4 刘瑞新 . 单片机原理及应用教程. 机械工业出版社, 2003.7 5 李朝青 . 单片机原理及接口技术. 北京:北京航空航天大学出版社,2006 附录 1:总体电路图 附录 2:PCB电路图 2 10 21 2 1 14 13 12 11 10 9 87 6 5 4 3 2 1 1 2
14、3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2021 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 1 2 2 1 2 1 12 12 12 12 12 12 12 12 12 12 12 43 1 2 4 3 1 2 4 3 1 2 4 31 2 4 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 3 5 4 10 3 82 1 9 7 6
15、 1 2 12 12 附录 3:原程序 #include #include“电梯 .h“ sbit k1=P00; sbit k2=P01; sbit k3=P02; sbit k4=P03; sbit k5=P04; sbit k6=P05; sbit LedDown=P06; sbit LedUp=P07; sbit up1=P20; sbit up2=P21; sbit down2=P22; sbit up3=P23; sbit down3=P24; sbit up4=P25; sbit down4=P26; sbit up5=P27; sbit down5=P10; sbit down
16、6=P11; sbit d11=P12; sbit d12=P13; sbit d21=P14; sbit d22=P15; sbit pwm1=P16; sbit pwm2=P17; void DianTiKey(); #define uchar unsigned char char KeyValueOld; /内部按键上次值 char KeyValueOOld; / 外部按键上次值 char NowFloor; / 当前所在楼层 char KeyValue; / 电梯内部按键暂存值 char KeyValueO; / 电梯外部按键暂存值 char GoFloor5; / 要去楼层暂存GoF
17、loor1=1 2 楼在呼叫上升 GoFloor1=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; TimeV
18、alue=0; TR0=1; while(TimeValue0) /电梯执行上升 while(temp0) ShangSheng(); Num+; if(GoFloorNum!=0) if(GoFloorNum temp-; SBUF=play-NowFloor; while(!TI); TI=0; NowFloor=KeyValue; if(temp0) /电梯执行上升 while(temp0) ShangSheng(); temp-; SBUF=play-NowFloor; while(!TI); TI=0; NowFloor=KeyValueO; if(temp0) /电梯执行下降 wh
19、ile(temp0) XiaJiang(); temp+; SBUF=play+NowFloor; while(!TI); TI=0; NowFloor=KeyValueO; void DianTiKey() / 电梯按键扫描函数 switch(P0) case 0x01:KeyValue=1;GoFloor0|=4;break; case 0x02:KeyValue=2;GoFloor1|=4;break; case 0x04:KeyValue=3;GoFloor2|=4;break; case 0x08:KeyValue=4;GoFloor3|=4;break; case 0x10:Key
20、Value=5;GoFloor4|=4;break; case 0x20:KeyValue=6;GoFloor5|=4;break; case 0x40:break; case 0x80:break; if(t=0) switch(P2) /上升按键扫描 case 0x01:GoFloor0|=1;KeyValueO=1;break;/1楼呼叫上升 case 0x02:GoFloor1|=1;KeyValueO=2;break;/2楼呼叫上升 case 0x04:GoFloor2|=1;KeyValueO=3;break;/3楼呼叫上升 case 0x08:GoFloor3|=1;KeyVal
21、ueO=4;break;/4楼呼叫上升 case 0x10:GoFloor4|=1;KeyValueO=5;break;/5楼呼叫上升 case 0x20:GoFloor0|=2;KeyValueO=2;break;/2楼呼叫下降 case 0x40:GoFloor1|=2;KeyValueO=3;break;/3楼呼叫下降 case 0x80:GoFloor2|=2;KeyValueO=4;break;/4楼呼叫下降 if(!down6) GoFloor4|=2; /6楼呼叫下降 KeyValueO=6; if(!down5) /5楼呼叫下降 GoFloor3|=2; KeyValueO=5
22、; else if(t=11) /电梯在上升时响应上升呼叫 switch(P2) /上升按键扫描 case 0x01:GoFloor0|=1;KeyValueO=1;break;/1楼呼叫上升 case 0x02:GoFloor1|=1;KeyValueO=2;break;/2楼呼叫上升 case 0x04:GoFloor2|=1;KeyValueO=3;break;/3楼呼叫上升 case 0x08:GoFloor3|=1;KeyValueO=4;break;/4楼呼叫上升 case 0x10:GoFloor4|=1;KeyValueO=5;break;/5楼呼叫上升 else if(t=1
23、0) /电梯在下降时响应下降呼叫 switch(P2) case 0x20:GoFloor0|=2;KeyValueO=2;break;/2楼呼叫下降 case 0x40:GoFloor1|=2;KeyValueO=3;break;/3楼呼叫下降 case 0x80:GoFloor2|=2;KeyValueO=4;break;/4楼呼叫下降 if(!down6) GoFloor4|=2; /6楼呼叫下降 KeyValueO=6; if(!down5) /5楼呼叫下降 GoFloor3|=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=play1; 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+;
链接地址:https://www.31doc.com/p-5207585.html