CC2530 zigebee 实现低功耗

news/2024/11/15 17:51:46/文章来源:https://www.cnblogs.com/dxqNet/p/18202635

​ZigBee网络低功耗运行一直是苦逼攻城狮们要解决的问题,TI的CC2530可以说已经把终端的休眠功耗降低到了极致,现在我们就来体验这颗芯片的魅力!文章末尾分享完整源码和PCB工程文件。

一、CC2530供电模式

CC2530芯片有五种运行模式,分别为主动模式、空闲模式、PM1、PM2和PM3。从参考手册上可以看到不同模式下的供电方式。

 

1. 主动模式是完全功能的运行模式,CPU、外设和RF 收发器都是活动的。数字稳压器是开启的

2. 空闲模式除了CPU内核停止运行外,其他和主动模式一样

3.PM1模式稳压器的数字部分开启。32MHz XOSC和 16MHz RCOSC都不运行。32kHz RCOSC或 32kHz XOSC运行。复位、外部中断或睡眠定时器过期时系统将转到主动模式

4.PM2模式稳压器的数字内核关闭。32MHz XOSC和 16MHz RCOSC都不运行。32kHz RCOSC或 32kHz XOSC运行。复位、外部中断或睡眠定时器过期时系统将转到主动模式

5.PM3模式稳压器的数字内核关闭。所有的振荡器都不运行。复位或外部中断时系统将转到主动模式

二、CC2530模式选择

PM1、PM2、PM3是低功耗运行模式,CC2530通过关闭不必要的部分和调整系统时钟来达到低功耗的效果。

在PM1模式下,高频振荡器(32MHz XOSC和16MHz RCOSC)是掉电的。稳压器和使能的32kHz振荡器是开启的。当进入PM1模式,就运行一个掉电序列。由于PM1使用的上电/掉电序列较快,等待唤醒事件的预期时间相对较短(小于3ms),就使用PM1。

PM2具有较低的功耗。在PM2下的上电复位时刻,外部中断、所选的32 kHz 振荡器和睡眠定时器外设是活动的。I/O引脚保留在进入PM2之前设置的I/O模式和输出值。所有其它内部电路是掉电的。稳压器也是关闭的。当进入PM2模式,就运行一个掉电序列。当使用睡眠定时器作为唤醒事件,并结合外部中断时,一般就会进入PM2模式。相比较PM1,当睡眠时间超过3ms 时,一般选择PM2。比起使用PM1,使用较少的睡眠时间不会降低系统功耗。

PM3用于获得最低功耗的运行模式。在PM3模式下,稳压器供电的所有内部电路都关闭(基本上是所有的数字模块,除了中断探测和POR电平传感)。内部稳压器和所有振荡器也都关闭。PM3模式可被外部中断和复位唤醒。

PM2模式其功耗是毫安级别的,多用于需要定时唤醒的场合,比如周期性地唤醒传感器来进行数据的采集,PM2模式可被睡眠定时器,外部中断和复位唤醒。PM3模式功耗最低,是微安级别的,多用于数据收发不频繁的场合。Z-STACK提供了两种低功耗运行模式,PM2和PM3。

 

三、CC2530低功耗代码设置

1.准备一份CC2530官方示例代码(也可使用本文已经修改好的代码),并打开

2.添加预编译项POWER_SAVING

ZigBee功耗主要是针对终端设备的,因此只需要修改终端设备代码即可,将IAR编译器的Workspace处选项改为EndDeviceEB,在项目名称上右键选择Options,如图添加预编译项POWER_SAVING来使能睡眠模式

 

3.修改f8wConfig.cfg文件

将以下参数修改(在文件的最后)

参数的作用代码中有注释,不过多解释了

-DRFD_RCVC_ALWAYS_ON=FALSE    //default True
-DPOLL_RATE=0   //default 1000
-DQUEUED_POLL_RATE=0    //default 100
-DRESPONSE_POLL_RATE=0  //default 100
-DREJOIN_POLL_RATE=0    //default 440

4.修改OnBoard.c文件

将函数InitBoard()改为如图所示

 

5.修改OSAL_PwrMgr.c文件

将函数osal_pwrmgr_init()改为如图所示

 PWRMGR_BATTERY将允许HAL管理CPU进入SLEEP LITE或者SLEEP DEEP状态

6.周期性发送数据

每间隔3秒发送一次数据

