APP下载

基于嵌入式和ZigBee 技术的节能系统的设计与实现

2012-12-22侯艳波秦会斌胡建人周迎新

电子器件 2012年6期
关键词:串口终端电路

侯艳波,秦会斌 ,胡建人,周迎新

(杭州电子科技大学电子信息学院,杭州310018)

近年来,随着物联网概念的提出,无线通信和无线传感器网络技术得到了越来越广泛的应用。ZigBee 作为一种短距离无线通信网络技术,因为其有着低成本,低功耗,高容量,高安全,体积小,自组网等技术优势,正越来越受工程师们的青睐[4]。ZigBee 主要应用在家庭和楼宇的自动控制,商业中的智慧标签,智能交通以及无线抄表领域。本文将ZigBee 技术应用于家庭控温节能系统,可以使系统安装免于布线,扩展及维护更加方便。

采用高性能的ARM 处理器作为系统控制核心,移植操作系统后可以提供给用户良好的交互界面,另一方面系统的功能升级变的更加容易。

1 控温节能系统的结构

家庭控温节能系统主要由控制核心、ZigBee 无线通信网络、终端执行单元3 部分组成。家庭控温节能系统的结构框图如图1 所示。

控制核心的ARM 处理单元通过RS232 接口与ZigBee 网络的协调器连接到无线网络中,与各个终端执行单元通过无线信号进行通信。执行单元的MCU(Atmega16 单片机)通过RS232 接口和ZigBee网络的终端节点连在一起接入网络,通过ZigBee 终端节点接收来自控制核心的命令或者上传传感器采集的数据到控制核心。如果遇到通信距离很大或者障碍物较多阻碍信号的问题,可采取加入ZigBee 路由节点中继的方法解决。

图1 控温节能系统框图

在执行单元可以加入若干受控对象。本系统利用执行单元1 完成对窗子开或关的控制,利用执行单元2 完成对窗帘开合的控制,利用执行单元3 完成对空调的控制。各个执行单元模块添加了光强传感器(TSL2561)及温度传感器(DS18B20),传感器采集数据后通过ZigBee 终端节点传送给ZigBee 网络的协调器节点,最后由协调器节点汇集各个执行单元的数据传送给控制核心。控制中心收到数据处理完毕后,完成控制指令的自动发送,也可以人为地发送控制命令给各执行单元。例如:夏天的中午光照很强烈,晴朗的天气里室内光照强度可达500 lx ~5 000 lx,阳光照进屋内会使室温迅速升高。当控制核心检测到室内光照超过1 000 lx,温度超过28 ℃时就会向执行单元发送关窗,拉窗帘遮光的命令。这样就能够减少空调的使用,达到节约电能的目的。如果温度继续上升,当控制核心检测到室温超过32 ℃时会发送打开空调的命令,并将温度设定为28 ℃的环保温度值,提供一个适宜的温度环境。

使用ZigBee 和ARM 技术为系统功能扩展提供了极大的便利。例如,当原有系统中需要新加入灯光节能控制的功能时,只需要增加一个ZigBee 终端节点连接到灯光控制的执行单元电路上,然后控制核心ARM 处理器的操作系统中加入相应的软件即可完成功能扩展。在此过程中无须进行过多布线,也无须改变原有系统的功能模块。

2 系统的电路设计

该系统的电路设计工作主要由控制核心电路设计,ZigBee 模块电路设计以及执行单元电路设计等3 部分构成。这里简要介绍前2 部分。

2.1 控制核心的接口电路

图2 为控制核心的接口电路。S3C2440 内部集成了LCD 控制器,可将触摸屏引脚对应连接。TXD与RXD 为串口的TTL 发送与接收端,与MAX3232对应引脚相连。为了能够远程监控系统状态,ARM处理器外接了DM9000 网卡接入因特网。

图2 控制核心接口电路

2.2 串口通信电路

图3 是串口TTL 电平转232 电平的转换电路。控制核心的ARM 处理器及ZigBee 模块的CC2530和执行单元的Atmega16 的串口引脚都是TTL 电平,为了能与PC 机进行串口通信方便调试程序,用MAX3232 芯片将TTL 电平转换为232 电平。

