微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 请教问题,关于zigbee 2530中Z-STACK中低功耗模式的使用。

请教问题,关于zigbee 2530中Z-STACK中低功耗模式的使用。

时间:10-02 整理:3721RD 点击:

我写了一个程序,在Z-STACK中实现了电压的采集,并成功发送接收。

现在,我想实现这样的功能:终端节点每采集、发送一次后,进行几分钟的休眠,让其进入低功耗模式;然后,再进行采集。如此循环。

我进行了如下设置:

1、我打开了POWER_SAVING。

2、在f8wConfig.cfg里设置:-DRFD_RCVC_ALWAYS_ON = FALSE。

3、闭Key轮询,开关Key中断。在Onboard.c文件的函数InitBoard()里把OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE

修改为OnboardKeyIntEnable = HAL_KEY_INTERRUPT_ENABLE;

最终,还是不能进入低功耗模式。无法进入低功耗。

if (MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) == MAC_SUCCESS) 无法成功。

请教大神指导指导,不胜感激!

PS:

有相关资料麻烦给个链接,或者496830205@qq.com

你是哪个版本的协议栈?我的2.5.1a里面怎么没有这句话,请确认下!

if (halSleepPconValue != 0 && MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) == MAC_SUCCESS)

您好,首先十分感谢您的回答。

1、我用的是“ZStack-CC2530-2.3.0-1.4.0”

该语句在 hal_sleep.c中。我看了下,两个版本,确实有点不一样。但是,下面的内容是一样的,具体如下

/* always use "deep sleep" to turn off radio VREG on CC2530 */
if (MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) == MAC_SUCCESS)
{
#if ((defined HAL_KEY) && (HAL_KEY == TRUE))
/* get peripherals ready for sleep */
HalKeyEnterSleep();
#endif

#ifdef HAL_SLEEP_DEBUG_LED
HAL_TURN_OFF_LED3();
#else
/* use this to turn LEDs off during sleep */
HalLedEnterSleep();
#endif

因为 if 判断不成功,始终进入不了HalKeyEnterSleep();   

此外,

2、我还设置了

/* The number of milliseconds to wait between data request polls to the coordinator. */-DPOLL_RATE=0  //原来为1000

/* This is used after receiving a data indication to poll immediately * for queued messages...in milliseconds. */-DQUEUED_POLL_RATE=0  //原来为100
/* This is used after receiving a data confirmation to poll immediately * for response messages...in milliseconds */-DRESPONSE_POLL_RATE=0   //原来为100

因为官方文档中,有提到“To minimize power consumption by creating a 

DEEP sleeping device, repetitive polling should be disabled by setting the zgPollRate to zero.”

另外还有一个疑问,“能否进入低功耗是否与硬件有关”,具体如下:

3、我看到TI官方文档“Application Note: Power Management For The CC2530”  (我将其放在了附件中)里面还提到了“Hardware Considerations ”

有如下内容 ,不知道,是否硬件也要坐相应处理?  比如,没有用到的 IO必须接上拉电阻,然后再配置为通用输入IO。  或者,直接配置为 输出IO。

“ Unused I/O pins should have a defined level and not be left floating. One way to do this is to leave the pin 

unconnected and configure the pin as a general purpose I/O input with pull-up resistor. Alternatively the pin can be
configured as a general purpose I/O output. In both cases the pin should not be connected directly to VDD or GND
in order to avoid excessive power consumption.
If the unused I/O pins are left floating in CC2530, the interrupt flag may not be cleared by software and constant
interrupt from the unused pin may occur. ”

4、为了实现周期采集、发送数据,我使用了“    osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT,3000);”函数。

是否是该函数的调用,影响了系统进入低功耗?

如果不能使用该函数,如何实现周期性采集、发送数据?

具体调用过程如下:

UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events )

..........................................

if(events&SEND_DATA_EVENT)

{
//extern uint16 HalAdcRead (uint8 channel, uint8 resolution);

ADshuju=HalAdcRead(0,HAL_ADC_RESOLUTION_12);

GenericApp_SendTheMessage();
osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT,3000);
return(events^SEND_DATA_EVENT);
}

再次感谢您!

最终问题解决了。是板子上面功耗的原因,把所有的附属的没用到的都去掉。功耗 1微安多一点。

你现在通过断点调试可以从之前出问题的if进去了吗? 但是你现在做的是硬件处理,跟软件的设置的没什么关系啊?

你可以整理一份资料出来嘛?

具体怎么实现给我说说呗 用自己写一个睡眠唤醒函数吗? 我也要实现低功耗 请赐教

这个,我记不清楚了。很长时间没做过嵌入式了,都搞忘了。

网上资料很多的。照着上面的步骤设置,一般都没有问题的。

注意一下,多数状况没进入低功耗的原因应该是“硬件外界电路的问题,甚至一个电阻,一个二极管导致的”。

我以前的所有的ZigBee资料,都拿来分享一下吧: http://pan.baidu.com/s/1pJO9mOV

大家再问,相关资料。很长时间没做过嵌入式了,都搞忘了。

网上资料很多的。照着上面的步骤设置,一般都没有问题的。

注意一下,多数状况没进入低功耗的原因应该是“硬件外界电路的问题,甚至一个电阻,一个二极管导致的”。

我以前的所有的ZigBee资料,都拿来分享一下吧: http://pan.baidu.com/s/1mg5c3VU

好的 谢谢

你的网盘打不开了 能给我个地址么。。。或者发送到邮箱也行。。。lovemytang@sina.cn

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top