#author("2021-03-24T13:32:08+08:00","default:Admin","Admin")
[[ZigBee]]
#author("2022-07-09T15:21:46+08:00","default:Admin","Admin")
[[+TI+CC2530]]

&color(red){※This article is based on ZigBee Stack 2.51.a};

* 设置低功耗模式 [#d3ca7fed]
** f8wConfig.cfg文件 [#s1881ad2]
DRFD_RCVC_ALWAYS_ON定义为FALSE
这几个全部赋值0。
- DPOLL_RATE
- DQUEUED_POLL_RATE
- DRESPONSE_POLL_RATE
- DREJOIN_POLL_RATE

**预编译 [#b4be0239]
  .Options->C/C++Compiler->Defined symbols中添加预编译“POWER_SAVING”;

**PWRMGR_BATTERY [#hf77383b]
在你的任务初始化中增加这么一句osal_pwrmgr_device(PWRMGR_BATTERY);否则,OS不会进入省电模式。注意所有的用户任务都必须执行这么一句,否则无法进入省电模式。

**睡眠方式 [#gc6c17e7]

找到void halSetSleepMode(void)函数,PCON = halSleepPconValue;这句决定你进入哪种省电模式,找到它定义的地方,我这边赋值是PCON_IDLE,将其改成HAL_SLEEP_TIMER或CC2530_PM2,即可进入PM2模式。想进入PM3同理。

* 省电的注意点 [#yc428a79]
以下做完了,才能实现了1.1uA的目标

作为第4点,即可进入PM2模式,但是并不以为则真的省电,可能几百个uA也可能若干个mA甚至几十个mA和没进入PM2一样。原因是,有其他任务在不停的唤醒CPU,导致电流下不来,需要注意哪几点?
** 键盘 [#u1d1e563]
如果采用扫描模式则,则不停唤醒CPU,需设置成中断模式,或加大扫描周期。
** LED [#e52ea339]
LED也有个任务,看看你的LED是不是频繁闪烁,如果是停掉。
** ADC [#g30b1144]
我听别人说的,有个电池检测的任务不停进行电压采样,我这里没有。
** 协议栈 [#efc6c1a1]
*** 加入网络 [#p9e69341]
终端上电后或者断网后,会主动查找网络,导致无法进入省电模式。
解决办法:http://blog.csdn.net/shjhuang/article/details/51171369,TI论坛也有,我忘记链接了。

*** [#k704811b]
 VV大侠的http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/75525.aspx 当中的第4点。


*其他补充 [#r972c943]

重要函数void halSleep( uint16 osal_timeout )
+ 首先将osal_timeout转成以320US为单位
+ 获取下一次MAC定时器到期时间
+ halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;  
//为PM2,PM3模式。 没有任务要执行就进入PM3深度睡眠,否则进入PM2睡眠,可以定时器唤醒。
+ 唤醒

#codeprettify{{
POLL_RATE
QUEUED_POLL_RATE
RESPONSE_POLL_RATE
}}

&ref(ZigBee_体系结构.png);

#hr();
コメント:
#comment_kcaptcha

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS