nRF52840/nRF52832 低功耗的测试工程

文章目录

  • nRF52840/nRF52832 低功耗的测试工程
  • 项目的硬件说明
      • PM132A主要功能:
    • BLE Beacon 项目(nRF52840)
      • 官方工程的功耗
      • Beacon 关Log
      • Beacon 广播间隔
      • Beacon的发射功率
        • 8dBm
        • 4dBm
        • 0dBm
      • 发射功率总结:
      • DCDC
      • 32.768K 晶体功耗
    • BLE Uart 工程 (nRF52832)
      • 官方工程广播功耗
      • 官方工程连接功耗
      • 串口功耗优化
      • 广播间隔与关闭Log的优化
      • 连接间隔的设置
      • 3个广播通道的广播电流

欢迎加群讨论QQ群:1037177913

项目的硬件说明

  • 此工程 SDK的版本为 nRF5_SDK_17.0.2_d674dde

  • 以下工程都是以IAR for arm V8.32.1

以下的电流分析仪为:PM132A

仪器链接为:https://shop221754637.taobao.com

PM132A主要功能:

  • 10K 采样率
  • 1uA-3A 自动量程测试
  • 简单的上位机操作
测试工程
ble_app_beacon
ble_app_uart

BLE Beacon 项目(nRF52840)

  • 工程在\examples\ble_peripheral\ble_app_beacon

官方工程的功耗

重要参数 备注
广播间隔 100mS
平均电流 185uA
广播峰值电流 10mA 由于板内有大电容,此峰值并非芯片的发射电流
底电流 14uA

Beacon 关Log

  • 修改sdk_config.h 如下

测试项目
底电流 3uA
平均电流 173uA
广播间隔 100mS
广播峰值电流 10mA 由于板内有大电容,此峰值并非芯片的发射电流

Beacon 广播间隔

  • 在main.c文件修改广播间隔。一般500mS - 1S Beacon 也可以满足实际的需求。
//#define NON_CONNECTABLE_ADV_INTERVAL    MSEC_TO_UNITS(100, UNIT_0_625_MS)  /**< The advertising interval for non-connectable advertisement (100 ms). This value can vary between 100ms to 10.24s). */
#define NON_CONNECTABLE_ADV_INTERVAL    MSEC_TO_UNITS(500, UNIT_0_625_MS)  /**< The advertising interval for non-connectable advertisement (500 ms). This value can vary between 100ms to 10.24s). */

测试项目
广播间隔 500mS
底电流 3uA
平均电流 38.86uA
广播峰值电流 10mA 由于板内有大电容,此峰值并非芯片的发射电流

Beacon的发射功率

static void advertising_init(void)
{...err_code = sd_ble_gap_adv_set_configure(&m_adv_handle, &m_adv_data, &m_adv_params);APP_ERROR_CHECK(err_code);//设置 tx dberr_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, 0,8);APP_ERROR_CHECK(err_code);
}
  • 8dBm

测试项目
广播间隔 500mS
底电流 3uA
平均电流 83.68uA
广播峰值电流 22mA 增加了发射功率,电流就增大了
  • 4dBm

测试项目
广播间隔 500mS
底电流 3uA
平均电流 59.62uA
广播峰值电流 24.68mA 增加了发射功率,电流就增大了
  • 0dBm

测试项目
广播间隔 500mS
底电流 3uA
平均电流 39.54uA
广播峰值电流 8.3mA 增加了发射功率,电流就增大了

发射功率总结:

  • 以我的经验测试发现,4dbm与0dbm的距离增远不了多少,但功耗增加了不少。调整天线,更有利于增加距离。
  • 官方代码默认是0dbm

DCDC

  • 要硬件支持DCDC才支持这个功能。

  • 但Beacon打开下图,并不会打开DCDC的功能

    ble_stack_init();//在 stack 的 初始化后,立马打开。sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE);sd_power_dcdc0_mode_set(NRF_POWER_DCDC_ENABLE);

测试项目
广播间隔 500mS
底电流 3uA
平均电流 21.87uA 平均电流可以降低
广播峰值电流 4mA 增加了发射功率,电流就增大了

