版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(完整word版)基于stm32的电梯控制器(完整word版)基于stm32的电梯控制器PAGE.2.-(完整word版)基于stm32的电梯控制器毕业设计题目基于STM32的多层电梯控制器的设计学院信息科学与工程学院专业电子信息科学与技术班级电信0902学生邹强学号20091221572指导教师孔祥玉二〇一三年六月七日摘要世界上第一台电梯是由美国的奥的斯公司制造的。自从这第一台电梯于1987年问世以来,对生活在城市的楼宇中特别是高楼大厦中的人们的生活和工作带来了巨大的便利。随着社会经济的飞速发展,电梯与人们的生活越来越密不可分。本设计的电梯系统采用的是stm32微处理器。STM32处理器是基于Cortex—M3架构的嵌入式微处理器MCU,其中Cortex—M3架构是ARM公司推出的。STM32处理器具有高速、高集成度、低功耗、高可靠性等优点。正是由于STM32处理器具有这些优点,它正适合运用于电梯控制。本设计中的电梯控制系统主要运用了STM32处理器GPIO口操作和其精确地定时功能。该电梯系统一共分6个部分,它们是STM32处理器、电源系统、数码管显示器、键盘、LED小灯、直流电机驱动模块。这些部分是直接与STM32的GPIO口连接的,所以它们占用的GPIO口较多。关键词:STM32处理器;Cortex-M3架构;直流电机驱动模块
ABSTRACTTheworld’sfirstelevatorismanufacturedbytheUnitedStatesOtis。Sincethefirstliftinceptionin1987,thewayofpeoplewholiveinthebuildingsinthecityespeciallyinthehigh-risebuildingsandworkhasbroughtgreatconvenience.Withtherapidsocioeconomicdevelopment,theelevatorbecomesincreasinglyinseparableinpeople’slives。ThedesignsoftheelevatorsystemusetheSTM32microprocessor.TheSTM32processorisbasedonCortex-M3-basedembeddedmicroprocessorMCU,andCortex—M3architectureisARMintroduced.STM32processorhastheadvantagesofhigh-speed,highintegration,lowpowerconsumption,highreliabilityandsoon.BecauseoftheSTM32processorhastheseadvantages;itissuitableusedinelevatorcontrol.ThedesignsoftheelevatorcontrolsystemmainlyutilizetheSTM32processorGPIOportoperationandaccuratetimingfunctions。TheelevatorsystemisdividedintosixpartswhichareSTM32processors,powersystems,digitaldisplay,keyboard,LEDlightsandDCmotordrivermodule。ThesepartsareconnecteddirectlywiththeSTM32GPIOportsthattakemorepartofGPIOport.Keywords:STM32processor;Cortex-M3architecture;DCmotordrivemodule目录TOC\o"1-3"\h\u_Toc356992186"ABSTRACT IIHYPERLINK\l”_Toc356992187"第1章绪论 1HYPERLINK\l”_Toc356992188"1.1课题背景 1_Toc356992190”1.1.2国内外现状 1HYPERLINK\l”_Toc356992191”1.1.3本课题的意义及研究内容 2_Toc356992193”2.1系统硬件总体组成 3HYPERLINK\l”_Toc356992194"2.1。1总体框图 3HYPERLINK\l”_Toc356992195”2。2系统硬件方案 3HYPERLINK\l”_Toc356992196”2.2.1STM32选择方案 32.2.4数码管显示器设计方案 6HYPERLINK\l”_Toc356992201"2.2。5电机驱动设计方案 6HYPERLINK\l”_Toc356992202"第3章系统硬件设计 7HYPERLINK\l”_Toc356992203"3.1硬件系统的总体设计 7_Toc356992209"第4章系统软件设计 12HYPERLINK\l”_Toc356992210"4.1主程序设计 124.2显示程序设计 204。3LED指示灯程序设计 21_Toc356992214"4.3门控制程序设计 23HYPERLINK\l”_Toc356992215"4.3电机驱动程序设计 28参考文献 32致谢 33HYPERLINK\l”_Toc356992219"附录1系统运行样式 33第1章绪论1。1课题背景1。1。1选题背景电梯是一种由电动机作为驱_blank”动力的竖直升降设备,装有立方体吊舱并设有电梯门,用于HYPERLINK”http:///view/735834.htm"\t”_blank”多层建筑乘人或载运货物。它的轿厢运行在至少两列平行竖直的或近似平行竖直的刚性HYPERLINK”/view/247225.htm”\t”_blank"轨道之间,一般服务与超过规定高度的楼宇内。轿厢HYPERLINK”http:///view/572432。htm”\t"_blank”尺寸与结构形式便于_blank"乘客出入或装卸货物。而自从第一台电梯在美国问世100多年以来,由于社会科学与经济的不断前进以及人们物质生活状况的不断改善,电梯与人们的生活越来越息息相关,已成为人们工作和生活中不可或缺的一项十分重要的垂直交通运输工具。自20世纪以来,全球科学技术获得了飞速的发展,尤其是计算机技术、电子技术自动控制技术、网络技术、等都得到了质的飞跃,并迅速转换为先进的生产力,渗透到了社会的各个领域和各个方面,深刻的影响了人们日常的工作方式及生活方式。电梯行业在科学技术飞速发展过程中也同样获益颇多.电梯的控制方式以及拖动方式均发生了很大的变化。1.1.2国内外现状100多年来,中国的电梯行业发展经历了下面几个阶段:①依赖电梯进口阶段(1950年以前),在这一阶段我国的电梯全部来源于进口,仅仅拥有大约1101台电梯;②自主研发生产阶段(1950~1980年),在这个阶段我国可以自主的研发、设计和生产电梯.在这个阶段我国一共生产和安装电梯大约1万台的电梯;③建立合资企业,整个行业飞速发展阶段(自1980年改革开放至今),这个阶段我国总共制造和安装了多达40万台电梯。现在,我国已成为全球最大的电梯制造国和最庞大的新装电梯市场.2006年,在我国大陆的电梯总产量达到16.8万台,全国正在用的电梯达到了770314台。在如此庞大的电梯市场需求的推动下电梯行业获得了广阔的发展舞台。20世纪80年代初,日本三菱公司首次在电梯拖动控制系统中变压变频调速(VWF,VariableVoltageVariableFrequency),这导致了电梯的拖动方式的一次重大变革,与之前的交流调压调速驱动、交流双速电机驱动等方式相比,WVF驱动方式具有电机发热量小、高效率、节能、污染小、高性能等优点。而近些年来,交流永磁同步电机的问世,被认为是在变压变频调速技术出现以后,电梯拖动技术的又一项十分重大的技术变革。这是因为交流永磁同步电机具有基本无需维护,结构紧凑,更加安全可靠、节能、传动效率高、更高的性价比的优点,并减少了对环境的污染。同样是在上个世纪80年代,微计算机技术被应用于电梯控制系统中,单片机等微处理器及可编程逻辑控制器的出现把电梯控制技术推进了一个全新高速的发展时期,电梯控制系统的网络化、智能化开始进入了人们的视野,并且成为研究的新热点.1.1.3本课题的意义及研究内容随着社会的发展,利用坚固耐用的金属梁作为建筑支撑物,建筑师和工程师可以建成数百米高、直冲云霄的摩天大楼。在如今各种高楼大厦已经数不胜数,如果没有电梯,这些高楼大厦基本上将无法使用。因此乘坐电梯也必然成为众生活中的一部分,而作为电梯的大脑——电梯控制器,它的高效运行和智能化已经成为电梯运行中必不可少的重要器件.本设计的电梯控制器是基于STM32来设计的.随着信息化技术的发展,嵌入式系统已经成为当前IT产业界一个非常热门的话题。因其高效、低成本、高可靠性、丰富的代码以及应用程序可扩展性、可移植性等一系列优点,越来越多地应用在信息化产品中。本设计以一个实际的应用实例,从开发板、集成开发环境的构建方式和作业方式、嵌入式系统的硬件和软件设计、JTAG调试方法,掌握嵌入式系统开发方法.本设计通过ARM微控制器模拟实现电梯的控制.(1)需研究ARMCortex-M3微控制器结构,基于ARMCortex-M3的stm32开发板及相关键盘控制模块、GPIO模块等,keil集成开发环境;(2)研究单部电梯调度算法,并选择或设计一个合适的算法;(3)了解实验开发板上相关硬件电路设计;(4)用c语言完成系统软件设计,并在实验开发板上调试,完成电梯的上行、下行、停止、开门、关门、等动作,要求每一个动作在规定时间内完成.
第2章系统设计方案2.1系统硬件总体组成2.1.1总体框图该电梯控制系统由stm32开发板、电源系统、键盘、LED指示小灯、4位8段数码管、电机驱动模块等组成。如图2.14位8段数码管键盘STM324位8段数码管键盘STM32电机驱动模块LED指示小灯电机驱动模块LED指示小灯电源系统电源系统图2。1系统硬件结构各功能模块简介:电源系统:为整个系统提供+5V电源;键盘:每个键位互不影响用以控制电梯运行状态;LED指示小灯:用以指示小健是否被按下和电梯门开关状态;4位8段数码管:用于显示电梯内部和每层电梯外部电梯所在的层数;电机驱动模块:用于驱动电机和控制电机正反转及转速;STM32开发板:通过写入程序代码来控制电梯的运行状态。2。2系统硬件方案2。2.1STM32选择方案(1)STM32内核STM32是基于ARMCortex-M3内核的32位处理器,具有杰出的功耗控制以及众多的外设,最重要的是其性价比。Cortex-M3是一个32位处理器内核。内部的数据路劲是32位的,寄存器是32位的,存储器借口也是32位的。Cortex—CM3使用了哈弗结构,拥有独立的数据总线和指令总线,可以让访问数据和取指同时进行互不影响。这样一来,访问数据时不会占用指令总线,从而提高了性能。为了实现这一特性,Cortex—CM3内部有好几条总线接口,每一条都为自己的应用场合优化过,并且可以并行工作.但是指令总线和数据总线共同享用同一个存储空间[3]。同时该内核还具有高性能、低功耗、先进的中断处理功能。(2)STM32的原理图及特性图2.2stm32原理图ALIENTEKMiniSTM32开发板结构如下:=1\*GB3①CPU:STM32F103RBT6,LQFP64,FLASH:128K,SRAM:20K;=2\*GB3②1个标准的JTAG/SWD调试下载口;=3\*GB3③1个IIC接口的EEPROM芯片,24C02,容量256字节;=4\*GB3④1个标准的2.4/2。8寸LCD接口,支持触摸屏;=5\*GB3⑤1个USB串口,可用于程序下载和代码调试;=6\*GB3⑥1个USBSLAVE接口,用于USB通信;=7\*GB3⑦1组5V电源供应/接入口;=8\*GB3⑧1组3。3V电源供应/接入口=9\*GB3⑨1个复位按钮,可用于复位MCU和LCD=10\*GB3⑩除晶振所占用的IO口之外,其余所有IO口全部引出,其中GPIOA和GPIOB按顺序引出STM32具有价格低、功能强、使用简单、开发方便等几个很有利的优势,在应用上,STM32设计的比较方便的地方有:=1\*GB3①IO口复用重映射功能。由于一些复用功能能够重映射,使得在STM32的PCB设计的时候,方便很多。=2\*GB3②所有的引脚都能够用作中断输入。所有的IO口都能够当作中断输入,这个方面和ARM比起来具有很大的优势,一旦需要中断来解决问题时,任何一个GPIO口都可以作为中断输入,无需要连到几个特殊的脚上,这样给设计过程带了极大的方便。=3\*GB3③支持SWD的调试.STM32可以SWD的调试,只需要2跟IO线,就可以用来下载程序和调试,对引脚不多的型号尤其适用.=4\*GB3④串口下载程序.串口下载代码很多ARM都具有这个功能,STM32也保留了这一优秀设计,极大的降低了开发成本。REF_Ref356941697\r\h(3)STM32的GPIO口简介STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR.其中CRL和CRH控制着每个IO口的模式及输出速率。STM32的IO口位配置表如表2.1所示:配置模式CNF1CNF0MODE1MODE0PxODR寄存器通用输出推挽式(Push—Pull)000110110或1开漏(Open-Drain)10或1复用功能输出推挽式(Push—Pull)10不使用开漏(Open-Drain)1不使用输入模拟输入0000不使用浮空输入1不使用下输入拉100上拉输入1表2.1STM32的IO口位配置表2。2.2键盘设计方案键盘由一组独立的按键构成的,由于弹性按键结构简单、价格低廉、使用方便,所以该设计采用了弹性按键。又由于电梯控制系统的按键相互独立互不影响,所以在该设计中我采用了每个按键分别单独与相应的GPIO口相连。虽然这样连接占用了较多的GPIO口,但是无需一些键盘锁存扫描电路,极大地简化了键盘电路的设计、焊接、和扫描,降低了难度.2.2.3LED指示灯设计方案由于该设计是一个模拟电梯控制系统电梯的开门关门状态难以直接模拟出来。所以我用两个不同颜色的LED小灯来模拟电梯在运行过程中的开关门状态,使模拟过程更加直观。同时在该设计中,对每一个按键分别用一个小灯来指示按键是否按下,使电梯在运行过程中乘客能清楚的了解按键被按的状态。这极大的减少了乘客按错键或重复按键的情况。因为在该设计中每个LED小灯的明灭状态和按键一样互不影响,所以每个小灯分别与相应的GPIO口相连。这样虽然占用了较多的GPIO口,但是这样做极大地降低了电路设计的难度和复杂性,也给编程带来了一些方便.2.2。4数码管显示器设计方案数码管功耗虽然比液晶显示器大而且显示0~9及A~F,但其驱动电路简单,使用方法简单并且价格便宜。本设计中电梯只有三层,因而在电梯运行时只需显示电梯所在层数为1~3。综合考虑选择数码管用来显示层数比较适合。同上述键盘和小灯一样,在本设计中采用了4位8段数码管的段选段直接和相应的GPIO口相连接.这样连接虽然占用了较多的GPIO口,但是这样做省略了译码锁存电路.极大地降低了电路设计的难度和复杂性.由于这四位数码管用于显示电梯内部和每层电梯外部电梯所在的层数并且显示的层数都一样,所以将它们的为选段接到一块,接上有效电平.2.2.5电机驱动设计方案本设计在电梯驱动过程中使用了电机驱动模块,使用了直流电机。这是因为直流电机价格低廉、控制简单。在使用电机时通过电机驱动模块只需两个GPIO口引脚,并通过PWM脉冲就能很方便的控制直流电机的转动、停止、正转、反转以及转速。
第3章系统硬件设计在上一章中,通过讨论获得了最合适的设计方案。在这一章中,我们将通过在stm32开发板上实现这一方案。3.1硬件系统的总体设计使用stm32开发板来完成设计,首先把键盘、LED指示小灯、4位8段数码管、电机驱动模块、电机与stm32开发板上的相应引脚相连接。然后把stm32开发板与+5V电源相连.其连接方式如下:=1\*GB2⑴将PB。8~PB.15分别与数码管的啊a、b、c、d、e、f、g、dp段相连,将数码管的共阳端接高电平,为选段接地;=2\*GB2⑵将PB。0、PB。1、PB.5、PB。6、PC.10~PC。13、PA。3、PA。4分别与相应的LED小灯相连;=3\*GB2⑶将PC.0~PC。8分别与键盘相应的键位链接=4\*GB2⑷将PA。5、PA。6与电机驱动模块连接并将模块的输出端与直流电机连接,将电机驱动模块与高于+5V的电源相连。3.2硬件系统的部分设计3。2。1键盘硬件电路设计本设计的键盘有九个独立的弹性小按键构成,所有键盘的公共端接地另一端与分别与相应的GPIO口相连.所有的GPIO口都设置成上拉输入电平触发模式。一旦小健按下相应的引脚与地接通呈低电平,当程序进行按键查询时到该引脚为低电平,表示按键被按下。此时系统点亮相应的指示灯,随后按键弹起该引脚恢复高电平。系统根据小灯的状态立即或等待执行相应的操作。之后系统继续检测其他按键,按键之间互不影响。键盘电路如下图3。1。按键再按下时由于弹性小按键机械特性,在按键按下和弹起的瞬间会有抖动现象,抖动的时间一般为5~10ms。这个情况在stm32对按键进行查询时造成误判,严重影响了按键的稳定性和电梯运行时系统判断的准确性。所以在编写程序时要在按键查询程序里加上去抖程序.图3。1键盘电路图3.2按键按下时电压变化3。2。2LED指示灯硬件电路设计LED指示等电路是由11个相互独立的颜色不同的LED小灯构成。它们的正极都通过一个510接+5V电源,负极与stm32相应的引脚GPIO口连接。所有的GPIO口都设置成上拉的推挽输出模式。其中两个LED灯为系统模拟开门关门状态的指示灯,剩下的九个LED指示灯分别用作键盘的九个独立按键的指示灯来指示按键是否被按过的状态。当系统按键查询程序查询到有按键被按下时,系统立使stm32相应的GPIO口输出为低电平,点亮相应的指示小灯.系统会一直保持该LED指示灯的点亮状态直到系统完成电梯相应的操作,然后熄灭小灯。小灯之间互不影响.LED指示灯的电路原理图如下. 图3。2LED指示灯电路原理图3.2。3八段数码管硬件电路设计因此三级管基极接地,发射极接+5V电源。八段数码管显示器电路原理图如下图3.3。 不管几位数码管,其显示原理都是一样都是靠点亮内部的发光二极管来发光。从图3.4(a)可看出,一位数码管的引脚10个显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端生产商为了封装统一单位数码管都封装10个引脚,其中第3个引脚和第8个引脚是连在一起的.而的公共端又可以分为共阳极和共阴极,图3。1。4(b)为共阴极内部原理图,图3。1.4(c)为共阳极内部原理图[4]。共阳极数码管内部所有发光的阳极连在一起的接高电平,阴极是互相独立的。它的段选段有a、b、c、d、e、f、g、dp。当想要某一段点亮时就使这一段输入为低电平就行了。例如想要显示数字1,那么给b、c低电平,其他的给高电平就能够显示数字1了.因此我们在用数码管为显示器来显示数字0~9时,首先要对其进行编码,当要显示某个数字式像数码管送入相应的编码就可以显示该数字了.然而共阴极的数码管正好和共阳极的相反,要想点亮数码管a、b、c、d、e、f、g、dp中的某一段即必须使该端的引脚输出为高电平。图3。3数码管显示器电路原理图(a)引脚(b)共阴极(c)共阳极图3。4数码管内部原理图3.2.4电机驱动模块硬件电路电机驱动模块硬件电路主要由L298N直流电机驱动芯片和其外围电路构成,其电路原理图如下图3.5所示。L298N是SGS公司的产品,内部包含4通道逻辑驱动电路,是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。其引脚排列如下图3.6所示。OUT1、OUT2和OUT3、OUT4之间分别接2个电电机驱动模块硬件电路主要由L298N直流电机驱动芯片和其外围电路构成,其电路原理图如下图3.5所示。L298N是SGS公司的产品,内部包含4通道逻辑驱动电路,是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。其引脚排列如下图3.6所示。OUT1、OUT2和OUT3、OUT4之间分别接2个电机IN1、IN2、IN3、IN4引脚从单片机接输入控制电平,控制电机的正转反转。图3.5直流电机驱动模块原理图L298N 逻辑状态表表3。3如下:左电机右电机左电机右电机IN1IN2IN3IN41010正转正转1001正转反转1011正转停0110反转正转1110停正转0101反转反转表3。3
第4章系统软件设计4。1主程序设计电梯控制系统程序是在Keil的环境下使用C语音编写的。由于使用的是stm32开发板,在编程时可以进行模块化编程,即把程序分成一个个功能模块进行编写.这样使编程过程更加规范化,程序结构更加清晰便于阅读,程序在编译过程中更易查错与修改,也便于在日后编程时遇到需要使用相同或相似的子程序模块时可以直接把以前编写过的模块直接拿来使用或修改后使用,使以后的编程更加方便容易。因此程序可分为楼层算法模块、开门关门控制模块、电机控制模块、按键查询模块、显示模块.该电梯以共有3层.其中电梯的层数判断是通过控制电机转动时间来进行的,即电梯转动5s为电梯运行通过一层的高度。其主程序流程图如下图4.1所示:当前楼层是否是目的层下面是否需要电梯当前楼层是否是目的层下面是否需要电梯电梯当前运行方向上面是否需要电梯电梯下移显示层数电梯停止显示、开门电梯上移显示层数程序初始化判断所在的楼层并显示是否需要电梯反向是上行下行否当前楼层是否是目的层电梯停止显示、开门开始反向是是是否否否在主程序首先要对把各个字程序模块的路径加载进去,然后在主函数中首先要进行系统时钟设置和延时初始化,然后要对LED指示灯、按键、电机驱动模块、数码管等与之连接的硬件接口进行初始化。主程序如下:intmain(void){u8F=1;LED_O=1;LED_C=0;Stm32_Clock_Init(9);//系统时钟设置delay_init(72); //延时初始化LED_Init(); //初始化与LED连接的硬件接口KEY_Init();//初始化与按键连接的硬件接口uart_init(72,9600);motor_init(); //初始化与motor连接的硬件接口disp_init(); //初始化与disp连接的硬件接口 在写主函数时为了保证程序一直循环下去,要在主函数中写一个while(1)是循环然后在这个死循环中写出电梯控制系统的主程序。电梯系统在开始运行时它的初始状态有3种可能,电梯从第一层开始运行,电梯从第二层开始运行和电梯从第三层开始运行。下面先介绍电梯从第一层开始时的运行情况。系统在初始化时,默认电梯是从第一层开始运行。一但有人要到第二层或第三层,或者第二层第三层有人需要电梯就上行。在这之前,软件系统会通过if语句进行判定,是否与上述情况相对应的按键被按下,即是否存在LED2==0或LED2_U==0或LED2_D==0或LED3==0或LED3_D==0。若if语句判定条件成立,那么系统控制电梯上行。当到达第二层时,系统会再次通过if语句判定,是否第二层是电梯所要到的层数,若是则电梯停止并打开电梯门,若不是则电梯继续上行到达第三层。当电梯在第二层停下时系统会再次通过if语句进行判定,不过此时上行优先。如果有上行的要求,,即if语句查询到LED3==0||LED3_D==0,那么电梯会先进行上行,满足上行要求。如没有,则系统会再使用if语句进行判定.若有下行要求,即if语句查询到LED1==0||LED1_U==0,则系统执行下行命令。while(1){disp(F);//显示当前楼层KEY_LED();if(F==1)//如果处于第一层{LED_O=1;//电梯门正处于关闭状态LED_C=0;disp(F);if(LED1_U==0)//如果第一层电梯外有人按上行键{ delay_ms(100); LED_O=0;//延时100ms后开门上行键指示灯灭 LED_C=1; LED1_U=1; door(F);//电梯轿厢开关门控制子程序调用}door(F);if(LED2==0||LED2_U==0||LED2_D==0||LED3==0||LED3_D==0)//如果有人要到第2层或第3层,或者第二层第三层有人需要电梯 {motor1(F);//调用电机控制子程序上行F++; disp(F);//显示电梯当前所在楼层 if(LED2==0||LED2_U==0||LED2_D==0)//如果第二层是电梯所要到的层数 { LED_C_K=1; LED_C_K=1; IN1=1; IN2=1;//电机停止,电梯停止在第2层 LED2=1; LED2_U=1; LED2_D=1;//熄灭第二层相对应的键盘指示灯 delay_scan_s(1); LED_O=0; LED_C=1;//电梯开门 door(F); if(LED3==0||LED3_D==0)//如果有人要上第三层或第三层有人需要电梯 { motor1(F);//电梯上行 F++; disp(F);//到达第三层后显示电梯所在楼层 LED1=1; LED2=1; LED3=1; LED3_D=1; LED_C_K=1; LED_C_K=1;//熄灭所有按键指示灯 IN1=1; IN2=1;//电梯停止 delay_scan_s(1); LED_O=0; LED_C=1;//电梯开门 door(F); } elseif(LED1==0||LED1_U==0)//另外在第二层时如果有人要到第第1层或第一层有人需要电梯 { motor1(F);//电梯下行 F--; disp(F);//电梯到达第一层时显示电梯所在楼层 LED1=1; LED2=1; LED3=1; LED1_U=1; LED_C_K=1; LED_C_K=1;//熄灭所有按键指示灯 delay_scan_s(1); LED_O=0; LED_C=1;//开门 door(F); } } elseif(LED3==0||LED3_D==0)////另外在第二层时如果有人要到第第3层或第3层有人需要电梯{ motor1(F);//电梯 上行 F++; disp(F);//电梯到达第3层时显示电梯所在楼层 LED1=1; LED2=1; LED3=1; LED3_D=1; LED_C_K=1; LED_C_K=1;//熄灭所有按键指示灯 IN1=1; IN2=1; delay_scan_s(1); LED_O=0; LED_C=1;//开门 door(F); } }}}如果开始时电梯停在第二层,那么电梯会有两种运行状态,即上行和下行,但此时下行的优先级比上行的高。系统会通过if语句先行判断是否有下行要求,即if是否查询到LED2_U==0||LED2_D==0,若是则系统会控制电梯下行.否则,系统会通过if语句再次行判断是否有下行要求,即if是否查询到LED3==0||LED3_D==0,若是则系统会控制电梯上行。elseif(F==2) {disp(F);//显示电梯所在的层数if(LED2_U==0||LED2_D==0)//如果电梯外有人按上行键或下行键{ delay_ms(100); LED_O=0; LED_C=1;//电梯开门 LED2_U=1; LED2_D==0; door(F);}door(F);if(LED3==0||LED3_D==0)//如果有人到第三层或第三层有人需要电梯{ motor1(F);//电梯上行 F++; disp(F);//显示电梯所到达的层数 LED1=1; LED2=1; LED3=1; LED3_D=1; LED_C_K=1; LED_C_K=1;//熄灭所有按键灯 delay_scan_s(1); LED_O=0; LED_C=1;//开门 door(F);}elseif(LED1==0||LED1_U==0)//如果有人到第1层或第1层有人需要电梯{ motor1(F);//电梯下行 F—-; disp(F);//显示电梯所到达的层数 LED1=1; LED2=1; LED3=1; LED1_U=1; LED_C_K=1; LED_C_K=1;/熄灭所有按键灯 delay_scan_s(1); LED_O=0; LED_C=1;//开门 door(F); } }如果电梯开始时处于第三层,这时电梯只能下行.软件系统会通过if语句进行判定,是否与上述情况相对应的按键被按下,即是否存在LED2==0或LED2_U==0或LED2_D==0或LED1==0或LED1_U==0。若if语句判定条件成立,那么系统控制电梯下行。当到达第二层时,系统会再次通过if语句判定,是否第二层是电梯所要到的层数,若是则电梯停止并打开电梯门,若不是则电梯继续上行到达第三层.当电梯在第二层停下时系统会再次通过if语句进行判定,不过此时下行优先.如果有下行的要求,即if语句查询到LED1==0||LED1_U==0,那么电梯会先进行下行,满足下行要求。如没有,则系统会再使用if语句进行判定。若有上行要求,即if语句查询到LED3==0||LED3_D==0,则系统执行下行命令。elseif(F==3)//如果开始时电梯停在第二层{disp(F);//显示电梯当前所在层数if(LED3_D==0)//如果第三层有人按下行键{ delay_ms(100); LED_O=0;//电梯门打开 LED_C=1; LED1_U=1; door(F);}door(F);if(LED2==0||LED2_D==0||LED2_U==0||LED1==0||LED1_U==0)//如果有人要到第2层或第1层,或者第2层第1层有人需要电梯{ motor1(F);//电梯下行 F——; disp(F);//到达第2层显示层数 if(LED2==0||LED2_D==0||LED2_U==0)//如果第二层时所要到达的楼层 { LED_C_K=1; LED_C_K=1; IN1=1; IN2=1; LED2=1; LED2_U=1; LED2_D=1;//电梯停止延时开门,熄灭相对应的的按键指示灯 delay_scan_s(1); LED_O=0; LED_C=1; door(F); if(LED1==0||LED1_U==0)//如果电梯还要到第一层 { motor2();//电梯下行 F——; disp(F);//到达第一层后显示电梯到达第一层 LED1=1; LED2=1; LED3=1; LED1_U=1; LED_C_K=1; LED_C_K=1;//熄灭相应的按键指示灯 IN1=1; IN2=1;//电梯停止 delay_scan_s(1); LED_O=0; LED_C=1;//延时1s后开门 door(F); } elseif(LED3==0||LED3_D==0)//如果电梯的目的层为第3层 { motor2();//电梯上行 F++; disp(F);//到达第3层后显示电梯到达第3层 LED1=1; LED2=1; LED3=1; LED3_D=1; LED_C_K=1; LED_C_K=1;//熄灭相应的按键指示灯 IN1=1; IN2=1;//电梯停止 delay_scan_s(1); LED_O=0; LED_C=1;//延时1s后开门 door(F); } elseif(LED1==0||LED1_U==0)如果电梯还要到第一层 { motor1(F);//电梯下行 F——; disp(F);//到达第一层后显示电梯到达第一层 LED1=1; LED2=1; LED3=1; LED1_U=1; LED_C_K=1; LED_C_K=1;//熄灭相应的按键指示灯 IN1=1; IN2=1;//电梯停止 delay_scan_s(1); LED_O=0; LED_C=1;//延时1s后开门 door(F); }}}4。2显示程序设计 系统使用4位8段数码管,来显示电梯所在楼层的层数。在本设计中没有使用译码器芯片,而是将数码管段选端的a、b、c、d、e、f、g直接与stm32开发板的GPIO口的PB。8~PB。15连接。在编写显示子程序模块时要对其进行编码,其中数字0~9的编码依次分别为:0xC0FF、0xF9FF、0xA4FF、0xB0FF、0x99FF、0x92FF、0x82FF、0xF8FF、0x80FF、0x90FF.然后要初始化PB.8~PB.9为输出端口,设置为高电平,并使能GPIOB端口的时钟。数码管的显示程序如下:voiddisp_init(){RCC—>APB2ENR|=1〈〈3;//使能PORTB时钟GPIOB->CRH&=0X00000000;GPIOB—〉CRH|=0X33333333;//PB0~PB7推挽输出 GPIOB—>ODR|=0X0000FF00;//PA8输出高}voiddisp(u8num){ GPIOB—〉ODR|=0X0000FF00;GPIOB-〉ODR&=table[num];//送入要显示的数据4。3LED指示灯程序设计在该电梯控制系统中一共使用11个不同颜色的LED指示灯,其中有三种颜色红、黄、绿.在程序中我给每个小灯都命了以名称,每个小灯都代表了电梯在运行过程中不同的情况,这使我们在编程时更加简便。其中有三个黄色的小灯被命名为LED1、LED2、LED3,它们分别是KEY0、KEY1、KEY2这三个按键的指示灯,和按键代表电梯内部1、2、3按键;有两个绿色小灯被命名为LED_O和LED_O_K,其中LED_O代表电梯运行时的电梯开门状态,另一个LED_O_K作为KEY3按键的指示灯,它们合在一起代表电梯内部的开门键。有6个红色的小灯它们分别被命名为LED_C、LED_C_K、LED1_U、LED2_U、LED2_D、LED3_D,其中LED_C代表电梯运行时的电梯关门状态,其余的分别是按键KEY4~KEY8指示灯.在这些红色小灯和按键中, KEY4和与之对应的小灯LED_C_K代表着电梯内部的关门键,LED1_U与KEY5代表电梯外部第一层的上行键,LED2_U与KEY6代表电梯外部第二层的上行键,LED2_D与KEY7代表电梯外部第二层的下行键,LED3_D与KEY8代表电梯外部第三层的下行键。LED指示灯的程序如下:voidLED_Init(void){RCC—〉APB2ENR|=1〈<2; //使能时钟PORTARCC->APB2ENR|=1<<3;//使能PORTB时钟RCC—>APB2ENR|=1〈〈4;//使能PORTC时钟 GPIOA->CRL&=0XFFF00FFF; //PA。3,PA.4推挽输出GPIOA—>CRL|=0X00033000;GPIOA—>ODR|=0X00000018; // PA。3,PA.4输出高GPIOB->CRL&=0XF00FFF00;GPIOB—>CRL|=0X03300033;//PB。0~PB。1,PB.5~PB。6推挽输出 GPIOB—>ODR|=0X00000063;//PB。0~PB.1,PB.5输出高GPIOC—>CRH&=0XFF00000F;GPIOC->CRH|=0X00333330;//PC.9~PC.13推挽输出GPIOC—>ODR|=0X00003E00;//PC.9~PC。13输}4。3键盘查询程序设计在电梯控制系统中,各个按键是互不影响相互独立的。因而在编写按键查询时程序时要使每一个按键的查询程序互不影响。所以不能使用elseif或else等相互间有影响的语句。同时还要设置某一个按键按下其相应的按键指示灯就被点亮。在按键的硬件设计中还提到了弹性按键的抖动情况,为了消除抖动在编程过程中用if语句和延时函数设计当系统查询到有按键按下时延时10ms后再对该键查询一次,这样就可以避免了接抖动对键盘稳定性的影响。将与键盘连接的GPIO口PC。0~PC.8设置成上拉输入,并使能GPIOC的时钟。键盘查询程序如下:voidKEY_LED(void){if(KEY0==0||KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0||KEY6==0||KEY7==0||KEY8==0){delay_ms(10); if(KEY0==0) LED1=0; if(KEY1==0) LED2=0; if(KEY2==0) LED3=0; if(KEY3==0) LED_O_K=0; if(KEY4==0) LED_C_K=0; if(KEY5==0) LED1_U=0; if(KEY6==0) LED2_U=0; if(KEY7==0) LED2_D=0; if(KEY8==0) LED3_D=0;}}4。3门控制程序设计电梯的门控制是一个复杂的过程,她需要按键有非常高的灵敏度,因此在设计该程序时需要设置较高的案件查询频率。又电梯门控制时的时间控制使用的是stm32的精确的延时函数,且这些延时函数只有us级和ms级。所以可以自己设计一个s级延时子程序,并在里面多次调用按键查询子程序,用for循环设置成每50ms进行一次按键查询。这样就有了较高的按键查询频率,按键控制就比较灵敏了.S级延时程序如下:voiddelay_scan_s(u8t){u8i,j;for(i=0;i<t;i++){for(j=0;j<20;j++) { KEY_LED(); delay_ms(40); }}}在电梯由运行状态停下时,系统设1s后电梯门自动打开,然后在4s内若无按键按下,那么电梯门就自动关闭.电梯门控制可分为两种情况。一种是当电梯是开门状态时,用if语句对能控制开门关门的按键进行查询,使用for循环每1s对按键查询一次,连续5s内若无任何控制关门的按键被按下则5s后电梯门自动关闭,否则电梯门立即关闭。另一种一种是当电梯是关门状态时,用if语句对能控制开门关门的按键进行查询,使用for循环每s对按键查询一次,连续3s内若无任何控制开门的按键被按下则3s后电梯门进入待启动状态,否则电梯立即开门,然后再次进入上述的第一种状态。voiddoor(u8f){u8k,l;KEY_LED();if(LED_O==0){ if(LED_C_K==1) { for(k=0;k〈5;) { delay_scan_s(1); if(LED_C_K==1) k++; elseif(LED_C_K==0) { LED_O=1; LED_C=0; delay_ms(50); LED_O_K=1; LED_C_K=1; } } LED_O=1; LED_C=0; delay_ms(50); LED_O_K=1; LED_C_K=1; } elseif(LED_C_K==0) { LED_O=1; LED_C=0; delay_ms(50); LED_O_K=1; LED_C_K=1; }} 当电梯处于关门状态时,不仅仅电梯内的开门键能把电梯门打开,每层楼电梯外部的上行键和下行键,同样也能够将电梯门打开。这样电梯软件系统开门程序根据楼层的不同分三种情况。下面我首先介绍一下当电梯处于第一层时的开门控制程序。 当电梯处于第一层时,首先用if语句检测开门键与第一层上行键是否没有被按下器,即LED_O_K==1&&LED1_U==1。若没有被按下,系统使用for循环语句和if语句每1s对这两个按键查询一次,连续3s内若无任何控制开门的按键被按下则3s后电梯门进入预备运行状态.否则电梯立即关门,然后再次进入开门状态。elseif(LED_C==0){if(f==1){if(LED_O_K==1&&LED1_U==1){ for(l=0;l〈3;){ delay_scan_s(1); if(LED_O_K==1&&LED1_U==1) l++; elseif(LED_O_K==0||LED1_U==0) { LED_O=0; LED_C=1; LED_O_K=1; LED_C_K=1; LED1_U=1; } }}elseif(LED_O_K==0||LED1_U==0){ LED_O=0; LED_C=1; LED_O_K=1; LED_C_K=1; LED1_U=1; }}当电梯处于第二层时,首先用if语句检测开门键、第二层上行键和下行键是否没有被按下器,即LED_O_K==1&&LED2_U==1&&LED2_D==1。若没有被按下,系统使用for循环语句和if语句每1s对这两个按键查询一次,连续3s内若无任何控制开门的按键被按下则3s后电梯门进入预备运行状态。否则电梯立即关门,然后再次进入开门状态。if(f==2){if(LED_O_K==1&&LED2_U==1&&LED3_D==1){for(l=0;l〈3;) { delay_scan_s(1); if(LED_O_K==1&&LED2_U==1&&LED2_D==1) l++; else { LED_O=0; LED_C=1; LED_O_K=1; LED_C_K=1; LED2_U=1; LED2_D=1; } }}else{LED_O=0; LED_C=1; LED_O_K=1; LED_C_K=1; LED2_U=1; LED2_D=1; }}当电梯处于第二层时,首先用if语句检测开门键、第二层上行键和下行键是否没有被按下器,即LED_O_K==1&&LED3_D==1。若没有被按下,系统使用for循环语句和if语句每1s对这两个按键查询一次,连续3s内若无任何控制开门的按键被按下则3s后电梯门进入预备运行状态。否则电梯立即关门,然后再次进入开门状态。if(f==3){if(LED_O_K==1&&LED3_D==1){for(l=0;l〈3;) {delay_scan_s(1); if(LED_O_K==1&&LED3_D==1) l++; else { LED_O=0; LED_C=1; LED_O_K=1; LED_C_K=1; LED3_D=1; } }}else{LED_O=0; LED_C=1; LED_O_K=1; LED_C_K=1; LED3_D=1; }} 4。3电机驱动程序设计系统是通过控制电梯驱动程序进行的,在编程序时给控制电机的引脚PA.5、PA.6相应的高低电平就能控制直流电机的正转、反转、与停止.PA.5P、A。6分别与模块的IN1、IN2相连。当IN1、IN2收到的电平编码为10时电机正转,01时电机反转,11时电机停止。因为在电梯的电机运转的时候除了控制开门关门的按键无效其他按键仍然有效。所以在电机运转的时间控制过程中要高频率的对按键进行查询。在这个程序中我同上文一样,使用if语句和for语句每50ms对键盘查询一次,整个过程持续了5s。这就保证了电机运转过程中除了控制开门关门的按键无效其他按键仍然有效。电机驱动程序如下:voidmotor1(u8f){u16i;LED_C=0; //关门LED_O=1;if(f==1) //电梯如果从第一层开始{ IN1=1; //电机正转,电梯上升 IN2=0; for(i=0;i<100;i++) //延时5s,每50ms查询一次按键状态 { KEY_LED(); LED_O_K=1; LED_C_K=1; delay_ms(40); }}elseif(f==2) //电梯如果从第二层开始{ if(LED3==0||LED3_D==0) //如果第三层有按键被按或电梯内有人到第三层 { IN1=1; //电机正转,电梯上升 IN2=0; for(i=0;i〈100;i++) //延时5s,每50ms查询一次按键状态 { KEY_LED(); LED_O_K=1; LED_C_K=1; delay_ms(40); } IN1=1; //电机停止,电梯停止 IN2=1; }
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 胰腺实性假乳头状瘤诊疗2026
- 2026年度湖南省郴州市专业技术人员继续教育公需科目试卷及答案
- 2026年度广东社区工作者考试典型题(附答案)
- 防校园欺凌教育模板
- 2026年蚌埠市淮上区社区《网格员》练习题及答案
- 《企业形象与CIS》课件
- 《年中考社会》课件
- 《圆明的毁灭》课件
- 农业大学硕士毕业生论文答辩模板
- 组织发展与变革
- 2026苏教版二上数学第二单元第5课时《用1~6的乘法口诀求商》课件
- 2026年北京市中考语文试卷真题及答案详解(精校打印)
- 2026年广东省检察官逐级遴选笔试题目及答案
- 2026年贵州中考(数学)考试试卷(真题)答案解析
- 电力工程施工安全专项方案范本
- 体育建筑设计
- 校园小导游、小讲堂(课件)-2025-2026学年人教版二年级上册数学
- 《演唱 郊游》课件2025-2026学年冀少版三年级下册音乐
- 矿山全员责任制考核制度
- 2026年乡村医生真题【历年真题】附答案详解
- 2026年C1驾照三力测试模拟题库
评论
0/150
提交评论