基于CC2431的无线传感器网络节点设计
2008-12-11
作者:庄 雄, 杨永明, 丁 唯
摘 要: 提出了采用传感器网络" title="无线传感器网络">无线传感器网络进行电气设备在线监测" title="在线监测">在线监测的全新解决方案和实现方法。详细论述了基于CC2431的无线传感器网络节点和基站硬件设计方案,以及基于8051核的TinyOS在传感器节点和基站上的移植方案。
关键词: 无线传感器网络; 在线监测; 节点; CC2431; TinyOS
电气设备运行状态的在线监测是预防电力系统故障的一个重要手段。目前,电气设备在线监测以有线通信为主,该方式接线多、方式复杂、增加了系统隐患,也给故障的排查与维修带来不便。本文针对此问题,设计了一种基于无线传感器网络的站内通信方案。
无线传感器网络作为新兴的测控网络技术,综合了传感技术、嵌入式计算机技术、现代网络技术、无线通信技术和分布式智能信息处理技术。其多跳功能和拓扑灵活性可有效避免各种建筑和设备对无线信号的衰减作用。其网络的自组织、自适应性可大大提高在线监测系统的可靠性。
无线传感器网络主要是面向低速、低功耗的无线应用,其单个节点是典型的资源受限的嵌入式系统,且需要有对环境的感知、数据发送、命令接收执行以及其他一些网络功能和数据处理能力,因此需要有一个小型的操作系统来组织和管理这些硬件,并完成其软件功能。TinyOS就是美国加州大学Berkeley分校针对无线传感器网络而开发的一个小型操作系统。但TinyOS所支持的平台控制核心都与射频模块分离,这样对节点节能方面有一定的影响。本设计采用CC2431为核心,克服了上述缺点,也使节点体积减小。
1 系统设计
系统整体框架如图1所示。在电气设备如变压器上的绕组和绝缘子外围安装上带有紫外脉冲、超声波、温度、湿度等传感器的无线传感器网络节点。当绕组或绝缘子表面有放电时,节点可以检测到放电信号,并将信号量化和简单处理后按IEEE802.15.4规范封装成帧,向附近节点传输。或者该节点接收其他节点所传数据,并加入多跳信息,重新封装成帧继续传送。直到消息传输到基站,基站将接收的数据直接上传到PC上位机" title="上位机">上位机。所有消息由上位机进行复杂的数字信号处理,并通过数据库对网络各节点信息进行综合管理。这些数据信息又可以通过连接因特网的上位机与远程主机交互,从而实现故障的远程诊断。
2 节点和基站硬件设计
节点和基站硬件都采用CC2431片上系统(SoC)作为处理核心。CC2431收发机采用直接序列扩频技术,增强了系统抵抗多径效应的稳健性,并且具有较强抗复杂电磁环境干扰的能力。特别是其对同频率噪声具有极强的抑制能力,与收发机约定的码片外的其他同频率数据都将被认为是噪声而滤除。CC2431功能强大,使外围电路得到大大的简化。加上采用PCB天线,使系统的节能性进一步提高。
2.1 CC2431简介
CC2431片内集成工业级低功耗8051 MCU,其内部组件包括:128KB Flash和8KB RAM,2.4GHz频段的频率合成器,128bit AES安全协处理器,8路8~14bits ADC输入,温度传感器,精确的定位引擎,具有DMA功能和电池监测功能。其中频率合成器内含射频协处理器,全面支持IEEE 802.15.4标准[1-2]。
CC2431外接电压为2.0~3.6V,发射和接收时电流都为27mA,掉电和准备模式电流分别为0.9?滋A和0.6?滋A;所需的外围元件较少,所以具有较好的节能效果。
2.2 硬件电路
节点和基站硬件电路框图如图2所示,主要由电源、CC2431外围电路、传感器电路、Flash ROM、串行接口电路和三个LED指示灯构成。
电源部分由3节1.2V干电池为系统提供电能。在电源输入端须接抑制各主要干扰谐波的滤波电容,然后分割出模拟电源和数字电源。数字电源直接接入主电源;模拟电源通过磁珠接入主电源。
CC2431的外围电路较为简单,可根据CC2430数据手册[1]搭建(CC2431在CC2430基础上加入定位引擎,主要数据都在CC2430数据手册内)。需要注意的是,各模拟和数字电源引脚处必须加滤波或去耦电容;PCB天线部分须严格按照参考文献[3]制作。
传感器电路主要由紫外脉冲传感器、超声波传感器、温度传感器、湿度传感器组成。
Flash ROM电路由一片Atmel公司出品的AT45DB041组成,直接接入CC2431 SPI输入端。该芯片集成2 046页×264B Flash存储单元,用于存储传感器重要历史数据。
串行接口电路由一片低功耗MAX2323和COM母口组成。CC2431串口端接入MAX2323进行电平转换通过COM口与PC上位机通信。
三个LED指示灯用于显示节点和基站的运行状态。
3 软件设计
软件设计主要论述TinyOS在本文硬件上的移植。由于整个移植工作包括众多组件,本文以较为典型的RF组件的移植为例展开论述。
3.1 TinyOS简介
TinyOS是加州大学Berkeley分校专门针对无线传感器网络的特点开发的微型操作系统[4]。TinyOS不是传统意义上的操作系统,确切地说它是一个适用于网络化嵌入式系统的编程框架,通过在这个框架内链接一组必要的组件,就能方便地编译出面向特定应用的操作系统,这对于存储资源极为有限的系统来说非常重要。针对无线传感器网络内节点众多的特点以及多并发操作的工作方式,该操作系统采用了事件驱动的体系结构。
与通用操作系统相比,TinyOS更加简单可靠。TinyOS具有以下特点:
(1) 事件驱动的体系结构;
(2) 单一的共享栈(share stack);
(3) 无内核、无进程管理、无内存管理和虚拟内存。
TinyOS的应用结构如图3所示,主要由应用层、硬件抽象层(HAL)和硬件表达层(HPL)构成。应用层由主组件和具体的应用组件组成。主组件是一个简单的FIFO任务调度器。应用组件结合具体的应用实例进行编写。硬件抽象层组件主要由感知组件、执行组件和通信组件组成,为应用层提供与硬件无关的各种功能。硬件表达层组件将硬件提供的各种功能以函数形式表达,供上层调用。层与层之间的互访由接口文件完成。
TinyOS的编程语言为nesC(C language for network embedded systems)。nesC对C作了扩展,目的就是为了支持TinyOS的组件化编程模式。nesC有三种文件,分别为接口、模块组件和配置组件。接口采用基于组件编程模式的nesC编程结构,详细描述了服务提供者和使用者之间的多功能交互;模块组件实现具有一定功能的子系统;配置组件负责将各个子系统链接成完整的应用。多个模块组件和配置组件共同构成TinyOS的应用程序" title="应用程序">应用程序[5]。
3.2 TinyOS移植实现
TinyOS在8051核上的移植不同于TinyOS在AVR/MSP430/PIC/ARM核的移植,因为nesC编译器ncc是基于GCC编写的,而GCC不支持对MCS-51系列核心的交叉编译。
本次移植的总体流程如图4所示:根据TinyOS上层组件接口的需要,用nesC编写硬件表达层和硬件抽象层文件。代码只能按照nesC语法编写才能通过ncc编译。编写完成后,结合上层应用程序编译出app.c文件。再将app.c文件通过perl语言编写的脚本将其原语法转换为CC2431开发环境" title="开发环境">开发环境IAR Embedded Workbench for 8051支持的语法。再通过IAR编译器编译、调试和下载。
下面主要以RF组件的移植为例来说明移植具体过程。
3.2.1 编写HPL和HAL文件
图5为CC2430RadioC配置文件的连接框图。该文件为HAL文件,将下层的CC2430RadioM、CC2430ControlM、CC2430TimerM、HPLCC2430RFInterruptM、LedsC模块连接成一个RF功能组件,向上层提供StdControl、BareSendMsg、ReceiveMsg、CC2430Control、SplitControl、MacControl、RadioCoordinator接口。根据上层应用程序的不同,可以添加其他接口,但需要对配置文件和相关模块作相应的修改。
CC2430RadioM是HAL文件,为RF组件功能的主要实现模块,完成消息的接收和发送任务,包括数据帧封装和各种MAC协议如CSMA/CA、MAC层会话协议等的实现。
CC2430ControlM是HPL文件,将RF各种控制动作抽象为函数,供CC2430RadioM调用。
HPLCC2430RFInterruptM是HPL文件,主要处理与RF有关的中断服务,为CC2430RadioM和CC2430ControlM提供事件信号。
CC2430TimerM是HPL文件,主要提供RF组件中MAC控制时钟,如通过对SFD的捕获而计算帧传送时间。
LedsC模块是HAL文件,以LED灯的形式为用户提供RF组件运行状态的指示。
3.2.2 ncc编译
编写完上层需要的HPL与HAL文件后,接下来结合某个应用程序利用ncc进行编译。编译前,须在appsmakerules文件里加入CC2431平台参数和创建平台配置文件.platform。
appsmakerules文件内“PLATFORMS =”代码后为各平台名称,在此加入CC2431平台。
.paltform文件创建在平台目录下。由于目标平台没有IAR选项,所以平台配置只能配置成keil。文件内容如下:
@opts = ('-fnesc-target=keil', '-fnesc-no-debug');
经过上两步后,即可用ncc对应用程序编译生成app.c文件。
3.2.3 语法编辑脚本
语法编辑脚本用于app.c文件与IAR Embedded Workbench开发环境的耦合。ncc编译出来的app.c文件有部分语法与IAR开发环境的语法不兼容,因此须将不兼容的语法作相应的修改。由于app.c文件代码较长,一般有几千行,人工修改费时费力,且容易出错,所以需用一个语法编辑脚本对不兼容代码进行修改。本文语法编辑脚本采用perl语言(Practical Extraction Report Language)编写。perl语言在Internet编程中应用广泛,具有语法简单、用途广泛、跨平台、面向对象、嵌入文档、可与C/C++链接及易调试等特点[6]。本文利用了其在文本编辑方面的强大功能。
所作修改的语法:
(1) 在 “typedef int sfr;” 、“typedef int sbit;”和DBG调试信息代码、行命令代码以及其他对IAR无用代码前加 “//”屏蔽。
(2) 寄存器定义语句如 “sfr P0 __attribute((x80));”改为“SFR(P0,0x80)”。
(3) 外部数据访问语句“ ((unsigned char *)0)[addr]”改为“((unsigned char volatile __xdata *) 0)[addr]”。
(4)计算数据偏移量语句,如“(size_t )&((struct TOS_Msg *)0)->data”改为“(size_t)(unsigned long)&((struct TOS_Msg *)0)->data”。
(5) 去除64bit “long long”类型,将所有“long long”类型改为32bit “long”类型。
(6) 中断服务程序名如“void __attribute((interrupt)) __vector_16(void)”或“void __attribute((signal)) __vector_16(void)”改为“#pragma vector=RF_VECTOR_interrupt void RF_IRQ(void) ”
经过以上修改后生成IARapp.c就可以用于IAR开发环境的调试了。
3.2.4 调试和下载
调试和下载直接在IAR Embedded Workbench for 8051环境下进行。这一步与其他开发环境下的调试和下载相似[7],不再赘述。
4 测试实验
本次测试实验结合紫外脉冲传感器、温度传感器和湿度传感器,在实验室环境下,用火花放电模拟高压绝缘子放电,测试时间为30分钟。数据传输方式是使用TinyOS自带的多跳路由(Multi-Hop Routing)算法,以两跳的形式传输。节点每10秒发送前10秒钟的放电脉冲数和平均温度、湿度。测试结果表明在这种情况下,数据的接收率和正确率都为100%。这些数据可以为电气设备的运行状态监测和故障诊断提供依据。
但是,由于实际情况下,高压绝缘子的放电时间分布具有一定的随机性,并且与环境温度和湿度有关。这样对在线监测的实时性就有较高要求。而无线传感器网络所强调的节能性必须使节点大部分时间处于休眠状态。这个矛盾将设法通过跨层路由协议的算法予以解决。
本文详细论述了无线传感器网络的硬件设计和软件系统移植,及其应用于电气设备在线监测的优势。无线传感器网络的无线性减少了电气设备在线监测系统的复杂度和有线连接隐患。其自组织、自适应性方便了监测系统的搭建和扩充。其网络灵活性减小了单个节点的故障对监测工作的影响。
由于紫外脉冲监测法是非接触式的监测方法,且监测距离可以达到11米,减小了节点在被监测设备具有强电磁场情况下所受的电磁干扰。
下一步将充分利用CC2431的节点定位引擎,加入节点定位程序,实现监测网络的节点定位。然后根据节点在不同电气设备的工作环境,加入太阳能发电、温差发电等模块,使无线传感器电能管理更加灵活,并延长无线传感器网络的生存周期。
参考文献
[1] Chipcon AS. CC2430 preliminary data sheet (Rev. 2.01).[2006]. http://focus.ti.com/lit/ds/swrs036e/swrs036e.pdf.
[2] Chipcon AS. CC2431 preliminary data sheet (Rev. 1.01).[2006]. http://focus.ti.com/lit/ds/symlink/cc2431.pdf.
[3] JONSRUD G E.Folded dipole antenna for CC2400,CC2420 and CC2430.[2006]. http://focus.ti.com/lit/an/swra093/swra093.pdf.
[4] HILL J. System architecture for wireless sensor networks[D]. Berkeley, USA: University of California, 2003.
[5] 于海斌,曾鹏,梁韋.智能无线传感器网络系统.北京:
科学出版社,2006.
[6] 龙洋,史波. Perl5实用编程技术.北京:中国水利水电
出版社,2001.
[7] IAR Systems.IAR embedded workbench IDE user guide.
[2004-12].ftp://ftp.iar.se/WWWfiles/guides/ide/ouew-3.pdf.