32.768K 晶体功耗

nRF52 可以省32.768K晶体,但不能省32M晶体。

  • 功耗会相应的增加
  • RTC时钟不准。

BLE Uart 工程 (nRF52832)

官方工程广播功耗

测试项目
广播间隔 40mS
底电流 1.8mA
平均电流 2.71mA 平均电流可以降低
广播峰值电流 11.8mA 增加了发射功率,电流就增大了

官方工程连接功耗

测试项目
连接间隔 75mS
底电流 1.84mA
平均电流 2.23mA 平均电流可以降低
广播峰值电流 8.4mA 增加了发射功率,电流就增大了

串口功耗优化

nRF52 串口电流 是非常大的,建议使用时候把它关闭。

  • 现在为了简单起见,直接把串口关闭做测试。
int main(void)
{bool erase_bonds;// Initialize.//uart_init(); //注释了uartlog_init();timers_init();buttons_leds_init(&erase_bonds);power_management_init();ble_stack_init();gap_params_init();gatt_init();services_init();advertising_init();conn_params_init();// Start execution.//  printf("\r\nUART started.\r\n");//注释串口打印NRF_LOG_INFO("Debug logging for UART over RTT started.");advertising_start();// Enter main loop.for (;;){idle_state_handle();}
}
//BLE 接收
static void nus_data_handler(ble_nus_evt_t * p_evt)
{if (p_evt->type == BLE_NUS_EVT_RX_DATA){uint32_t err_code;NRF_LOG_DEBUG("Received data from BLE NUS. Writing data on UART.");NRF_LOG_HEXDUMP_DEBUG(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
#if 0 //关闭BLE接口转串口的代码for (uint32_t i = 0; i < p_evt->params.rx_data.length; i++){do{err_code = app_uart_put(p_evt->params.rx_data.p_data[i]);if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY)){NRF_LOG_ERROR("Failed receiving NUS message. Error 0x%x. ", err_code);APP_ERROR_CHECK(err_code);}} while (err_code == NRF_ERROR_BUSY);}if (p_evt->params.rx_data.p_data[p_evt->params.rx_data.length - 1] == '\r'){while (app_uart_put('\n') == NRF_ERROR_BUSY);}
#endif}}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FcMWfjgZ-1613732764505)(picture/image-20210216141124915.png)]

广播间隔与关闭Log的优化

一般带连接的广播间隔设置为200ms-500ms,具体要看项目的功耗需求。现在设置了300ms测试

#define APP_ADV_INTERVAL                MSEC_TO_UNITS(300, UNIT_0_625_MS)   //广播间隔300ms

    power_management_init();ble_stack_init();//sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE); //由于硬件无法支持DCDC,所以无法打开进行测试。

测试项目
广播间隔 300mS
底电流 0.2uA
平均电流 76uA 平均电流可以降低
广播峰值电流 11.69mA 增加了发射功率,电流就增大了

连接间隔的设置

连接间隔主要看数据量大不大,如果数据不大,尽量控制在200ms左右,如果在大量的突发数据,可以动态改变连接间隔,从而降低功耗,如果是BLE4.2+,把长包打开,并设置长一些间隔。

#define MIN_CONN_INTERVAL               MSEC_TO_UNITS(200, UNIT_1_25_MS)             /**< Minimum acceptable connection interval (200 ms), Connection interval uses 1.25 ms units. */
#define MAX_CONN_INTERVAL               MSEC_TO_UNITS(500, UNIT_1_25_MS)             /**< Maximum acceptable connection interval (500 ms), Connection interval uses 1.25 ms units. */

3个广播通道的广播电流

nRF52840/nRF52832 低功耗的测试工程相关推荐

  1. RadASM的测试工程!

    RadASM已经安装完毕了,是否可以正常工作了呢?我们通过创建一个工程来测试一下,下面就是创建这个测试工程的过程: 1, 2, 3, 4, 5, 6, 7, 8, 9, 至此,我们通过RadASM的模 ...

  2. 创建 Robotium 测试工程

    前面学习了instrumentation框架,现在来学习robotium了解怎么使用不就是一个晚上的事吗,robotium也是基于Instrumentation框架的.一般用于app的功能性测试,不能 ...

  3. Maven 创建、测试工程

    创建工程 Maven 使用原型(archetype)插件创建工程. cd d: cd eclipse-workspace mvn archetype:generate -DgroupId=com.wj ...

  4. 开源按键组件Multi_Button的使用,含测试工程

    之前的文章中介绍过按键的处理方法<多功能(单击.双击.长按)按键设计>,今天再来分享另外一种方式:MultiButton. 1.Multi_Button简介 MultiButton 是Gi ...

  5. 基于uni-app的BLE低功耗蓝牙测试工具

    基于uni-app的BLE低功耗蓝牙测试工具 前言 开发环境:HBuilder X2.8.11,运行环境:微信小程序 本项目是从网上收集他人的源代码,经过测试.修改后的版本,在微信小程序上表现比较稳定 ...

  6. 紫光信息港 软件测试,紫光同创PGL22G开发平台试用连载(3)---以太网测试工程二...

    原标题:紫光同创PGL22G开发平台试用连载(3)---以太网测试工程二 续前一篇博文,经过多次对PANGO工具的参数进行修改的尝试,在资源占用率为(LUT-70.02%,Register-36.34 ...

  7. Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件。支持485和232串口通信

    Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件.支持485和232串口通信,该从机源码支持51系列和STC12系列单片机,支持功能码01,02,03,04,05,06,15, ...

  8. Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件

    Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件. 支持485和232串口通信,该从机源码支持51系列和STC12系列单片机,支持功能码01,02,03,04,05,06,15 ...

  9. 痞子衡嵌入式:介绍i.MXRT定时器PIT的多通道链接模式及其在coremark测试工程里的应用...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT定时器PIT的多通道链接模式及其在coremark测试里的应用. 早在 2018 年 i.MXRT 系列跨界处理器刚推出的时 ...

最新文章

  1. JS中编写函数去除HTML标签,js函数获取html中className所在的内容并去除标签
  2. php m 报错,PHP框架ThinkPHP入参m报错
  3. SPCAMLEditor–灵活实用的CAML编辑工具(上)
  4. mysql压缩表语句_MYSQL静态表、动态表、压缩表总结
  5. java streaming编程_Spark Streaming编程实战(开发实例)
  6. linux log4j 空文件,log4j在linux上不生成日誌文件
  7. ios app证书申请基本流程
  8. 白话Elasticsearch61-进阶篇之基于Term Vectors深入探查数据的情况
  9. 一个备份MySQL数据库的简单Shell脚本(转)
  10. java 菜单快捷键_Java 菜单快捷键
  11. java12/6作业1
  12. 用户需求说明书_「软件项目管理入门」(21) 需求调研和需求分析怎么做?
  13. 请不要再用那种态度把我搞火了!
  14. 腾讯同事要跳槽,问我背包问题具体咋回事,我直接甩给他这篇!
  15. sphinx系列之中文分词LibMMSeg安装(三)
  16. 中国历代更改重复地名及其现实意义
  17. 数学函数模块math
  18. 打印小册子中断了怎么办
  19. Python3的unichr()消失了?不,升级了!
  20. 【PdgCntEditor】解决PDF的目录页码和PDF实际页码不一致的问题,书签页码偏移页面偏移功能,PDF页面标签的添加

热门文章

  1. 施耐德22版本EAE连接M580设备
  2. js43刀片服务器内存位置,IBM Power服务器简介(ppt 43页)-精.ppt
  3. opengl 下载安装+vs2010配置
  4. 按键精灵DNF脚本开发第二季
  5. 标准bootstrap3 form表单美化
  6. Java基础知识-char
  7. Oracle EBS R12 AP应付模块 查询发票付款信息SQL
  8. Java课设对对碰_JAVA课程设计
  9. 前端工程化 webpack
  10. pandas | DataFrame基础运算以及空值填充