查看: 14459|回复: 13

CC2430DB的电源管理 1

[复制链接]
F117C 发表于 2011-1-18 09:08:28 | 显示全部楼层 |阅读模式
F-117-C 翻译
转载请注明出处,谢谢!

1.目的
       本文档介绍了使用的电源管理理念后,德州仪器在Z - Stack(TM)的ZigBee协议栈构建的应用程序的Chipcon公司CC2430DB。电源管理是一般由电池供电的设备将通过各种睡眠模式,无活动期间使用时间的电池寿命。

2.定义
MAC - 媒体访问控制软件,实现了IEEE 802.15.4通信功能。
MCU - 微控制器单元 - 8051处理器的嵌入式系统芯片CC2430片上CC2430DB板上。
OSAL - 操作系统抽象层 - 独立于平台的任务处理提供了与Z - Stack的。
Sleep - 一个行动中的某些功能被禁用,以降低功耗MCU模式消费。 CC2430的基础之上提供了三种不同的睡眠模式,其中两个是使用了Z - Stack。
End Device - ZigBee的设备,,加入网络但是没有路由功能,通常空闲时关闭其接收器。这就要求其父设备持有,直至最终的信息,其信息设备调查。

3.什么是电源管理
      电源管理被使用电池供电终端设备,尽量减少短暂无线电通信之间的功耗。通常,一个终端设备禁用功耗的外设和空闲期间进入睡眠模式。 Z - Stack还提供了两种睡眠模式,轻度休眠和深度休眠指定。轻度睡眠在系统统需要唤醒去执行与预定时间延迟的活动时被使用。深睡眠被使用的是没有未来的活动计划,需要外部刺激(如按一个按钮)唤醒设备时。 轻度睡眠普遍降低功耗到几毫安,而深睡眠减少到几微安。睡眠的终端设备的例子产品包括,传感器,它被定时的唤醒报到他们采集到得信息,还有远程控制设备,它被用户按键唤醒,发送邮件时。在这些类型的设备共同特点是,他们用他们在大部分时间处于睡眠模式,最大限度地减少功耗。

4. Z-Stack怎么控制睡眠模式
       电源管理是使用电池供电终端设备,尽量减少功率之间的预定活动(轻度睡眠),或在不活动(深睡眠)长期短暂消费。系统活动在每个任务完成后被OSAL主控回路监控。如果没有任务有一个活动计划,电源管理功能启用,该系统将决定是否睡觉。符合下列条件都必须符合该设备进入睡眠模式,以:
-睡眠POWER_SAVING编译选项启用
-ZDO节点描述显示“RX是空闲时关闭”。这是通过设置RFD_RCVC_ALWAYS_ON在f8wConfig.cfg为FALSE。
所有的Z - Stack的任务“同意”允许睡眠
-Z - Stack的任务,没有安排活动
-MAC没有预定活动

       Z-Stack 中终端设备的工程项目在默认情况下没有电源管理功能。要启用此功能,POWER_SAVING编译选项在工程建立的时候必须被指定。如下图所示,此选项是划归C预处理器选项卡/ C + +编译选项框中定义的符号:




      为了减少功耗到最低程度,终端设备,需要将尽可能多地把电子电路关掉,在进入睡眠模式之前。这包括外围设备,无线电接收器和发射器,以及单片机本身的重要部分。为了避免在睡觉时丢失信息,终端设备的父设备需要持有子节点的信息,直至终端设备接收到这些信息。父设备“知道”,终端将接收到信息,当能量在终端设备间交流,请求CAPINFO_RCVR_ON_IDLE 关闭,在Z - Stack的工程中,默认设置,设备功能ZDO_Config_Node_Descriptor结构中被指定,在ZDConfig.c文件中。默认的终端设备,只说明CAPINFO_DEVICETYPE_RFD,表明它是电池供电,并关闭其接收器空闲时:

