电梯控制系统的实现,附软硬件架构图
扫描二维码
随时随地手机看文章
一、项目概述
1.1 引言
电梯技术包括电梯电机的拖动技术和电梯运行的控制技术,本项目主要在意探索实现电梯运行的优化,主要实现对于电梯电机的优化控制并实现电梯系统的基本性能与扩展性能。国产电梯控制技术过去一直是以继电器,接触器为核心。系统庞大,复杂,所用控制柜很大,因此使用微机电梯控制系统,以期提高运行可靠性。
1.2 项目背景/选题动机
单片机体积小,处理速度快,价格低廉,功能强大,是合适的控制系统。对电梯的控制主要是选层、启动、换速、平层、停车等几个环节,其中以选层环节最为复杂。与通常的电器控制相比,单片机系统不需要通过“选层器”并且配备以大量的中间继电器作为选层电路的控制设备,避免了设备多,检修困难,运行维护不便,造价成本高;应用微机控制可以取消选层器和大量的中间继电器,而且应用单片机控制,又相对于应用其他微机减少了外围设备的接口芯片、增强了可靠性。因此此次我们使用ATMEL公司的EVK1100为核心进行集成优化控制与管理。
二、需求分析
2.1 功能要求
基本要求
A 电梯在楼层中的调度
B 电梯门的自动开启
C 电梯中电机的控制
D 电梯的故障检测
扩展要求(根据开发板的资源所做的扩展)
A 电梯中的照明控制
B 电梯中的温度显示
2.2 性能要求
在故障检修模式键被按下时,切换至故障检修模式,电梯停止运行工作人员可以进行检修,循环检测电梯的模式是否变化,当出现模式的变化时,切换到相应的模式下。
在一般运行模式键被按下时,切换至一般运行模式,电梯实现一般的功能要求,循环检测电梯的模式是否变化,当出现模式的变化时,切换到相应的模式下。
在直接运行模式键被按下时,切换至直接运行模式,电梯实现直接运行,为紧急情况争取时间,循环检测模式是否变化,当出现模式的变化时,切换到相应的模式下。
故障检修模式下,电梯停止运行,停止外部讯号对于电梯的调度(对于模式转换键,在此功能没出现故障的时候任然响应),显示当前楼层和温度,使能照明。
一般运行模式下,电梯一般运行,对于外部讯号,通过电梯的调度算法和对于电梯的中电机的控制实现响应,使能模式转换键,显示当前楼层和温度,对于照明的使能通过压力传感器的输入进行控制。
直接运行模式下,电梯的性能要求和一般运行模式中基本相同,唯一不同的是电梯的调度算法,电梯会直接来到电梯的直接运行模式键被按下的楼层,并在载人以后直接回到底层。
3.1 系统功能实现原理
利用EVK1100开发平台提供的一些应用:温度,光照,LCD,PWM输出和AVR芯片的优越的控制功能加上一些外围的一些模块:压力,H桥驱动,语音输入输出 等实现电梯的简单的模拟层次上的控制(主要的控制在与电机的控制,照明的控制和温度显示)。在电梯的控制当中特点在与对于电梯中照明的控制(压力传感没有人在电梯中时关掉照明,实现环保节能的目的)和直接运行模式的引入。
图1 系统硬件结构框图
3.2 硬件平台选用及资源配置
Atmel公司推出的AVR单排年级是很引人注目的一款为处理器。这种芯片基于新的RISC机构,在设计上采用了流水线的结构,在执行前一条指令时,同时取出下一条指令,它的Flash以及强大的外围接口能力使它成为目前最为流行的单片机之一。本设计采用EVK1100作为控制系统的核心。
A H桥驱动
如图所示,H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。
图2 H桥驱动
要使电机运转,必须使对角线上的一对三极管导通。当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。当电流从Q1流经电机再流向Q4,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动。另一对三极管Q2和Q3导通的情况,电流将从右至左流过电机。当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动。
实际使用的时候,用分立件制作H桥式是很麻烦的,好在现在市面上有很多封装好的H桥集成电路,接上电源、电机和控制信号就可以使用了,在额定的电压和电流内使用非常方便可靠。比如常用的L293D、L298N、TA7257P、SN754410等。
B 压力传感
压力传感器负责测量电梯里的承受压力,判断电梯里是否有人,如果没人,将控制电梯里的灯变暗。除此功能之外,当压力到达一定程度时,传感器将判断出超出承受范围,电梯将不能继续运行。在选择产品时,我们需要综合考虑线性度好、外围电路简单、灵敏度高,价格不高等综合因素。C 直流电机
直流电机是本项目的核心部分,起到了控制电梯的运动,它的正转反转也将由电机来驱动,在没有具体电梯材料的情况下,观察电机的驱动运作情况可以直接定性的反映本项目的情况。
C 电机测速模块
一块长度为l,宽度为b,厚度为d的半导体薄片,当它被置于磁感应强度为B的磁场中,如果在其相对两边流通控制电流I,且磁场方向与电流方向正交,则在该半导体另外两边将产生一个与控制电流I和磁感应强度B乘积成正比的电势UH,即UH=KHIB,其中KH为霍尔元件的灵敏度,该电势称为霍尔电势,该半导体薄片就是霍尔元件,其大小和外磁场及电流成比例。霍尔开关传感器由于其体积小,无触点,动态特性好,使用寿命长等特点,广泛应用于测量转动物体旋转速度领域。这里选用SPRAGUE公司生产的霍尔转速传感器,它是一种硅单片集成电路,其内部含有稳压电路、霍尔电势发生器、放大器、史密特触发器和集电极开路输出电路,具有工作电压范围宽、可靠性高、外电路简单、输出电平可与各种数字电路兼容等特点。
霍尔传感器信号放大器将霍尔电势UH放大后再经整形、放大,输出幅值相等、频率变化的方波信号,该霍尔电势的幅值随磁场强度变化而变化。
转速的测量方法有很多种,根据脉冲计数实现转速测量的方法主要有M法(测频法)、T法(测周期法)和MPT法(频率周期法)。该系统采用M法(测频法),霍尔传感器的测速电路,如图所示。
3.3系统软件架构
电梯控制的软件框架由电梯的模式作为主体框架,以完成模式下的功能为驱动进行设计,各个模式的简介如下:
故障修理模式:由管理员手动切换,在故障模式下工程人员可以实现对于电梯的故障检修
一般运行模式:由管理员手动切换,一般运行模式是电梯的主要模式,完成电梯的主要功能
直接运行模式:由用户切换或者管理员切换,直接运行模式下,电梯可以从当前层面直接到达底层。当出现火宅或者有病人需要急救时可以避免电梯在中间层停靠,以此争取宝贵的时间
3.4 系统软件流程
软件的设计是根据状态机的方式实现的,具体的软件框图如下:
图3 程序运行流程图
3.4 系统预计实现结果
一些头文件的申明
一些变量的申明
#define repairMode 00
#define generalrunMode 01
#define direcltyrunMode 10
int setModeR_G(int currentMode int premode); //负责状态之间的切换
int setModeG_R(int currentMode int premode); //mode为两位变量,由拨码开关在I/O口读入
int setModeG_D(int currentMode int premode);
int setModeD_G(int currentMode int premode);
//状态切换会返回置位bool量 modechange
int getmode() //读取mode的当前的值,并且刷新mode和premode
Void lcd_initialize(void) //负责显示屏的初始化
Void port_initalize(void) //负责端口的初始化
Void motor_initalize(void) //负责电机的初始化
Void lighting_initalize(void) //负责照明的初始化
Void elevatordoor_initalize(void) //负责电梯门的初始化
Void lcd_display(int temperature); //负责温度的显示
Void eledoor_allopen(); //电梯门在检修模式下常开
Void eledoor(); //电梯门在其他两个模式下的运行方式
Void motor_stop();
int motor_genrun();
int motor_dirrun(); //返回一个Int值dooropen为1,控制电梯门的开启
//电梯在三种模式下的运行方式
Void light_display(int pressure); //电灯的开关控制
Void communicate(); //通信方法
Void repair() //检修模式下的工作方式
{
While(modechange==0)
{
Communicate();
Eledoor_allopen();
Light_display();
Lcd_display(int temperature);
Int getmode();
If(premode==01&&mode==00)
setModeG_R();
}
}
Void generalrun() //一般运行模式下的工作方式
{
While(modechange==0)
{
Communicate();
Light_display();
Lcd_display(int temperature);
If(premode==01&&mode==00)
setModeG_R();
If(premode==01&&mode==10)
setModeG_D();
}
}
Void directlyrun() //直接运行下的工作方式
{
While(modechange==0)
{
Communicate();
Light_display();
Lcd_display(int temperature);
Int getmode();
If(premode==10&&mode==01)
setModeD_G();
}
}
Void initialize(void) //负责总体的初始化
{
currentMode=generalrunMode;
Lcd_initialize();
Port_initialize();
motor_initalize();
lighting_initalize();
elevatordoor_initalize();
}
Int main()
{
Initialize();
While(1)
{
Switch(currentMode)
{
Case repairMode;
Repair();
Break;
Case generalrunMode;
Generalrun();
Break;
Case directltyrunMode;
Directltyrun();
Break;
}
}
}