基于单片机电梯控制系统设计完整版毕业设计.docx
《基于单片机电梯控制系统设计完整版毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机电梯控制系统设计完整版毕业设计.docx(32页珍藏版)》请在冰豆网上搜索。
基于单片机电梯控制系统设计完整版毕业设计
《基础强化训练》报告
题目:
电梯控制系统电路印制板图的设计
专业班级:
电子科学与技术0801班
学生姓名:
金才
指导教师:
葛华
武汉理工大学信息工程学院
2010年7月15日
基础强化训练任务书
学生姓名:
金才专业班级:
电子0801
指导教师:
葛华工作单位:
信息工程学院
题目:
电梯控制系统电路印制板图的设计
一、训练目的
主要目的就是对学生进行基础课程、基本技能、基本动手能力的强化训练,提高学生的基础理论知识、基本动手能力,提高人才培养的基本素质。
二、训练内容和要求
1、基础课程和基本技能强化训练
(1)设计一个电梯控制系统电路;
(2)对所设计电路的基本原理进行分析;
2、文献检索与利用、论文撰写规范强化训练
要求学生掌握基本的文献检索方法,科学查找和利用文献资料,同时要求学生获得正确地撰写论文的基本能力,其中包括基本格式、基本排版技巧和文献参考资料的写法、公式编排、图表规范制作、中英文摘要的写法等训练。
3、基本动手能力和知识应用能力强化训练
(1)学习PROTEL软件;
(2)绘制电路的原理图和PCB版图,要求图纸绘制清晰、布线合理、符合绘图规范;
4、查阅至少5篇参考文献,按《武汉理工大学课程设计工作规范》要求撰写基础强化训练报告书,全文用A4纸打印。
三、初始条件
计算机;MicrosoftOfficeWord软件;PROTEL软件
四、时间安排
1、20010年7月12日集中,作基础强化训练具体实施计划与报告格式要求的说明;学生查阅相关资料,学习电路的工作原理。
2、2010年7月12日,电路设计与分析。
3、2010年7月13日至2010年7月15日,相关电路原理图和PCB版图的绘制。
4、2010年7月16日上交基础强化训练成果及报告,进行答辩。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
本文介绍了一种采用单片AT89S52芯片进行电梯控制系统的设计方法,主要阐述如何使用单片机进行编程来实现电子设计的方法,利用单片机编程实现功能,简洁而又多变的设计方法,缩短了研发周期,同时使电梯控制系统体积更小功能更强大。
本设计实现了电梯控制系统所需的一些基本功能,能通过方向按键选择方向,能通过数字按键选择楼层,数码管显示实时楼层数,点阵显示实时方向,电机控制使电梯箱能上下运动。
原理图和PCB部分采用protel99se专业软件来设计,实现将设计产品化。
本次设计更注重了把一些新的思路加入到设计中。
主要包括采用了AT89S52芯片,使用C语言进行编程,使其具有了更强的移植性,更加利于产品升级。
关键词:
AT89S52;电梯控制系统;protel99se;C语言
Abstract
Thispaperintroducesakindofsingle-chipAT89S52chipsforelevatorcontrolsystemdesignmethod,thispaperdiscusseshowtousemicrocontrollerprogramtorealizeelectronicdesignmethod,themicrocontrollerprogrammingfunction,conciseandchangefuldesignmethod,shortenthedevelopmentcycle,andmaketheelevatorcontrolsystemsmallermorepowerful.Thedesignandimplementationoftheelevatorcontrolsystemforsomebasicfunction,canchoosedirection,keydirectionbydigitalkeychoicefloor,digitaltubedisplayreal-timeseveralfloors,dotmatrixdisplayreal-timedirection,motorcontrolboxcanmakeupelevator.SchematicdiagramandPCBprotel99separtadoptsprofessionalsoftwaretodesignandrealizethedesignprod.Thisdesignhasputmoreattentiontosomenewideastojoininthedesign.MainlyincludesusingClanguage,anduseAT89S52chips,whichhasastronger,moreconducivetoupgradeportability.
Keywords:
AT89S52devices,Theelevatorcontrolsystem,Protel99se,Clanguage
1绪论
人类社会已经进入信息化时代,信息社会的发展离不开电子产品的进步。
单片机的出现使人类实现利用编程来代替复杂的硬件搭建电路,它靠程序运行,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。
一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!
但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!
只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!
单片机应用的主要领域非常广,智能化家用电器、办公自动化设备商业营销设备、工业自动化控制、智能化仪表、智能化通信产品、汽车电子产品、航空航天系统和国防军事、尖端武器等领域。
单片机应用的意义不仅在于它的广阔范围及所带来的经济效益,更重要的意义在于,单片机的应用从根本上改变了控制系统传统的设计思想和设计方法。
以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。
以前自动控制中的PID调节,现在可以用单片机实现具有智能化的数字计算控制、模糊控制和自适应控制。
这种以软件取代硬件并能提高系统性能的控制技术称为微控技术。
随着单片机应用的推广,微控制技术将不断发展完善。
电路的集成化不仅对硬件电路的设计相关,与电路的布局同样相关。
印刷版的出现使得电路产品更加规范,体积更小。
Protel99se是一款专业的绘制电路及印刷版的软件,近年来的不断升级使得其功能更加完善,出现了altiumdesigner、proteldxp等升级版本。
2设计内容及要求
2.1设计目的
(1)学会单片机的使用来实现智能控制。
(2)熟练掌握keil软件应用和C语言编程在单片机中的应用。
(3)学会应用protel99se软件绘制原理图和PCB版图。
(4)掌握电梯控制系统的主要功能与单片机实现的方法。
2.2设计任务及要求
(1)设计出一个电梯控制系统。
(2)运用keil软件编程。
(3)运用protel99se绘制原理图。
(4)运用protel99se绘制PCB版图。
3设计原理及单元模块
3.1设计原理及方法
根据层次化设计理论,该设计问题自顶向下
可分为单片机最小系统模块、显示模块、开关控制模块、电机驱动模块、报警模块,其系统框图如图所示。
图3.1电梯控制系统框图
本次设计是采用开关控制实现上下到指定楼层,通过电机转动带动电梯箱上下运动,到达指定楼层。
显示模块是显示此时的楼层,报警模块具有错误操作报警以及楼层到达的提示功能。
3.2单元模块设计
3.2.1单片机最小系统模块
图3.2.1单片机最小系统
单片机最小系统包括主芯片,复位电路和晶振脉冲产生电路。
X1为12MHz晶振,与30Pf电容并联,产生1us的脉冲信号作为单片机的“心脏”部分。
复位电路是开关与10uf电容并联组成的上电自动复位电路,在RST端为高电平时单片机清零,也即开关按下会产生清零信号。
RP1为排阻,作为P0端的上拉电阻,接此原因是P0端口是由OC门组成。
U1为数据输入端口,通过电脑编程能将程序通过此接口烧录入单片机中。
3.2.2开关控制模块
图3.2.2开关控制模块
开关控制模块采用4*4矩阵形式电路可以减少单片机接口的使用。
写键盘代码时运用的是逐行扫描判断键值按下与否。
编程如下:
ucharkey_scan(void)
{ucharscode,recode;
P1=0xf0;
if((P1&0xf0)!
=0xf0)
{delay1
(2);
if((P1&0xf0)!
=0xf0)//有键按下
{scode=0xfe;//辅助变量,设定行
while((scode&0x10)!
=0)
{P1=scode;//将某一行设为0,从而判断是否为该行
if((P1&0xf0)!
=0xf0)
{recode=P1&0xf0;//列码
scode=scode&0xf0;//行码
return(scode+recode);//按键坐标}
elsescode=(scode<<1)|0x01;//下一行判断
}}}
return0;}
3.2.3电机驱动模块
图3.2.3电机驱动模块
电机驱动采用L297环形计数分配器和L298大功率步进电机驱动器完成。
本次设计采用步进电机,目的是方便智能控制,可实现调速功能。
电机使用的是二相步进电机,由于仅用来实验,所以电机采用5V电源供电即可,实际中必须使用大电压来供电方能带动重物(人等)。
环形分配器L297引脚图如图3.2.3-1:
图3.2.3-1L97引脚图
L297功能介绍:
SYNC为斩波器输出端,多个L297一起用时用此端口连接在一起共用一组时钟振荡;
HPME端为集电极开路输出端;
A~D为四相输入端;
INIH1,INIH2为控制A~D相驱动,此引脚为低电平时A~D相禁止输入;
ENABLE端为使能输入端,低电平阻止电机驱动;
RESET为复位端;
HALF/FULL为半角全角控制端,高电平时选择半步输入;
CLOCK为时钟输入端,控制电机速度;
CW/CCW为方向控制端;
OSC为斩波器频率输入端;
SEN1和SEN2为电流检测端。
大功率步进电机驱动器L298引脚图如图3.2.3-2:
图3.2.3-2L298引脚图
L298功能介绍:
SENA和SENB为电流检测端;
IN1~IN4为A~D相输入控制端;
ENA和ENB为使能输入端,低电平禁止输入;
OUT1~OUT4为输出端。
3.2.4显示模块
图3.2.4显示模块
由于点阵和双位数码管耗电流较大,不能直接连接单片机IO口驱动其正常工作,所以加上锁存器74HC573和显示译码器CD4511驱动。
其中利用CD4511模块的另一作用是节省接口,因为本次设计外围电路较多,单片机接口不够,使用此驱动是必要的。
锁存器74HC573引脚图如图3.2.4-1:
图3.2.4-174HC573引脚图
74HC573功能介绍:
D0~D7为输入端;
Q0~Q7为输出端;
OEN为输出使能端,当其输入为高电平时输出关断,输入为低电平时输出正常;
DEN为输出输入使能端,当此端口为高电平时,输出跟随D0~D7,当此端口为低电平时,输出保持上一时刻的状态;
显示译码器CD4511引脚图如图3.2.4-2:
图3.2.4-2CD4511引脚图
CD4511功能介绍:
A~D为输入端;
QA~QG为输出端;
LT为试灯输入端,当此端口为低电平时,无论其他的状态如何,始终输出数字8,作为判断数码管的好坏端口使用;
LE/STB为灭灯输入端,当此端口输入低电平时数码管灭,输入高电平时数码管正常显示;
BI为动态消零信号输入端,当此端口输入低电平时且LT为高电平时,当输入0000时,输出0熄;
点阵的使用介绍:
点阵是8*8位的,相当于由64个LED组成,8个阳极控制端口,8个阴极控制端口;
数码管的使用介绍:
数码管是采用两位共阴极数码管,通过对a~g的编码来显示数字。
3.2.5报警模块
图3.2.5报警模块
本设计采用8550三极管驱动蜂鸣器。
当PO口送高电平时,三极管处于截止状态,三极管Vce电压约为VCC,蜂鸣器只有很少电流流过,没法驱动其发声。
当PO口送低电平时,三极管处于饱和导通状态,三极管Vce约为0.3V,蜂鸣器有较大电流流过,能驱动其报警发声。
3.2.6电路总图
图3.2.6电路总图
由于protel99se内部元件不齐全,本次设计全部采用手工绘制元件库以达到训练的最佳效果。
4软件模块
图4程序流程图
注:
详细程序见附录二
5PCB印刷版图模块
5.1protel99se功能介绍
Protel99SE是应用于Windows9X/2000/NT操作系统下的EDA设计软件,采用设计库管理模式,可以进行联网设计,具有很强的数据交换能力和开放性及3D模拟功能,是一个32位的设计软件,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计32个信号层,16个电源--地层和16个机加工层。
5.2PCB版图
图5.2.1非镀铜版图
在生成PCB之前,要进行元件的封装。
由于protel99se内部封装不齐全,本次设计全部采用手工绘制封装库以达到最佳训练效果。
PCB布线规则是尽量使正面走线和反面走线成90度角,以达到最小干扰。
图5.2.2镀铜顶层图样
图5.2.3镀铜底层图样
图5.3.43D版图正面
图5.3.53D版图背面
6心得体会
通过此次电梯控制系统的设计,我收获颇丰。
设计的核心内容就是利用单片机C51的编程来实现控制外围各电路的运行以及protel99se绘制PCB版图。
通过本次设计,我熟练掌握了程控系统设计的一般步骤,熟练掌握了protel99se软件的用法,并对编程能力起到了一定的提高作用。
在绘制PCB的过程中,我学习了如何制作元件库,如何制作封装库,如何调用原始封装。
在画PCB版图时,通过手工布线,练习了PCB布局,掌握了PCB绘制的一般规则,同时掌握了如何对PCB版镀铜,通过3D模拟图查看实物最终模型。
感谢学校给我们这次机会,锻炼了我们的动手能力及运用专业软件的能力。
通过这次课设让我明白了理论和实际操作之间差距,而且也让我很明确得意识到自己在数电上有很多的知识漏洞,以后应该多钻研一下。
参考文献
[1]李朝青.单片机通讯技术与工程实践.北京:
航空航天大学出版,2007.2
[2]李群芳.单片机原理接口与应用.北京:
清华大学出版社,2005.6
[3]杨志亮.Protel99SE电路原理图设计技术.西安:
西北工业大学出版社,2002.2
[4]马忠梅.单片机C语言应用程序设计.北京:
航空航天大学出版社,1997.10
[5]谢自美.电子线路设计.武汉:
华中科技大学出版社,2000.5
[6]中国电器工业协会微电机分会.微特电机应用手册.福建:
福建科技出版社,2010.4
[7]胡烨.Protel99SE电路设计与仿真教程.北京:
机械工业出版社,2005.5
附录一
元件清单
附录二
C语言代码
#include"reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharDZ1[]={0x08,0x14,0x2a,0x08,0x08,0x08};
ucharDZ2[]={0xbf,0xdf,0xef,0xf7,0xfd,0xfb};
ucharDZ3[]={0x08,0x08,0x08,0x2a,0x14,0x08};
ucharshuma[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
ucharLC[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xedb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//楼层编码
ucharkey,dir,floor,zancun,s,x,p2;
sbitDA=P0^0;
sbitDB=P0^1;
sbitDC=P0^2;
sbitDD=P0^3;
sbitw1=P0^4;//数码管位选1
sbitw2=P0^5;//数码管位选2
sbitwa=P0^6;//点阵阳极使能
sbitwb=P0^7;//点阵阴极使能
sbitEN=P3^0;//电机使能
sbitCW=P3^1;//方向控制
sbitCLOCK=P3^2;//速度控制
sbitred=P3^3;//上键显示
sbitgreen=P3^4;//下键显示
sbitbeep=P3^5;//报警
voiddelay1(ucharz)
{
uchari,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
voiddelay2(ucharz)
{
uchari,j;
for(i=z;i>0;i--)
{
if(key==0)//减短代码运行时间,使用更多时间扫描键盘
break;
else
for(j=110;j>0;j--);
}
}
ucharkey_scan(void)
{
ucharscode,recode;
P1=0xf0;
if((P1&0xf0)!
=0xf0)
{
delay1
(2);
if((P1&0xf0)!
=0xf0)//有键按下
{
scode=0xfe;//辅助变量,设定行
while((scode&0x10)!
=0)
{
P1=scode;//将某一行设为0,从而判断是否为该行
if((P1&0xf0)!
=0xf0)
{
recode=P1&0xf0;//列码
scode=scode&0x0f;//行码
return(scode+recode);//按键坐标
}
else
scode=(scode<<1)|0x01;//下一行判断
}
}
}
return0;
}
voiddisplay1(void)//上箭头显示
{
uchari,j;
for(i=0;i<1;i++)
{
wa=1;
P2=DZ1[i];
for(j=500;j>0;j--);
wa=0;
wb=1;
P2=DZ2[i];
for(j=500;j>0;j--);
wb=0;
}
}
voiddisplay2(void)//下箭头显示
{
uchari,j;
for(i=0;i<1;i++)
{
wa=1;
P2=DZ3[i];
for(j=500;j>0;j--);
wa=0;
wb=1;
P2=DZ2[i];
for(j=500;j>0;j--);
wb=0;
}
}
voidshuxian(ucharz)//数码管显示
{
uchartemp;
w1=0;
p0=shuma[z/10];
temp=P0;
P0=p0|temp;
w1=1;
w2=0;
p0=shuma[z%10];
temp=P0;
P0=p0|temp;
w2=1;
}
voidinit(void)//初始化
{
dir=0;
w1=1;
w2=1;
wa=0;
wb=0;
floor=0;
zancun=1;
beep=1;
EN=0;
EA=1;
ET1=1;//T1中断允许
TMOD=0x10;//T1的8位计数
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
voidmain(void)
{
init();
while
(1)
{
key=key_scan();
if(key!
=0)
{
delay2(10);
if(key!
=0)
{
TR1=1;
switch(key)
{
caseLC[14]:
dir=1;//按键储存上键值
break;
caseLC[15]:
dir=2;//按键储存下键值
break;
defaultbreak;
}
if(dir==1)
{
shuxian(s);
display1();
if((zancun-floor)>=0)
{
switch(key)
{
caseLC[0]:
floor=1;
break;
caseLC[1]:
floor=2;
break;
caseLC[2]:
floor=3;
break;
caseLC[3]:
floor=4;
break;
caseLC[4]:
floor=5;
break;
caseLC[5]:
floor=6;
break;
caseLC[6]:
floor=7;
break;
caseLC[7]:
floor=8;
break;
caseLC[8]:
floor=9;
break;
caseLC[9]:
floor=10;
break;
caseLC[10]:
floor=11;
break;
caseLC[11]:
floor=12;
break;
caseLC[12]:
floor=13;
break;
caseLC[13]:
floor=14;
break;