NodeDescriptorFormat_t ZDO_Config_Node_Descriptor =
{
#if defined( ZDO_COORDINATOR ) && !defined( SOFT_START )
  NODETYPE_COORDINATOR,
#elif defined (RTR_NWK)
NODETYPE_ROUTER,
#else
  NODETYPE_DEVICE,          // Logical Type
#endif
  0,                        // User Descriptor Available is set later.
  0,                        // Complex Descriptor Available is set later.
  0,                   // Reserved
  0,                      // NO APS flags
  NODEFREQ_2400,            // Frequency Band
  // MAC Capabilities
#if defined (RTR_NWK)
  (
  #if defined( ZDO_COORDINATOR ) || defined( SOFT_START )
    CAPINFO_ALTPANCOORD |
  #endif
    CAPINFO_DEVICETYPE_FFD |
    CAPINFO_POWER_AC |
    CAPINFO_RCVR_ON_IDLE ),
#else
  CAPINFO_DEVICETYPE_RFD
  #if ( RFD_RCVC_ALWAYS_ON == TRUE)
    | CAPINFO_RCVR_ON_IDLE
  #endif
  ,
#endif
  { 0x00, 0x00 },           // Manfacturer Code - *YOU FILL IN*
  MAX_BUFFER_SIZE,          // Maximum Buffer Size.
  // The maximum transfer size field isn't used and spec says to set to 0.
  {0, 0},
  ( 0
#if defined( ZDO_COORDINATOR ) && ( SECURE != 0 )   
    | PRIM_TRUST_CENTER
#endif      
  )
};

      在决定是否尝试节电是主要循环结束时。如果所有的Z - Stack的任务被检查且都没有做任何处理,活动变量将是错误的。如下图所示,在编译选项POWER_SAVING确定是否被osal_pwrmgr_powerconserve()函数调用:
#if defined( POWER_SAVING )
    else  // Complete pass through all task events with no activity?
    {
      osal_pwrmgr_powerconserve();  // Put the processor/system into sleep
    }
#endif

      在这一点上,两个或者更多检查工作将被执行再尝试进入睡眠模式之前。首先,检查pwrmgr_device变量被设置为电池设备。此设置是建立在设备加入网络,见例子ZDApp.c。第二,pwrmgr_task_state变量进行检查,以确保没有任务“put a hold”“在节能方面。这种机制使每个Z - Stack的任务,在关键业务禁用睡觉。当这些条件都符合,所需的理想的睡眠时间是由系统下次的过期时间
计时器决定。如果下一个过期时间大于零,比MIN_SLEEP_TIME少,SLEEP_LITE模式的就被选择。在这种模式下,系统时间被调整
提供一个“唤醒”的计时器事件中断是由于到期一次,该MIN_SLEEP_TIME是为了防止很短时间的脱离在hal_sleep.c定义。 SLEEP_DEEP模式的选择,在没有Z - Stack的事件或定时器计划,因此未来到期为零,最大允许功耗:

  // Should we even look into power conservation
  if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON )
  {
    // Are all tasks in agreement to conserve
    if ( pwrmgr_attribute.pwrmgr_task_state == 0 )
    {
      // Hold off interrupts.
      HAL_ENTER_CRITICAL_SECTION( intState );

      // Get next time-out
      next = osal_next_timeout();

      // Re-enable interrupts.
      HAL_EXIT_CRITICAL_SECTION( intState );

      // Put the processor into sleep mode
      OSAL_SET_CPU_INTO_SLEEP( next );
    }
  }

        该OSAL_SET_CPU_INTO_SLEEP宏开始被称为睡眠过程。对于CC2430DB,此宏调用halSleep()函数执行关停MAC,关闭外设,进入MCU器休眠模式,睡眠后醒来的MCU,打开外设,最后重新启动的MAC等任务。由于Z - Stack的系统循环运行独立的MAC调度,Z - Stack还不知道的MAC处理的状态。对MAC_PwrOffReq()的调用会请求一个MAC关机。应当指出,MAC不会关闭因为睡觉,当接收器空闲时启用,所以是无法入睡的设备。

        在CC2430DB,深度睡眠模式终止,只有从外部中断的操纵杆和S1或从一个MCU复位。这种模式是利用远程空竹装置类型的睡眠状态,直到外部刺激,例如按下按钮。轻度睡眠模式可以被任何中断事件终止,包括外部事件,以及定时器事件。如果外部中断唤醒了微控制器,而在轻度睡眠模式(计时器没有过期醒来),Z - Stack的计时系统调整为唤醒预定时间延迟,过去了一小部分。

请注意,中断只能生成当 S1是按下操纵杆时是切换。 S1是旁边的绿色LED。参照 board image对应本笔记结束。


5。睡眠定时器的思考

