锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于TinyOS操作系统实现无线传感器节点Mica的设计

时间:2022-08-29 07:00:01 嵌入式传感器节点传感器无线地磁1392传感器

1、 节点组成

节点是部署在无线传感器网络中的研究区域,用于收集和转发信息,共同完成指定任务。每个节点上的程序可以完全相同,唯一的区别是ID。

1.1 节点构成

无线传感器节点由传感器模块、处理器模块、无线电通信模块和能源供应模块组成,整个结构如图1所示。

基于TinyOS无线传感器节点操作系统Mica的设计

图1 无线传感器节点构成框图

无线传感器节点本质上是通过无线信道实现网络间通信的网络分布式嵌入式系统。为了减少通信量,在本地完成必要的数据集成计算,从而合作收集部署的空间数据。以网络为中心,通过网络反映节点的功能。因此,传统的嵌入式设计理念在无线传感器网络中遇到了许多挑战:节点中有大量的并行运行程序和节点协同计算。

1.2 节点特点

无线传感器网络是利用不同的网络技术实现的应用相关网络。由于无线传感器节点用于监控,分布密度大,范围广,成本低,功耗低,尺寸小。从现有技术条件下,节点成本和能源供应值得考虑。由于频率与能量消耗正相关,节点不能使用过高的频率,因此频率高则能量消耗大。此外,无线电通信模块的能耗也很大,传输距离与能耗正相关,因此必须在传输距离和节点数之间进行权衡。

1.3 Mica节点

由加州大学伯克利分校开发的低功耗无线传感器节点Mica,采用处理器芯片Atmel公司的AVR系列(TI公司的 MSP430也是不错的选择),采用无线电收发模块TR1000或CC无线传感器节点如图2所示,加上相应的传感器接口。节点间通过无线电方式进行通信,协作完成指定任务;节点自身通过ADC通道感知外部数据。

图2 Mica节点实物图

Mica多种不同的物理量可以在节点上感知:光强度、温度、地磁强度等。https://www.TInyos.net/该网站提供了实现的硬件布线图。加州大学伯克利分校的研发人员为该平台开发了微操作系统TInyOS和编程语言nesC,与此同时,国内外许多大学和机构利用这一平台进行研究。

无线传感器网络与现在传感器技术最大的不同在于,将现有的传感器技术进行网络化,使传感器技术应用更好,为现在传感器技术提供更新的解决方法。

2、 微操作系统在节点上

无线传感器网络节点存储容量有限。研究发现,为了满足自身网络运行的需要,可以使用新的嵌入式系统和嵌入式软件。

2.1 需要操作系统

从节点结构分析不难看出,无线传感器节点硬件简单,可以直接在硬件上编程。然而,在工程实践中存在许多问题:应用程序开发的难度大大增加,程序员必须非常了解硬件;程序员不能继承现有的软件结果,延长开发周期;不能形成大规模,必须重写新芯片。

从现有的软件技术来看,无线传感器可以直接使用现有的嵌入式操作系统。大多数现有的嵌入式操作系统都是实时操作系统,很少考虑能源供应,而无线传感器的致命点之一是能源供应无法解决;大多数现有的嵌入式操作系统占据了很大的空间,而无线传感器的另一个致命点是存储容量有限。

无线传感器节点有两个突出的特点:一是信息到达的并发性和密集性,即有多个逻辑控制需要同时执行,操作系统需要在短时间内完成这些频繁的操作;二是无线传感器节点模块化程序高,要求操作系统为应用程序提供方便的硬件控制。

2.2 TInyOS操作系统

操作系统是为用户提供良好的用户界面。基于上述分析,研发人员在无线传感器节点处理能力和存储能力有限的情况下设计了一个新的嵌入式系统TInyOS,具有较强的网络处理和资源收集能力,满足无线传感器网络的要求。

研究人员正在满足无线传感器网络的要求TinyOS中引入4种技术:轻线程、主动消息、事件驱动和组件化编程。

轻线程主要是针对节点并发操作频繁、线程短、传统过程/线程调度不能满足的问题(传统调度算法在无效过程交换过程中产生大量能量)。

主动信息是并行计算机的概念。在发送消息的同时,相应的处理函数被传输到处理消息ID以及处理数据,接收方可以在收到消息后立即处理,以减少通信量。

整个系统的运行是由事件驱动的。当没有事件发生时,微处理器进入睡眠状态,从而达到节能的目的。

组件是软硬件的抽象功能。整个系统由组件组成。通过组件,程序员只关心组件的功能和业务逻辑,而不关心组件的具体实现,从而提高编程效率。

2.3 TinyOS实现操作系统

TinyOS操作系统最初是用C语言实现的,目标代码相对较长。后来,基于组件和并行模型的研究和设计nesC语言产生的目标代码相对较小。nesC语言可开发TinyOS操作系统及其上用程序。

2.3.1 接口

接口(interface)它是一个双向通道,表明接口的功能和事件通知能力是双向的,并向调用器提供命令,实现命令者进行事件通知。

interface name {

asy commandresult_t Cname(pram p);

asy eventresult_tEname(pram p);

}

其示意图如图3所示。

图3 接口示意图

声明命令和事件在接口中实现不同的功能。命令是接口的功能,事件是接口有能力通知事件。Asy可以命令或事件在中断处理程序中调用。

接口反映了事件驱动功能和模块化。让接口人通过事件通知响应事件;任何满足接口功能的实现者都可以被其他需要接口功能的组件调用。

