如何实现ZigBee休眠与唤醒

合集下载

如何实现ZigBee休眠与唤醒 (1)

如何实现ZigBee休眠与唤醒 (1)

加红部分是一个宏定义,在OnBoard.h里面定义的。
#define OSAL_SET_CPU_INTO_SLEEP(timeout) halSleep(timeout);
halSleep(timeout)是在hal_sleep.c中定义的。
这里面涉及的就是关于CC2530的电源管理寄存器的一些操 作。具体可以看代码。
涉及文件
OSAL_PwrMgr.h
OSAL_PwrMgr.C hal_sleep.c
OSAL电源管理的API头文件
OSAL电源管理的API C文件 底层的电源管理文件
电源管理结构体
typedef struct { uint16 pwrmgr_task_state; uint16 pwrmgr_next_timeout; //任务状态 //下一次超时
void osal_start_system( void ) {
#if !defined ( ZBIT ) && !defined ( UBIT )
for(;;) // Forever Loop #endif {…… } #if defined( POWER_SAVING ) else // Complete pass through all task events with no activity { osal_pwrmgr_powerconserve(); // Put the pro cessor/system into sleep } #endif }
2.获取下一次MAC定时器到期时间
3. halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLE EP_TIMER; //为PM2,PM3模式。 没有任务要执行就进入PM3深度睡眠,否则进入P M2睡眠,可以定时器唤醒。 4.唤醒

zigbee低功耗设置

zigbee低功耗设置
Zigbee低功耗设置
1.在预编译选项中使能POWER_SAVING
2.设置:RFD_RCVC_ALWAYS_ON = FALSE;//(in f8wConfig.cfg(默认情况下就是FALSE))
并执行:
else if ( ZSTACK_END_DEVICE_BUILD )
{
ZDO_Config_Node_Descriptor.CapabilityFlags = (CAPINFO_DEVICETYPE_RFD
osal_pwrmgr_device(PWRMGR_BATTERY),设置为允许节电;
当器件为路由或协调器时,调用osal_pwrmgr_device( PWRMGR_ALWAYS_ON ),不允许节电(睡眠)!
Second:pwrmgr_task_state必须为no task,这项机制有利于节点在执行重要操作时,禁止sleep mode。
调用NLME_SetPollRate()函数,该函数的调用会立马开始巡检,即便是之前被禁止了!(Calling with a time interval of 1 will poll immediately, one time.)
B. Queued Data Polling(数据接受巡检)–在接到到有数据将要传来的信号后,周期性的向父节点发送数据请求信息。间隔的时间值可以通过调用NLME_SetQueuedPollRate()函数改变,或者改变zgQueuedPollRate来设定和存储。这种特点允许快速地接受(卸载)数据,而不用考虑Request Poll rate.
当POWER_SAVING被使能,任何一个巡检选项,都会对睡眠模式产生影响。
特别地,巡检会阻止进入进入深睡眠模式。(在工程中,我们将zgPollRate、zgQueuedPollRate、zgResponsePollRate的值设为0)

zigbee的睡眠与唤醒

zigbee的睡眠与唤醒

CC2530有3种睡眠模式,pm2模式比较省功耗而且可以被定时唤醒;pm3模式最省电但是只能被外部中断唤醒1、sensordemo的sensor在入网以后,为什么灯在不断地闪?其实,闪一次就是睡眠了一次:亮的时候睡过来,灭的时候睡下去。

具体代码在halSleep函数里。

要做的,就是读懂这个机制是怎么运作的。

2、为什么闪的频率那么高?zstack的睡眠机制就是在操作系统没事干的时候才睡眠,频率高说明应用程序让操作系统不断做事。

你想让它长时间睡眠,那要做的就是不要不断地给操作系统事情做,找到分配系统任务的地方。

要设置低功耗模式,先确认:1.f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE2.Options->C/C++Compiler->Defined symbols中添加预编译“POWER_SAVING”;重要函数void halSleep( uint16 osal_timeout )1.首先将osal_timeout转成以320US为单位2.获取下一次MAC定时器到期时间3. halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP :HAL_SLEEP_TIMER;//为PM2,PM3模式。

没有任务要执行就进入PM3深度睡眠,否则进入PM2睡眠,可以定时器唤醒。

4.唤醒OSAL机制的ZigBee低功耗管理(CC2530)涉及文件OSAL_PwrMgr.h OSAL电源管理的API头文件OSAL_PwrMgr.C OSAL电源管理的API C文件hal_sleep.c 底层的电源管理文件电源管理结构体typedef struct{uint16 pwrmgr_task_state; //任务状态uint16 pwrmgr_next_timeout; //下一次超时uint16 accumulated_sleep_time; //睡眠时间uint8 pwrmgr_device; //电源管理设备属性,有PWRMGR_ALWAYS_ON和PWRMGR_BATTERY两种} pwrmgr_attribute_t;#define PWRMGR_ALWAYS_ON 0#define PWRMGR_BATTERY 1选择PWRMGR_ALWAYS_ON的话将不会进入睡眠模式,选择PWRMGR_BATTERY将允许HAL管理CPU进入SLEEP LITE或者SLEEP DEEP状态。

基于Zigbee_CC2530的系统唤醒——按键中断唤醒

基于Zigbee_CC2530的系统唤醒——按键中断唤醒
由于SCCS、 FRSCCS2F和RSCC劳3寿疲命均服从两参数威 布尔分布,所以由式(5),保证率 应满足下列方程:
的疲劳寿命复合两参数威布尔分布。
(10)
(2)建立了钢纤维自密实混凝土考虑保证率的

对数方程,在一定概率下为预测钢纤维自密实混凝土疲劳寿命
或控制应力水平提供依据。
(3)因钢纤维的掺入,使自密实混凝土的弯疲劳强度提高
}
else
{
PCON = 0x00;
//系统唤醒
表1 供电模式
}
空闲模式与主动模式相比较,除了CPU核内停止运行,其
}
他和主动模式一样。
4 系统唤醒
3 CC2530电源管理控制的实现
系统进入休眠状态后处于低功耗状态,当系统需要收发数
在实际应用中,CC253需0的所供电模式是通过对相关寄存 据的时候,可以通过多种方式对系统进行唤醒。 基于Zigbee的
然而Zigb术e却e在技一些低成本、 低功耗的场合得到了广泛应 睡眠模式。 此时,系统所处的睡眠模式究竟是PM1P、 M2是还
用,特别是在物联网应用市场,Zigb术e被e广技泛应用在智能家 PM3是,用户根据需求对SLEEPCM存D器寄的MODE关相位进
居、 工业控制、 农业现代化及医疗健康等领域。 究其原因, 行设置来进行选择。 MODE的位取值为1时,电源进入供电模式
表2 PCON寄存器
表3 SLEEPCMD寄存器
1 概述
系统处于工作状态还是睡眠状态由寄存器PCON.ID取LE的
Zigbee是一种无线通信技术,与其他无线通信技术相比,如 值决定。 当PCON存寄器的IDLE的位取值为0时,系统处于主动
WIFI蓝、牙等,无论是传输距离还是通信量它都不占据优势。

用于ZigBee网络的同步休眠与唤醒算法

用于ZigBee网络的同步休眠与唤醒算法

图1
偏移测量
图2
延时测量 图4 网络拓扑结构
2
同步算法在 ZigBee 网络中的实现
同步算法在 ZigBee 网络中的运行过程如图 3 所示。 节
设定休眠时间段为 200 ms, 工作时间段为 20 ms, 中断周 期为每 100 μs。图 5 为 0 号节点作为参考节点时, 即 200 ms 2 号节点作为待同步节点的中断次数, 内中断 2 000 次时, 在 这里选择 1 946 。 同一节点的多跳传输延时测量, 如 2 号节 1 号节点的传输延时测量值如图 6 和图 7 所示。 选 点, 到 0、 择 6. 3 ms 作为 1 跳的网络传输时延, 选择 9. 6 ms 作为 2 跳的 3 号节点在休眠醒来和醒来 网络传输延时。全网在同步后, 后 2 ms 时给 10 号节点发送数据报, 数据报的投递率如图 8 所示。 TPSN 算法采用简单的洪泛机制来建立层次结构, 对于一 个由 n 个节点组成的网络, 建立层次结构需要每个节点都广 播一次层次发现包, 需要发送 n 次信息。 本文中提出的算法对 虽然比 于一个由 n 个节点组成的网络需要发送 n + 2 次信息,
Clock synchronization algorithm for synchronous sleep and wakeup in ZigBee network
XIE Qi, LIU Lantao, YI Junchao
( College of Information Engineering, Zhengzhou University, Zhengzhou Henan 450001 , China)
基于发送者和接收者的单向时间同步机制, 存在的算 法 有 S. Ping 等 人 提 出 的 DMTS ( Delay Measurement Time Synchronization) 算 法

基于ZigBee的休眠唤醒策略

基于ZigBee的休眠唤醒策略

基于ZigBee的休眠唤醒策略随着无线电技术的不断发展,无线通信逐步融入到生活中的各个方面,针对功耗来源,对于无线传感器网络节点SoC,可以设计如下的工作状态:正常模式、浅休眠模式、深度休眠模式。

本文结合ZigBee技术特点,提出一种休眠节能策略,使无线设备在不执行任何操作的情况下进入极低功耗的状态,提高能源的利用率。

1 ZigBee技术ZigBee是基于IEEE 802.15.4的一种短距离、低功耗的无线通信技术。

其网络可容纳大量节点,点对点的最大传输距离为75 m,在传输范围内节点间可以互相通信,支持多种自组织网络拓扑结构。

与传统的无线通信技术相比,ZigBee具有以下特点。

省电:两节五号电池工作时间可达2年;可靠:采用CSMA/CA避免数据冲突;高容量:网络最多可容纳65 000个节点;低成本;低速率:传输速率为250 Kb/s;高安全性:支持AES-128加密。

因此ZigBee多应用于有成本和功耗要求,且传输速率较低,数据量较少的场合。

2 系统规划如图1所示,系统由嵌入式控制器、照明控制节点、开关节点和路由节点组成。

嵌入式控制器集中监视和控制照明系统的状态,用户可以通过嵌入式控制器查看系统中所有照明设备的状态,并能通过触摸屏对其进行控制。

开关节点作为次级控制单元,可发送开关信号到照明节点,控制其开关状态。

然而照明节点是系统中的执行设备,接收控制命令和执行相应的动作。

每个开关节点可与多个照明节点绑定。

2.1 网络拓扑ZigBee网络中,一般存在三种功能设备:网络协调器(具有建立网络和数据转发功能)、路由器(具有数据转发功能)和终端设备(不具有数据转发功能)。

本系统采用图1所示的网状拓扑结构。

它是一种可靠性高,网络容量大的网络结构。

网络中放置若干个特殊的路由器,专门负责进行数据转发。

一般情况下,网络中仅有协调器和路由器处于活跃状态,终端设备进入休眠模式。

2.2 节点配置根据系统各节点的功能要求,嵌入式控制器能够对网络进行集中控制,被配置成协调器,作为网络的建立者;路由节点作为特殊的节点,仅作为数据汇聚点进行数据转发,不执行其他操作;而开关节点仅在手动开关操作后被唤醒,在网络中活跃的时间较短,不需进行数据转发,被配置为终端设备。

zigbee实现方案

zigbee实现方案

zigbee实现方案Zigbee 实现方案Zigbee,是一种采用无线通信技术的低功耗、近距离无线通信标准,它基于IEEE 802.15.4协议,被广泛应用于智能家居、工业自动化以及远程监控等领域。

在本文中,将介绍Zigbee的原理和实现方案。

一、Zigbee的基本原理Zigbee采用了类似于Mesh网络拓扑结构的方式进行通信,它由一个协调器(Coordinator)和多个终端设备(End Device)组成,形成了一个网络网状结构。

协调器作为网络的核心,负责管理和分配网络资源,而终端设备则负责传输数据。

此外,Zigbee还采用了CSMA/CA (Carrier Sense Multiple Access/Collision Avoidance)技术,以确保网络传输的可靠性和稳定性。

二、Zigbee的实现方案1. Zigbee网络的组网方式a. 点对点(P2P)方式:适用于只有两个设备需要进行通信的场景,通信简单、稳定,但无法实现多设备之间的联网和互通。

b. 网络网状结构:适用于多个设备之间需要相互通信的场景,可以动态建立和拓展网络,具有较强的稳定性和可靠性。

2. Zigbee设备类型a. 协调器(Coordinator):负责管理整个网络,通常由主控设备承担。

b. 路由器(Router):提供数据转发功能,可实现多设备之间的通信。

c. 终端设备(End Device):主要用于数据采集、传感和环境监控等功能。

3. Zigbee安全机制a. 身份验证:协调器对每个加入网络的设备进行身份验证,防止未经授权的设备进入网络。

b. 数据加密:利用AES(Advanced Encryption Standard)算法对通信数据进行加密,确保数据传输的安全性。

c. 密钥管理:定期更换密钥、更新密钥,防止密钥泄露或被破解。

4. Zigbee应用场景a. 智能家居:通过建立Zigbee网络,实现家居设备之间的联网和互通,提高生活便利性和居住舒适度。

上位机实现节点休眠唤醒自动控制方法及系统[发明专利]

上位机实现节点休眠唤醒自动控制方法及系统[发明专利]

专利名称:上位机实现节点休眠唤醒自动控制方法及系统专利类型:发明专利
发明人:赵一鸣,周向阳,伍小平,李鑫奎,范志宏
申请号:CN201610005217.0
申请日:20160105
公开号:CN105491651A
公开日:
20160413
专利内容由知识产权出版社提供
摘要:本发明提供了一种上位机实现节点休眠唤醒自动控制方法及系统,本发明针对目前建筑施工无线监测中各节点功耗过高的问题,由对数据完整性和正确性的判断,使各节点在完成各自功能的前提下进入休眠状态,在数据有误的情况下保持在唤醒状态,实现上位机控制各节点自动进行休眠和唤醒,在确保数据完整性和正确性的同时,大大降低各节点的工作功耗,尤其适用于长时间的建筑施工无线低频率监测工作。

申请人:上海建工集团股份有限公司,上海工业自动化仪表研究院
地址:200120 上海市浦东新区福山路33号
国籍:CN
更多信息请下载全文后查看。

[ZigBee]10、ZigBee之睡眠定时器

[ZigBee]10、ZigBee之睡眠定时器

[ZigBee]10、ZigBee之睡眠定时器0、概述 睡眠定时器⽤于设置系统进⼊和退出低功耗睡眠模式之间的周期。

睡眠定时器还⽤于当进⼊低功耗睡眠模式时,维持定时器2 的定时。

睡眠定时器的主要功能如下:● 24 位的定时器正计数器,运⾏在32kHz 的时钟频率● 24 位的⽐较器,具有中断和DMA 触发功能● 24 位捕获1、概述 睡眠定时器是⼀个24 位的定时器,运⾏在⼀个32kHz 的时钟频率(可以是RCOSC 或XOSC)上。

定时器在复位之后⽴即启动,如果没有中断就继续运⾏。

定时器的当前值可以从SFR 寄存器ST2:ST1:ST0 中读取。

2、定时器⽐较 ⼀次定时器⽐较发⽣在定时器的值等于24位⽐较器的值,寄存器ST2:ST1:ST0可以⽤来设置⽐较器的值。

当STLOAD.LDRDY=1写⼊ST0发起加载新的⽐较值。

当STLOAD.LDRDY=0软件不能开始⼀个新的加载,直到它为1。

  Reading ST0 captures(捕获) the current value of the 24-bit counter. Thus, the ST0 register must be read before ST1 and ST2 to capture a correct Sleep Timer count value. When a timer compare occurs the interrupt flag STIF is asserted. The current timer value is updated each time a positive clock edge on the 32 kHz clock is detected by the system clock. Thus, when returning from PM1/2/3 (where the system clock is shut down) the Sleep Timer value in ST2:ST1:ST0 is not up-to-date if a positive edgeon the 32 kHz clock has not been detected yet. To ensure an updated value is read, wait for a positive transition on the 32 kHz clock by polling(轮询) the SLEEPSTA.CLK32K bit, before reading the Sleep Timer value. The interrupt enable bit for the ST interrupt is IEN0.STIE, and the interrupt flag is IRCON.STIF. 当运⾏在除了PM3之外的所有供电模式,睡眠定时器才会运⾏。

zigbee协调器和终端对话实验遇到的问题与解决办法

zigbee协调器和终端对话实验遇到的问题与解决办法

zigbee协调器和终端对话实验遇到的问题与解决办法1、组网后,怎样获取新加入的Endpoint的地址?答:现在有一个最常见的场景,我有一个100个节点的网络同时发送数据给协调器,我很想知道那个地址对应那个节点。

其实楼上的就想知道那个,以前老板也经常问我这个问题。

即使知道了某个节点的IEEE地址还是不知道是某个节点,除非你事先知道那个节点的地址。

你不可能一个一个节点上电在轮询获得地址吧?如果那样的话,我还不如直接加下NV_RESTORE之后断电一个一个标。

终端在给协调器发送的数据包中就包含自己的地址信息就可以了,这样协调器即不用浪费自己的RAM空间来保存所有节点的地址信息,也不用花时间来查询了。

因为MAC地址是唯一的,所以可以用MAC地址。

还记得毛子在太空用铅笔的典故么?这里有个笨办法,在批量烧写CC2530的时候,就把它的IEEE地址读出来,然后贴在标签上。

A:请问zigbee怎么通过mac地址获得网络中挂在路由下的节点的短地址,用APSME_LookupNwkAddr得到短地址时,只能查找协调器儿子节点,对孙子节点不可访问,afStatus_t ZDP_NwkAddrReq(byte*IEEEAddress,byte ReqType,byte StartIndex,byte SecurityEnable)根据已知网络地址查询远程设备物理地址,作为一个广播信息发送给网络中的所有设备:这个函数也是知道IEEE地址,对短地址进行寻找,这个不存在上面所说的限制,但是这个短地址放在那里呢,我怎么获得这个短地址呢?B:请使用函数:afStatus_t ZDP_NwkAddrReq(uint8*IEEEAddress,byte ReqType,byte StartIndex,byte SecurityEnable)2、问题:请问调用这个函数获得的地址放在那里呢?答:会有callback函数上来的,对应的处理事件是#define NWK_addr_rsp(NWK_addr_req|ZDO_RESPONSE_BIT)void ZDApp_ProcessMsgCBs(zdoIncomingMsg_t*inMsg)的switch case下面做添加就可以,然后去处理获得的地址3、问题:ZigBee网络中协调器分配网络地址在哪?如何查看设备的网络地址?答:协调器的短地址是0x0000,当设备加入成功后,会产生一个ZDO_STATE_CHANGE_EVT事件,这个事件就是设备加入网络成功后,并在网络中的身份确定后产生的一个事件,我们可以在这里处理,一些初始化,比如可以发送终端的短地址,IEEE地址等,这里协调器接收到以后,可以提取出终端的短地址,其实在终端给协调器发送的每个数据包中,都含有其自身的短地址,如结构体当中的afAddrType_t srcAddr;协调器在接收到短地址后,就可以知道自己下面管辖的终端节点,或者路由节点有哪些了?协调器提取到的短地址可以存放到一个非易失性的存储器中。

7.睡眠唤醒(中断唤醒+定时器唤醒)

7.睡眠唤醒(中断唤醒+定时器唤醒)

3
WeBee 团队
Zigbee 基础实验教程
if(++count>=10)
{
count=0;
SysPowerMode(3); //5 次闪烁后进入睡眠状态 PM3,
//等待按键 S1 中断唤醒
}
Delayms(500);
}
}
/*****************************************
uchar i,j; i = mode; if(mode<4) {
5
WeBee 团队
Zigbee 基础实验教程
SLEEPCMD |= i; for(j=0;j<4;j++);
PCON = 0x01; } else {
PCON = 0x00; } }
// 设置系统睡眠模式 // 进入睡眠模式 ,通过中断打断
中断处理函数-系统唤醒
*****************************************/
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
if(P0IFG>0)
{
P0IFG = 0;
//清标志位
}
P0IF = 0;
__interrupt void ST_ISR(void)
{
STIF = 0;
//清标志位
SysPowerMode(4); //进入正常工作模式
}
实验 B 图片:
7
SysPowerMode(4); //正常工作模式
}
实验 A 图片:
4
WeBee 团队
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.获取下一次MAC定时器到期时间
3. halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLE EP_TIMER; //为PM2,PM3模式。 没有任务要执行就进入PM3深度睡眠,否则进入P M2睡眠,可以定时器唤醒。 4.唤醒
OSAL机制的ZigBee低功耗管理(CC2530)
extern pwrmgr_attribute_t
pwrmgr_attribute;
定义一个电源管理的全局变量。
/********************************************************************* * @brief 初始化电源管理函数,这个函数在OSAL.C里面的osal_init_system( )调用, 也就是在OSAL系统初始化的时候将电源管理模式调成了不会进入睡眠模式的状态。 */ void osal_pwrmgr_init( void ) { pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON; //默认没有睡眠模式 pwrmgr_attribute.pwrmgr_task_state = 0; } //清零
2、为什么闪的频率那么高? zstack的睡眠机制就是在操作系统没事干的时候才睡眠,频 率高说明应用程序让操作系统不断做事。你想让它长时间睡 眠,那要做的就是不要不断地给操作系统事情做,找到分配 系统任务的地方。
要设置低功耗模式,先确认: 1.f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE 2.Options->C/C++Compiler->Defined symbols中添加预编译“POW ER_SAVING”; 重要函数void halSleep( uint16 osal_timeout ) 1.首先将osal_timeout转成以320US为单位
// 清零
//置位
#if defined( POWER_SAVING ) /* osal_pwrmgr_powerconserve 这个函数在OSAL循环中如果没有任何事件需要执行的话将被 调用,将设备进入 睡眠模式,不可以在其他地方调用该函数。需要打开POWER_SAVING的宏定 义。*/ void osal_pwrmgr_powerconserve( void ) { uint16 next;
void osal_start_system( void ) {
#if !defined ( ZBIT ) && !defined ( UBIT )
for(;;) // Forever Loop #endif {…… } #if defined( POWER_SAVING ) else // Complete pass through all task events with no activity { osal_pwrmgr_powerconserve(); // Put the pro cessor/system into sleep } #endif }
加红部分是一个宏定义,在OnBoard.h里面定义的。
#define OSAL_SET_CPU_INTO_SLEEP(timeout) halSleep(timeout);
halSleep(timeout)是在hal_sleep.c中定义的。
这里面涉及的就是关于CC2530的电源管理寄存器的一些操 作。具体可以看代码。
return ( INVALID_TASK ); if ( state == PWRMGR_CONSERVE ) {
pwrmgr_attribute.pபைடு நூலகம்rmgr_task_state &= ~(1 << task_id );
} else { pwrmgr_attribute.pwrmgr_task_state |= (1 << task_id); } return ( SUCCESS ); }
/********************************************************************* * @fn osal_pwrmgr_device
* @brief
设置电源管理设备属性。
* @param pwrmgr_device -选择PWRMGR_ALWAYS_ON的话将不会进入睡眠 模式,选择 PWRMGR_BATTERY将允许HAL管理CPU进入SLEEP LITE或者SLEEP DEEP状态。 */ void osal_pwrmgr_device( uint8 pwrmgr_device ) { pwrmgr_attribute.pwrmgr_device = pwrmgr_device;
0 1
选择PWRMGR_ALWAYS_ON的话将不会进入睡眠模式,选择PWRMGR_BATTERY 将允许HAL管理CPU进入SLEEP LITE或者SLEEP DEEP状态。
#define PWRMGR_CONSERVE 0 #define PWRMGR_HOLD 1
低功耗标志,主要用于osal_pwrmgr_task_state()这个函数中,用于标志每一任务是 否需要低功耗。
如何实现ZigBee休眠与唤醒
报告人:XXX 时 间:2013-3-28
ZigBee技术优势
发射功率仅为1mW,仅靠两节5 号电池就可维持长达6个月到2 年的工作时间。
低功耗
在实际的开发应用中,产品是否具有低功耗这一特性 将在很大程度上决定其整体性能。 目标
通过休眠定时器,实现传感器节点的休眠 /唤醒调度,使其低功耗运行,减少节 点能耗。
halIntState_t intState if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON ) // 首先检查是否支持低功 { if ( pwrmgr_attribute.pwrmgr_task_state == 0 ) //是否所有任务支持低功耗 { HAL_ENTER_CRITICAL_SECTION( intState ); //关中断 next = osal_next_timeout(); //查询软件定时器链表得到最近一次溢出时间 HAL_EXIT_CRITICAL_SECTION( intState ); //开中断 OSAL_SET_CPU_INTO_SLEEP( next ); //将系统进入睡眠模式 } } } #endif /* POWER_SAVING */
}
/* 这个函数可以被每一个任务调用,用于设置这个任务是否支持低功耗运行,如果每一个任 务不支持低功耗将无法进入低功耗模式运行。*/ uint8 osal_pwrmgr_task_state( uint8 task_id, uint8 state ) {
if ( task_id >= tasksCnt )
/* HAL电源管理模式是设置电源管理状态的,默认状态是HAL_SLEEP_OFF。其余 设置均会关*闭系统时钟停止CPU。 * HAL_SLEEP_TIMER模式可以被睡眠定时器中断和IO中断以及复位唤起。 * HAL_SLEEP_DEEP模式可以被IO中断以及复位唤起。 */ #define HAL_SLEEP_OFF #define HAL_SLEEP_TIMER #define HAL_SLEEP_DEEP CC2530_PM0 CC2530_PM2 CC2530_PM3
如何去实现ZigBee休眠与唤醒?
CC2530有3种睡眠模式,pm2模式比较省功耗而且 可以被定时唤醒;pm3模式最省电但是只能被外部中断唤 醒。
1、sensordemo的sensor在入网以后,为什么灯在不断地闪? 其实,闪一次就是睡眠了一次:亮的时候睡过来,灭的时候睡 下去。具体代码在halSleep函数里。要做的,就是读懂这个机 制是怎么运作的。
#define CC2530_PM0
0
#define CC2530_PM1
#define CC2530_PM2 #define CC2530_PM3
1
2 3
#define MAX_SLEEP_TIME 最大睡眠时间是510000ms。
510000
总结
可以看到在OSAL中是使用睡眠定时器来控制睡眠时间的,在系统初 始化的时候是将电源控制结构体中的pwrmgr_device设备属性设置 为PWRMGR_ALWAYS_ON,这样默认就不进入休眠状态。必须在 应用层里面调用void osal_pwrmgr_device( uint8 pwrmgr_device ) 这个OSAL的API来设置使得OSAL能够进入休眠状态。 在用户任务中需要用的这样一个API——uint8 osal_pwrmgr_task_s tate( uint8 task_id, uint8 state )来设置这个任务是否支持休眠,如 果有一个任务不支持休眠的话,整个系统就将不会进入休眠模式。 这个在void osal_pwrmgr_powerconserve( void )中有相关的查询。 在OSAL的主循环中void osal_start_system( void )调用了osal_pwr mgr_powerconserve这个函数。
}
表示OSAL系统在检查完所有的任务事件之后发现没有事件需要处理,这样在POW ER_SAVING宏定义打开的情况下将调用osal_pwrmgr_powerconserve();函数,在 这函数中将会根据选择系统进入休眠。
退出休眠
当出现IO中断或者复位时候会退出休眠,或者在休眠定时器中断时候也将会退出休 眠。如果是IO中断或者休眠定时器中断退出之后将回到进入休眠的地方继续向下执 行,复位退出的话进入程序的初部分执行。
uint16 accumulated_sleep_time;
相关文档
最新文档