版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于51单片机的三层电梯设计摘要在城市高楼化发展的今天,电梯是目前日常生活中不可缺少的运输工具之一,电梯的控制系统早期是继电器控制,而现在流行的是单片机控制。在这样的情况下,为了研究电梯的运行情况,掌握电梯的运行逻辑功能,就需要设计一个小功率电梯模型来模拟电梯运行。本文基于51单片机分析4层电梯控制系统的设计,并搭建实物模型验证设计方案的可行性。在硬件设备方向上主要由单片机和其最小系统、矩阵按键模块(电梯厢外部按键与电梯厢内部按键所有按键集合)、七段数码管模块(显示电梯楼数)、电梯的上/下行标志和开关门、报警灯标志等LED模块、报警蜂鸣器等等模块组成。系统以STC89C52为控制中心,通过对按键模块的实时扫描确定单片机管脚的电平变化,进而把请求信息送到单片机。单片机根据内部的程序逻辑进行判断、处理、响应。从而能够根据单片机实现整个请求过程。软件方面使用可读性、可移植性、模块性较强和使用最普遍的C语言进行编程,把程序进行模块化的设计,方便后期扩展和理解。软件的编写主要使用keil4为应用工具开展编写和调试。可以实现除了在报警时刻不响应按键的情况下,对任何时刻任何请求的响应。能够完全实现题目的运行要求。关键词:STC89C52;C语言;步进电机;电梯模型;keil1绪论1.1电梯的研究背景电梯是指运行在一定的建筑内的运输工具,目前人们可以常见的有居民楼的垂直电梯,和大型购物商场的倾斜式电梯,按照效率和实用载重量,又分为客运电梯和货运电梯。其实电梯的起源如果按照升降运输货物的定义来算可以追溯到公元前2600的古埃及建造金字塔时候,和中国秦朝时期建造长城时候,那时候用人力、马牛等拉着绳子来把货物从低处运输到高处,这个原理也就是如今电梯也在采用的原理。一直到瓦特发明蒸汽机之后为标志的进入蒸汽时代时,才从人力作为动力转换为利用机器作为动力。但是有一个问题始终没有解决,就是一旦缆绳断裂,电梯就会发生坠落现象。直到1853年奥德斯发明了附带安全装置的电梯,才使得电梯开始被人们放心使用,得到了全世界范围的推广使用。150多年来电梯的发展不断丰富,在材质,功能,操作上是得到了全面发展,形状上有正方形,菱形,圆形等等外观新颖,数量上有单台,双台,多台逻辑控制,在方式上有垂直式升降和倾斜式两种,在功能上还增加对话,报警、单/双层等功能,如今更加可以远程控制,节能的电梯。按照电梯的功能和使用场景来又可以分为载货电梯、客运电梯、医院电梯、工程车辆、施工单位电梯等等。根据不用的使用场景会设置不同的功能和采用不同的材料来保证安全和达到节能的目的。如今的电梯驱动一般有使用直流电机和液压驱动等常用大类,一般都不会直接驱动了,大多数都是通过减速机构和总间机构进行带动。随着城市的不断扩大发展,与人们息息相关的电梯成为了不断高楼化的住宅、办公大楼、公司等六层以上甚至六层以下的生活必须的运输工具,极大的提高了人们的工作效率,而且提高了人们的生活质量,于此同时,人们对电梯的安全、舒适,效率等的要求也是越来越高,如迪拜大楼的高速直达电梯和普通楼层的电梯。现在的电梯基本都是机电一体,涉及动力、机械、电气、建筑等行业领域,如今的电梯在安全等各方面都有了很大的提升和改进。其实要保证电梯的安全运行,除了在电梯的制造过程中要保证工艺,在后续维护上也尤为重要,现在全国电梯数量如此庞大,更加节能环保,智能便捷,安全舒适性高,寿命更长的电梯研究显得尤为重要。可编程逻辑控制器(ProgramLogicControl,PLC)和微机组成的电梯逻辑控制系统快速发展,PLC采取大量的抗干扰措施,不但易于使用而且易于扩展,但PLC的针对性强,从而导致PLC和设备都是一一对应的,从而导致价格比较昂贵,得不到广泛应用。由于单片机有功能强大,易于扩展,价格便宜等的优点,所以由单片机设计的控制系统可以随着硬件系统的层出换代而进行完善,随着设备的升级换代会越来越满足各种需求功能。由于其在价格上面相比可编程逻辑控制器而言,具有很大的优势,将意味着电梯可以大量的应用于任何地方,为人们的生活带来很大的便利[1]。本着学习设计的任务精神,这次设计就以单片机为载体,利用普通模块,在小功率电路上设计和验证基于单片机的电梯设计的可行性,研究和设计出日常电梯所具有的功能,熟悉电梯的基本情况,对自己所学的东西进行巩固,对运行原理和代码进行初步认识,为如果后续有发展需要,则可以进人更加深层次的研究,比如双电梯群控智能化、高楼层高速目的化、无极调速、蓝牙技术电梯、远程实时控制等等方向。1.2国内电梯的发展从1854年开始,距第一台电梯的产生到现在已经一个半世纪了,电梯的发展在效率、安全、质量、智能上都发展比较成熟。一个半世纪以来,我国的电梯发展大致上经历了三个阶段,20年代的少量进口、50年代的研制生产、到80年代的快速发展,到目前,我国已经成为世界最大电梯制造和安装的国家,这与国家经济的高速发展密不可分,并且形成沿海城市制造为核心的制造发展。据初略数据统计,我国目前在运行的电梯总量超过六百万台,每一年电梯产量约六十万台;按照估算,国内电梯市场会有十年到十五年的空间发展。未来,电梯的发展应该会向自动智能化,部件模块化,维修更换整体化发展。加之电梯数量庞大,面对旧电梯的更新换代易于维修,便捷操作、节能环保、智能化是十分重要的课题。2硬件分析与设计2.1设计思路这次设计的主体思路是:以最为常用且简单易学的STC89C52单片机作为主体控制核心,由于按键较多,采用矩阵按键模拟电梯内/外的按键请求,使用LED灯显示电梯的上下行状态和模拟开关门状态,使用蜂鸣器模块和LED灯模拟警报模块,使用七段共阳数码管显示目前电梯所在哪一层,通过限位开关来确定电梯所在楼层并且实现电梯的准确停靠。同时实现电梯掉电重启后自动初始化电梯寻址回到1楼,同时带有返回基站功能[2]。整体设计框图如图2.1所示:图2.1 整体设计框图2.2 硬件选型2.2.1 单片机介绍单片机说白了就是一种微型电脑,只要根据实际需求稍加编程,加上一系列外围设备,就可以发挥强大功能。51单片机是所有兼容Intel8051指令系统单片机的一个总称,它的代表型号是AT89系列,广泛应用于工业上的各种系统中。51单片机是最基本的入门的单片机,同时也是使用最为普遍的一种。同时要知道51系列的单片机一般是不具备自编程本领。早期很长一段时间51单片机大部分使用AT89C51或者AT89C52。随着我国芯片技术的发展,宏晶公司推出的增强型51单片机STC89xx/STC90xx等系列更受大众的喜爱,除了内部资源及功能大大增强外,还有一个非常重要的功能就是它支持ISP(在线系统可编程)/IAP(在应用可编程),无需专用编程器或者专用仿真器。由于STC51芯片种类非常多,本实验选用一款经典的STC89C52使用,因为他们的内核指令都是一样的,所以只要学会一款经典并且具有代表性的51单片机即可,其他都是具有兼容性的[3]。80C51芯片内部资源如表2.1所示:8位CPU5个中断源,2个优先级(52有6个)4kByte程序存储器(ROM)(52为8k)一个全双工串行通信口128byte的数据存储器(RAM)(52有256byte)外部数据存储器寻址空间为64kB32条I/O口线外部程序存储器寻址空间为64KB111条指令,大部分为单字节指令逻辑操作为寻址功能21个专用寄存器双列直插40PinPID封装2个可编程定时/计数器单一+5V电源供电表2.1 80C51芯片内部资源2.2.2 芯片STC89C52STC89C52是STC宏晶公司推出的新一代超强抗干扰、高速且低耗能的51单片机,它采用8051内核的insystemprogramming(即ISP)的可编程芯片,指令代码全部兼容以前的8051单片机,工作时钟频率达到48MHz,内含4KBytes的可重复擦写10000次的Flash只读程序存储器,器件兼容8051引脚布局和MCS-51系统指令,具有在系统可编程特性,在计算机的程序控制就可以把需要的程序代码下载到单片机内,就可以不用支出购买通用编程器的成本,并且速度更快。其功能特点主要如下:增强型8051单片机,6时钟周期和12时钟周期可任意选择,指令代码完全兼容以前的8051。正常工作电压:5.5V~3.3V。工作频率:0~40MHz,实际工作频率达到48MHz。用户应用程序空间:4K字节。片上集成512字节RAM。通用I/O口39个,通电后有:P0/P1/P2/P3是准双向口;因为P0是开漏输出,作为标准双向I/O口使用时需要外接上拉电阻,但是作为总线扩展时不用外加上拉电阻。(/P1/P2/P3芯片内有上拉电阻,不用外接)ISP(在系统可编程)/IAP(在应用可编程),不需要专门的编程器和仿真器,可通过串口(RXD/P3.0,TXD/P3.1)直接下载所需程序。有EEPROM功能。有看门狗功能。有2个16位定时器/计数器,其中定时器0还可以设置为2个8位的定时器使用。外部中断4路,可以自行选择下降沿或者低电平触发中断。通用异步串行口UART。工作温度范围:-40~+85oC。封装:PDIP-40。STC89C52管脚图如图2.2所示: 图2.2 STC89C52管脚图STC89C52引脚的介绍:(1)电源引脚:VCC、GND(2)晶振引脚:XTAL1、XTAL2(3)复位引脚:RST/VPD(4)下载引脚:51单片机的串口功能引脚P3.1、P3.0(TXD、RXD)作为下载引脚使用下载程序。(5)GPIO引脚:如P0、P1、P2、P3、每组8个,并且P3有额外的功能,只要经过对应的寄存器设置即可自动配置对应的功能,但是同一个时刻,一个引脚只能执行一个功能。(6)P0.0~P0.7:P0口可以作为数据/地址复用总线使用,也可以作为标准I/O口使用。当P0作为标准I/O口使用时,P0口是一个8位准双向口,通电复位后处于开漏状态,P0口内部无上拉电阻,所以其做标准I/O口使用时必须外接5k~10k的上拉电阻。当P0口作为数据/地址复用总线使用时,这中情况是不需要外接上拉电阻的。(7)P1.0~P1.7:标准I/O口使用,内部有上拉电阻。(8)P2.0~P2.7:内部有上拉电阻,标准I/O口使用。(9)P3.0~P3.7:内部有上拉电阻,在不使用附加功能时,可以做为标准I/O口使用。当使用附加功能时:P3.0:(RXD)串口数据接收端。P3.1:(TXD)串口数据发送口。P3.2:(INT0)外部中断0口,下降沿或低电平触发中断。P3.3:(INT1)外部中断1口,下降沿或低电平触发中断。P3.4:(T0)定时器0/计数器0的外部输入端。P3.5:(T10)定时器1/计数器1的外部输入端。P3.6:(WR)外部数据存储器写信号。P3.7:(RD)外部数据存储器读信号。关于使用这些附加功能,只要编程内配置有就会使用到,比如配置定时器T0,则定时时间到的时候,就会输入一次P3.4口,使可以进入定时器中断(当然前提配置有中断)[4]。简单总结为:51单片机所有的I/O口都是双向的;P0口用作标准双向I/O口时要外接上拉电阻,其他I/O不用(因为内部有)。但是如果要增强I/O口的驱动能力,也可以外加上拉电阻。接线图如图2.3所示:图2.3 STC98C52接线图实物图与端口如图2.4所示:图2.4 实物图与端口2.2.3独立按键模块由于电梯需要,此设计设置了独立的电梯内部以及外部按键。独立按键即为检测管脚是否为低电平,独立按键有一端接在GND所以检测起来十分方便,检测扫描的方法在这里使用翻转扫描法。翻转扫描法时,单片机先送所有行为低电平、所有列为高电平,检测所有列是否有低电平的,如果有就记录列值;然后再翻转,使所有列都为低电平,行为高电平,检测所有行值,由于有键按下,所以行也会有低电平变化,记录行值,行列都知道了,这样就检测到了哪一行哪一列的键按下了。注意:独立按键需要进行消抖处理。原理图与实物图如图2.5所示:图2.5 矩阵按键原理图(上)实物图(下)2.2.4蜂鸣器模块为了程序简便,并且设计中蜂鸣器只用做报警作用,交流信号经过绕在支架上的线包在支架的芯柱上产生一交变的磁通,交变的磁通和磁环恒定磁通停止叠加,使钼片以给定的交流信号频率振动并配合共振腔发声。产品的整个频率和声压的响应曲线与间隙值、钼片的固有振动频率(可粗略折射为小钼片的厚度)、外壳(亥姆霍兹共振声腔)频率、磁环的磁强漆包线的线径有直接关系。接线原理图如图2.6所示:图2.6蜂鸣器原理图(右)实物图(左)2.2.5数码管模块本设计采用的是共阴极数码管,共阴极数码管就是二极管的负极并在一起为公共端,正极分别代表a-h;正常工作时,负极要接低电平,a-h接高电平,使二极管导通,就可点亮a-h。接线原理图如图2.7:图2.7 接线原理图(左)实物图(右)电梯在运行过程中触发到楼层限位开关的时候,就会显示相应的楼层,电梯在触碰到下一限位开关之前会保持前一楼层的显示,直到触发下一楼层限位开关才改变显示数值。2.2.6步进电机模块步进电机又称为脉冲电机,基于最基本的\t"/item/%E6%AD%A5%E8%BF%9B%E7%94%B5%E6%9C%BA/_blank"电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩。其原始模型是起源于1830年至1860年间。1870年前后开始以控制为目的的尝试,应用于氢弧灯的电极输送机构中。这被认为是最初的步进电机。二十世纪初,在电话自动交换机中广泛使用了步进电机。由于西方资本主义列强争夺殖民地,步进电机在缺乏\t"/item/%E6%AD%A5%E8%BF%9B%E7%94%B5%E6%9C%BA/_blank"交流电源的船舶和飞机等独立系统中得到了广泛的使用。二十世纪五十年代后期晶体管的发明也逐渐应用在步进电机上,对于数字化的控制变得更为容易。到了八十年代后,由于廉价的微型计算机以多功能的姿态出现,步进电机的控制方式更加灵活多样。ULN2003是高耐压、大电流达林顿系列,由七个硅NPN达林顿管组成。该电路的特点如下:ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和\t"/item/ULN2003/_blank"CMOS电路
直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。其内部逻辑图如图2.8所示:图2.8 ULN2003内部逻辑图步进电机接线图与实物图如图2.9:图2.9步进电机接线图(左)与实物图(右)2.2.7LED灯模块在本次设计中,LED灯分为三部分,上行灯、下行灯以及门状态灯。这是一种组合式光源装置,在上行情况下,通过输送低电平给I/O口控制上箭头和中间部分的LED亮,下行情况下,同理控制下箭头和中间部分亮,这样就达到上下行对应显示方向的要求。原理接线图如图2.10所示:图2.10接线图(左)与实物图(右)2.2.8楼层限位开关限位开关又称行程开关,可以安装在相对静止的物体(如固定架、门框等,简称静物)上或者运动的物体(如行车、门等,简称动物)上。当动物接近静物时,开关的连杆驱动开关的接点引起闭合的接点分断或者断开的接点闭合。由开关接点开、合状态的改变去控制电路和电机。限位开关就是用以限定机械设备的运动极限位置的电气开关。限位开关有接触式的和非接触式的。接触式的比较直观,机械设备的运动部件上,安装上行程开关,与其相对运动的固定点上安装极限位置的挡块,或者是相反安装位置。当行程开关的机械触头碰上挡块时,切断了(或改变了)控制电路,机械就停止运行或改变运行。接线图与实物图如图2.11:图2.11接线图(上)与实物图(下)2.3电路设计2.3.1晶振电路单片机的正常工作需要一个时钟,也就是说就需要在单片机晶振引脚上外接一个晶振,本设计使用STC89C52单片机所以晶振引脚在18和19引脚。使用51单片机其时钟可在0~40MHz上运行,一般情况上都是使用11.059M或者12M晶振,后者适合计算延时时间,前者适合串口通信,本设计中就采用后者11.0592M晶振。如果直接将晶振接入单片机晶振引脚,会发现系统工作不稳定,这是因为晶振起振的一瞬间会产生一些电感,所以为了消除这个电感带来的干扰情况,需要在晶振两端分别各加上一个电容,电容的选取需要选择无极性的,另外一端需要共地。根据晶振的大小决定电容值,根据使用经验电容可在10~33pf值范围内选择。所以可以选取30pf电容,这样一来就构建了晶振电路,单片机要稳定工作,就必须保证晶振电路稳定。其电路图如图2.12所示:图2.12晶振电路图2.3.2复位电路由于系统在运作的时候可能会出现崩溃和瘫痪的状态,所以需要一个复位电路使系统恢复正常状态。这就是说需要一个复位电路实现这个功能。单片机中有一个复位引脚(RST),因为STC89C52单片机是高电平复位,所以只需要让这个引脚保持一段时间的高电平就可以实现复位操作,要实现这个功能通常有两种方法:一种是上电复位,另外一种是通过按键手动复位。上电复位就是说电源接通后自动复位,手动复位是通过一个按键和一个电容所组成的,利用按键开关功能实现复位,按键按下后VCC直接进入到单片机的RST管脚口,RST口被拉为高电平,松开后VCC与RST断开,RST被电阻拉为低电平,这样一开一闭就实现了手动复位。自动复位主要利用RC电容电路的充放电功能,电源一开启,由于电容隔直流特点,VCC直接进入RST。然后电容开始慢慢充电直到充电完成,此时RST口被电阻拉低,这样就起到了上电复位的效果。本设计中就使用手动复位,直到系统崩溃或者个人的复位意愿,就不要去操作复位。其电路图如图2.13所示:图2.13复位电路2.3.3电源电路STC89C52单片机的工作电压是3V~5.5V范围,一般情况下都是采用5V直流供电。所以将5V电源和GND接入到芯片电源引脚即可,由于在使用USB转TTL模块中已经接入了5V电源和GND给单片机,也就完成了电源的接入。另外在模块中还提供了几组5V,GND电源供口,在需要时可以给外接模块使用。3软件分析与设计3.1程序总思路首先,按键响应问题,同一时间内也许会有很多个按键被按下,这就需要记录所有按键动作,同时需要根据电梯目前所处楼层和按键楼层之间的关系判断是应该上行还是下行,最后根据限位开关完成电梯的楼层判断和准确停靠。由于单片机的处理速度很快是us级别,扫描延时最多也是几ms级别,所以基本不会有按键同时按下的情况发生,所以可以按顺序记录。独立按键可以一按下就实时响应(因为独立按键一端接GND一端接I/O口),并且记录之。既然需要时刻扫描,所以只需要把按键的扫描放在电梯停止时,和电梯运行时,持续扫描即可,所以在时间的延时上,要尤其注意每段函数的总执行时间,不能延时太长,如延时几十、几百毫秒再扫描按键就算不上是实时扫描按键了。第二,在电梯到达某楼层后如果没有按键按下,同时也包括了人员进入电梯后没有按下按键情况,则电梯会停靠在该楼层不动作,并且灭掉上/下行的显示灯,直到有新的请求按键按下后,电机才会继续判断,然后运行,同时亮起上/下行显示灯。电梯运行原则是:先方向,后距离。即先响应完成同方向的请求再去响应反方向的请求,在同方向之中,又按距离优先,先响应近距离的。当电梯在下层,高楼有按键按下,则启动电梯上行状态,这时有同向上行的按键请求电梯会响应停靠,而启动上行后有楼下的上行请求/下行请求,电梯会记录请求但不会停靠,等到处理完高层的请求再去处理下行信号去处理低层的上行请求,当然,上行状态下,除了最高层的下行请求被处理,其他下行的请求会被记录,不会停靠;同理,如果电梯在高层,接受到低层的请求,则会启动下行状态,这期间比电梯所在位置低的楼层的下行请求会响应停靠、上行请求和比电梯高的下行请求会被记录不停靠,等电梯处理完低层信号后才启动上行,去响应高层的下行信号。电梯在运行中,每到一层都应该优先判断该楼层有无同向请求,如果有则停机开门;同时判断除本层上行(下行)外其他所有楼层有无请求,如果没有,则电机停止,灭掉上/下行显示灯;然后接着要判断同向中有无上面楼层(下行判断下方楼层)请求记录,如果有则继续保持同向运行,如果没有同向上方(或下方)请求,但同时该楼层有下行请求,则电梯转为下行状态,停电梯,开门。为了程序简洁、提高程序的可读性,所以把到达每一层判断一次同向上面楼层(下行判断下面楼层)有无请求的操作放在主循环while()中循环判断:当所有楼层无请求时,电机停止,同时灭上下行灯,否则就是有请求,如果为上行判断上面楼层,没有请求则停机的同时换向,有则继续保持同向不停机运行。如果为下行状态则判断下面的楼层。电梯的运行放在次循环while()电机运行循环中。流程图如图3.1所示:图3.1电梯运行总流程图单片机启动后首先进行电机初始化、定时器0初始化,使I/O口、中断等都处于初始状态。系统开始运行时电梯向下运行寻址1楼,如果电梯就在1楼即意味着1楼限位开关被触碰,则电梯停止,同时数码管显示一楼。然后主程序进入循环的扫描检测有没有按键按下,一旦有楼层请求按下,则会记录该请求,如果电梯在请求层且无其他请求,则电梯会开门;如果有其他请求,则会响应同方向的请求开门(如上行响应上行和当前)(下行响应下行和当前)。While循环中分为两部分,主while内含有电机运行的while,在电机运行循环外是电机停止情况时的程序,决定着是否启动电机,是否开门,是否灭上下行显示灯。在电机运行循环中,内含每到一层楼时都会根据上行或者下行框架下判断到达哪一层,由于是调用运行一层后判断。所以是上行的情况下从2楼向上开始判断,下行情况时从3楼向下判断;比如,二楼的判断,如果二楼有同向请求则会优先响应调用到达程序,且会判断是否其他楼层都无请求,是则会灭掉上/下行显示灯,还会判断是否该楼有下请求且上面楼无请求,若是,则转换为下行,调用到达程序。若不是,则说明二楼无请求了,或则二楼上面还有请求,这种情况不做处理,让电梯继续向上运行,使其上升到另外一层楼再如此判断。到达顶楼时能够自动换向且调用到达程序。需要注意的是由于安排顺序是先判断上行的关系,在上行状态内的换向操作那个步骤内,加入了无条件转移跳过下面的下行判断,防止进入下行内还没运行一层就当前楼层减一。但是,由于下行放在上行后面,所以在下行的换向中不需要加无条件转移。注意在电机的运行中也要加入按键扫描和处理函数,达到运行时也可响应按键请求和记录的情况。同时,到达程序也在电机循环内,达到需要调用到达程序可以响应的情况。3.2方向判断逻辑当接收到用户的需求时,将其设置进请求队列;然后,根据请求的类型,将电梯的状态标记从暂停状态转换为向上响应或向下响应。最后,将用户层与电梯的当前层进行比较,从而确定电梯的运行方向,并调用相关的子例程来处理其他命令。当有按键按下,进行按键处理后,电梯首先进行运行方向判断和记录按键值。这个部分中首先判断哪个标志量被置位(请求楼层),并且与电梯当前位置进行比较,确定上下层的关系,进而启动对应的上行/下行,同时上/下行指示灯亮。一旦上/下行确认,则进入开始执行开始执行上/下行对应的程序。注意:当请求的楼层就是电梯所在的楼层时,则在方向判断程序后,直接跳到到达目的楼层程序,而不执行运行程序。同时只有电梯门在关闭情况下且开关门结束情况下才能启动电机,换句话说,只有在关门结束后才可以进行是否启动电机的判断。总结来说,本程序中只有三个地方可以允许执行换向操作:第一是电梯外的按键处理函数,第二是主循环的队列判断部分,第三是电机循环中的到达底层和顶层的自动换向操作。结构严谨保证电梯的逻辑性。流程图如图3.2所示:图3.2方向判断与转换流程3.3电机循环程序在执行运行方向判断程序后,就会由主程序调用运行程序。首先判断电梯是否运行,当按键按下时,则根据根据上行/下行程序运行,数码管显示当前楼层数据,同时程序会判断当前楼层是否到达目标楼层,若没有到达,则继续运行,若到达,则执行结束,回到主程序,由主程序调用下一个程序;当没有按键按下时,则返回到主程序循环中。电机的运行需要跟随响应队列而进行。当有多个请求按下时,根据电梯的目前上行/下行运行状态和响应队列,决定先执行那些楼层请求。流程图如图3.3所示:图3.3电机运行判断流程相关程序:voidmain(void){time(100);initLights();position();//电机定位ucMotorDrvPuls=0x11;OUTPUT=0x00|(P2&0xf0);//电机停止setFloor(CURFLR);setUpLight();time(100);while(1)//主循环{ outPress();//按下电梯外按钮 while(STOPCUR==1)//电梯在当前层,电梯不动,可以继续接受请求 { outPress(); inPress(); } if(inPress())//按下电梯内楼层按钮 { while(START)//等待启动按键按下,电梯不动,可以继续接受请求 { outPress(); inPress(); } } while(1)//电机运转循环 { if(UP_req[1]==0&&UP_req[2]==0&&UP_req[3]==0&& DOWN_req[2]==0&&DOWN_req[3]==0&&DOWN_req[4]==0) { break;//没有请求,跳出电机运转循环,电梯不动 } if(FORREV)//上行 { setUpLight();//上行灯亮 if(STOPCUR==1){break;}// if(elevator())//往上到达某一层 { if(CURFLR==4){setDownLight();break;}//到达四楼 } OUTPUT=(ucMotorDrvPuls&0x0f)|(P2&0xf0); ucMotorDrvPuls=_crol_(ucMotorDrvPuls,1); } if(!FORREV)//下行 { setDownLight();//下行灯亮; if(STOPCUR==1){break;} if(elevator())//往下到达某一层 { if(CURFLR==1){setUpLight();break;}//到达一楼 } OUTPUT=(ucMotorDrvPuls&0x0f)|(P2&0xf0); ucMotorDrvPuls=_cror_(ucMotorDrvPuls,1); } outPress();//按下电梯外按钮 //if(inPress())//按下电梯内楼层按钮 //{ //while(START)//等待启动按键按下 //{ //outPress(); inPress();//电梯运行时,内部按钮按下,无需按启动按钮 //} //} time(380-UCTIMES*16);////////// }//endwhile-电机运转循环 OUTPUT=0x00|(P2&0xf0);//电机停止,有请求时按下启动按钮启动}//endwhile-主循环3.4报警程序随着电梯的广泛使用,当前电梯设计的缺点变得显而易见。特别是由于意外断电或其他原因导致人员被困在电梯中的现象,不仅引起极大的不适,而且还威胁到乘客的安全。根据这个特殊情况的启发,所以本设计还设置了报警时电梯前往就近楼层停靠的功能,但是仍然是在有电的情况下,停电的情况就让电机停止,克服电梯重量使电梯无法下坠就可以了。报警程序的要求是:当按下报警程序时,亮报警灯的同时也响蜂鸣器;电梯立即前往就近楼层停靠,并一直打开电梯门。电梯在停靠在楼层的情况下响起警报,则打开电梯门,并且不会响应之前的所有记录请求;电梯在上行运动的情况响起警报,则电梯往上一层停靠,并且一直打开电梯门;电梯在下行运动的情况下响起警报,则电梯前往下面一层停靠,并且一直打开电梯门。在警报期间,除了解除警报按键外,不响应其他任何按键的请求,也不记录。在报警向附近楼层停靠过程中也不响应解除警报按键,等到到达停靠层后才响应解除警报按键。在解除警报之后,清空电梯之前的所有请求,并且关门。流程图如图3.4:图3.4报警处理流程图相关程序://初始化所有灯voidinitLights(){ P0=0x11;}//设置楼层显示voidsetFloor(intfloor){ switch(floor) { case1: { P0&=0xf0;//清零 P0|=0x01;break; } case2: { P0&=0xf0;//清零 P0|=0x02;break; } case3: { P0&=0xf0;//清零 P0|=0x03;break; } case4: { P0&=0xf0;//清零 P0|=0x04;break; } default: { P0=0x06;break; } }}//设置电梯向上运行灯voidsetUpLight(){ upLight=1; downLight=0;}//设置电梯向下运行灯voidsetDownLight(){ upLight=0; downLight=1;}//设置电梯停止运行灯voidsetStopLight(){ upLight=0; downLight=0;}//设置电梯报警灯和喇叭voidsetAlarmLight(){ //TMOD=0x01; //TH0=0xDC;TL0=0x00;/*设置计时器的初值DC00H,定时时长为10ms*/ //IE=0x82; //TR0=1;/*开启定时器0*/ //EA=1;/*开总中断*/ intnum=0;//循环次数 //设置警告灯亮 //while(num<50&&alarmSwitch) while(START) { num++; if(!alarmBit) { alarmBit=1; } else//熄灭警告灯 { alarmBit=0; } time(400); } offAlarmLight(); }//停止报警灯和喇叭voidoffAlarmLight(){ //alarmSwitch=0; //time(100); //EA=0; //TR0=0; alarmBit=1; //alarmSwitch=1;}3.5开关门程序开关门状态实际用LED灯来表示,绿灯闪烁代表正在开门状态,红灯闪烁代表正在关门状态。为了试验演示效果,所以就把闪烁时间调快,并且去掉开门后等待几秒再关门的部分,当然,需要也可以加上。那什么时候调用开关门程序呢?当然是在电梯到达目标楼层的时候,这时就是通过调用到达程序和调用开关门程序。在开关门程序中,还支持以下功能:在开门中如果想快点关门,可按下关门按键提前结束开门动作;同理,关门中有人要上电梯的,可以按下开门按键重新进入到开门程序中。在开门时候就赋值给直流电机N20,使正转开门,关门同理赋值为反转使其关门。在开关门期间同样可以支持扫描电梯的按键。在开门的时候绿灯闪烁,在关门的时候红灯闪烁。在直流电机的信号驱动上考虑过两种方案:一是用PWM信号:优点是能够调节电机转速,可以根据开关门需要的速度而调节。使用该信号是需要在程序中配置定时器1。但是本实验中配置定时器1的定时时长时需要考虑步进电机的卡顿情况和定时器0的定时情况,不可定时太大也不可定时太短,也不可定时与定时器0定时时长相近。二是直接使用高低电平信号:因为开关门是放在for循环中进行,在循环中有控制时间,再加上N20是减速电机,加上外部减速部件可正好符合主观需要的缓慢打开和关闭电梯门的要求,这时候只需要调节for循环时长就可以调节开/关门时长。比第一种需要考虑的东西少,比较方便,故本设计中采用第二种方法。3.6延时程序延时的作用就是让数据正确处理。CPU速度来能多快取得I/O口状态就多快取,而是CPU程序按指定时间间隔取值。比如CPU速度为1微妙可以处理一条语句,你刚取完当前I/O口状态,如果没有延时处理,在循环处理过程中立即又去取当前I/O口状态作为下一个Bit位的数据。程序如下:voiddelay_5us(void){_nop_();_nop_();}voiddelay_50us(void){unsignedchari;for(i=0;i<4;i++){delay_5us();}}voiddelay_100us(void){delay_50us();delay_50us();}voidtime(unsigneducMs){unsignedcharj;while(ucMs>0){for(j=0;j<10;j++) delay_100us(); ucMs--;}}3.7按键程序本设计的按键为独立按键,包括电梯内、电梯外、报警以及关闭报警按键,这样能够更方便本设计的运行展示。可以直接读取,检测占用时间较少,不受其它因素影响。程序如下://按下电梯外按钮voidoutPress(){//FORREV=1;if(!UP1)//1楼上{storeUP(1); if(CURFLR>1&&STOPCUR==1)//电梯不在一楼,且当前没其他请求,电梯马上自动启动 { FORREV=0;//向下运行 STOPCUR=0; } if(CURFLR==1) { STOPCUR=1;//电梯停留在当前层 }}if(!UP2)//2楼上{storeUP(2); if(CURFLR>2&&STOPCUR==1)//电梯在二楼以上 { FORREV=0; STOPCUR=0; } if(CURFLR<2&&STOPCUR==1) { FORREV=1; STOPCUR=0; } if(CURFLR==2) { STOPCUR=1; }}if(!UP3)//3楼上{storeUP(3); if(CURFLR>3&&STOPCUR==1)//电梯在三楼以上 { FORREV=0; STOPCUR=0; } if(CURFLR<3&&STOPCUR==1) { FORREV=1; STOPCUR=0; } if(CURFLR==3) { STOPCUR=1; }}if(!DOWN2)//2楼下{storeDOWN(2); if(CURFLR>2&&STOPCUR==1)//电梯在二楼以上 { FORREV=0; STOPCUR=0; } if(CURFLR<2&&STOPCUR==1) { FORREV=1; STOPCUR=0; } if(CURFLR==2) { STOPCUR=1; }}if(!DOWN3)//3楼下{storeDOWN(3); if(CURFLR>3&&STOPCUR==1)//电梯在三楼以上 { FORREV=0; STOPCUR=0; } if(CURFLR<3&&STOPCUR==1) { FORREV=1; STOPCUR=0; } if(CURFLR==3) { STOPCUR=1; }}if(!DOWN4)//4楼下{storeDOWN(4); if(CURFLR<4&&STOPCUR==1) { FORREV=1; STOPCUR=0; } if(CURFLR==4) { STOPCUR=1; }}}//按下电梯内楼层按钮unsignedcharinPress(){inti;intflag=0;if(!FLOOR1){ if(1<CURFLR) { STOPCUR=0; UP_req[1]=1; } if(1==CURFLR) { STOPCUR=1; } return1;}if(!FLOOR2){if(2>CURFLR)//请求层大于当前层 { UP_req[2]=1; STOPCUR=0; } if(2<CURFLR) { DOWN_req[2]=1; STOPCUR=0; } if(2==CURFLR) { STOPCUR=1; } return1; }if(!FLOOR3){if(3>CURFLR)//请求层大于当前层 { UP_req[3]=1; STOPCUR=0; } if(3<CURFLR) { DOWN_req[3]=1; STOPCUR=0; } if(3==CURFLR) { STOPCUR=1; } return1;}if(!FLOOR4){if(4>CURFLR) {DOWN_req[4]=1; STOPCUR=0; } if(4==CURFLR) { STOPCUR=1; } return1;}if(!START){STOPCUR=0; return1;}if(!STOP)//紧急停止{while(START)//不响应其他按键 { //亮灯 setStopLight(); } return1;}if(!ALARM){//while(START) //{ //亮灯 setAlarmLight(); //time(800); //灭灯 //offAlarmLight(); //} return1;}if(FORREV==1){//请求上行而进去电梯内选择的是下层 for(i=CURFLR+1;i<=4;i++) { if(UP_req[i]==1||DOWN_req[i]==1){flag=1;} } if(flag==0)//上层没请求 { FORREV=0; } } if(FORREV==0) { //请求下行而进去电梯内选择的是上层 for(i=CURFLR-1;i>=1;i--) { if(UP_req[i]==1||DOWN_req[i]==1){flag=1;} } if(flag==0)//上层没请求 { FORREV=1; } }return0;}4实验与分析4.1逻辑功能检验在程序编写完成并且模型组装完成后,需要进行一些测试来检测是否符合所设计的要求和验证程序是否正确,首先模型进行通电后,电梯在1楼,进行测试的内容如下:4.1.1运行功能测试:按键一楼上电梯测试状态:电梯首先进行了开关门,由于是在一层,按了上行键,所以上行灯亮起,数码管显示一层,结束运行。仿真图4.1.1(1)如下:图4.1.1(1)按键一楼上按键二楼上电梯测试状态:电梯首先进行了开关门,由于(1)时还在一层,所以电梯运行上二楼,上行灯亮起,数码管数字由一变成二,结束运行。仿真图4.1.1(2)如下:图4.1.1(2)按键二楼上按键三楼下电梯检测状态:电梯首先进行了开关门,(2)时电梯在二楼,由于按下的是三楼下,所以先亮起的上行灯,到了三层后,亮起下行灯,数码管数字由二变成三,运行结束。仿真图4.1.1(3)如下:图4.1.1(3)按键三楼下按键二楼下电梯检测状态:电梯首先进行了开关门,(3)时电梯在三楼,所以一直亮下行灯,数码管数字由二变成三,结束运行。仿真图4.1.1(4)如下:图4.1.1(4)按键二楼下4.1.2警报功能测试:电梯不运行电梯检测状态:电梯未给予任何指令,或电梯运行遇到阻碍,报警器启动,响报警,并打开电梯门,结束运行。仿真图4.1.1(5)如下:图4.1.1(5)电梯不运行4.2实物组装及测试实物组装用的是木板进行搭建的,使用电机和细线进行电梯上下行模拟,楼层限位开关安装在每一层上,进而得知电梯停留在哪一层。实物图4.2如下:图4.2实物组装由于电梯这个木板间螺丝有所松动,所以容易造成电梯卡住不动的情况。5总结与展望5.1总结本论文主要是对基于单片机控制系统的3层电梯的设计。主要内容包括C语言编程、51最小系统的运用、步进电机的控制、辅佐以其他部件如数码管、按键。限位开关、蜂鸣器等,搭建小型模拟电梯,实现实际中的电梯运行逻辑情况。在实验完成要求的结果表明,基于单片机的电梯设计是可以应用于实体模型中的,也表明单片机系统的强大。在实际应用可以根据要求,升级器件,加入其它传感器等完成社会实际中的应用要求。与前辈们类似的基于单片机系列设计电梯相比有相似地方如数码管的显示等也有不同之处做了修正改进如采用顺序判断方向法。本设计目前只是在小功率电路上进行的设计验证,在应用于实际
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨境电商2025年海运整箱货运合同协议
- 车检登录员考试题及答案
- 护理行政试题及答案
- 2025-2026五年级音乐期末测试题
- 1到4的题目答案及
- 中医药适宜技术培训课件
- 母婴护理实践技能训练
- 肠外营养在肿瘤患者围手术期的应用策略
- 解剖室卫生管理制度
- 卫生服务站岗位责任制度
- 真空浇注工安全操作规程(3篇)
- 快乐读书吧:非洲民间故事(专项训练)-2023-2024学年五年级语文上册(统编版)
- GB/T 19609-2024卷烟用常规分析用吸烟机测定总粒相物和焦油
- 公路工程标准施工招标文件(2018年版)
- DB45-T 2845-2024 超声引导下针刀治疗技术规范
- DL∕T 5776-2018 水平定向钻敷设电力管线技术规定
- 2025届浙江省杭州市英特外国语学校数学七年级第一学期期末监测模拟试题含解析
- (正式版)JTT 728.2-2024 装配式公路钢桥+第2部分:构件管理养护报废技术要求
- 施工、建设、监理单位管理人员名册
- 围绝经期管理和激素补充治疗课件
- Rivermead行为记忆能力测试
评论
0/150
提交评论