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

时间:2021-10-15 06:33:44

(配套源码软件开发板等资源,可移步博客同名QQ群:拿破仑940911


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

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

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


一、实验目的

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

二、实验准备

1、硬件准备

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

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

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

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

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

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

(4)SmartRF04EB下载器一个;

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

2、软件准备

(1)EW8051 8.10.3;

(2)SmartRF Flash Programmer 1.12.8;

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

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

三、代码修改

1、选取模板工程

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

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

(1)选择终端设备

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

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

(2)开启低功耗模式

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

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

将预编译选项中原本的“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,如下图所示:

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

(3)功耗测试

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

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

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

(4)连接至电脑

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

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

2、ZigBee终端设备

(1)普通模式测试

a、烧写固件

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

b、连接至Power Monitor

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

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

c、功耗测试

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

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

可见图中交点处的电流为 8.087mA
以及软件估算得出: 3.3V300mAh的电池在当前这种功耗的情况下,使用寿命约为32.44小时
PS:有兴趣的朋友可以仔细分析上面这张图,里面包含了ZigBee终端设备入网的整个过程中的功耗情况!

d、ZigBee协调器情况

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

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

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

(2)低功耗模式测试

a、烧写固件
针对于开启了低功耗模式的终端设备的程序,可以选择直接用Flash Programmer烧写hex文件,或者是在IAR中编译成功后直接下载。
b、连接至Power Monitor
与前面相同。
c、功耗测试
测得其功耗情况如下图所示:
ZigBee TI ZStack CC2530 5.4 实例(二)终端设备低功耗与电池寿命02-实验
可见图中交点处的电流为 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终端设备的功耗如下:
ZigBee TI ZStack CC2530 5.4 实例(二)终端设备低功耗与电池寿命02-实验
可见图中交点处的电流为 0.014mA,即 14uA
以及软件估算得出: 3.3V300mAh的电池在当前这种功耗的情况下,使用寿命约为134.78小时
PS:感兴趣的朋友可以对比一下这张图与前一张图之间的区别。


(配套源码软件开发板等资源,可移步博客同名QQ群:拿破仑940911