基于单片机的电梯控制模型1.docx
《基于单片机的电梯控制模型1.docx》由会员分享,可在线阅读,更多相关《基于单片机的电梯控制模型1.docx(22页珍藏版)》请在冰点文库上搜索。
![基于单片机的电梯控制模型1.docx](https://file1.bingdoc.com/fileroot1/2023-6/4/f025de9c-34db-4d87-b0af-97b6751b1adf/f025de9c-34db-4d87-b0af-97b6751b1adf1.gif)
基于单片机的电梯控制模型1
电梯控制模型
目 录
目 录2
[摘要]3
[关键词]3
[Abstract]3
[Keywords]3
一、设计任务与要求4
二、总体方案设计与论证4
1、控制器选择4
2、动力选择4
三、硬件电路设计5
1、整体电路设计5
2、对电机的控制设计5
3、报警模块设计7
4、传感器模块设计7
5、A/D转换模块设计9
四、软件设计10
1、整个系统程序设计思路10
2、电机控制部分11
3、显示及报警部分13
附加:
防冲顶和防撞底14
五、实际测试及结果分析14
六、结束语14
参考文献14
附录15
[摘要]:
本系统采用两片单片机(89C52)作为内外招信号的检测和控制核心。
内外招使用按键按下与否带来的电平的改变来控制对应的单片机输入或输出口工作。
楼层检测使用反射式红外传感器;轿厢负载采用精密压力传感器;速度控制采用易控的步进电机外加微小误差转子;在竖井的侧面固定了轨道以防止轿厢的晃动。
基于这些完备而可靠的硬件设计,使用了一套独特的软件算法,实现了电机在运动和加速经及减速过程的精确控制。
[关键词]:
单片机;步进电机;A/D转换;555定时器;施密特触发器;传感器;C语言编程;流程图
[Abstract]:
Insideandoutsidethissystemusestwopieceofmonolithicintegratedcircuits(89C52)totakethemoveofsignalexaminationandthecontrolcore.Theinsideandoutsidemoveofusepressedkeypressesdownthelevelchangewhichornotbringstocontrolcorrespondingthemonolithicintegratedcircuitinputortheoutletwork.Floorexaminationusereflectiontypeinfraredsensor;Thesedantheaterboxloadusestheprecisepressuretransmitter;Thespeedcontroluseseasilytocontrolstep-by-stepstheelectricalmachineryinadditionlighterrorrotor;Fixedthetrackintheshaftsidetopreventthesedantheaterboxrocking.Basedonthesecompleteandreliablehardwaredesign,hasusedasetofuniquesoftwarealgorithm,hasrealizedtheelectricalmachineryinthemovementandtheaccelerationafterandthemoderatingprocessaccuracycontrol.
[Keywords]:
MCS-51.89C52.Step-by-stepstheelectricalmachinery;A/Dtransformation;555timers;Schmitttrigger;Sensor;Clanguageprogramming;Flowchart
一、设计任务与要求
电梯控制模型,示意图如下图所示。
基本要求:
(1)当某层有呼叫并有呼叫信号显示时,桥厢模型作相应的运动,并准确平层,平层的位置误差10mm。
要求平均每层运行时间不超过5秒,平层结束时给出提示信号。
(2)当有多层呼叫时,桥厢模型将按说明中的电梯模型运行规则作相应的运动,并依次在呼叫的楼层停留5秒。
(3)能自动记录、显示桥厢模型当前到达的楼层编号。
(4)要求桥厢模型在加载400克的条件下,从1层到5层和从5层到1层的往返时间相等,单程时间不超过12秒,往、返时间之差不大于1秒,并自动记录、显示运行时间。
二、总体方案设计与论证
1、控制器选择
本系统的系统板主要由MCS51系列单片机AT89C52组成。
AT89C52有8K字节的片内ROM、256字节的片内RAM、3个16位定时器和六个中断源,其有8K字节的ROM足够本系统中的编程部分。
此最小系统除了具有一般单片机最小系统的功能如地址锁存、输入输出控制外,另外它的主要特点是它的输出口部分接有液晶显示,可以数字显示各要输出的状态和数据,系统板的P1,P2,P3口经过三级管和发光二级管相接,可以显示各口线的实时工作状态。
2、动力选择
本设计用步进电机及其驱动器BY-2HB03M。
首先,步进电机具有良好的可控性:
起停迅速,控制简单,避免了惯性带来的误差,在低速情况下仍然具有良好的驱动力;其次,电机的负载满足承载一公斤左右的重量,符合要求;其三,步进电机性价比较高,更安全可靠。
故我们采用此步进电机和其配套的驱动器。
三、硬件电路设计
1、整体电路设计
当外部人为操作电梯的指令发出,经过A/D转换和系统板二的处理后发出信号到系统板一,系统板一通过指令来控制步进电机的工作从而带动轿厢的运动。
由于控制步进电机的程序比较复杂,故专门用一片系统板。
系统板二则负责按键的控制、LED、数码管的显示、电动机的转动、传感器经A/D转换后输出的信号的处理等等。
2、对电机的控制设计
由以上论证知,本部分设计采用MCS51-AT89C52单片机来完成,通过I/O口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片BY-2HB03M驱动步进电机。
BY-2HB03M驱动器具有恒流控制,极低的电源损耗,极高的开关效率,电机运行平稳、低振动、低噪音;驱动器的工作电压:
直流电压24~40V;驱动电流2.5A。
通过BY-2HB03M构成步进电机的驱动电路,电路图如下图1所示。
52的25-28口接BY-2HB03M的1-4输入端。
另外,用键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为2位单个数码管的显示驱动。
74LS164带锁存,使用串行接法可以节约I/O口资源。
其电路图如2图所示。
通过52的TXD和RXD口对CLK和DATA发送数据。
图2
3、报警模块设计
本方案采用555做成的多谐振荡器产生的方波信号来控制小功率的蜂鸣器工作,电路如图2.3.1所示。
工作原理:
当电梯未到达指定的楼层或未超重时,555的第4脚一直处于低电平状态,当到达指定楼层或因为负重过大而超重时,555的第四脚将转向高电平,此时振荡器开始工作,产生高频的方波,从而使蜂鸣器发声。
电路分析:
我们知道,只要将555定时器的Vi1和Vi2接在一起可以接成施密特触发器。
我们把施密特触发器的反相输出端经RC积分电路接回到它的输入端,就构成了多谐振荡器。
在电路的设计过程中,为了减轻555中的门G4的负载,我们特在电路中将TD与R1接成了一个反相器,它的输出与原输出在高低电平状态上完全相同。
将其输出经R2和C组成的积分电路接到施密特触发器的输入端。
详具体电路见图2.3.1。
由图分析计算可知此多谐振荡器的周期理论上为:
故其频率为:
4、传感器模块设计
1)重力传感器模块
重力传感器部分我们采用典型的压力测量电路,电路如图2.4.1示:
电路中,我们选择OP07作为仪用放大电路的放大器件,参数与通用运放NE5532比较如下:
共模抑制比(CMRR)
噪声电压
供电电压
OP07D
90~110
10.3
±3V~±18V
UA741CP
70
~
±7V~±36V
由于传感器输出信号是用于A/D采样,所以要求精度较高的放大器,而且输出信号的噪声电压在10mV以内,输出信号峰峰值在0~5V之间,通过对桥式传感电路的测试,放入500g的砝码,可以得到100mV的电压,放大400倍,即可用于A/D采样。
选用OP07D组成两极反相放大器。
第一级U10A,U10B,U11A组成仪用放大器。
第二级U11B为反相放大器,放大倍数为20倍。
C28,C31,C30是输出去耦,AN0为输出端,由于电路中积累了电荷,使得AN0电压变化缓慢,所以在AN0端接入R=10K的电阻作负载。
电路中的D5、D6组成限幅器,C7,C8,C2,C1是电源去耦电路。
电压放大倍数计算如下:
即整个电路的放大倍数约为400倍。
2)光传感器模块
我们在轿厢底部装置光传感器,用于检测轿厢是否到达指定的位置。
光传感器的选择,采用单光束反射取样式光电传感器ST278。
ST278特点有:
1,采用高发射功率红外光电二极管和高灵敏度光电晶体管组成;2,双光电晶体管,可用于检测被测物的运动方向;3,检测距离可调整范围大,近距离2mm可用;4,采用非接触检测方式。
ST278的参数如下:
我们把光电传感器固定在轿厢的底部,并在竖井的对应位置放置反光的薄板。
这样当轿厢到达我们定义的位置时,将会有光被反射回来,这样光电传感器将会接收到,并将其转换为低电平,再由电路传至单片机中,从而控制轿厢的制动。
5、A/D转换模块设计
芯片选择:
本系统主要有二个A/D转换模块,将传感器得到的信号转换为单片机可以处理的数字信号。
本系统的A/D转换我们选用的芯片为MAX191。
MAX191是12位低功率的转换器,它的平均转换时间为7.5~8.125us,即采样速率可以达到120K左右,而我们以前常用的A/D0809的平均转换时间只有90~115us,采样速率远小于MAX191。
另MAX191除了具有上述优点外,它自身带有触发脉冲,和状态位,可以进行状态查询,这些都是ADC0809所没有的性能,故我们选择MAX191作为本实验用的A/D转换器。
关于此A/D的转换部分,我们仍采用查表法编著程序。
转换波形如下:
四、软件设计
1、整个系统程序设计思路
电源打开时,电梯轿厢停靠在任意位置。
此时要判断是否有外招或内招,即判断是否应该工作。
若有,则电机即要开始转动到指定位置,期间要继续检测是否还有外招或内招。
若有,先判断是否在其工作的范围,若在其范围内,响应;若不在范围内,不响应。
期间光电信号一直检测,看是否到达目的的,当到达时,即可停止。
平层在停止的位置,一直等下一个内招或外招来临。
各个功能的软件部分具体思路和算法如下:
呼叫标志变量MB
轿厢在所在层变量DQ判断是否开门算法(mb&dq1)==dq1
判断是否上升算法(!
down)&&(dq1<((0x10-dq1)&mb))
判断是否下降算法(!
up)&&((mb=0))
单片机编程控制输出的程序部分见附录
2、电机控制部分
(1)轿厢运行部分:
我们知道,任何从静止开始的运动过程都要经过加速和减速的过程。
故我们在程序的设计过程中把电机的运行过程分为加速、匀速和减速三个阶段。
我们调节方波的频率大小来控制步进电机的转速,调节方波信号的个数来控制步进电机的转过的角度,达到控制轿厢移动高度。
整个电机的运行过程大致如图3.1.1所示:
(2)平层部分
平层过程由A、B两个部分控制:
A:
程序控制电机的步长
a)自学习阶段:
1)让电机从楼顶到楼底,再从楼底到楼顶来回运动几个回合,查询出竖井的高度和上下边界,记录入TABLE,方便后面使用。
2)让电机再来回运行几个回合,通过光耦查询出每层楼的高度和光耦所在的位置,记录入TABLE。
b)实际控制阶段:
在自学习阶段测试完整个竖井的高度和每层楼的高度后,将其数据记录入一个专用的表TABLE中。
实际程序执行时,程序自动查阅TABLE,找出所要转动的长度,再计算出步进电机要转动的圈数,然后再经过电机的驱动对电机控制。
C)程序对速度的设定:
在实际编程的过程中,我们通过设定每秒钟的脉冲数多少来控制电机的转速。
我们所用的电机平均转一周绳子所掠过的长度为6.05cm。
结合步进电机的特点,我们把加速过程设置15个速度跳变来达到加速的目的,15个速度跳变我们程序设置的时间分别为7800us,6000us,5400us,4800,4200us,3600us,3000us,2400us,2100us,1800us,1500us,1200us,900us,600us,500us,400us,350us,170us。
即每秒的脉冲数分别达到128个脉冲/S,167个脉冲/S,185个脉冲/S,218个脉冲/S,238个脉冲/S,278个脉冲/S,330个脉冲/S,417个脉冲/S,476个脉冲/S,556个脉冲/S,668个脉冲/S,833个脉冲/S,1110个脉冲/S,1670个脉冲/S,2000个脉冲/S,2500个脉冲/S,2860个脉冲/S,5880个脉冲/S。
这样整个加速时间就会达到46717us。
又我们在编程时把电机的转速设置为1转/400个脉冲,即0.0605m/400个脉冲。
综上,也即我们设定的是在467170个微秒的时间内电梯加速运行了6.05cm。
由公式
得此电梯设定的加速度为
。
电梯加速之后的匀速过程速度为加速过程的最大速度值,程序设定其为0.168m/s。
可得此电梯从底层到最高层一共耗时0.467+0.467+87.9/16.8=6.164s;单独运行一层楼所要的时间为:
0.467+0.467+7.9/16.8=1.404s。
而题目的要求为每层运行时间不超过5秒,单程运行时间不超过12秒。
我们设计的算法远优于题目要求的性能。
程序设计思路如下:
B:
光传感器接收到的信号经过处理后进行制动
我们在电梯内的轿厢底部装置单光束反射取样式光电传感器ST278,对平层进行控制,当轿厢到达后会有反射光使ST278的电平改变。
其具体工作原理详见光传感器模块。
平层过程工作如图3.1.2所示:
3、显示及报警部分
1)楼层显示
楼层显示部分命令由系统板一控制实现,由传感器的感应次数来对显示数字的变化进行控制。
另外,此部分加了锁存器,对显示的楼层数据进行锁存,以保证电梯显示指定的楼层。
2)电梯外部按键显示
由于此部分只要求每层只显示上下标志,所以我们采用一般的发光二级管。
发光二级管电路简单,易于控制。
此外,由于一楼和五楼只能分别上和下,故我们在一楼和五楼都只安装一个发光二级管。
3)超重报警
当重力传感器检测到超重时,经系统处理后会发出一个持续的高电平,使图2.3.1中的多谐振荡器工作,最终驱动蜂鸣器工作。
4)紧急报警
轿厢内设紧急报警按钮,当电梯突然发生故障使轿箱内的人被困时,可以通过按下紧急报警按钮,使紧急报警灯亮同时发出音响信号,由于这个部分要求电梯的任何运行状况下都要有效,为保险起见,我们将此作为一个独立的模块。
具体电路见附图,控制过程如下:
附加:
防冲顶和防撞底
我们在轿厢顶快接近竖井顶部和位置和轿厢底快接近竖井底部的位置也同样放置反光片,用于对电梯进行保护——防冲顶和防撞底。
当轿厢在超过规定的楼层内感应到光后,程序设定其马上制动。
具体电路和编著的程序和平层部分相差不大。
五、实际测试
略
六、结束语
首先感谢绵阳师院重视这个大学生电子设计竞赛,给我们这样一次珍贵的锻炼机会!
同时感谢各位老师对我们的信任,让我们参加此次大赛,也在此真心感谢我们院上各位老师在赛前对我们的悉心指导和培训!
该设计完成了题目基本部分和发挥部分内容,经理论检测运行效果良好,可达到预期目的。
通过本次竞赛,我们受益匪浅,终生难忘收益。
我们不仅完成了一件作品,巩固和拓展了我们的专业知识,而且大大提高了我们的创新精神,动手能力,团队协作和竞争意识,这些在今后的人生道路上都将是一笔宝贵的财富。
同时经过此系统的设计和制作,又提升了我对电子设计和制作的兴趣。
用单片机和可编程逻辑器件编著的程序结合可以使电路和设计非常简单;系统的功能也比较稳定且容易控制;软硬件的结合无疑是这几年并且是今后相当长一段时间内的主流,对于今后的电子设计与制作的发展前景,我们充满信心。
参考文献:
[1]张齐杜群贵著,《单片机应用系统设计技术》,电力工业出版社,2007.7
[2]童诗白华成英主编,《模拟电子技术基础第三版》,高等教育出版社,2006.12
[3]阎石主编,《数字电子技术基础》,高等教育出版社,2007.11
[4]谭浩强著,《C程序设计第三版》,清华大学出版社,2006.6
[5]潘永雄沙河著,《电子线路CAD实用教程》,西安电子科技大学出版社,2009.1
[6]李华主编,《MCS-5系列单片机实用接口技术》,北京航天航空出版社,2003.6
[7]陈杰黄鸿著,《传感器与检测技术》,高等教育出版社,2008.2
附录:
呼叫标志变量MB
轿厢在所在层变量DQ判断是否开门算法(mb&dq1)==dq1
判断是否上升算法(!
down)&&(dq1<((0x10-dq1)&mb))
判断是否下降算法(!
up)&&((mb=0))
#include"reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitP3_0=P3^0;
sbitP3_1=P3^1;
sbitP3_2=P3^2;
sbitP3_4=P3^4;
sbitP3_5=P3^5;
sbitP3_3=P3^3;
sbitP3_7=P3^7;
sbitP0_7=P0^7;
ucharmb=0,up=0,down=0,mbz=1,dq1=1;
voiddelay()
{
uintx,i;
for(i=0;i<6;i++)
for(x=0;x<15000;x++);
}
voidkm()
{
mbz=0;
P0=0x00;
delay();
P0=0x18;
delay();
P0=0x3c;
delay();
P0=0x7e;
delay();
P0=0xff;
}
voidgm()
{
mbz=1;
P0=0xff;
delay()
P0=0x7e;
delay();
P0=0x3c;
delay();
P0=0x18;
delay();
P0=0x00;
}
voidss()
{
dq1=dq1<<1;
P3_0=1;
P3_1=0;
delay();
delay();
switch(dq1)
{
case0x01:
{P2=0x9f;break;}
case0x02:
{P2=0x25;break;}
case0x04:
{P2=0x0d;break;}
case0x08:
{P2=0x99;break;}
case0x10:
{P2=0x9b;break;}
}
}
voidxj()
{
dq1=dq1>>1;
P3_0=0;
P3_1=1;
delay();
delay();
switch(dq1)
{
case0x01:
{P2=0x9f;break;}
case0x02:
{P2=0x25;break;}
case0x04:
{P2=0x0d;break;}
case0x08:
{P2=0x99;break;}
case0x10:
{P2=0x9b;break;}
}
}
voidanjian()interrupt0
{
ucharjz;
jz=P1;
if((jz&0x10)==0)
{
mb=mb|0x01;
P3_4=0;
}
if((jz&0x20)==0)
{
mb=mb|0x02;
P3_5=0;
}
if((jz&0x40)==0)
{
mb=mb|0x04;
P3_3=0;
}
if((jz&0x80)==0)
{
mb=mb|0x08;
P3_7=0;
}
if((jz&0x10)==0)
{
mb=mb|0x10;
P3_7=0;
}
if((jz&0x01)==0)
mb=mb|0x01;
if((jz&0x02)==0)
mb=mb|0x02;
if((jz&0x04)==0)
mb=mb|0x04;
if((jz&0x08)==0)
mb=mb|0x08;
if((jz&0x10)==0)
mb=mb|0x10
}
voidmain()
{
P0=0x00;
EX0=1;
IT0=0;
P1=0xff;
P3_2=1;
EA=1;
P2=0x9f;
if(mb!
=0)
while
(1)
{if((mb&dq1)==dq1)
{
delay();
delay();
delay();
km();
delay();
delay();
delay();
gm();
P3_0=1;
P3_1=1;
switch(dq1)
{case0x01:
{mb=mb&0xfe;P3_4=1;}break;
case0x02:
{mb=mb&0xfd;P3_5=1;}break;
case0x04:
{mb=mb&0xfb;P3_3=1;}break;
case0x08:
{mb=mb&0xf7;P3_7=1;}break;
case0x10:
{mb=mb&0xef;P0_7=1;}break;
}
}
if((!
down)&&(dq1<((0x10-dq1)&mb)))
{up=1;
ss();
switch(dq1)
{case0x01:
{if((mb&0xfe)==0){up=0;break;}}
case0x02:
{if((mb&0xfc)==0){up=0;break;}}
case0x04:
{if((mb&0xf8)==0){up=0;break;}}
case0x08:
{if((mb&0xf0)==0){up=0;break;}}
case0x10:
{up=0;break;}
}
}
if((!
up)&&((mb=0)))
{down=1;
xj();
switch(dq1)
{case0x01:
{if((mb&0xff)==0){down=0;break;}}
case0x02:
{if((mb&0xf7)==0){down=0;break;}}
case0x04:
{if((mb&0xf3)==0){down=0;break;}}
case0x08:
{if((mb&0xf1)==0){down=0;break;}}
case0x10:
{down=0;break;}
}
}