APP下载

无线传感器网络节点的电压监测*

2012-12-07李永成

传感器与微系统 2012年6期
关键词:链表报警电压

李永成,凌 青,石 春,吴 刚,陈 雷

(1.中国科学技术大学自动化系,安徽合肥230027;2.中国人民解放军63895部队,河南洛阳454750)

0 引言

大多数电池的内阻随着电池电量的降低而增加。电池电量越低,内阻越大。电池供电时,工作电流越大,内部的电压降也就越大,输出电压就越低。因此,电池电压可以作为一种简便的电池剩余电量的指示,通过监测电池工作电压达到监测剩余电量的目的[2]。

用于无线传感器网络节点的TI公司的CC2430/31—F128芯片具有低成本、低功耗的特点,在接收和发射模式下,电流消耗分别低于27,25 mA,内嵌8位的增强型8051单片机[3]。为了解决电池电量低所造成的定位精度问题,本文基于CC2430/31—F128芯片的嵌入式系统,周期性采样电池工作电压并进行判断,当电压值低于预先设定的报警低限时,停止当前工作,断开与网络的联系,确保其他节点交互信息的可靠性,并在监控终端显示屏上闪烁,同时节点上的LED灯闪烁报警,避免由电池电量低而产生的定位误差。

1 Zig Bee协议栈中的操作系统[4]

嵌入式系统包含硬件和软件两部分,硬件部分指系统的内核及外围设备,如本例中网络节点上的CC2430/31—F128芯片;软件部分指嵌入式操作系统[5]。当前的嵌入式操作系统大致分为两类:一类是通用的多任务操作系统(general-purpose multi-tasking OS),能够很好地支持多任务或者多线程,但会随着内部任务切换频率的增加而产生很大的开销;另一类是事件驱动的操作系统(event-driven OS),能够支持数据流的高效并发,并考虑了系统的低功耗要求,使其在功耗、运行开销等方面具有优势,例如:TinyOS。

但是TinyOS操作系统不支持Chipcon公司的CC2430开发平台,因此,Chipcon公司为自己设计的ZStack协议栈中提供了一个操作系统抽象层(operating system abstraction layer,OSAL)的协议栈调度程序。

1.1 OSAL对任务的调度

Zig Bee协议栈中,每一层都执行很多原语操作,对于整个协议栈,就有很多并发操作要执行。为使整个协议栈能够按照时间顺序让各种任务和事件有条不紊的运行,协议栈的每一层都设计了一个事件处理函数,用于处理与该层操作相关的任务和事件。这些事件处理函数即是与协议栈每一层相对应的任务,由Zig Bee协议栈中的调度程序OSAL进行统一管理。因此,对于整个协议栈,无论何时发生了何种事件,OSAL调度程序都可以通过调度协议栈相应层的任务,亦即事件处理函数进行处理。

由于Zig Bee协议栈对实时性要求不高,因此,在设计任务调度程序时,OSAL采用了轮询任务调度队列的方法进行任务调度的管理,如图1所示。

图1 OSAL任务处理流程Fig 1 OSAL task processing flow

1)OSAL建立任务的流程

OSAL采用链表结构管理协议栈各层相应的任务。这个任务链表在系统启动的时候建立,而一旦建立便一直存在于系统运行的整个过程,直到系统关闭或硬件复位时才被删除。链表中的每一项都是一个结构体,用来记录链表中相关任务的基本信息。链表的建立是按照任务优先级从高到低进行插入排列的。优先级高的任务被插入到优先级低的任务前面。当两任务优先级相同时,则按照时间的先后顺序添加到链表中。

2)OSAL对任务的处理流程

任务链表成功建立后,系统开始运行。如在系统运行过程中有事件发生,系统会调用相应的任务,即事件处理函数对所发生的事件进行相应的处理。在整个系统运行过程中,OSAL调度程序周而复始地轮询任务队列链表,以查找发生的需要处理的事件。整个过程涉及2个函数的操作:一个是调度程序循环函数;一个是设置事件发生标志函数。

1.2 OSAL对时间的管理

Zig Bee协议栈中的每一层都有很多不同的事件发生,这些事件发生的时间顺序各不相同。很多时候,事件并不要求立即得到处理,而要经过一段时间后再进行处理。因此,经常会遇到这样的情况:假设事件A发生后,要求过20 s后执行,事件B在事件A发生5 s后产生,且事件B要求在10 s后执行。从时间轴可以看出:事件B虽然在事件A之前被处理,却在事件A之后发生。因此,为了按照合理的时间顺序处理不同事件的执行,需要对各种不同的事件进行统一的时间管理。OSAL调度程序设计了与时间管理相关的函数,用来管理各种不同的需要被处理的事件。

OSAL同样采用链表的方式对事件进行统一的时间管理。每发生一个要被处理的事件,系统会启动一个逻辑定时器,并将此定时器添加到链表当中。利用硬件定时器作为时间操作的基本单元,系统默认设置时间操作的单位为1 ms,即每1 ms硬件定时器产生一次时间溢出中断,在时间中断处理程序中去更新定时器链表。每次更新,都将链表中的每一项事件定时器的时间计数减1,如发现定时器链表中某一表项时间计数已减到0,则设置相应的事件标志。这样,OSAL任务调度程序就根据事件的标志进行相应的事件处理,并将该定时器从链表中删除。

