1 温度检测系统简介
一个温度检测无线网络由若干个温度检测节点组成,各个温度检测节点之间使用无线传感器通信。所有的温度检测节点使用ZigBee技术组成一个无线网络。各个节点的功能包括采集温度,并通过ZigBee网络发送出去。本系统采用TI公司提供的精简版本的ZigBee协议中的Simp-liciTI协议来组建一个星型网络。网络由一个访问接入节点(AP)和若干个终端节点(ED)组成。其中,AP相当于全功能设备,负责建立整个网络,并接收ED端采集的温度信息。所有温度检测节点都使用电池设备供电。
2 温度检测节点的硬件设计
温度检测节点主要由LPC1100系列处理器(这里使用的是LPC1114)、温度传感器、ZigBee模块、LCD显示屏等组成,如图1所示。温度传感器使用National Semiconductor公司的I2C接口的LM75,ZigBee模块使用TI公司的SPI接口的CC2500芯片,LCD显示屏使用LCD1602字符显示屏幕。整个节点使用电池设备供电,考虑到功耗的因素,LCD屏采用插槽设计,不需要显示的部分节点可以不连接LCD。除以上各主要部分外,还有一些可选的单元,例如UART串口、通用I/0接口的LED、按键、蜂鸣器BEEP等。
3 温度检测节点的软件设计
温度检测节点的功能如下:
◆通过设置定时器来定期地检测温度,并在LCD上显示当前的温度值;
◆将检测到的温度值通过ZigBee模块发送出去;
◆当温度过高时,蜂鸣器长鸣一定时间报警;
◆温度检测和发送之外时间,节点处于睡眠模式;
◆定时器每隔1 s将处理器唤醒一次,进行温度检测和传送。
根据这些功能,将整个温度节点的软件划分为如下几个模块:功耗管理模块、LCD模块、温度传感器模块、ZigBee模块。
本节将重点介绍功耗管理模块、温度传感器模块和ZigBee模块。
3.1 功耗管理模块
LPC1100系列芯片的功耗管理有3种模式,即睡眠模式、深度睡眠模式、深度掉电模式。
3.1.1 3种模式的进入和退出
3种模式的进入和退出方式如表1所列。
3.1.2 三种模式的区别
在睡眠模式下,如果软件中提供外设时钟,则外设功能在睡眠模式下仍然可以执行,而且可以产生中断来引起处理器恢复运行。在深度睡眠模式下,用户可以配置深度睡眠时的掉电模块以及唤醒后的上电模块。在这两种睡眠模式下,处理器状态、寄存器、外设寄存器、内部SRAM值被保持,引脚的逻辑电平也不变。深度睡眠使用13个唤醒中断来唤醒,其优势在于用户可以关闭时钟发生模块,从而比睡眠模式降低更多的动态功耗。
在深度掉电模式下,除了WAKEUP引脚外,整个芯片上的电源和时钟都关闭,SRAM中的内容也不能保持,但是可以使用4个通用的寄存器保存数据。若想在深度掉电模式下把芯片唤醒,必须通过外部连接部件给WAKEUP引脚接上一个低电平。
3.1.3 选择睡眠模式
本系统中,温度检测节点的主要功能是每间隔一定时间检测一次温度,故在采集温度的间隔期内使芯片进入睡眠模式。当需要采集温度时,通过一个定时器中断将其唤醒。例如,每间隔1 s采集一次温度,采集温度并发送后设置一个定时器中断,然后调用WFI指令使芯片处于睡眠模式。为了便于观察,设置一个LED灯闪烁以指示采集温度的频率。同时,如果检测到温度过高,则使用蜂鸣器报警。如果连接了液晶屏幕,也可在液晶屏幕上显示温度值。
main函数中的主要代码如下:
调用WFI指令后程序就停止运行,等到定时器中断发生后就可以将处理器唤醒,程序接着运行WFI指令后的代码。定时器中断的代码如下:
3.2 温度传感器模块
温度传感器LM75使用标准的I2C接口。本节点中,LPC1114与LM75的硬件接口如图2所示。
LM75的地址线A0~A2都接地,0S引脚悬空,故本节点仅仅使用其基本的温度测量功能。LM75内部有5个寄存器:指针寄存器、配置寄存器、温度寄存器、温度设定寄存器和温度滞后寄存器。通过指针寄存器来选择其余4个寄存器进行操作。本节点主要是读取温度寄存器中的温度值,温度寄存器中高9位值为有效的温度值。该寄存器读出的值是以二进制补码的格式给出的,其LSB(最低有效位)每一个单位表示0.5℃,例如+0.5℃对应001H。其可表示的范围为-55~+125℃。在使用该温度传感器时,需要调用以下两个API函数:
3.3 ZigBee模块
本节点的ZigBee模块使用T1公司的CC2500芯片,使用SimpliciTI协议来组建网络。其硬件连接如图3所示。
在使用CC2500时,首先需要配置LPC1114的SPI各个引脚。另外,还需要将引脚GD00与GDO1配置为MCU中断,用来控制收发网络数据包。再按照CC2500的初始化时序来初始化CC2500芯片,然后交给上层的组网函数去调用。CC2500的初始化步骤如下:
①与MCU相连的SPI接口初始化;
②SCLK=1,SI=O;
③CSn=0;
④CSn-1,延时40μs;
⑤CSn=0;
⑥等待S0引脚变低;
⑦在SI引脚上发命令SRES;
⑧等待SO引脚再次变低。
此时如果能正常地读写相应寄存器,则表示CC2500初始化成功。
CC2500初始化成功后,需要配置CC2500的寄存器,以及设置数据包的收发中断。由于CC2500寄存器较多,请参考CC2500官方网站的参考代码。数据包的收发中断是根据配置寄存器的值来控制的。通过设置这些寄存器的值,可将GDO0、GDO1配置为收发数据。这里,配置IOCFG0寄存器的值为0x6,即在开始接收或者发送一个数据包时,在GDO0引脚产生一个高电平跳变;接收或者发送完后,再变回低电平。因此,将GDO0引脚即PIO2_5配置为输入引脚,上升沿中断。代码如下所示:
此时,如果发送或者接收到数据,就可以产生中断。如果是接收数据,则在中断处理函数PIOINT2-IRQHan-dler中就必须调用一个接收函数。
还有一些涉及到底层通信的地方需要修改,例如:
将底层与硬件相关的函数都修改好后,就可以使用上层的组网函数了。CC2500组网API函数主要包括如下几个函数:
进行组网时需要先调用SMPL_Init进行初始化,然后根据节点的功能来调用SMPL_Link或者SMPL_LinkListen函数组成一个无线网络。最后调用SMPL_Receive以及SMPL_Send函数就可以收发数据了。
结语
本文介绍了一种基于LPC1114的温度检测网络节点设计方法。LPC1114芯片具有低功耗和高性能的特色,加上标准的I2C、SSP等接口,为很多标准接口部件的移植提供了方便。I2C接口的温度传感器,也可以替换成I2C接口的湿度传感器、气敏传感器等,以建立一个基于ZigBee的无线传感器网络。该设计方案对无线环境监控网络、无线抄表网络等无线传感器网络中的节点设计具有一定参考价值。