第一章 概述
随着人口的增长,高层建筑已经逐渐成为了人们居住,上班的主流建筑。随着高层建筑的兴起,电梯的地位也变得越来越重要。十几层甚至几十层的宾馆、酒店、办公楼、住宅鳞次栉比。伴随着社会的高速发展,电梯作为大楼里的一种交通工具,人们的生活越来越离不开它。
电梯是垂直运行的电梯(通常也简称为电梯)、倾斜方向运行的自动扶梯、倾斜或水平方向运行的自动人行道的总称。有了电梯,摩天大楼才得以崛起,现代城市才得以长高。据估计,截至2002年,全球在用电梯约635万台,其中垂直电梯约610万台,自动扶梯和自动人行道约25万台。电梯已成为人类现代生活中广泛使用的人员运输工具。人们对电梯安全性、高效性、舒适性的不断追求推动了电梯技术的进步。在现代社会和经济活动中,计算机技术、自动控制技术和电力电子技术得到了迅速的发展,不断满足社会经济快速发展和人民生活水平不断提高的需要,电梯作为一种重要的交通运输工具,已经成为城市物质文明的一种标志。电梯在公办大楼、公司、高层住宅、宾馆等场所得到了广泛应用。特别是在高层建筑中,电梯是不可缺少的垂直运输设备。
现代电梯主要由曳引机(绞车)、导轨、对重装置、安全装置(如限速器、安全钳和缓冲器等)、信号操纵系统、轿厢与厅门等组成。这些部分分别安装在建筑物的井道和机房中。通常采用钢丝绳摩擦传动,钢丝绳绕过曳引轮,两端分别连接轿厢和平衡重,电动机驱动曳引轮使轿厢升降。电梯要求安全可靠、输送效率高、平层准确和乘坐舒适等。电梯的基本参数主要有额定载重量、可乘人数、额定速度、轿厢外廓尺寸和井道型式等。简单使用方法(紧急情况下面有解决方法)
载人电梯都是微机控制的智能化、自动化设备,不需要专门的人员来操作 电梯电梯结构图 电梯内部结构图驾驶,普通乘客只要按下列程序乘坐和操作电梯即可。在乘梯楼层电梯入口处,根据自己上行或下行的需要,按上方向或下方向箭头按钮,只要按钮上的灯亮,就说明你的呼叫已被记录,只要等待电梯到来即可。
电梯到达开门后,先让轿厢内人员走出电梯,然后呼梯者再进入电梯轿厢。进入轿厢后,根据你需要到达的楼层,按下轿厢内操纵盘上相应的数字按钮。同样,只要该按钮灯亮,则说明你的选层已被记录;此时不用进行其他任何操作,只要等电梯到达你的目的层停靠即可。电梯行驶到你的目的层后会自动开门,此时按顺序走出电梯即结束了一个乘梯过程。
近年来,随着城镇化的推进及居民生活水平的提高,电梯已成为百姓生产、生活中不可或缺的垂直交通工具。前瞻产业研究院发布的《2015-2020年中国电梯行业市场需求预测与投资机会分析报告前瞻》显示,2013年我国电梯的总产量达到了57.97万台,同比增长9.58%,中国已经成为全球电梯产量最高的国家,比重超过全球总量的60%。从2009年到2013年,我国电梯产量年均增长率达到了21.96%。
目前中国已成为世界上电梯保有量最大的国家,截至2013年底,我国电梯保有量达到292.24万台,同比增长19.97%。我国电梯拥有数为21.48台/1万人,与全球平均23.88台/1万人相比,已经接近全球平均水平。而与韩国等地的市场比较来看,我国未来电梯的保有量会达到800万台左右,年新装/更新量会维持在50万台的水平。
第二章 电梯控制的原理
2.1基于MSC-51单片机的简单电梯控制
方案一:为了更有效的进行电梯控制,现在使用最左边的数码管表示电梯上升和下降状态,使用“∧”表示上升状态,是同“∨“表示下降状态,使用另外一个一个数码管表示电梯此时所在的楼层,使用按键K1和K2来控制电梯上升或者下降的状态。
在每层楼之后需要进行判断上升或者下降。如果是在上升过程中,应先判断是否继续上升,然后在判断是否下降。如果是在下降过程中,应先判断是否继续下降,在判断是否上升。在上升改变为下降状态时,或者下降改变为上升状态时。
数码管的状态应该相应改变。
方案二:依然使用最左边的数码管表示电梯上升和下降状态,使用“∧”表示上升状态,是同“∨“表示下降状态,使用另外一个一个数码管表示电梯此时所在的楼层,不过此时又八个按键来代表电梯的层数,使用k11代表1楼,k12代表2楼,k13代表3楼,k14代表4楼,k21代表5楼,k22代表6楼,k23代表7楼,k24代表8楼。
如果默认电梯在一楼,比如按下k22按键,数码管则由1变化到6,此时是上升状态。然后数码管就显示6,直至再次按键。如果按的是k13,则数码管从6变化到3,此时是下降状态。数码管显示3,直到再次按键才改变当前状态。
2.2方案一的讨论
2.2.1方案一的优点
1.方案一的思路十分清晰明了。仅有由1至8的上升状态或者8至1的下降状态,程序书写比较简单。
2.方案一对于初学者来说比较友好,会基础C语言语句以及51单片机定时器的使用方法就可以比较轻松的做出程序。
3.因为上升过程中,仅计数8次,定时器的参数就可以使用一个宏定义的常数代替,定时器的程序也可以大大化简。
2.2.2方案一的缺点
方案一最大的缺点是对于电梯的运行过程过于简化,仅仅考虑了上升或者下降的两个过程。而实际的电梯运行时,仅有在有人使用的时候才会运行,不然是会一直停靠在某层楼的。为了简化过程编写程序的便利而牺牲了电梯本来可以实现的功能,是这个方案最大的缺陷。
2.3方案二的讨论
2.3.1方案的优点1.方案二是方案一的强化改良版本,基本可以实现真实电梯的功能
2.方案二可以按照所需要去的楼层数的不同而数码管的变化不同,这是方案一所无法达到的。
3.方案二的思路也比较清晰,默认电梯在一楼,去了6楼之后便停在6楼,然后从6楼在去其他楼层,在停靠在某个楼层。
2.3.2方案二的缺点方案二最大的缺点是虽然思路清晰,但是编写程序的过程还是比较复杂的。首先默认电梯在某楼,将此楼作为参数进入子函数1中,然后对8个按键哪个按键按下进行判断,然后进入子程序2中,先判断要去的楼层和现在所在的楼层的大小关系,有三种情况,对应三个条件语句。然后执行完子函数2之后,在将去的层数作为参数再次进入子函数1中。而且因为所去楼层不同,定时器的参数也会相应改变,编写程序比较繁杂。
2.4两种方法的比较以及选择
根据实际编写程序者的水平以及对于操作者水平的可行性来说,方案一对于新手来说相对友好了很多,不需要考虑过于复杂的情况只需要想一个相对来说很理想,电梯只从1楼上升到8楼,在每层楼只停相同的时间。而方案二则对于编写者的水平要求就要高了很多,对于新手来说在两天到三天过程几乎是个不可能完成的任务,所以还是决定选择方案一。
第三章 硬件电路设备及软件流程代码
3.1控制芯片简介
本设计中,AT89S52 是Atmel公司生产的一种低功耗、高性能CMOS 8位微控制器,具有8 位在系统可编程Flash存储器。AT89S52 使用Atme 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash 允许程序存储器在系统可编程,也适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52 具有PDIP、PLCC、TQFP3 种封装形式以适用于不同的使用场合。
AT89S52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,内含2k字节的可反复擦写的Flash只读程序存储器和128字节的随机存取数据存储器(RAM),其擦写周期约1000次。器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,内置通用8位中央处理器和Flash存储单元,功能强大。AT89S52单片机的工作电压范围较宽,可在2.7V~6V电压范围内工作。它的工作频率为0Hz~24MHz,支持降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式(低功耗空闲和掉电模式),空闲方式下停止CPU的工作,但允许RAM、定时/计数器、串行通信口及中断系统继续工作。掉电方式下保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。AT89S52还具有两级加密程序存储器,使用者可以根据需要对程序进行加密,实现版权保护的目的。考虑到在单片机的很多应用中,需要使用发光二极管(LED)进行指示,AT89S52的输出端口被设计成可直接驱动LED,可以省去外加的驱动电路,节省资源[6]。
AT89S52内部资源主要有:2k字节Flash闪速存储器,128字节内部RAM,15个I/O口线(其中P1是一个完整的8位双向I/O口),两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口(可编程串行UART通道),精密模拟比较器,片内振荡器以及时钟电路。
AT89S52引脚如图3.1所示。
图3.1 AT89S52引脚图
VCC:电源。
GND:地。
P0 口:P0 口是一个8 位漏极开路的双向I/O 口。作为输出口,每位能驱动8 个TTL逻辑电平。对P0 端口写“1”时,引脚用做高阻抗输入。当访问外部程序和数据存储器时,P0 口也被作为低8 位地址/数据复用。在这种模式下,P0 具有内部上拉电阻。在Flash编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。在程序校验时,需要外部上拉电阻。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,P1 输出缓冲器能驱动4 个TT 逻辑电平。当对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。当作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此 外,P1.0 和P1.2 分别作为定时器/计数器2 的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体如表1-1 所示。在Flash编程和校验时,P1口接收低8 位地址字节。
表3-1 P1口引脚第二功能
| |
| |
| T2EX(定时器/计数器T2捕捉/重载触发信号和方向控制) |
| |
| |
| |
P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TT 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。当作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16 位地址读取外部数据存储器(如执行MOVX @DPTR)时,P2 口送出高8 位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8 位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在Flash编程和校验时,P2 口也接收高8位地址字节和一些控制信号。
P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TT逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。当作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3 口也作为AT89S52 特殊功能(第二功能)使用,如表1-2所示。在Flash编程和校验时,P3口也接收一些控制信号。
表3-2 P3口引脚第二功能
RST: 复位输入。在晶振工作时,RST脚持续两个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO 位可以使此功能无效。在DISRTO 默认状态下,复位高电平有效。
ALE/PROG:地址锁存控制信号(ALE)在访问外部程序存储器时,锁存低8 位地址的输出脉冲。在Flash编程时,此引脚(PROG)也用做编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0 位置“1”,ALE 操作将无效。这一位置“1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0 位)的设置对微控制器处于外部执行模式下无效。
PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当AT89S52从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH 的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在Flash编程期间,EA也接收12伏VPP电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
主程序流程图如下图所示:
图3.2 主程序流程图
3.2主程序代码设计
根据流程图,设计主程序代码如下:
首先是主函数,主函数比较简单,仅需判断按键k1或者k2是否按下,来判断对应的上升还是下降的状态。
void main()
{
init();
while(1)
{
if(k1==0) //按下K1键,启动定时器,进入子函数up中
{
TR0=1;
h=1;
}
if(h==1)
{
up();
}
if(k2==0) //按下K2键,启动定时器,进入子函数down中
{
TR0=1;
h=0;
}
if(h==0)
{
down();
}
}
}
然后根据按键的结果进入对应的两个子函数up或者down中。
下面就是这两个子函数的程序:
- void up()
- {
- W1=0;
- P0= DIG4_CODE[i]; //给右边的数码管附上相应的数字
- delay(1);
- W1=1;
- W2=0;
- P0= DIG1_CODE [0]; //给左边的数码管附上相应上升的标记。
- delay(1);
- W2=1;
- if(i==7) //上升到第八层的时候,停止定时器
- {TR0=0;}
- j=i+1;
- }
-
-
- void down()
- {
- W1=0;
- P0= DIG4_CODE [j-1]; //给右边的数码管附上相应的数字
- delay(1);
- W1=1;
- W2=0;
- P0= DIG1_CODE [1]; //给左边的数码管附上相应下降的标记
- delay(1);
- W2=1;
- if(j==1) //下降到第一层的时候,停止定时器
- {TR0=0;}
- i=j-1;
- }
复制代码 第三部分就是定时器所相对应的函数。
程序如下:
- void time0()interrupt 1
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- num++;
- if(num==40) //计算一次5ms,40次恰好2S
- {
- num=0;
- j--;
- if(j==0)
- {
- j=8;
- }
-
- i++;
- if(i==8)
- {
- i=0;
- }
- }
- }
复制代码