2 节点电压的测量和采样

利用A/D转换器进行节点电压的测量和采样,是一种常用的方法。A/D转换器是将连续的模拟量(如电压)通过取样转换成离散的数字量,分为采样、保持、量化和编码4个过程。

CC2430/31的A/D支持14位的模/数转换(如图2所示),其中包括1个参考电压发生器、8个独立可配置通道、电压发生器和通过DMA模式把转换结果写入内存的控制器。在对节点电压测量时,选择VDD/3(VDD为节点电源电压)作为输入端,亦即输入电压,以 A/D转换器内部1.25 V为参考电压。

图2 A/D转换器框图Fig 2 Block diagram of A/D converter

3 节点电压监测的实现

节点电压监测功能的实现(如图3所示)是在OSAL操作系统中添加逻辑定时器到定时器链表,同时启动定时器,利用硬件定时器的触发,更新逻辑定时器的时间,当其溢出时,调用电压监测事件处理函数,即让A/D转换器进行电源电压的采样,并进行比较:当采样电压低于设定的报警下限时,该节点立即停止当前的工作,断开与网络的连接,在监控终端显示屏上闪烁,同时闪烁节点上的LED灯报警;当高于报警下限时,退出此次采样监测过程,并重新添加逻辑定时器到链表。

图3 节点电压监测流程Fig 3 Node voltage monitoring flow

其中电压的报警下限和电压的采样周期(定时时间)可以根据实际需要设定。在定位实验中每个节点都是用2节1.5 V的电池进行供电,实验中发现,当节点的电源工作电压低于2.5V的时候,定位精度即会受到影响,因此,设定报警低限为2.5 V,采样周期为2 min。具体实现流程如下:

1)启动系统后,在硬件初始化时进行定时器的初始化和配置,同时定义定时器溢出时的回调函数;

2)在应用层任务初始化时添加逻辑定时器到定时器链表,设置其溢出时对应的任务和事件及定时时间,并启动该定时器;

3)逻辑定时器启动时,其映射的硬件定时器随之启动,且每1 ms产生一次中断;

4)系统轮询定时器和各层的任务:当硬件定时器有中断时,调用定时器的回调函数,对定时器链表中的所有逻辑定时器计数时间统一进行减1操作。当电压监测定时器溢出时,设置电压监测事件标志位,操作系统读出其标志位,对电压监测事件进行处理;

5)处理函数中利用A/D转换器对电源电压采样检测,并与设定的报警下限比较,如果电压过低则停止当前的工作,断开与网络的连接,在监控终端显示屏上闪烁,同时节点上的LED灯闪烁报警;当大于报警下限时退出程序,重新添加逻辑定时器到定时器链表,回到步骤(2)。

4 实验过程和实验结果

为了验证监测效果,选择开放空间进行定位实验(如图4所示)。

实验中对其中15个节点进行电压监测,为保证电压值的稳定,当节点上的LED灯闪烁10次以上时再测量节点的电压值,所得结果,如表1所示。

图4 实验过程Fig 4 Experimental process

表1 节点报警时测得的电压值Tab 1 Measured voltage value while node is alarming

由表可见,当节点电压低于设定的报警下限时,可以报警;当节点电压接近报警下限时,报警状态并不稳定,有时闪烁十几次,有时闪烁几十次,只有电源工作电压低于报警下限0.03 V右时,LED灯才会一直闪烁而完全停止当前的工作。这是因为不同的工作状态,节点工作电流不同,造成电池内部压降不同,即电源的工作电压随着不同的工作状态有波动。为此,设定节点电压在低于报警下限工作20 s,即在电源工作电压稳定后,闪烁节点上的LED灯。这时上述现象消失,LED灯能够连续闪烁,进入报警状态。

5 结论

当前在无线定位应用中的CC2430/31芯片,不能定期进行电池剩余电量监测,本文对此进行了功能上的完善,在Zig Bee协议栈中添加逻辑定时器,利用A/D转换器进行电压的采样,定时监测节点电压,以保证节点在定位应用中不会因为电池电量的不足而出现定位精度偏差的现象。同时也为其他以电池板供电的无线传感器网点节点进行电池电量的监测提供了一种切实可行的方法。

[1]Wang W D,Zhu Q X.RSS-based Monte-Carlo localization for mobile sensor networks[J].The Institution of Engineering and Technology,2008,2(5):673-681.

[2]Farahani S.Newnes Zig Bee wireless networks and transceivers[M].The United States:Elsevier Ltd,2008.

[3]高守伟,吴灿阳.Zig Bee技术实践教程——基于CC2430/31的无线传感器网络解决方案[M].北京:北京航空航天大学出版社,2009.

[4]闫 沫.Zig Bee协议栈分析与设计[D].上海:复旦大学,2007.

[5]Aamodt K.Using the ADC to measure supply voltage[DB/OL].[2011—06—11].http:∥www.ti.com/lit/an/swra100a/swra100a.pdf.

猜你喜欢

链表报警电压
基于二进制链表的粗糙集属性约简
跟麦咭学编程
让我们一起认识电压
LKD2-HS型列控中心驱采不一致报警处理
基于链表多分支路径树的云存储数据完整性验证机制
谈谈电压
2015款奔驰E180车安全气囊报警
基于Multisim的滞回电压比较器的设计及其应用
高电压精密电压互感器的研制
死于密室的租住者