2.3.2 组件

组件是配线文件或模块文件,是逻辑功能的抽象。程序员可以直接调用组件进行程序开发。

配线文件只完成组件之间的接口连接,模块文件在接口中具体实现命令和事件。可用于这两个文件provides、uses语句。provides显示该组件可以提供哪些接口,实现命令和事件通知。uses显示该组件使用的接口是什么,该组件可以在接口中提供命令并响应接口中的事件。如图4所示。

图4 组件结构图

基于组件的思想,一个组件可以通过多个组件实现一定的逻辑功能,并声明需要哪些接口和提供哪些接口。图5显示了组件A、B和C形成的新功能组件D。

图5 组件D结构图

2.3.3 并行模型

通过任务(task)中断事件处理(interrupt hander event)来体现TinyOS并行处理能力。任务(task)会加入一个FIFO在队列中,在执行过程中,任务间没有竞争;但中断处理程序可以中断任务执行。TinyOS整个程序调度过程如图6所示,采用二次调度机制来满足无线传感网络的运行特点。由操作系统完成调度,提交组件中的任务。

图6 TinyOS程序结构框图

基于上述分析,节点上应用程序的框图如图7所示。操作系统只在后台提供队列服务。

图7 应用程序结构框图

3、 具体实现说明

以节点收发计数器中的数值为例,更详细地说明了网络协议是如何通过主动信息传实现的。

节点启动后,程序要求计数器开始计数,每秒向外广播自己的计数值,并在其他节点接收计数器的值。

3.1 main组件

TinyOS应用程序从main组件开始,完成main组件的StdControl接口的三个命令init()、start()和stop()具体实现。该接口中的命令执行顺序可用init*(start|stop)*,执行前执行应用程序init()完成必要的初始化工作,start这个程序要完成的工作,stop是系统关闭前要执行的动作。这个接口是TinyOS应用程序标准接口,与硬件操作相关的其他组件必须用到这个接口,实现接口中的命令。

3.2 使用的接口

StdControl应用程序启动和相关硬件初始化完成接口。

interface StdControl {

command result_t init();

command result_t start();

command result_t stop();

}

Timer接口实现计数功能。

interface Timer {

command result_t start(char type, uint32_t interval);

///设置触发类型和计数值

command result_t stop()

//中止计数器

event result_t fired();

///计数器定期触发事件

}

SendMsg接口发送消息。

interface SendMsg {

command result_t send(uint16_t address, uint8_t length, TOS_MsgPtr msg);

//发消息

event result_t sendDone(TOS_MsgPtr msg, result_t success);

///消息发送完成后事件

}

ReceiveMsg接口接收信息。

interface ReceiveMsg {

event TOS_MsgPtr receive(TOS_MsgPtr m);

///收到消息事件

}

3.3 使用的组件

组件Main, test5M,TimerC,GenericComm as Comm实现逻辑功能。Main是系统必需的。test5M提供接口的命令并实现对调用接口事件的响应。GenericComm完成消息的发送和对接收消息的通告。其配线文件如下:

Main.StdControl -》 test5M.StdControl;

Main.StdControl -》 TimerC.StdControl;

test5M.Timer -》 TimerC.Timer[unique(“Timer”)];

test5M.SubControl-》Comm;

test5M.Send -》 Comm.SendMsg;

test5M.Receive-》Comm.ReceiveMsg;

3.4 test5M模块文件

test5M模块接口如下:

module test5M {

provides {

interface StdControl;

}

uses {

interface Timer;

interface SendMsg as Send[uint8_t id];//发送消息接口

interface ReceiveMsg as Receive[uint8_t id];//接收消息

interface StdControl as SubControl;//子组件:完成发送初始化

}

}

provides声明这个组件所实现接口中命令和通告相关事件的产生。需要实现StdControl接口中命令init()、start()和stop()。

Uses声明这个组件调用接口中命令并对接口中事件进行响应。所需要响应的事件为Timer接口的fired()事件、SendMsg接口的sendDone事件和ReceiveMsg接口的receive事件。

3.5 通信实现

test5M发送和接收消息是通过组件GenericComm来实现的。GenericComm通过调用其他组件实现从消息包到主动消息、字节级数据传数、位级数据传送到无线电收发模块的功能。在此不再深入分析其实现过程,采用随机后退的CSMA/AD的MAC协议,只要明白组件GenericComm就可以完成消息的收发。

GenericComm提供了256个消息收发接口,也就是说系统可以使用256种消息,或者说256种状态进行转换。由于系统是非阻塞模式,一旦消息到达组件test5M中,receive事件就会立刻调用,因此在这个事件中实现不同消息的转换,从而实现通信双方的握手:

event TOS_MsgPtr Receive.receive[uint8_t id](TOS_MsgPtr m) {

switch(id) {

case 1: //状态转换1

case 2: //状态转换2

}

return m;

}

4、结语

分析无线传感器节点Mica和其上运行的TinyOS操作系统出发,描述无线传感器网络节点体系结构,通过应用程序开发说明其通信模型建立思路,着重描述无线传感器网络节点应用程序体系结构和消息通信机制。

(stm32串口应用)
http://www.makeru.com.cn/live/detail/1290.html?s=143793
http://www.makeru.com.cn/live/1392_1164.html?s=143793
(stm32电机驱动)
http://www.makeru.com.cn/live/1392_1218.html?s=143793
(定时器)
http://www.makeru.com.cn/live/1392_1199.html?s=143793

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章