彭银桥 戴锦波
摘要 针对传统照明系统中的灯光控制存在不方便、灵活性差、不易集中管理的问题,设计了一种基于STM32微控制器和ZigBee无线通信技术的智能灯光控制系统。详细分析了STM32主控制器、ZigBee协调器节点与ZigBee终端节点及其它们之间通信的工作流程,设计了相应的软件,实现了室内LED灯光的开关控制和亮度调节。
【关键词】STM32 ZigBee CC2530 LED灯光控制
1 引言
随着经济的不断发展及生活水平的提高,人们希望提升自己的生活品质。在人们的居住环境中,照明系统是其中一个必不可少的部分。进入二十一世纪以来,LED灯凭借着“节能、环保、寿命长”的优势,渐渐取代了传统的白炽灯。虽然在传统的照明系统中,LED灯成为了主流的照明光源,但依旧没法掩盖传统照明系统“管理不便、控制单一、灵活性差”的缺点。传统照明系统通常采取单独的或若干个开关对电路进行通断操作来开启或关闭LED灯,操作极不方便,而且也不能对LED灯的亮度进行调节,缺乏灵活性。随着计算机技术、通信技术、网络技术不断发展,智能灯光控制系统应运而生。智能灯光控制系统能够根据不同的用户需求、环境条件等采取不同的照明方案,甚至能够根据当前环境自动调整照明参数。同传统照明系统相比,智能灯光控制系统与无线通信技术相结合,能够对众多的LED灯进行统一管理,适用于不同的场景,提高了灵活性。由此可见,新型的智能灯光控制系统能够进一步提升人们的生活品质,而且其將成为未来的主流照明系统。
2 系统总体架构与硬件设计
无线LED灯光控制必需用到无线传输技术,如ZigBee、WIFI、蓝牙、CAN、RS485等,其中ZigBee是基于IEEE802.15.4协议开发的新一代无线通信技术,具有稳定性强、组网能力强大、网络拓扑结构灵活、功耗低、成本低等优点,因此采用ZigBee无线通信技术作为系统的无线传输技术。基于STM32的无线LED灯光控制系统的总体架构如图1所示。利用多个ZigBee终端节点组成ZigBee网络,每个ZigBee终端节点通过LED驱动器和继电器电路与LED灯相连,通过LED驱动器和继电器电路的配合对LED灯进行开启、关闭、亮度调节操作;ZigBee终端节点将LED灯的状态信息数据,经由ZigBee协调器传输到STM32主控制器,主控制器对接收到的数据进行分析,然后在LCD屏上显示。另一方面,主控制器经由ZigBee协调器节点将数据发送到ZigBee终端节点,终端节点对接收到的数据进行分析,然后对LED灯采取对应的操作,如开启、关闭、增加亮度、降低亮度等操作。
STM32F103RCT6芯片具有功耗低、功能强、价格低等特点,因此选用STM32F103RCT6芯片作为主控制器。CC2530系列芯片支持IEEE802.15.4/ZigBee协议,通常结合半开源协议栈Zstack 2007使用,其成为功能强大的针对ZigBee应用的片上系统解决方案;002530芯片采用8051增强型内核,其性能强、功耗低,因而选用CC2530F256芯片作为ZigBee应用开发。
系统硬件主要分为主控制器和ZigBee节点硬件两部分。主控制器硬件主要包括中央处理器、电源电路、复位电路、仿真调试接口电路、LCD屏显示电路、按键和LED电路;ZigBee节点硬件主要包括CC2530核心板和功能底板两大部分,功能底板部分包含了电源电路、仿真调试接口电路、按键和LED状态灯电路。ZigBee终端节点通过外围电路的LED驱动器和继电器电路与LED灯具相连。
3 系统软件设计
STM32系列芯片软件开发采用KeilMDK-ARM,ZigBee节点软件开发采用TI公司的Z-Stack协议栈,以及IAR EmbeddedWorkbench IDE。该系统软件设计分为STM32主控制器、ZigBee协调器节点和ZigBee终端节点软件设计,以及STM32主控制器与ZigBee协调器节点的串口通信和ZigBee协调器节点与ZigBee终端节点的ZigBee无线协议通信软件设计,设计方案如图2所示。
3.1 主控制器软件设计
STM32主控制器主要负责LCD屏菜单显示、按键的响应与ZigBee协调器节点的串口通信等。主控制器程序流程如图3所示。图中,LED设备列表菜单用于显示位于ZigBee网络中的所有LED设备,可进行LED设备的搜索和选中某个LED设备;LED设备控制菜单用于对具体某个LED设备的控制操作,当在上一级的LED设备列表菜单中选中了某个LED设备后,便进入此菜单。在此菜单中显示LED设备的状态信息,如网络地址、开关状态和亮度状态,并且可进行“开/关…‘增加亮度…降低亮度”控制操作。
3.2 主控制器与ZigBee协调器节点的串口通信
采用STM32主控制器的串口2与ZigBee协调器节点之间进行数据传输。
3.2.1 主控制器发送数据
设计结构体Packet来封装主控制器发送的数据,Packet类型的定义如下:
typedef struct Packet{
uint8_t sop;
uint8_t objAddr_L;
uint8_t objAddr_H;
uint8_t objCmd;
uint8_t dataLen;
);
在结构体Packet中,sop是数据帧头,用于接收方识别;objAddr L是ZigBee节点的16位网络地址的低8位;objAddr_H是ZigBee节点的16位网络地址的高8位;objCmd是控制命令码,有用于控制LED灯的开/关、增加亮度和降低亮度,以及获取ZigBee终端节点的网络地址的命令码等,其命令码分别用OxOl-Ox06表示,daralen是objAddr_H、objAddr_L和objCmd三者所占的字节数。
STM32主控制器以Packet类型数据为单位向ZigBee协调器节点发送数据,每次发送一个Packet类型的数据包。为了方便数据的封装和发送,设计了InPacked和SendPacket函数来封装和发送Packet类型数据,二者定义如下:
Packet* InPacked(uint16_t *nodeAddr,uint8_t *cmd):
函数的形参nodeAddr为ZigBee节点16位网络地址变量的内存地址,cmd则是命令码变量的内存地址。此函数可以目标节点的地址和控制码封装在Packet类型的数据中,然后返回一个指向这个Packet类型数据的指针。
void SendPacket(Packet *packetToSend):
函数的形参是一个Packet类型的指针,调用该函数时只需传入Packet数据包的地址,便可以通过串口发送给ZigBee协调器节点。
3.2.2 主控制器接收数据
STM32主控制器通过串口接收来自ZigBee协调器节点的数据,二者之间的数据收发遵循一定的格式:数据帧头+数据帧长+数据+数据帧结束标志。
主控制器接收的数据有两种:一种是接收的数据是ZigBee节点的16位网络地址,另一种是包含LED灯的状态信息的数据,两者定义的数据帧头、数据帧长和数据帧结束标志都不同,数据帧格式定义见表1。
主控制器使用串口接收中断的方式接收数据,串口接收中断服务程序流程如图4所示。串口中断服务程序中,根据不同的状态分阶段接收若干个数据帧,直到完整地接收所有数据。当串口接收到数据时,会根据当前状态执行不同的操作。从最初的未准备接收数据时的空闲状态状态开始,根据接收的数据帧头不同,状态可能变成接收LED灯状态信息数据帧长的状态或接收ZigBee节点网络地址数据帧长的状态;然后根据当前状態接收代表数据帧长的字节数据,状态转变成接收LED灯状态信息数据的状态或接收ZigBee节点网络地址数据的状态用于接收数目等于数据帧长的若干字节数据,直至接收完毕,最后将状态转变为未准备接收数据时的空闲状态,以便等待下一次的数据帧。
3.3 ZigBee节点的软件设计
ZigBee节点的软件设计分为协调器节点软件设计和终端节点软件设计。设计使用了Z-Stack协议栈,它是通信协议和用户之间的一个接口。ZigBee协议栈将物理层、MAC层、网络层、应用支持子层和应用层的各层协议封装在一起,提供API函数给用户进行无线数据的收发。Z-Stack协议栈里运行着一个名为OSAL的小型任务调度程序,通过任务轮询的方式执行各种任务,用户只需向协议栈中添加任务即可。
协调器节点的主要任务是负责管理终端节点的网络加入、与STM32串口通信以及向终端节点发送数据,协调器节点程序流程如图5所示。
终端节点的作用是接收来自协调器节点的数据,对数据进行分析,执行LED控制操作或者发送LED灯状态信息到协调器节点。终端节点程序流程如图6所示。
4 结语
基于STM32F103RCT6微控制器、CC2530F256芯片和ZigBee无线通信技术设计了LED智能灯光控制系统。详细分析了STM32主控制器与ZigBee协调器节点之间串口通信和ZigBee协调器节点与ZigBee终端节点的ZigBee无线协议通信及其工作流程,设计了用于STM32主控制器发送数据的数据结构、封装和发送功能函数,以及主控制器接收数据的数据帧格式。在实际测试中,系统运行良好,很好地实现了室内LED灯光的开关控制和亮度调节。
参考文献
[1]龚兆岗,论LED照明灯具的散热[J].现代显示,2012,19 (09):113-116.
[2]申浚,基于ZigBee的室内智能照明系统设计[J].数字技术与应用,2012, 30 (09):149-150.
[3]吴曼,谢红福,王晓梅.ZigBee无线通讯技术在物联网系统中的应用研究[J].工业控制计算机,2011,24 (08): 59-60,69.
[4]王旭升.基于ZigBee的智能建筑灯光控制系统设计[J].机电工程技术,2011,41 (12):22-25,
[5]徐健,杨珊珊.基于CC2530的ZigBee协调器节点设计[J].物联网技术,2012,2 (05):55-57.
[6]黄太波,赵华伟,潘金秋,聂培尧,杨泽军.ZigBee协议栈的安全体系综述[J].山东科学,2012,29 (02): 59-66.