基于单片机对智能模拟电梯的控制34.docx
《基于单片机对智能模拟电梯的控制34.docx》由会员分享,可在线阅读,更多相关《基于单片机对智能模拟电梯的控制34.docx(26页珍藏版)》请在冰豆网上搜索。
基于单片机对智能模拟电梯的控制34
课程设计报告
题目:
基于单片机对智能模拟电梯的控制
学生姓名:
魏晖
学生学号:
0908020167
系别:
电气信息工程学院
专业:
自动化
届别:
2013
指导教师:
苗磊
电气信息工程学院制
2012年5月
基于单片机对智能模拟电梯的控制
学生:
魏晖
指导教师:
苗磊
电气信息工程学院自动化系
1课程设计的任务与要求
1.1课程设计的任务
本设计是利用单片机对六层模拟电梯实行控制,目前电梯控制系统大多采用继电器或者可编程控制器(PLC)的控制方式,存在着成本高,需要三相供电等缺点,本设计给出了一种基于单片机的电梯模型控制系统设计。
以单片机为核心,再辅以适当的硬件电路和控制程序来检测和控制整个电梯的信号,具有成本低、通用性强、灵活性大、扩展容易及易于实现复杂控制等优点。
本设计注重基本理论知识与实际情况的紧密结合,同时对学生独立创新和分析问题的能力进行培养,加深对知识的理解,为以后的工作和学习打下坚实的基础。
1.2课程设计的要求
(1)设置电梯的内外按键,即电梯外都有上或下的按键,电梯内有楼层的选择按键。
(2)电梯状态要有指示灯显示,即电梯目前运行到达楼层的实时显示,电梯升降的状态显示等。
(3)电梯无人时,应默认停在第一层。
1.3课程设计的研究基础
单片机工作原理
单片机由运算器、控制器、存储器、输入输出设备构成。
单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程,所谓指令就是把要求单片机执行的各种操作用的命令的形式写下来,这是在设计人员赋予它的指令系统所决定的,一条指令对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统,不同种类的单片机,其指令系统亦不同。
为使单片机能自动完成某一特定任务,必须把要解决的问题编成一系列指令(这些指令必须是选定单片机能识别和执行的指令),这一系列指令的集合就成为程序,程序需要预先存放在具有存储功能的部件——存储器中。
存储器由许多存储单元(最小的存储单位)组成,就像大楼房有许多房间组成一样,指令就存放在这些单元里,单元里的指令取出并执行就像大楼房的每个房间的被分配到了唯一一个房间号一样,每一个存储单元也必须被分配到唯一的地址号,该地址号称为存储单元的地址,这样只要知道了存储单元的地址,就可以找到这个存储单元,其中存储的指令就可以被取出,然后再被执行。
程序通常是顺序执行的,所以程序中的指令也是一条条顺序存放的,单片机在执行程序时要能把这些指令一条条取出并加以执行,必须有一个部件能追踪指令所在的地址,这一部件就是程序计数器PC(包含在CPU中),在开始执行程序时,给PC赋以程序中第一条指令所在的地址,然后取得每一条要执行的命令,PC在中的内容就会自动增加,增加量由本条指令长度决定,可能是1、2或3,以指向下一条指令的起始地址,保证指令顺序执行。
2基于单片机对模拟电梯控制系统方案制定
2.1方案提出
图1单片机控制系统结构
图2PLC控制的系统结构图
方案一:
利用单片机AT89C52来控制楼层间电梯的升降以达到课程设计所要实现的要求。
方案二:
利用PLC来控制楼层间电梯的升降以达到课程设计所要实现的要求。
2.2方案比较
方案一是利用单片机AT89C52来控制模拟电梯的升降而方案二是利用PLC来控制模拟电梯的升降,两个方案在控制中难易程度基本相同。
方案二在实际应用中比较昂贵成本较高而方案一就比较经济,为了体现经济适用的构想,所以我才用方案一用单片机AT89C52来完成设计要求。
2.3方案论证
利用Proteus分别对两个方案进行电路画图同时分别利用KeiluVision2来编写程序已达到要实现的要求,通过对比两个方案在实现课程设计要求的可行性实际情况的比较看AT89C52的性能更好。
2.4方案选择
通过方案的比较以及方案的论证可以发现方案二比方案一更加的优越,更能过实现所要达到的目的,综合以上各点选择方案二来实现该课程设计。
3基于单片机对模拟电梯控制系统方案设计
3.1各单元模块功能介绍及电路设计
(1)时钟电路
图3时钟电路图
单片机的时钟电路有振荡电路和分频电路组成。
其中振荡电路由反相器以及并联外接的石英晶体和电容构成,用于产生振荡脉冲。
而分频电路则用于把振荡脉冲分频,以得到所需要的时钟信号。
AT89C52单片机各功能部件的运行都是以时钟控制信号为基准,有条不紊地一拍一拍地工作,因此时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
AT89C52单片机电路中的电容C1和C2典型值通常选择为30pF。
晶振的频率越高则系统的时钟频率也越高,单片机的运行速度也越快。
但反过来运行速度越快对内存的速度要求就越高,对印刷电路板的工艺要求也越高,即要求产生的寄生电容要小,晶振和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好的保证振荡器稳定、可靠的工作。
基于以上本设计我们考虑选择频率为12MHz的晶振,当振荡脉冲频率为12MHz时,一个机器周期为1us[2]。
(2)复位电路
图4复位电路图
复位是单片机的初始化操作,程序给单片机的复位引脚RST加大于2个机器周期(即24个时钟振荡周期)的高电平就可使单片机复位。
AT89C52的复位是由外部的复位电路来实现的。
复位电路通常采用上电复位和手动复位两种方式,手动复位有电平方式和脉冲方式两种,我们采用了手动复位为电平方式的复位。
如图4所示,我们通过RST端经由电阻与电源VCC接通而实现,当按键按下时,RST端为高电平复位。
当时钟频率选用12MHz时,C1取10uF,R1取10KΩ时,电容C1充放电时间τ=R1*C1=0.1s>2us(2个机器周期)[2]。
(3)中断电路
各中断的优先级(由高到低排列):
外部0中断、定时器T0中断、外部1中断、定时器T1中断、串行发送中断、串行接收中断、定时器T2中断。
图5中断电路图
中断电路如上图5所示。
图中外部0中断与74LS21与门相接,低电平有效,所以当单片机接电源后,P1.0~P1.3引脚此时为高电平,当任一按键按下后,相应的中断输入口直接与地相接,高电平变为低电平,外部0中断立即响应,单片机系统进入中断控制子程序系统,在中断服务子程序中做出相应的执行指令[2]。
(4)数码管显示模块
LED是LightEmitingDiode(发光二极管)的缩写,发光二极管是可以将电信号转换为光信号的电致发光器件。
由条形发光二极管组成“8”字形的LED显示器,也称数码管。
通过数码管中发光二极管的亮暗组合,可以显示多种数字,字母以及其他符号。
数码管有七段数码管和八段数码管之分。
七段数码管由7个发光二极管组成,而八段数码管则是在七段发光二极管的基础上在再加一个圆点型发光二级管,用于显示小数点,本设计采用七段数码管。
数码管能够被广泛使用,与其具有的许多特点是分不开的,其中包括:
1)发光响应快,亮度强,高频特性好,而且随着材料的不同,数码管能发出红色,黄色,绿色,蓝色,橙色等多种颜色的光;
2)机械性能好,体积小,重量轻,价格低廉,能与CMOS和TTL电路配合使用,使用寿命长,可达105~106h;
3)工作电压低,驱动电流适中,每段工作电流为5~10mA。
图6七段数码管
七段数码管外形如图6所示,即左边的7个引脚跟单片机P0口相接,下边的引脚连接地[2]。
(5)按钮控制电路模块
图7电梯不同楼层的按钮
如图7所示,按键显示电路模块包括电梯内部的按钮和每层楼的上下按钮,这些按钮一端与地相接,一端又与单片机和与门74LS21相接,外部0中断低电平有效,这样可以实现模拟按键的自如操作[2]。
3.2电路参数的计算及元器件的选择
(1)电动机的选择
我们选用三相异步电动机来做电梯的动力装置,因为国产Y系列的电动机具有高效、节能、特性好及低噪声等优点,我们将选用国内最先进的Y系列异步电动机。
这里我们选用Y100L24三相异步电动机,因为它还具有性能好、寿命长、可靠性高、维护方便、启动转矩大等优点,其功能参数为额定电压380V,额定频率50HZ,额定功率3000W,额定转速1400转/分[4]。
(2)AT89C52单片机
本设计采用的是AT89C52单片机,AT89C52是一个低电压,高性能CMOS8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合[1]。
3.3特殊器件的介绍
(1)AT89C52单片机
AT89C52是一个低电压,高性能CMOS8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合[1]。
外形及引脚排列如图8所示:
图8AT89C52单片机外形及引脚排列
(2)数码管
LED是LightEmitingDiode(发光二极管)的缩写,发光二极管是可以将电信号转换为光信号的电致发光器件。
由条形发光二极管组成“8”字形的LED显示器,也称数码管。
数码管能够被广泛使用,与其具有的许多特点是分不开的,其中包括:
1)发光响应快,亮度强,高频特性好,而且随着材料的不同,数码管能发出红色,黄色,绿色,蓝色,橙色等多种颜色的光;
2)机械性能好,体积小,重量轻,价格低廉,能与CMOS和TTL电路配合使用,使用寿命长,可达105~106h;
3)工作电压低,驱动电流适中,每段工作电流为5~10mA。
图9七段数码管
(3)Y100L24三相异步电动机
具有性能好、寿命长、可靠性高、维护方便、启动转矩大等优点,其功能参数为额定电压380V,额定频率50HZ,额定功率3000W,额定转速1400转/分[4][5]。
3.4电梯控制系统整体电路图
图10系统整体电路图
4基于单片机对模拟电梯控制系统仿真和调试
4.1仿真软件介绍
(1)概述
Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,在编译方面,它也支持IAR、Keil和MPLAB等多种编译。
(2)功能特点
Protues软件具有其它EDA工具软件(例:
multisim)的功能。
这些功能是:
原理布图、PCB自动或人工布线、SPICE电路仿真。
具体特点如下:
1)互动的电路仿真。
2)仿真处理器及其外围电路。
Protues建立了完备的电子设计开发环境。
(3)Protues提供了丰富的资源
1)Protues可以提供仿真元器件资源和仪表资源。
2)除了现实存在的仪器外,Protues还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,这些虚拟仪器仪表具有理想的参数指标,这些都尽可能减少了仪器对测量结果的影响。
3)Protues可提供的调试手段Protues提供了比较丰富的测试信号用于电路的测试。
这些测试信号包括模拟信号和数字信号[3]。
(4)软件仿真
1)打开Keil程序,执行菜单命令“Project”→“NewProject”创建“模拟电梯的控制”项目,并选择单片机型号为AT89C52。
2)执行菜单命令“File”→“New”创建文件,输入C语言源程序(见附录程序源代码),保存为“模拟电梯的控制.C”。
在“Project”栏的File项目管理窗口中右击文件组,选择“AddFiletoGroup`SourceGroup1`”将源程序“模拟电梯的控制.C”添加到项目中。
3)执行菜单命令“Project”→“OptionsforTarget`Target1`”,在弹出的对话框中选择“Output”选项卡,选中“GreateHEXFile”。
在“Debug”选项卡中,选中“Use:
ProteusVSMSimulator”。
4)执行菜单命令“Project”→“BuildTarget”,编译源程序。
如果编译成功,则在“OutputWindow”窗口中显示没有错误,并创建了“模拟电梯的控制.HEX”文件。
5)在已绘制好的原理图的ProteusISIS菜单栏中,执行菜单命令“Debug”→“UseRemoteDebugMonitor”将该项选中,使Proteus与Keil真正连接起来,使它们联合调试。
6)在Keil中执行菜单命令“Debug”→“Start∕StopDebugSession”,进入Keil调试环境。
同时,在ProteusISIS窗口中可看到Proteus也进入了程序调试状态。
我们就会看到电路在要求的情况下进行工作[3]。
4.2系统仿真实现
本设计程序流程图主要包括主程序流程图、启动电梯子程序流程图。
图11主程序流程图
图12启动电梯子程序流程图
4.3系统测试
图13电梯默认停在一楼
功能展示:
如上图13所示,电梯没有其他响应时,默认停在一楼,数码管显示1楼。
此时各内外按键接地的一侧全部为低电平,接单片和74LS21与门一侧全部为高电平,一旦按钮按下,凡是按键所接的引脚全部为低电平,此时外部0中断低电平有效,外部0中断立即响应。
当定时器0中断响应后,开始计时并向电动机发送PWM脉冲信号,经驱动器驱动后,电动机就会牵引电梯做上升或者下降运动,数码管收到单片机的控制信号后就会显示楼层的同步变化,相应的上升、下降指示灯会有所指示。
图14电梯处于上行中,经过四楼,上行指示灯亮
功能展示:
如上图14所示,电梯在四楼及以上有响应,经过三楼,上升指示灯亮。
按键按下后,外部0中断立即响应,去执行外部0中断服务子程序。
当定时器T0开始计数时,并向电动机发送PWM脉冲信号,经驱动器驱动后,此时电机正转,就会牵引电梯做上升运动,电梯经过四楼,数码管同步显示4楼,上升指示灯亮,下降指示灯灭。
图15电梯处于下行中,经过五楼,下行指示灯亮
功能展示:
如上图15所示,电梯可能没有响应,在四楼以上停了5s就返回一楼,或者是在四楼以下有响应,执行外部0中断服务子程序。
当定时器T0开始计数时,并向电动机发送PWM脉冲信号,经驱动器驱动后,此时电机反转,就会牵引电梯做下降运动,电梯下行,经过五楼,数码管同步显示5楼,上升指示灯灭,下降指示灯亮。
4.4数据分析
通过对比系统的调试结果发现与设计要求完全吻合,这就说明本设计是成功的。
5总结
5.1设计小结
本设计是利用单片机AT89C52来实现对电梯的模拟控制,通过数码管显示电梯到达的楼层数,用LED显示电梯是在上行还是下行,同时当电梯无人使用时就会自动停在一楼。
通过精心的设计该实验达到了预期的要求。
本次设计是对传统设计电梯的部分改进,可以降低电梯的设计成本,实现楼层快速通行的模拟控制。
另外由于此次设计实现的功能简单,简化处理了一些实际情况,没有去考虑这种电梯在实际应用中的故障问题,及一些更智能的硬件与软件的安装与调试
5.2收获体会
此次设计不仅仅是一个硬件电路设计和程序编写的过程,更重要的是实际问题的分析和设计阶段的努力。
我们将充分利用单片机开发上的灵活、快速的特点,来实现我们自己智能控制的设计。
通过本次课程设计,使我认识到作为科技人员,重要的是思维缜密,知识经验积累深厚,坚强的意志,同时还要注重团队精神。
一个人的能力是有限的,但是一群人的能力是无限的,在以后的工作和学习中,要勤奋踏实,善于思考,才能在竞争激烈的社会中提升自我的实用价值。
5.3展望
由于时间紧迫,本人能力有限,还有许多功能可以在此基础上进行拓展,例如可以扩展单片机增加智能识别系统,增加电梯内部的温度控制、增加单片机的故障预警等一些智能控制系统。
随着科技与经济的深入发展,单片机技术的不断进步,以后的电梯控制系统将会越来越智能化,这对提升人们的生活质量、生活的幸福指数有着深远的意义
6参考文献
[1]谢维成等.单片机原理与应用及C51程序设计(第2版).清华大学出版社.2009
[2]彭伟.单片机C语言程序设计实训100例—基于8051+Proteus仿真[M].电子工业出版社,2009
[3]侯玉宝.基于Proteus的51系列单片机设计与仿真.电子工业出版社.2008
[4]唐介.电机与拖动(第二版)[M].高等教育出版社,2009
[5]彭鸿才.电机原理及拖动[M].机械工业出版社,2001
7附录
系统主要功能展示图
图17当电梯无人呼叫时默认停在一楼
图18当电梯上行时数码管显示电梯的楼层数并且上行指示灯亮
图19当电梯下行时数码管显示电梯的楼层数并且下行指示灯亮
器件清单
元件名称
所属类
所属子类
RESPACK-8
Resistors
ResisitorPacks
BUTTON
Switches&Relays
Switches
AT89C52
MicroprocessorICs
8051Family
MOTOR-BLDCM
Electromechanical
ULN2003A
AnalogICs
Miscellaneous
7SEG-COM-CAT-BLUE
Optoelectronics
7-SegmentDisplays
LED-GREEN
LED-YELLOW
74LS21
程序代码
#include
#defineMAXFLOOR6
unsignedcharcodeLED_CODES[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};
sbitF6D=P1^0;
sbitF1U=P1^1;
sbitF2D=P1^2;
sbitF2U=P1^3;
sbitF3D=P1^4;
sbitF3U=P1^5;
sbitF4D=P1^6;
sbitF4U=P1^7;
sbitF5D=P3^0;
sbitF5U=P3^1;
sbitF1=P2^0;
sbitF2=P3^3;
sbitF3=P3^4;
sbitF4=P3^5;
sbitF5=P2^1;
sbitF6=P2^2;
sbitledu=P3^7;
sbitledd=P3^6;
sbitopen=P2^3;
sbitclose=P0^7;
sbita1=P2^4;
sbita2=P2^5;
sbita3=P2^6;
sbita4=P2^7;
bitdir=1,stop=0;
unsignedcharnf=1;
unsignedcharcf=1;
unsignedchardf;
unsignedchartf;
unsignedcharflag,count=0;//flag=1
unsignedinttimer1=0,timer2=0;
unsignedcharcall_floor[7]={0,0,0,0,0,0,0};
voidselect_next();
voidstep(bitdir);
voiddelay(unsignedintz);
voidmain(void)
{P0=LED_CODES[1];
TH0=0x3C;
TL0=0xB0;
TMOD=0x01;
ET0=1;
EA=1;
EX0=1;
IT0=1;
while
(1)
{if(!
flag&&!
stop)
{select_next();
step(dir);
}
elseif(stop)
{timer2=0;
TR0=1;
while(timer2<100&&stop);
TR0=0;
timer2=0;
stop=0;}
}
}
voidselect_next()
{chari;
if(nf==MAXFLOOR)
{
dir=0;
}
elseif(nf==1)
{
dir=1;
}
if(dir==0)
{
if(call_floor[nf]==1)
{call_floor[nf]=0;
stop=1;
return;
}
for(i=nf-1;i>=1;i--)
if(call_floor[i])
{cf=i;return;}
dir=1;
for(i=nf+1;i<=MAXFLOOR;i++)
if(call_floor[i])
{cf=i;return;}
dir=0;
cf=1;
}
if(call_floor[nf]==1)
{
call_floor[nf]=0;
stop=1;
return;
}
for(i=nf+1;i<=MAXFLOOR;i++)
if(call_floor[i])
{cf=i;return;}
if(i==7)
{dir=0;
}
}
voidstep(bitdir)
{
if(cf==nf)
return;
elseif(!
flag)
{flag=1;
delay(50);
if(dir==1)
{ledu=0;
ledd=1;
}
else
{ledd=0;
ledu=1;
}
timer1=0;
TR0=1;
}
}
voiddelay(unsignedintz)
{
unsignedintx,y;
for(x=z;x>0;x--)
{
for(y=125;y>0;y--)
;
}
}
voidtime0_int()interrupt1
{
TH0=0x3C;
TL0=0xB0;
timer1++;
timer2++;
if(flag)
{
if(timer1==20)
{timer1=0;
if(dir)
nf++;
else
nf--;
call_floor[nf]=0;
flag=0;
TR0=0;
P0=LED_CODES[nf];
if(cf==nf)
{TR0=0;
ledu=ledd=1;
stop=1;
return;
}
}
}
}
voidint0()interrupt0
{if(F6D==0)
call_floor[6]=1;
elseif(F1U==0)
call_floor[1]=1;
elseif(F2D==0||F2U==0)
call_floor[2]=1;
elseif(F3D==0||F3U==0)
call_floor[3]=1;
elseif(F4D==0||F4U==0)
call_floor[4