1课题概述1.1课题的主要研究内容及设计步骤本课题的主要任务是完成一个电梯系统的调度模块,即根据每个楼层不同顾客的按键需求,让电梯做出合理的判断,正确高效地知道电梯完成各项载客任务。根据此任务,本课题需要研究的内容有:1、根据系统的技术要求,进行系统硬件的总体方案设计;2、学习单片机的相关知识,并且加以运用;3、选择恰当的芯片,并对其内部协议有所掌握,便于应用。4、研究C语言编程,并且规定电梯的工作规则,用C语言加以实现;5、对软件和硬件进行调试,让其协调工作,完成指定任务。结合以上内容,本课题的设计方案步骤如下:关于硬件部分:首先,对实际的电梯系统进行模拟,一般情况下,一个电梯应该具备相关按键、显示二极管、数码管等,由于这是一个调度模块,故没有设计具体的轿厢等机械部分。然后,结合这些实物,选择恰当的芯片,并分成若干模块,安排好各自之间的关系。接着,要完成电路图的设计,画出PCB板,焊接相关器件后进行硬件调试,看是否好用并加以适当的更正。关于软件部分:关于电梯调度时所遵循的原则作出规定,其必须基于高效与人性化两个原则。最后是使用C语言将规定程序化,以便电梯真正的运作。当然,二者的关系并不是分离的,它们是相辅相成,硬件依据软件来验证,软件依据硬件来调试。经过一个个的发现问题、一个个的解决问题,最终做出完美的电梯调度模块。1.2课题的开发环境简介1.2.1电路图制作软件proteus7.2Proteus是目前最好的模拟单片机外围器件的工具,因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。1.2.2C51的程序开发软件KeilKeilC51软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM语言和C语言的程序设计,界面友好,易学易用。2方案论证2.1设计功能要求本设计是为一六层电梯设计一调度系统,即使电梯能够合理高效地运行,完成各楼层顾客的接送任务。形象地说,就是要应对不同楼层顾客的不同需求,作出合理高效的判断,使所有顾客在整体运用时间最短的条件下将其运往各自的目的地。这个设计的成品应该可以作为真实电梯的控制系统一样,遵守以下两个原则:一是高效性,二是人性化。而实际电梯所面临的情况无比复杂,故本设计的难点除了硬件上面外,还有对这些复杂的情况归类化,分为若干个基本情况,另外是用恰当的C语言描述来表达这些复杂的逻辑。核心处两个步骤:第一判断电梯是上行还是下行;第二,判断是去接人还是去送人。2.2系统的结构框图图2-1系统的结构框图如上图2-1所示,楼层电梯呼叫按键就是楼层外面的上行、下行按键,有需求时即可按下;电梯内呼叫按键就是电梯内部的数字按键,它是内部按键需求的输入;单片机就是整个系统的核心,接收输入信息,经过处理后输出信息;楼层显示数码管就是接收单片机处理的信息,显示此时的楼层数;电梯状态指示灯就是接收单片机处理的信息,显示电梯的状态:上升、下降、停止。电动机的驱动和控制就是接收单片机的PWM脉冲信号来控制驱动器,进而控制电动机的正反转,使电动机牵引电梯做上下运动。3系统的硬件设计电梯最底层为1楼,因此在1楼仅有上升按键,而电梯最高层为6楼,因此6楼应仅有下降按键。其他楼层则既有上升按键,也有下降按键。在电梯内部按键设置方面,则应有1~6楼的各层选择按键。按键的一端接地,另一端通过集成电路芯片连至单片机引脚。这里,由于按键数量很多,又要求电梯控制系统能以最快速度响应按键的需求,因此,所有按键通过与门连接单片机。用五片双4输入与门74LS21即可实现16个按键对象的集体与运算的最终结果,按键动作最终是送到单片机的INT0端。即:INT0←(P1.0*P1.1*P1.2*P1.3)*(P1.4*P1.5*P1.6*P1.7)*(P3.0*P3.1*P2.0*P3.3)*(P3.4*P3.5*P2.1*P2.2)无论哪一个按键有动作,低电平信号就会送到INT0端,从而引发外部中断0服务子程序运行。当定时器0中断时,单片机向电动机发送PWM脉冲信号,电动机接到脉冲信号后,经过驱动器的驱动,电动机便牵引电梯上下运动。电梯的楼层显示用七段数码管完成显示。本设计电梯只有6层,因此用七段数码管即可,数码管的显示数据通过单片机的P0口来进行传送。设计中要求数码管随着电梯的位置变化而变化,即数码管显示数据要与楼层数同步,因此数码管的片选线直接连接地,而不需要再选择。电梯升降的状态用上升和下降指示灯来进行显示,通过单片机的P3.7和P3.6引脚分别连接上升和下降指示灯的负极,其正极均连接至系统正电源处。3.1单片机最小系统模块在本设计中,最小系统应该包括:单片机、晶振电路、复位电路。如图3-1所示,晶振电路由C3与C2和晶振组成。C3与C2是两个30pF的瓷片电容接地用来削减偕波对电路的稳定性的影响。复位电路采取的为手动按键复位电路,由电容C13,电阻R1、C1和开关RESET组成,当单片机的复位引脚RESET出现2个机器周期以上的高电平时,单片机就执行复位操作。图3-1单片机的最小系统3.2电动机的选择我们选用三相异步电动机来做电梯的动力装置,因为国产Y系列的电动机具有高效、节能、特性好及低噪声等优点,我们将选用国内最先进的Y系列异步电动机。这里我们选用Y100L24三相异步电动机,因为它还具有性能好、寿命长、可靠性高、维护方便、启动转矩大等优点,其功能参数为额定电压380V,额定频率50HZ,额定功率3000W,额定转速1400转/分。如图3-2,在PROTEUS中,我们选用的普通的MOTOR-BCD代替进行仿真。图3-2电动机正反控制电路3.3中断电路图3-3中断电路图中断电路如上图3-3所示。图中外部0中断INT0与74LS21与门相接,低电平有效,所以当单片机接电源后,P1.0~P1.3引脚此时为高电平,当任一按键按下后,相应的中断输入口直接与地相接,高电平变为低电平,外部0中断立即响应,单片机系统进入中断控制子程序系统,在中断服务子程序中做出相应的执行指令。3.4数码管显示模块图3-4数码管显示电路七段数码管外形如图3-4所示,即左边的7个引脚跟单片机P0口相接,下边的引脚连接地。楼层内外分别用一个7段数码管显示,可以共用一个P0口。3.5按钮控制电路模块图3-5电梯不同楼层的按钮如图3-5所示,按键显示电路模块包括电梯内部的按钮和每层楼的上下按钮,这些按钮一端与地相接,一端又与单片机和与门74LS21相接,外部0中断低电平有效,这样可以实现模拟按键的自如操作。3.6报警电路如图3-6所示,电梯内添加手动报警电路,假若电梯发生故障,电梯内的人可自行发出报警信号,向外界求救。该电路接在单片机的P2.7口。图3-6电梯不同楼层的按钮3.7模拟电路图如下图3-7所示,电路原理图包括状态指示灯模块、内外按键模块、中断电路模块、单片机的主要外围模块、数码管显示模块和电动机驱动控制模块、报警模块。P0口的P0.1~P0.6引脚与数码管模块相接,P2口的P2.4~P2.7引脚与电动机驱动控制模块相接,P3口的P3.2引脚与中段电路模块相接,P1口的P1.0~P1.7引脚、P3.0~P3.1引脚、P3.3~P3.5引脚分别与对应的内外按键模块相接,P3.6~P3.7引脚与状态指示灯模块相接。图3-7模拟电路原理图4系统的软件设计从程序功能上来分,本设计的高层软件程序大概可以分为以下几类:一、运行与决策函数;二、中断处理函数;三、置位各状态变量函数;其中,第一类函数起作用于按键按下的时刻,当有按键按下时,通过74LS21以中断的方式发送给单片机,此时,单片机即对程序中所用到的各个状态变量进行置位并且点亮相关发光二极管,如置位按键所对应的去向变量等,方便决策函数使用。第二类函数起作用于电梯到达目标楼层时,这时函数负责把相关发光二极管熄灭,并且及时清除相关状态位,以免影响判别函数作出正确判断。第三类函数是程序的核心。它直接负责管理电梯下一次所要到达的楼层,并且要基于短时间、高效率、人性化等原则。每当电梯经过一楼层时,此函数即会被调用,然后返回一个变量名为aim的值,它即为下一个电梯要停留的目标楼层值。4.1单片机中断处理函数本设计主要用到了单片机的中断系统。当有按键按下时,利用函数将键值存储起来,并在单片机引脚输出高电平发出中断进行相关处理。中断的相关设置以及中断处理如图4.1所示。分析键值来源点亮相应发光二极管置位相应状态变量读取键值图4.1中断处理中的相关操作4.2电梯判决函数在电梯经过一个楼层时,就会自动调用该函数。其流程如图4.2所示。开始按键标识全为0?电梯不再运行电梯向上运行电梯向下运行电梯上楼接人电梯上楼送人电梯下楼接人电梯下楼送人相关处理1相关处理2相关处理3相关处理4是否图4-2电梯判决流程图由图可知,程序中将实际情况分为四种情况来判断:电梯上行且是去送人、电梯上行且是去接人、电梯下行且是去送人、电梯下行且是去接人。电梯各情况下所对应的处理方法,以电梯上行的两种状态为例:在实际应用中,最简单的情况莫过于电梯当前为闲置状态,然后有一人按下按键呼叫,然后电梯便响应呼叫。但是,实际情况往往比这复杂的多,往往会有多人呼叫电梯。那么就必须得为电梯规定好一个特定的优先级规则,以免乱作一团。若电梯处于上行状态,则在该过程中响应不同顾客的优先级为:高层呼叫上行顾客高层呼叫下行顾客底层呼叫下行顾客底层呼叫上行顾客。若上行,且是送人,比如电梯当前在二层,六楼有人呼叫上楼,那么它就要响应这一呼叫,从而把自己的目标楼层锁定为六楼并向上运行,而在六楼呼叫后不久,五楼也有人呼叫上楼(且电梯此刻还未运行到五楼),那么在电梯运行中,每经过一个楼层,会做一次判决,因为五楼也有人呼叫,所以正常情况下,它应该在判决后将目标楼层定位五楼。而若五楼的顾客按下的是下行键,或者二楼的人按下呼叫键,电梯此时都会暂时不予理会。在程序中,当五楼有上行键呼叫时,状态变量f5up便会被置位,程序走到判别if((f5up==0)|(present5))时,里面的内容即为假,则不再继续向下判断,而转向else语句中,里面又有一个判断,当确定此时确实有键按下且电梯当前所处楼层小于五楼时,目标楼层就会被变更到五楼,程序最终返回一个aim值。由于程序中没有下行键的出现,故下行键的状态是不会影响到该程序的判决的。此时程序的检测依据两个标准:第一,由低层像高层开始检查;第二,对于电梯已经过的楼层和按下下行键所发出的请求,电梯暂时是不予理会的。这也是很明显的,因为上行送人状态中,低层的优先权大于高层的。程序就是靠着上面这些if语句的嵌套,来完成这种优先级设置的。至于上行接人状态时,所坚持的标准是由高层到底层的顺序进行排查,而对于上行键的呼叫暂时不予理会。下行的状态,恰好与上行相反,在此不再赘述。4.3电梯运行函数该函数直接控制电梯的上行与下行、运行与停止。起关键作用的还是判决函数给它提供的目标楼层值。其具体的流程如图4.3所示。它的功能就是判断目标楼层与当前楼层间的关系:若前者大于后者,则上行;若前者小于后者,则下行;若相等,则停止片刻把门打开。当然,之后它还要做一次判断,因为可能还有其他的楼层需要呼叫,此时程序会自动装入合适的目标楼层值,指挥电梯继续运行下去,直到所有的呼叫都完成为止。开始当前楼层与目标是否相等?当前楼层小于目标楼层?上行下行当前楼层加1判决目标楼层是否改变?否改变目标楼层是当前楼层减1判决目标楼层是否改变?改变目标楼层是是否否否是清零相应状态变量与二极管判决目标楼层是否改变?停止开门否是图4.3运行函数流程图4.5主函数之所以把主函数放于最后才说,是因为它最为简单,它之上把上面所有的函数按照恰当的顺序排列起来,便于相互调用而已。首先,各按键按下的信息是通过中断来告知单片机的,故我们要对单片机中断有相应的程序语句加以说明,如开总中断,开外部中断0以及其触发方式等等。最后就是一个