图3 MAX3232 串口通信电路

2.3 ZigBee 无线通信模块电路

图4为ZigBee 无线通信模块电路。ZigBee 网络中的所有节点都可以使用同一个电路,在ZigBee无线网络中的协调器功能、路由功能及终端功能是由软件来区分的[5-6]。

图4 ZigBee 无线通信模块电路

3 系统的软件设计

3.1 控制核心的软件设计

控制核心的处理器外接一块256 M Nandflash 芯片和一块RAM 芯片。首先移植U-Boot 到Nandflash中作为控制核心的Bootloader。操作系统选择免费开源的Linux。虚拟机终端下进入内核目录,运行#make menuconfig 后定制Linux-2.6.32 内核,配置完成后交叉编译Linux 内核。注意配置的时候U-Boot 的MACH_TYPE 参数要和Linux 内核的MACH_TYPE一致,否则不能成功引导内核。然后移植串口、网卡、Nandflash 等内核驱动,使控制中心的软件平台与硬件平台能够正常工作。最后用Mkyaffs2image 文件系统制作工具制作文件系统映像,并用QT 开发自己的GUI(图形用户界面)。

调试好控制核心以后,在和协调器进行串口通信的时候,需要将串口的控制台功能取消。进入内核目录下,用VIM 编辑器打开.Config 文件,然后找到CONFIG_CMDLINE 命令参数行,将CONFIG_CMDLINE =“initrd = 0x32000000,0x200000 root =/dev/ram rw console = ttysAC0 mem = 64M" 改为CONFIG_CMDLINE=“initrd=0x32000000,0x200000

root=/dev/ram rw console=NULL mem=64M"

3.2 ZigBee 无线通信模块的软件设计

TI 公司的免费协议栈Z-stack 2007 可以运行在CC2530 上面。开发者只需根据实际需要再应用层添加自己的任务,然后修改相应的硬件层端口即可[7]。具体工作如下:

(1)在MT 层中,修改MT_UART.h 中串口的默认设置,取消流控,并把波特率由38400 改为115200。

#define MT_UART_DEFAULT_OVERFLOW TURE

改为:

#define MT_UART_DEFAULT_OVERFLOW FALSE

#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_38400

改为:

#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_115200

(2)在MT_UART.c 文件中,修改串口回调函数。

将uartConfig. callBackFunc = MT _ UartProcessZTool Data;改为uartConfig. callBackFunc=rxCB;rxCB 负责把串口接收到的数据存入数据缓冲区databuf 中。rxCB 函数关键代码如下:

rxlen=Hal_UART_RxBufLen(MT_UART_DEFAULT_PORT);//接收缓冲区数据长度,字节为单位

databuf=osal_mem_alloc(rxlen);//分配空间

HalUARTRead (MT _ UART _ DEFAULT _ PORT,databuf,rxlen);//读取串口数据存入databuf 中

下面一段代码用来判断ZigBee 模块从串口收到的是命令还是数据:

//协议规定帧头以/D 开始代表数据

if((databuf[0]==47)&&(databuf[1]==68))

//设置串口收到消息事件标志,请求APP 层处理 osal_set_

event(SampleApp_TaskID,UART_RX_DAT_CB_EVT);

//限定只能协调器向ZigBee 网络发命令

#ifdef ZDO_COORDINATOR

//协议规定帧头以/C 开始命令

else if((databuf[0]= =47)&&(databuf[1]= =67)) osal_

set_event(SampleApp_TaskID,UART_RX_CMD_CB_EVT);

#endif

else

osal_mem_free(databuf); //释放内存

(3)在应用层加入用户任务的事件标志及完成相应的处理函数。在SampleApp. h 中新增簇ID 及事件标志:

#define SAMPLEAPP_SPIDATA_CLUSTERID 1//簇ID

#define SAMPLEAPP_FLASH_CLUSTERID 2

#define SAMPLEAPP_ADDR_CLUSTERID 3

#define SAMPLEAPP_COMMAND_CLUSTERID 4

#define UART_RX_DAT_CB_EVT 0x0002