轻度睡眠在CC2430DB板上被建立,在一个24位硬件计时器(SLEEP_TIMER)被32.768 kHz晶体时钟源驱动。电源管理器使用的睡眠计时器保持轨道的运行时间计时器到期后,以唤醒了微控制器。睡眠计时器有一个24位计数器和一个24位比较器。CC2430的睡眠定时器能够保持在睡眠期间长达512s的跟踪网络痕迹,因此最长的睡眠时间是510秒(2秒(四舍五入)。系统使用的16位定时器的结构。因此,系统计时器有65s限制基于1毫秒计时器刻度秒。
       在SLEEP_TIMER比较值是由下面的公式集,其中超时下系统/MAC 单位在320微秒的MAC计时器到期和扁虱是当前SLEEP_TIMER数:
       ticks += (timeout * 671) / 64

32KHz的比例为320微秒滴答滴答是32768/3125 = 10.48576。这是近671/64 = 10.484375。当SLEEP_TIMER计数的比较值,产生一个中断和唤醒了微控制器。从睡眠状态唤醒后成立,以毫秒为单位计算经过的时间是*1000/32768 或:  ticks * 125 / 4096

6. 应用考虑

       终端设备在Z - Stack的示例应用程序初始化被建立为,禁止电源管理,自动接收信息使能。三种不同的接收选项被支持,每一个时间延迟参数都被控制。当启用电源管理(POWER_SAVING编译选项),连同任何接收选项,睡眠模式将会受到影响。具体来说,预定的接收时间延迟被深度睡眠所排除 ,因此限制节能。三个时间延迟接收选项包括:

数据请求查询 - 定期发送数据请求父设备为排队的邮件调查。消息之间的间隔时间可以改变存储在gNWK_POLL_RATE所需的时间,或设置立即调用函数NLME_SetPollRate()。调用此函数将开始投票,如果以前已禁用。为1的时间间隔调用将立即调查,一时间。

排队数据查询 - 民调为排队的邮件后,收到的数据显示父设备。延迟的时间可以改变调用函数NLME_SetQueuedPollRate()或存储在gQUEUED_POLL_RATE此功能还允许快速“卸载排队邮件”,无论数据请求投票率。

响应数据查询 - 轮询父设备为了响应消息当接收到确认信息后,延迟的时间可以被改变通过调用函数NLME_SetResponsePollRate()或直接存储在gRESPONSE_POLL_RATE。此功能允许迅速“卸载响应消息”,如接入点鸣谢,无论数据请求轮询率。

       POLL_RATE,QUEUED_POLL_RATE,RESPONSE_POLL_RATE默认的编译选项在f8wConfig.cfg中设置,然后安装轮询率在nwk_globals.c源文件中,规定了终端设备将自动查询消息。如果POWER_SAVING被默认的轮询率使能,节电将仅限于浅度睡眠模式。为了尽量减少创建一个深度睡眠器件的功耗,重复查询应禁用通过设置gNWK_POLL_RATE为零。各个查询策略可以通过适当的设置这三个值的查询率来实现。例如,对于从来没有的设备需要接收一旦加入了这个网络应设立三个查询率为零的消息。如果ZigBee的应用支持子层被利用,在每个信息传递至少要等到收到应答之后查询需要被使能。在某些系统中,这可能是有益的查询率各不相同,这取决于具体的应用程序的活动。

       另外一个查询活动是关键查询。关键查询启用默认情况下,在100毫秒率。要禁用的关键查询,要改变OnboardKeyIntEnable的HAL_KEY_INTERRUPT_ENABLE。
     /* Initialize Key stuff */
    OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;  //--HAL_KEY_INTERRUPT_ENABLE
    HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
outman 发表于 2011-1-24 10:08:34 | 显示全部楼层
尊重楼主的劳动成果,如果本站在其它文章中引用楼主的文章,会加以注明的。楼主的共享精神值得钦佩!
outman 发表于 2011-1-24 10:08:39 | 显示全部楼层
尊重楼主的劳动成果,如果本站在其它文章中引用楼主的文章,会加以注明的。楼主的共享精神值得钦佩!
lsy1264 发表于 2011-4-13 10:24:54 | 显示全部楼层
楼主辛苦了,分享精神值得敬佩!但是,我觉得文章还可以再完善一下,以便XDJM们更好的理解,一点愚见
 楼主| F117C 发表于 2011-4-13 21:31:56 | 显示全部楼层
翻译水平有限,欢迎完善!谢谢!
id124865188 发表于 2012-3-1 09:14:34 | 显示全部楼层
顶起先
  谢谢分享
Arlene 发表于 2012-3-2 12:13:46 | 显示全部楼层
非常感谢!辛苦了!
心月 发表于 2012-3-9 17:50:06 | 显示全部楼层
感谢~,辛苦了~
lizheng86312 发表于 2012-8-29 13:21:08 | 显示全部楼层
学到东西了。顶。。。
jiangzhimingyue 发表于 2012-12-4 23:09:45 | 显示全部楼层
m  ar   km  ar   km  ar   k
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表