2898|2

3238

帖子

5

TA的资源

五彩晶圆(中级)

楼主
 

低功耗的设置 [复制链接]

Z-stack提供了两种sleep模式,LITE和DEEP(PM2/PM3)。当系统需 要唤醒去执行一些周期性的事件时,使用LITE sleep;当系统没有被定制周期事件而是通过外部中断(如按键)来唤醒设备,使用DEEP sleep。例如带有传感器的终端设备,它需要周期性的唤醒发送采集的数据,又如远程控制终端设备通过按键唤醒来发送一信息,它们的大部分时间都是处于 sleep,以降低功耗。

第一步:添加编译选项:POWER_SAVING
默认情况下,Z-stack里终端设备的电源管理是关闭的。添加编译选项POWER_SAVING以开启此功能

第二步:在f8wConfig.cfg里设置:-DRFD_RCVC_ALWAYS_ON = FALSE
-DRFD_RCVC_ALWAYS_ON=FALSE

第三步:根据需要,在f8wConfig.cfg里设置三个参数:
-DPOLL_RATE=1000
-DQUEUED_POLL_RATE=100
-DRESPONSE_POLL_RATE=100

Z-stack工程终端设备默认情况下为电源管理关闭,自动轮询消息这一功能是开启的。这里有三个轮询选项,每一个都由一个不同的时间延迟参数控制。当电源管理功能开启后(添加POWER_SAVING),任一个轮询选项的设置都会影响到睡眠模式。时间延迟的设置不能用于DEEP skeep中的轮询,因此限制了降低功耗。这三个轮询选项分别如下:
Data Request Polling—周期性向父节点发送数据请求来轮询消息队列。轮询的时间间隔由NLME_SetPollRate()或gNWK_POLL_RATE设定,如果事先没有使能它,那么在调用时就立即进行轮询。
Queued Data Polling—在收到数据指示后,就会向父节点请求消息。这个时间间隔可由NLME_SetQueuedPollRate()或gQUEUED_POLL_RATE设定。
Response Data Polling—在收到数据确认指示后,就会向父节点请求响应消息,这个时间间隔可由NLME_SetResponsePollRate()或gRESPONSE_POLL_RATE设定。
函数说明:
NLME_SetPollRate()——设置/改变网络检测速率,仅终端设备可用。
NLME_SetQueuedPollRate()——设置/改变队列检测速率,仅终端设备可用。
NLME_SetPollRate()——设置/改变响应检测速率,仅终端设备可用。
如果只是使用默认的轮询频率进入睡眠态,则只能进入LITE sleep。为了进入DEEP sleep则必须将gNWK_POLL_RATE设为0,不让它反复轮询。
设置这个三个选项可以实现多种轮询方式,例如,对于一个不需要接收消息的设备,在它加入网络后,就将这三个选项都设为0。如果APS层使用了ACK,则必需确保在消息发送后到收到ACK这一段时间内,轮询是使能的。
在有的系统中,可能需要使用可变的轮询频率,根据具体应用而进行设置。
对于这个功耗管理最好参考TI的官方资料,顺便还说一句上面那种情况一般是出现在ZC和ZD通信时才考虑.上面的设置方式还不能最大的降低功耗,好像只能进入到PM2模式,如果需要进入PM3模式还需要调用HAL_SLEEP()这个函数,具体怎么弄可以看协议栈代码。对于低功耗的数据采集,有些网友不知道如何保存之前的网络,也就无法知道是那个模块在采集数据,对于这个,我觉得最好可以加入 NV_INIT,NV_RESTORE编译。还有一个大伙可能会出现的,就是有些人把虽然保存了网络信息也组好了网络,但是发现用TI的smartRF给协调器烧写hex文件之后无法入网了,这是为什么呢?因为smartRF把NV擦除了,所以协调器重启建立PANID所以无法入网。有时甚至会出现PANID冲突,对于这个解决办法是用IAR DEBUG 工程里面选择不擦除NV就OK了。

[ 本帖最后由 wateras1 于 2013-5-9 11:18 编辑 ]
此帖出自RF/无线论坛

最新回复

感谢分享  详情 回复 发表于 2013-6-6 17:09
点赞 关注
 

回复
举报

134

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
MARK
此帖出自RF/无线论坛
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
感谢分享
此帖出自RF/无线论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表