Zigbee网络低占空比机制研究实验综述.docx

上传人:b****6 文档编号:3264113 上传时间:2022-11-21 格式:DOCX 页数:14 大小:114.49KB
下载 相关 举报
Zigbee网络低占空比机制研究实验综述.docx_第1页
第1页 / 共14页
Zigbee网络低占空比机制研究实验综述.docx_第2页
第2页 / 共14页
Zigbee网络低占空比机制研究实验综述.docx_第3页
第3页 / 共14页
Zigbee网络低占空比机制研究实验综述.docx_第4页
第4页 / 共14页
Zigbee网络低占空比机制研究实验综述.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Zigbee网络低占空比机制研究实验综述.docx

《Zigbee网络低占空比机制研究实验综述.docx》由会员分享,可在线阅读,更多相关《Zigbee网络低占空比机制研究实验综述.docx(14页珍藏版)》请在冰豆网上搜索。

Zigbee网络低占空比机制研究实验综述.docx

Zigbee网络低占空比机制研究实验综述

8.5Zigbee网络低功耗模式机制研究

ZigBee网络节点通常由电池供电,并部署在野外环境中,要求常年连续工作。

因此,低功耗设计对延长ZigBee网络生存寿命具有至关重要的意义。

低占空比机制是一种非常重要的节能措施,通常应用在网络节点间通信频率较低的空闲型场合。

本文首先介绍Z-Stack协议栈的低功耗电源管理模式,然后在应用层实现ZigBee节点周期性休眠与唤醒。

这对减少ZigBee网络能量消耗,实现低占空比(lowduty-cycle)网络具有重要参考意义。

6.6.1实验目的与器材

1)实验目的

◆学习和理解Z-Stack协议栈电源管理模式,睡眠机制。

◆学会使用Z-Stack协议栈低功耗模式。

◆学会使用CC2530睡眠定时器进行睡眠和唤醒。

◆学会在应用层实现简单的低占空比模式。

2)实验器材

◆2个CC2530开发套件(1个协调器模块,1个终端模块);

6.6.2实验原理与步骤

1)实验原理

ZigBee网络节点一般由能量有限的电池供电,长期处于无人值守的状态下,并且个数多、分布区域广、所处环境复杂,使得难以进行电池更换。

如果节点电池能量耗尽之后,网络连通性以及网络生存时间会受到极大影响。

为使节点长期正常工作下去,必须从能量供应的角度进行研究,采取有效的方法为无线传感器网络提供可持续的能量供应。

周全的传感器节点能量管理设计方案,必须从“开源”和“节流”两个方面采取相应措施,以达到能量有效使用。

所谓“开源”,就是通过采取各种措施补充传感器节点能量,其中主要措施是能量收集网络。

例如,利用太阳能电池板可以为传感器节点供电。

白天,光伏电池在为传感器节点供电,同时将富余能量储存到电池中。

夜间,太阳光不足时,由电池为传感器节点供电。

所谓“节流”,就是通过采取各种节能措施减少传感器节点的能量消耗,延长网络使用寿命。

“开源”措施的目标是最大化地扩展能量来源,而“节流”措施为了在保证通信质量同时,尽可能地减少能量消耗。

本节主要关注如何节约ZigBee网络节点能量。

ZigBee通信协议中MAC层,网络层已经采用许多能量节约机制。

其中,最常用的设计思想是当ZigBee节点空闲时,尽快进入休眠状态的低功耗电源模式,从而节约能量消耗。

1.CC2530电源管理

电池供电的终端设备通常采用电源管理方案来最小化节点功耗。

一个终端设备在空闲时会关闭大功耗外设和空闲期间进入休眠模式。

Z-Stack提供了两种休眠模式,分别为轻度休眠和深度休眠。

系统处于轻度睡眠模式,会在一个预定延时后被唤醒执行任务。

当系统没有任务需要执行时会进入深度休眠模式。

系统进入深度休眠模式后,需要一个外部触发(如按键)来唤醒设备。

轻度模式下工作电流通常降为几微安,而深度模式通常降为几微安。

终端设备休眠例子有:

温湿度等传感器周期被唤醒报告数据;监控中心用户通过按键命令向远程控制设备索取数据;遥控器在按键时,才向控制设备发送命令。

这些设备共同特点是它们大部分时间都处于休眠模式,最大限度地减少功耗。

在HAL/hal_sleep.c文件中有关于CC2530睡眠模式的定义:

#defineHAL_SLEEP_OFFCC2530_PM0

#defineHAL_SLEEP_TIMERCC2530_PM2

#defineHAL_SLEEP_DEEPCC2530_PM3

#defineCC2530_PM00/*PM0,Clockoscillatorson,voltageregulatoron*/

#defineCC2530_PM11/*PM1,32.768kHzoscillatorson,voltageregulatoron*/

#defineCC2530_PM22/*PM2,32.768kHzoscillatorson,voltageregulatoroff*/

#defineCC2530_PM33/*PM3,Allclockoscillatorsoff,voltageregulatoroff*/

电源管理默认设置为HAL_SLEEP_OFF,即处于正常工作模式,时钟、电源稳压器都处于工作状态。

CC2530处于睡眠模式时会关闭系统时钟、微控制单元(MCU),不是默认模式,需要在Z-Stack中增加编译选项POWER_SAVING才能够使用。

HAL_SLEEP_TIMER和HAL_SLEEP_DEEP分别为轻度睡眠和深度睡眠模式。

