ZigBee TI ZStack CC2530 5.4 实例(二)终端设备低功耗与电池寿命02-实验

【配套源码文档软件硬件等资源,入口见文末

之前在网上看过一些关于如何配置终端设备,使其进入低功耗模式的,但大多讲的比较复杂,最后也没有明确的结果可以看得到的功耗是否真的降下来了。所以,我决定亲自做一下实验,并且写一篇有图有真相的博客,与大家分享~

上一节主要是关于ZigBee设备的低功耗相关理论的讲解。

本节将讲述如何对终端设备进行低功耗配置,以及使用Monsoon公司的Power Monitor软件实时测量终端设备的功耗和估算电池寿命。

一、实验目的

本次实验的目的是配置Z-Stack协议栈,让ZigBee终端设备可以进入低功耗模式。并且通过精密的仪器,给出“普通模式”下和“低功耗模式”下确切的规功耗情况。

二、实验准备

1、硬件准备

(1)Power Monitor仪器一台,如下图所示:

(2)ZigBee协调器一个,如下图所示:

(3)ZigBee终端设备一个(用的是上次中等规模组网实验的ZigBee模块),如下图所示;

(4)SmartRF04EB下载器一个;

(5)USB线(供电线)一根;

2、软件准备

(1)EW8051 8.10.3;

(2)SmartRF Flash Programmer 1.12.8;

(3)Power Tool 4.0.4.12,软件界面如下:

三、代码修改

1、选取模板工程

选取网盘分享的各个版本的源代码中任意一个都可以,并以此为基础进行本次实验。

2、ZigBee终端设备(EndDevice)修改

(1)选择终端设备

既然我们是要对终端设备进行配置修改,那么肯定就是在IAR软件界面上的Workspace位置选择EndDeviceEB,如下图所示:

(2)开启低功耗模式

之前在网上看的教程中讲的是要配置很多参数,但后来实际仔细分析过代码后发现,很多网上提及需要配置的地方Z-Stack协议栈中都是默认配置好了的,实际真正关键的、需要我们修改的地方只有一处,如下图所示:

将预编译选项中原本的“xPOWER_SAVING”前面的“x”去掉,修改为“POWER_SAVING”。这样,编译下载之后,终端设备即可自动进入低功耗模式!

(3)编写功能代码

我们实际关心的应该是终端设备在ZigBee网络中的功耗表现。为了直观地体现出ZigBee终端设备的在网状态,我们编写代码实现终端设备入网成功后,以2s为周期向ZigBee协调器发送测试数据。ProjectApp.c文件和user_api.c文件中的关键代码分别如下:

uint16 ProjectApp_ProcessEvent( uint8 task_id, uint16 events )
{
......
  if ( events & PROJECTAPP_SEND_MSG_EVT )
  {
    ProjectApp_SendUnicast16();
    return (events ^ PROJECTAPP_SEND_MSG_EVT);// return unprocessed events
  }
......
}
void user_state_change( afIncomingMSGPacket_t *pkt )
{
......
    if((devStates_t)(pkt->hdr.status) == DEV_END_DEVICE)
    {
      osal_start_reload_timer( ProjectApp_TaskID, PROJECTAPP_SEND_MSG_EVT, 2000);
    }
......
}

3、ZigBee协调器修改

(1)选择ZigBee协调器

按照上面同样的方法,在IAR软件界面上的Workspace位置选择CoordinatorEB即可。

(2)编写功能代码

ZigBee协调器收到数据后,只要将收到的数据通过串口打印出来即可。ProjectApp.c文件中的关键代码如下:

static void ProjectApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
  switch ( pkt->clusterId )
  {
    case PROJECTAPP_CLUSTERID:
      HalLedSet(HAL_LED_1,HAL_LED_MODE_TOGGLE);
      printf("%s",pkt->cmd.Data);
      break;
  }
}

四、实验验证

1、ZigBee协调器

(1)烧写固件

可以选择直接用Flash Programmer烧写hex文件,或者是在IAR中编译成功后直接下载。

(2)连接至Power Monitor

将ZigBee协调器上的核心模块连接至Power Monitor,如下图所示:

(3)功耗测试

测得其功耗情况如下图所示:

可见图中交点处的电流为27.371mA

(4)连接至电脑

将烧好程序的ZigBee协调器模块从Power Monitor上取下,并插回ZB502底板。通过串口转USB连接到电脑,在电脑端运行串口调试助手。复位之后,可见串口调试助手界面如下图所示:

2、ZigBee终端设备

(1)普通模式测试

a、烧写固件

针对于没有做过任何更改的终端设备的程序,可以选择直接用Flash Programmer烧写hex文件,或者是在IAR中编译成功后直接下载。

b、连接至Power Monitor

将ZigBee终端设备连接至Power Monitor,如下图所示:

c、功耗测试

测得其功耗情况如下图所示:

可见图中交点处的电流为8.087mA

以及软件估算得出: 3.3V300mAh的电池在当前这种功耗的情况下,使用寿命约为32.44小时

PS:有兴趣的朋友可以仔细分析上面这张图,里面包含了ZigBee终端设备入网的整个过程中的功耗情况!

d、ZigBee协调器情况

此时,我们通过串口调试助手可以看到,终端设备正在不断地向协调器发送数据。如下图所示:

由此可见,终端设备目前在ZigBee网络处于正常工作状态。

(2)低功耗模式测试

a、烧写固件

针对于开启了低功耗模式的终端设备的程序,可以选择直接用Flash Programmer烧写hex文件,或者是在IAR中编译成功后直接下载。

b、连接至Power Monitor

与前面相同。

c、功耗测试

测得其功耗情况如下图所示:

可见图中交点处的电流为0.011mA,即11uA

以及软件估算得出:3.3V300mAh的电池在当前这种功耗的情况下,使用寿命约为142.93小时!果然,进入低功耗模式后,电池寿命会大幅增长!尽管如此,但和实际产品开发中的要求还是有一定差距的,需要进一步降低功耗!

PS:有兴趣的朋友同样可以仔细分析上面这张图,里面包含了ZigBee终端设备入网的整个过程中的功耗情况!

d、ZigBee协调器情况

与ZigBee终端设备在普通模式下工作时,是完全一样的情况,此处就不再赘述~

e、补充

进一步测试:将OnBoard.c文件中的InitBoard()函数中的这行代码(在Z-Stack协议栈最原始的代码里,此处是用的HAL_KEY_INTERRUPT_DISABLE,后来实验中改为了HAL_KEY_INTERRUPT_ENABLE):

    HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE, OnBoard_KeyCallback);

修改成如下:

    HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback);

再测得ZigBee终端设备的功耗如下:

可见图中交点处的电流为0.014mA,即14uA

以及软件估算得出:3.3V300mAh的电池在当前这种功耗的情况下,使用寿命约为134.78小时

PS:感兴趣的朋友可以对比一下这张图与前一张图之间的区别。

【配套源码文档软件硬件等资源,入口见文末

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拿破仑940911

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值