基于stm32的电梯控制器.docx
《基于stm32的电梯控制器.docx》由会员分享,可在线阅读,更多相关《基于stm32的电梯控制器.docx(35页珍藏版)》请在冰豆网上搜索。
基于stm32的电梯控制器
毕业设计
题目基于STM32的多层电梯控制器的设计
学院信息科学与工程学院
专业电子信息科学与技术
班级电信0902
学生邹强
学号***********
指导教师孔祥玉
二〇一三年六月七日
摘要
世界上第一台电梯是由美国的奥的斯公司制造的。
自从这第一台电梯于1987年问世以来,对生活在城市的楼宇中特别是高楼大厦中的人们的生活和工作带来了巨大的便利。
随着社会经济的飞速发展,电梯与人们的生活越来越密不可分。
本设计的电梯系统采用的是stm32微处理器。
STM32处理器是基于Cortex-M3架构的嵌入式微处理器MCU,其中Cortex-M3架构是ARM公司推出的。
STM32处理器具有高速、高集成度、低功耗、高可靠性等优点。
正是由于STM32处理器具有这些优点,它正适合运用于电梯控制。
本设计中的电梯控制系统主要运用了STM32处理器GPIO口操作和其精确地定时功能。
该电梯系统一共分6个部分,它们是STM32处理器、电源系统、数码管显示器、键盘、LED小灯、直流电机驱动模块。
这些部分是直接与STM32的GPIO口连接的,所以它们占用的GPIO口较多。
关键词:
STM32处理器;Cortex-M3架构;直流电机驱动模块
ABSTRACT
Theworld'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
第1章绪论
1.1课题背景
1.1.1选题背景
电梯是一种由电动机作为驱动力的竖直升降设备,装有立方体吊舱并设有电梯门,用于多层建筑乘人或载运货物。
它的轿厢运行在至少两列平行竖直的或近似平行竖直的刚性轨道之间,一般服务与超过规定高度的楼宇内。
轿厢尺寸与结构形式便于乘客出入或装卸货物。
而自从第一台电梯在美国问世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.1
图2.1系统硬件结构
各功能模块简介:
(1)电源系统:
为整个系统提供+5V电源;
(2)键盘:
每个键位互不影响用以控制电梯运行状态;
(3)LED指示小灯:
用以指示小健是否被按下和电梯门开关状态;
(4)4位8段数码管:
用于显示电梯内部和每层电梯外部电梯所在的层数;
(5)电机驱动模块:
用于驱动电机和控制电机正反转及转速;
(6)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开发板结构如下:
CPU:
STM32F103RBT6,LQFP64,FLASH:
128K,SRAM:
20K;
1个标准的JTAG/SWD调试下载口;
1个IIC接口的EEPROM芯片,24C02,容量256字节;
1个标准的2.4/2.8寸LCD接口,支持触摸屏;
1个USB串口,可用于程序下载和代码调试;
1个USBSLAVE接口,用于USB通信;
1组5V电源供应/接入口;
1组3.3V电源供应/接入口
1个复位按钮,可用于复位MCU和LCD
除晶振所占用的IO口之外,其余所有IO口全部引出,其中GPIOA和GPIOB按顺序引出
STM32具有价格低、功能强、使用简单、开发方便等几个很有利的优势,在应用上,STM32设计的比较方便的地方有:
IO口复用重映射功能。
由于一些复用功能能够重映射,使得在STM32的PCB设计的时候,方便很多。
所有的引脚都能够用作中断输入。
所有的IO口都能够当作中断输入,这个方面和ARM比起来具有很大的优势,一旦需要中断来解决问题时,任何一个GPIO口都可以作为中断输入,无需要连到几个特殊的脚上,这样给设计过程带了极大的方便。
支持SWD的调试。
STM32可以SWD的调试,只需要2跟IO线,就可以用来下载程序和调试,对引脚不多的型号尤其适用。
串口下载程序。
串口下载代码很多ARM都具有这个功能,STM32也保留了这一优秀设计,极大的降低了开发成本。
(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所示:
配置模式
CNF1
CNF0
MODE1
MODE0
PxODR寄存器
通用输出
推挽式(Push-Pull)
0
0
01
10
11
0或1
开漏(Open-Drain)
1
0或1
复用功能输出
推挽式(Push-Pull)
1
0
不使用
开漏(Open-Drain)
1
不使用
输入
模拟输入
0
0
00
不使用
浮空输入
1
不使用
下输入拉
1
0
0
上拉输入
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电源相连。
其连接方式如下:
将PB.8~PB.15分别与数码管的啊a、b、c、d、e、f、g、dp段相连,将数码管的共阳端接高电平,为选段接地;
将PB.0、PB.1、PB.5、PB.6、PC.10~PC.13、PA.3、PA.4分别与相应的LED小灯相连;
将PC.0~PC.8分别与键盘相应的键位链接
将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个电
机IN1、IN2、IN3、IN4引脚从单片机接输入控制电平,控制电机的正转反转。
图3.5直流电机驱动模块原理图
L298N逻辑状态表表3.3如下:
左电机
右电机
左电机
右电机
IN1
IN2
IN3
IN4
1
0
1
0
正转
正转
1
0
0
1
正转
反转
1
0
1
1
正转
停
0
1
1
0
反转
正转
1
1
1
0
停
正转
0
1
0
1
反转
反转
表3.3
第4章系统软件设计
4.1主程序设计
电梯控制系统程序是在Keil的环境下使用C语音编写的。
由于使用的是stm32开发板,在编程时可以进行模块化编程,即把程序分成一个个功能模块进行编写。
这样使编程过程更加规范化,程序结构更加清晰便于阅读,程序在编译过程中更易查错与修改,也便于在日后编程时遇到需要使用相同或相似的子程序模块时可以直接把以前编写过的模块直接拿来使用或修改后使用,使以后的编程更加方便容易。
因此程序可分为楼层算法模块、开门关门控制模块、电机控制模块、按键查询模块、显示模块。
该电梯以共有3层。
其中电梯的层数判断是通过控制电机转动时间来进行的,即电梯转动5s为电梯运行通过一层的高度。
其主程序流程图如下图4.1所示:
图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);//显示电梯当前所在楼