void SampleApp_Send_P2P_Message( void )
{uint16 i = 0;uint8 data[10] = {0};uint16 father_short_addr = 0;uint16 myself_short_addr = 0;static uint8 count = 0;father_short_addr = NLME_GetCoordShortAddr();myself_short_addr = NLME_GetShortAddr();data[0] = ( father_short_addr >> 8 ) & 0xff;data[1] = father_short_addr & 0xff;data[2] = ( myself_short_addr >> 8 ) & 0xff;data[3] = myself_short_addr & 0xff;data[4] = count; count++;if( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,SAMPLEAPP_P2P_CLUSTERID,5,data,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){HAL_TURN_ON_LED1();for (i=0; i<50400; i++) asm("NOP");HAL_TURN_OFF_LED1();}else{// Error occurred in request to send.
    }
}

 

四、实验现象

代码编译完成,通过CCDebugger将程序烧写到芯片里,打开协调器,然后给终端上电,协调器打印数据如下:

使用万用表测量,其休眠功耗为1.1uA 

 

使用电化学工作站测量其发送数据功耗,可以看出基本在12-18mA左右。

 好了,至此CC2530低功耗实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/709376.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『手撕Vue-CLI』处理不同指令

前言 在上一篇『手撕Vue-CLI』添加自定义指令中,已经实现了自定义指令的添加,但是指令还是比较简单的,只是简单的打印一句话,那么在实际运用场景中,可能会有更多的需求,比如可能需要在指令中传递参数,或者需要在指令中进行一些复杂的操作,那么这个时候我们就需要对指令…

信息安全事件应急处理报告模板

一、概述 1.1 应急处理服务背景 Fesco 单位与星际和平公司签订应急服务合同。星际和平公司根据合同协议中规定的范围和工作内容为 Fesco 单位提供应急服务。2024 年 5 月 20 日 Fesco 单位网站服务器发现存在恶意文件,直接威胁网站的正常运营与使用,Fesco 单位立即拨通星际和…

linux 数据库安装配置

如果有原来的数据库,需要先卸载 摘自https://blog.csdn.net/weixin_50367873/article/details/134551859, 本文通过yum安装mysql,如需离线安装mysql,查看原文 1. 检查是否有mariadb存在,centos默认自带ps ajx | grep mariadb 查找是否存在systemctl stop mariadb.service …

无界微前端

https://zhuanlan.zhihu.com/p/657544258背景 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略 玉伯:今天看各 BU 的业务问题,微前端的前提,还是得有主体应用,然后才有微组件或微应用,解决的是可控体系下的前端协…

[MySQL]存储过程

本篇文章阐述的原则是“以吾之理解,着重之阐述”,因此没有那么细致。 如果文中阐述不全或不对的,多多交流。【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18032044 出自【进步*于辰的博客】存储过程的细节很多…

esp8266-01 使用介绍

一、直接使用接线esp8266USB转TTl说明TX RX ------RX TX ------EN 3.3V AT命令 需要拉高 ------3V3 3.3V ------IO0 不接 IO0接地进入烧录模式GND GND ------二、固件烧写 前提说明一般是模块固件损坏或者买回来里面可能被别人刷过固件需要擦除或者增加固件才用,在这里结合我…

[转帖]Linux内存管理基本概念

最近在学习Linux系统的内存管理,小白一枚,零散从网上收集的一些笔记如下: /proc目录提供了很多工具给我们查看当前内存情况 1. /proc/meminfo是什么 $cat /proc/meminfoMemTotal: 2052440 kB //总内存MemFree: 50004 kB //空闲内存Buffers: 1…

机器学习中的正则化技术——Python实现

在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况。正则化是机器学习中通过显式的控制模型复杂度来避免模型过拟合、确保泛化能力的一种有效方式。如果将模型原始的…

ConfigurationClassPostProcessor类,@Configuration注解的底层实现

概览 由前文可知,ConfigurationClassPostProcessor是作为Spring中的内置类被添加到容器中,【源码学习】Spring启动流程ConfigurationClassPostProcessor不仅实现了BeanFactoryPostProcessor(BFPP)并且实现了BeanDefinitionRegistryPostProcessor,具有比一般BFPP更高的初始…

随机二次元图片API第三弹

本来我都把第二弹置顶上来了,没打算在发第三弹的,然后想着想着又憋出来这么多话,想想不发不就白浪费我那么多脑细胞了。Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 随机二次元图…