Z-stack的休眠注意事项

这几天在玩TI的CC2530,测试其ZIGBEE协议栈的低功耗模式,TI确实花了不少功夫在这套协议栈上以及支撑的操作的系统OSAL,非常好用。做了几个简单的配置即可进入低功耗模式,并且数据采集、通信均正常。

担当我认为OK的时候,我把协调器关闭了,过了一段时间,重新打开,发现终端连不上了,测量了终端的电池电压(CR1220,40mA/H),已经没电了;问题的根源就是终端发现协调器不在线了,不停的去重连网络导致的,要知道重连过程是很耗电的。如何解决?找了网上的资料,如下:

/

这个我有研究过,如果不配置DEV_HOLD,设备会一直加网,直到有网络。如果想要设备隔一段时间再加网,可以参照下面的做法(需要注意的是,我只验证了设备会按照设定的时间起来加网,并不能说明降低了功耗)。
#define NWK_INIT_fAIL_MAX     5
UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events )

    ……
  if ( events & ZDO_NETWORK_INIT )
  {
    static uint8 initFailCounter = 0;        
    // Initialize apps and start the network
    devState = DEV_INIT;
    osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
        //by asura 20140901
        if(initFailCounter++ >= NWK_INIT_fAIL_MAX )
    {
          osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, 60000 );
          initFailCounter = 0;
          return(events ^ ZDO_NETWORK_INIT);
        }
        
    ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
                     DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );

    // Return unprocessed events
    return (events ^ ZDO_NETWORK_INIT);
  }
……

这样更改以后,设备上电会首先尝试5次加网,如果都失败,其后就会每1分钟起来加网一次。

另外,由于osal_start_timerEx()第二个参数为uint16类型的,这样就限制了延迟时间的大小,我想问下,怎么设置5分钟或更长时间的延迟?




使用CC2530间隔10秒钟发送一包数据,所需时间、电流实测如下:

电池电压:2.97V,采样电阻11欧姆。

波形下文图:

参数如下:

1. 完成一次完整的数据交互时间为:30ms

2. 唤醒后系统正常工作电流为:100mV/11R=9.09mA,官方数据为:6.5~8.9mA。

3. 系统电流+发射电流:320mV/11R=29.09mA,官方数据为:28.7mA。

4. 系统电流+接收电流:360mV/11R=32.72mA,官方数据为:24.3~29.6mA。

5. 发送数据的时间为:第一次发射:0.5ms~1.5ms不等,第二次发射(应答):1ms。总共发射时间2.5ms。

6. 接收数据的时间为:2.5ms。

数据结果分析:

1. 以上的数据存在一定的误差,例如系统交互时间,每次发送可能存在1ms的误差。

2. 实测数据和官方数据存在的差异原因1:这个测试实在电池存在较大内内阻的情况下测试,存在一定的电压波动。原因2:这是在休眠-唤醒突发数据发送模式下测试的数据,而官方则是在系统正常工作模式下测试。原因3:示波器的参数读取与个人习惯有关,上述值可实际值可能存在一定的差异。


系统功耗评估:

10s发送一次数据:382uAH

电池(550maH)工作时长: 1.99年

换成30秒发送一次数据的话,可工作5年以上。


电池(240mah),1分钟发送一次数据:可工作5.2年。(TI的设计在同样的电池情况下可持续工作10.58年,这就是差距呀!!!



其实可以在这个函数中可以看到在OSAL中是使用的睡眠定时器来控制睡眠时间的,在系统初始化的是将电源控制结构体中的pwrmgr_device设备属性设置为PWRMGR_ALWAYS_ON,这样默认就不进入休眠状态。必须在应用层里面调用void osal_pwrmgr_device( uint8 pwrmgr_device )这个OSAL的API来设置使得OSAL能够进入休眠状态。



CC2530 2.4G ZigBee 低功耗PCB设计需注意几点

该PCB采用四层层叠结构,顶层为信号层,布有2.4G天线链路,形成了微带线。第二层为地层,由于该电路是模数混合,地层进行了内层分割,通过0欧电阻连接。第三层是电源层,通过电池供电,经过LDO稳压芯片输出VDD_3.3v给数字电路供电,输出VCC_3.3v给模拟电路供电,模拟电路主要选用低功耗、单电源供电、轨到轨精密运放进行搭建,进行传感器前端模拟信号调理。底层是信号层。


1、在CC2530主芯片下面加焊盘和过孔的作用是增大到地的过电流、增强抗干扰 、 散热;

2、低功耗运放电路中尽量选择阻值较大的电阻,也不宜过大,会导致噪声和不稳定现象。一般选择10K数量级;

3、在电路板上空余区域加大量对地过孔是为了屏蔽和散热;

4、2.4G天线制版时板材厚度为1mm。我们希望能设计出更小且增益更高的天线,但是天线PCB基材(FR4)越厚,天线表现的电长度越长。天线PCB基材(FR4)越厚,天线的增益相对越低,因此制作PCB时,厚度要薄。

5、高频电路中电容值在100pF以下时,选择贴片NPO材料的电容,精度在5%左右。 一般的滤波电路选用X7R材料的电容,容量比NPO要高,精度在10%左右;

6、天线链路的阻容尽量用0402封装,0603封装在2.4G高频链路中将引入很大寄生参数;

7、高频电路尽量走线走圆弧;

8、TDK的MLK型电感,尺寸小,可焊性好,有磁屏,采用高密度设计,单片式结构,可靠性高;MLG型的感值小,采用高频陶瓷,适用于高频电路;MLK型工作频率12GHz,高Q,低感值(1n~22nH);

9、晶振下面不要铺地和电源,也不要走线;用地把晶振围起来的做法,晶振下方本身是没有地的(仅限在同一层,比如晶振在顶层,然后在晶振下面,顶层这一块是没有地的,晶振被地围起来,但是其他层还是可以有的)。

10、天线链路线宽要保证等宽,若不相等,会导致阻抗不匹配,出现反射;CC2530引脚与天线链路要用渐近线过渡;

11、天线链路与顶层铺地之间应至少留有2倍线宽的间隔;

12、在顶层和底层铺地时,充分打地孔,目的是使表层铜箔接地充分,严禁出现孤立的铜箔,防止其表现为天线,不仅没有起到屏蔽作用,反而加强了对外的辐射。



你可能感兴趣的:(Z-stack的休眠注意事项)