CC2530处于HAL_SLEEP_TIMER模式可以被睡眠定时器、I/O、重置唤醒,而处于深度睡眠时,只能够被I/O中断和重置唤醒。

因此,轻度睡眠模式比较省功耗并能够被定时唤醒;深度睡眠模式最省电,但只能被外部中断唤醒。

表CC2530电源配置模式

电源模式

高频振荡器

低频振荡器

电源稳压器

配置

32MHz振荡器

32.768kHz振荡器

PM0

PM1

PM2

PM3

CC2530轻度睡眠模式通过32.768kHz晶振时钟源驱动的24位硬件休眠定时器实现。

电源管理器在休眠定时器溢出后,唤醒MCU。

CC2530最大的网络休眠时间为510S,在HAL/hal_sleep.c定义:

/*MAX_SLEEP_TIME计算:

*Sleeptimermaximumduration=0xFFFF7F/32768Hz=511.996seconds

*Rounditto510secondsor510000ms

*/

#defineMAX_SLEEP_TIME510000/*maximumtimetosleepallowedbyST*/

休眠定时器有一个24位计数器和一个24位比较器。

当SLEEP_TIMER定时器计数到比较器设定值时,产生中断唤醒MCU。

而OSAL定时器为16位,最大定时器溢出时间0xFFFFms。

2.Z-Stack低功耗模式启动流程

(1)操作系统启动

操作系统在main.c中经过一系列初始化过程,最后调用osal_start_system()启动操作系统。

这时系统并不会进入低功耗模式,当遍历完所有的任务后发现没有活动任务时,并且定义过POWER_SAVING编译选项,系统才会考虑进入休眠状态。

voidosal_start_system(void)

{

…….

{

…….

if(idx

{

………

events=(tasksArr[idx])(idx,events);

………..

}

#ifdefined(POWER_SAVING)

else//遍历所有的任务,这些任务没有处于活动状态,

{

osal_pwrmgr_powerconserve();//将系统进入休眠状态

}

#endif

}

}

(2)总休眠函数osal_pwrmgr_powerconserve()

osal_pwrmgr_powerconserve()函数中在在尝试进入休眠模式前,将会进行两项检查工作。

首先,检查pwrmgr_device变量被设置为电池设备。

此设置是建立在设备加入网络时利用osal_pwrmgr_device(PWRMGR_BATTERY)函数设置,参见ZDApp.c文件。

其次,检查pwrmgr_task_state变量以确保没有任务的节能状态是“putahold”。

该机制使得Z-Stack任务在临界区操作时禁止休眠。

当两个条件都符合,预期的睡眠时间由系统下一次计时器移除时间决定。

最后,系统调用OSAL_SET_CPU_INTO_SLEEP(next)进入休眠模式。

voidosal_pwrmgr_powerconserve(void)

{

……

//判断是否进入休眠模式

if(pwrmgr_attribute.pwrmgr_device!

=PWRMGR_ALWAYS_ON)//如果电池供电

{

//电源管理任务状态:

0允许,1不允许

if(pwrmgr_attribute.pwrmgr_task_state==0)

{

//Holdoffinterrupts.

HAL_ENTER_CRITICAL_SECTION(intState);//屏蔽中断

//从系统中获取休眠时间

next=osal_next_timeout();

//Re-enableinterrupts.

HAL_EXIT_CRITICAL_SECTION(intState);//打开中断

//调用休眠函数

OSAL_SET_CPU_INTO_SLEEP(next);//休眠模式

}

}

}

电源管理属性状态为:

typedefstruct

{

uint16pwrmgr_task_state;//任务的电源管理状态

uint16pwrmgr_next_timeout;//下一次超时时间

uint16accumulated_sleep_time;//睡眠定时器累积的计数值

uint8pwrmgr_device;//分为两种设备模式:

PWRMGR_ALWAYS_ON、PWRMGR_BATTERY

}pwrmgr_attribute_t;

(3)休眠函数

OSAL_SET_CPU_INTO_SLEEP(next)为宏定义函数:

#defineOSAL_SET_CPU_INTO_SLEEP(timeout)halSleep(timeout)

HalSleep是系统实际调用的休眠函数。

该函数首先设置睡眠模式,深度睡眠或者定时器睡眠。

当设置为定时器休眠模式,系统会执行一系列有序的操作:

调用MAC_PwrOffReq()函数关闭MAC层,关断外设,使MCU进入休眠模式,休眠结束后会唤醒MCU,开启外设,最后重启MAC层。

然而,当设置空闲时接收器使能(RFD_RCVC_ALWAYS_ON)会导致MAC层休眠时不关闭,会阻止设备进入休眠模式。

以下是halSleep函数,timeout是设置的定时器溢出时间:

voidhalSleep(uint16osal_timeout)

{

//---------------------------------------设置睡眠模式--------------------------------------------//

/*将系统设置的毫秒单位时间转换为以320微秒单位的定时器时间*/

timeout=HAL_SLEEP_MS_TO_320US(osal_timeout);

if(timeout==0)

{//获取MAC层时间链表timeout的最小值

timeout=MAC_PwrNextTimeout();

}

else

{//获取MAC层时间链表timeout最小值与OSAL层timeout比较大小取得最小值

macTimeout=MAC_PwrNextTimeout();

if((macTimeout!

=0)&&(macTimeout

{

timeout=macTimeout;

}

}

//如果timeout等于0,设置睡眠模式为深度睡眠模式

//如果timeout不为0,设置睡眠模式为定时

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1