#define UART_RX_CMD_CB_EVT 0x0004

#define SAMPLEAPP_SEND_NWKADDR_EVT 0x0008

#define SAMPLEAPP_COMMAND_PERIODIC_MSG_EVT

0x0010//新增的事件标志

(4)簇ID 列表SampleApp_ClusterList 中也相应增加上面定义的簇ID,然后在消息处理函数中增加如下代码:

if(events & UART_RX_DAT_CB_EVT)//串口接收数据

{

SampleApp_SPI_SendData(databuf,rxlen);

return(events ^ UART_RX_DAT_CB_EVT);

}

if(events & UART_RX_CMD_CB_EVT)//串口接收命令

{

SampleApp_SPI_SendCommand(databuf,rxlen);

return(events ^ UART_RX_CMD_CB_EVT);

}

当ZigBee 网络的协调器接收到控制核心传来的内容后,判别出是命令还是数据,并设置不同的事件标志后发送给网络中的其他节点,其他节点接收到数据后,根据事件标志来做不同的处理。同时,终端节点的串口如果接收到传感器数据,可以回传给协调器,协调器通过串口传递给控制核心处理。

3.3 终端执行单元的软件设计

终端执行单元的MCU 采用性价比较高的Atmega16 单片机,运行在此单片机上的软件用C 语言编写。软件主要完成以下功能:

(1)检测串口是否收到来自控制核心的数据或命令;

(2)收到命令则向执行单元发送执行请求;

(3)收到数据则设定设备的参数;

(4)设置硬件看门狗定时器,增加系统可靠性。

图5 终端执行单元软件流程图

执行单元的传感器数据不采用周期性上传的方式,而是接受到控制核心的请求数据命令后才上传。采用后者所说的方式可以进一步降低整个系统的功耗[8]。

4 试验结果

图6 为无线ZigBee 网络中的协调器,路由器和终端。图7 为传感器采集到的数据通过ZigBee 模块串口发送到PC 上位机软件。图8 为控制中心触摸屏显示的传感器采集的数据信息。

图6 协调器、路由、终端模块实物

图7 协调器、路由、终端的网络组建

图8 控制中心触屏显示监控信息

5 总结

本系统设计实现过程中主要应用了嵌入式技术以及ZigBee 无线通信技术。系统设计的重点放在如何使系统安装简便,容易扩展上。软件扩展升级可以在控制核心的操作系统上进行,硬件扩展升级可以增加新的终端节点。经过调试,传感器网络能够搭建起来,控制中心能够接收和处理传感器信息。

[1] 瞿雷,刘胜德,胡咸斌. ZigBee 技术及应用[M]. 北京:北京航空航天大学出版社,2007:374-468.

[2] 李文仲.ZigBee2007/PRO 协议栈实验与实践[M]. 北京:北京航空航天大学出版社,2009.

[3] 高守玮,吴灿阳,杨超. ZigBee 技术实践教程[M]. 北京:北京航空航天大学出版社,2009:247-288.

[4] Shahin Farahani.ZigBee Wireless Networks and Transceivers[M].British Library Cataloguing-in-Publication Data,2008:285-289.

[5] 施文灶,王平,黄晞. 无线传感器网络在智能家居中的应用[J].福建大学学报,2010,26(6):60-63.

[6] 刘礼建,张广明.基于ZigBee 无线技术的智能家居管理系统设计[J].计算机技术与发展,2011,21(12):250-253.

[7] 高素萍,李旭斌,钟德永. 智能窗控制系统的设计与实现[J].楼宇自动化,2009,20:8-10.

[8] 陈江波.智能住宅自动报警与查询系统的研究与设计[D].山东:山东大学信息学院,2008.

猜你喜欢

串口终端电路
电路的保护
浅谈AB PLC串口跟RFID传感器的通讯应用
X美术馆首届三年展:“终端〉_How Do We Begin?”
解读电路
通信控制服务器(CCS)维护终端的设计与实现
巧用立创EDA软件和Altium Designer软件设计电路
基于MATLAB模拟混沌电路
多功能北斗船载终端的开发应用
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信