【RT-Thread作品秀】基于RT-T、NB-Iot的开关柜应急电源设计
作者:王国伟
概述
设计目的
在日常生活中,我们经常会遇到突然断电的情况,无论是由于用电习惯不好造成的跳闸,还是在市电突然断电的情况下,开关柜内的检测设备会停止工作,这是不允许的,所以本作品设计了基于RT-Thread、NBIot的开关柜应急电源,解决了以上问题。
应用领域
我们这个产品的主要作用是基于、NB-Iot的开关柜应急电源,除此之外还可以广泛应用于节能供电、大楼照明、道路交通照明、隧道照明、电力、工矿企业、防电梯等。快速切换型应急电源针对于切换时间要求严格的设备或特殊照明系统(高压钠灯、汞灯、金卤灯等气体放电灯)、数控产品、精密仪器设备。所以总体来说,我们的产品的实用性很高。
主要技术特点本作品由4部分组成:反激式开关电源(自主设计)、NB-iot模块、(基于stm32单片机采用RT-Thread操作系统)控制单元、蓄电池组成,其中前三者集成到一块PCB上,可以完成为蓄电池充电、为柜内设备供电、蓄电池定期活化、红外遥控活化、蓄电池过放保护等功能。在市电状态下采用市电为开关柜内检测设备供电。
市电断电情况下由蓄电池为柜内设备供电。同时将市电还是蓄电池供电的状况及电池电量等信息通过NB-Iot物联网模块上传至中移OneNet平台,用户可通过网页监控断电保护系统运行状态。
开发环境(所采用的软、硬件方案)
硬件:stm32f103,M5311,反激式开关电源
RT-Thread版本:Nano
开发工具及版本:AD09 MDK5.14
RT-Thread使用情况概述
如软件流程图2.1-B所示,STM32基于RT-Thread Nano进行编写,共分为四个线程。线程1为NB-IOT模块软件初始化线程,功能为检查SIM卡是否插入、信号是否正常、以及与OneNet云平台建立连接;线程2为蓄电池电量、电网状态读取线程,功能为实时读取蓄电池的电量以及电网是否断电;线程3为系统控制线程,功能为根据系统的状态输出高低电平控制晶体管电路的导通和断开,并进行状态指示;线程4为信息上传线程,功能为将系统的状态信息(蓄电池电量、电网状态)上传OneNet云平台。
硬件框架
(1)系统中的各个模块的电源供给:
反激式开关电源以市电220V作为输入,输出DC24V供给STM32控制系统的串联型稳压电路转换为3.3V作为STM32控制系统的电源,同时DC24V 供给NB-IOT模块中的X34063电源模块,同样转换为3.3V作为NB-IOT模块的电源(之所以要把STM32控制系统、NBIOT模块分开供电,是因为要保证系统中的NB-IOT模块拔出后,系统仍能正常运行,而串联型稳压电源的最大输出电流不足以额外给NB-IOT模块供电)。当市电状态异常时,反激式开关电源无DC输出,串联型稳压电路和X34063的电源模块由蓄电池供电。
(2)系统中的信号采集:
本系统通过反激式开关电源的次级线圈的输出来检测市电供电情况,若市电供电异常(停电),则反激式开关电源停止工作,电源次级无输出。反之,若市电供电正常,反激式开关电源工作正常,电源次级有输出。市电状态监测电路将电源次级的电平作为输入,输出TTL电平向STM32控制系统通知市电状态(与反激式开关电源隔离)。
蓄电池的电量通过AD采样后信号传送至STM32控制系统,STM32控制系统经过线性运算,得知蓄电池电量。
(3)系统中的控制信号:
STM32控制系统通过输出高低电平控制晶体管开关电路A、B的导通与断开,晶体管开关电路A控制反激式开关电源是否给蓄电池充电;晶体管开关电路B控制蓄电池是给负载供电。STM32控制系统通过串口向NB-IOT模块收发数据,NBIOT模块再将数据上传至OneNet云平台。
(4)系统的控制逻辑:
当市电供电正常时,通过反激式开关电源给蓄电池充电,同时反激式开关电源给负载、STM32控制系统、NB-IOT模块供电,若市电供电异常(停电),STM32控制系统判断蓄电池电量,若蓄电池电量充足则由蓄电池给负载、STM32控制系统、NB-IOT模块供电。同时将市电供电状态、蓄电池的电量通过NB-IOT模块上传至OneNet云平台,设备上的指示灯指示设备工作状态、蓄电池是否窃电等信息。用户可以查看设备指示灯,或在OneNet云平台在线查看系统运行状态,来实时监测电力供应情况。
软件框架说明
STM32基于RT-Thread Nano进行编写,共分为四个线程。线程1为NB-IOT模块软件初始化线程,功能为检查SIM卡是否插入、信号是否正常、以及与OneNet云平台建立连接线程2为蓄电池电量、电网状态读取线程,功能为实时读取蓄电池的电量以及电网是否断电;线程3为系统控制线程,功能为根据系统的状态输出高低电平控制晶体管电路的导通和断开,并进行状态指示;线程4为信息上传线程,功能为将系统的状态信息(蓄电池电量、电网状态)上传OneNet云平台。
当单片机程序开始运行时。首先运行rt_hw_init()函数,进行硬件初始化包括,控制端口IO口的初始化、AD采样端口的初始化、串口的初始化等。随后进入线程1进行NB-IOT模块的软件初始化,当初始化完成时将标记量置1。当标记量为1时说明初始化已经完成,可以执行2、3、4线程。
软件模块说明
源码文件中HardWare文件夹中为各个模块的代码。代码较为简单这里不再做说明。
演示效果
比赛感悟
经历了作品题目的确立、设备的制作和调试、裸机代码编写,和RT-Thread的移植,RT-Thread是组内成员第一次接触到的RTOS,是一款开源的、可扩展性好、方便剪裁移植的国产实时操作系统。虽然已经久仰RT-Thread大名,只有在自己阅读野火编写的RT-Thread的内核源码和亲手移植的过程中才能真正的体会到它的灵巧、高效。欣赏RT-Thread的内核源码和亲手移植的过程中,锻炼了自己的编程技巧和调试技巧,而且在使用过RT-Thread后,如果日后再使用其他RTOS也不是一件难事了。这次比赛不仅使得我们的能力得到了锻炼,也使得我们的眼界更加开阔。感谢主办发为我们提供这次比赛机会,谢谢。