ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ESP-IDF 模块电流消耗测量指南:深睡与多模式功耗的实测方法、仪表选型与硬件接线

ESP-IDF 模块电流消耗测量指南:深睡与多模式功耗的实测方法、仪表选型与硬件接线 ESP-IDF 模块电流消耗测量指南深睡与多模式功耗的实测方法、仪表选型与硬件接线【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf本篇指南围绕 ESP-IDF 官方文档中的“Current Consumption Measurement of Modules”展开讲解如何测量搭载乐鑫芯片的模块在 Deep-sleep深睡、其他省电模式以及 Active活动模式下的电流消耗。读完本文后你将掌握完整的低功耗测量流程从评估开发板能否直接用于测量、选择合适的高动态范围电流表到用 ESP-Prog 配合裸模块搭建测量电路再刷入 deep_sleep 示例 获取电流波形最终估算应用功耗并据此选择合适的电源。为什么需要测量模块的多模式电流开发对功耗敏感的应用电池供电、长时间待机采集、无线回传等场景时仅知道芯片手册标称值往往不够还需要知道模块整体在不同运行模式下的实际电流。ESP-IDF 中芯片支持 Deep-sleep 以及其他省电模式参见 Sleep Modes 参考文档不同模式下电流量级相差可达数个数量级Deep-sleep 模式电流仅为几微安μAActive 模式电流在毫安mA量级。deep_sleep示例会让模块每 20 秒唤醒一次因此实际测量中需要同时捕捉这两种极端量级这对测量仪表提出了很高的要求。本文的方法正是针对这一场景设计的。测量前的注意事项能否直接使用开发板结论因芯片而异ESP32-C6、ESP32-H2、ESP32-C5、ESP32-C61可以直接使用官方开发板如 ESP32-C6-DevKitC-1、ESP32-C6-DevKitM-1、ESP32-H2-DevKitM-1、ESP32-C5-DevKitC-1、ESP32-C61-DevKitC-1。这些开发板配有排针header可以用来测量模块的电流消耗。刷入deep_sleep示例后即可测量其 Deep-sleep 电流当然裸模块也可以用本文后面的通用方法测量。ESP32、ESP32-S2、ESP32-S3、ESP32-C2、ESP32-C3、ESP32-P4不建议直接用开发板测量。即使刷入了deep_sleep示例开发板上仍有部分电路在持续耗电必须切断到模块的供电电路才能测得模块自身电流——这种方式麻烦且抬高测量成本。因此这几类芯片建议采用下文的“裸模块 ESP-Prog”方案。如何选择合适的电流表Ammeterdeep_sleep示例中模块每 20 秒唤醒一次Deep-sleep 模式下电流只有几 μA而活动模式电流为 mA 量级。这种高动态电流范围使精确测量变得困难量程切换速度普通电流表无法足够快地动态切换测量量程内阻过高普通电流表内阻较大会产生显著压降可能导致模块因供电电压低于最低要求电压而进入不稳定状态。因此适合测量 Deep-sleep 模式电流的电流表应具备低内阻理想情况下还能动态切换量程。官方推荐两个选项Joulescope 电流表高速采样 快速动态量程切换即使被测设备电流快速变化也能提供精确、无缝的电流与能量测量可从安A到纳安nA跨越九个数量级精确测量电流1 A 电流下总压降仅25 mV保证模块正常工作。这两个特性使 Joulescope 非常适合测量模块在 Deep-sleep 模式与唤醒模式之间的切换。Joulescope 无显示屏需要连接 PC 通过配套软件查看电流波形具体操作遵循厂商文档。Nordic Power Profiler Kit IIPPK2具备先进的模拟测量单元和高动态测量范围覆盖低功耗嵌入式应用的典型全范围几 μA 到 1 A分辨率随量程在100 nA 到 1 mA之间变化足以捕捉低功耗优化系统中常见的小电流尖峰。硬件连接测量裸模块的功耗需要准备以下设备设备作用ESP-Prog将deep_sleep示例烧录到模块并在测量期间为模块供电合适的电流表如 Joulescope串联在供电回路中测量电流电脑运行 ESP-IDF 构建烧录工具及电流表配套软件裸模块 跳线被测对象接线方法如下将被测模块上的 UART TX、UART RX、SPI Boot、Enable、Ground 五个引脚分别接到 ESP-Prog 的对应引脚再将ESP-Prog 的 VPROG 引脚接到 Joulescope 的 IN 端口把 Joulescope 的OUT 端口接到模块的 Power supply3V3引脚。这样电流表就串联在了 ESP-Prog 的供电回路与模块电源之间。各模块引脚的具体丝印名称可能不同以下按功能列出对照表模块引脚功能引脚名称UART TXTXD0UART RXRXD0SPI Boot下载/引导因芯片而异见下表EnableENPower Supply3V3GroundGND不同芯片对应的 SPI Bootstrapping引脚如下来自文档中IDF_TARGET_SOC_BOOT_PIN变量定义芯片SPI Boot 引脚ESP32 / ESP32-S2 / ESP32-S3IO0ESP32-C2 / ESP32-C3 / ESP32-C6 / ESP32-C61 / ESP32-H2IO9ESP32-C5IO28ESP32-P4IO35此外不同模块丝印可能不同基于 ESP32 芯片的模块 UART 引脚可能标为 U0TXD/U0RXD基于 ESP32-C2 的模块可能标为 TXD/RXD基于 ESP32-C3 的模块可能标为 TXD/RXD、TX/RX 或 TX0/RX0。具体以对应模块的 datasheet 为准。测量步骤下面以ESP32-S3-WROOM-1为例演示完整测量过程其他模块方法相同。各芯片在不同模式下的具体电流消耗数据可查阅对应芯片 datasheet 中的 Current Consumption 一节。第一步按硬件连接图连接设备按上节所述完成模块、ESP-Prog、Joulescope 与电脑的连接。第二步烧录 deep_sleep 示例将 deep_sleep 示例 烧录到模块Linux/macOS 或 Windows 下的完整构建流程可分别参考 Linux 和 macOS 开始项目、Windows 开始项目。从源码看该示例的工作机制与文档描述完全对应核心在 deep_sleep_example_main.cstatic void example_deep_sleep_register_rtc_timer_wakeup(void) { const int wakeup_time_sec 20; // 默认每 20 秒唤醒一次 printf(Enabling timer wakeup, %ds\n, wakeup_time_sec); ESP_ERROR_CHECK(esp_sleep_enable_timer_wakeup(wakeup_time_sec * 1000000)); }任务deep_sleep_task在打印唤醒原因后延迟约 1 秒然后调用esp_deep_sleep_start()再次进入深睡deep_sleep_example_main.c。如果需要不同的唤醒周期直接修改wakeup_time_sec即可——这也正是文档所说“the timing can be changed by modifying the code of this example”的落点。示例还支持 EXT0/EXT1/GPIO 等唤醒源可通过idf.py menuconfig的 Example Configuration 配置参见 Kconfig.projbuild 与 示例 README未使用且未接线的唤醒源应禁用以免引脚悬空意外触发唤醒。第三步降低底电流的针对性配置ESP32 / ESP32-S2 / ESP32-S3运行idf.py menuconfig配置示例时需要在Example Configuration中禁用 Enable touch wake up以降低底电流touch 唤醒相关电路会额外耗电。ESP32对于 GPIO12 上带有外部电阻的模块如 ESP32-WROVER-E/IE在进入 Deep-sleep 前应调用rtc_gpio_isolate将 GPIO12 与外部电路隔离以进一步最小化电流消耗。deep_sleep示例在 deep_sleep_example_main.c 中已内置了该处理#if CONFIG_IDF_TARGET_ESP32 // Isolate GPIO12 pin from external circuits. This is needed for modules // which have an external pull-up resistor on GPIO12 (such as ESP32-WROVER) // to minimize current consumption. rtc_gpio_isolate(GPIO_NUM_12); #endif注意其他模块不要调用此函数否则可能得到异常结果。第四步用 monitor 确认示例运行正常默认每 20 秒唤醒一次。运行如下命令监控模块运行状态PORT 替换为实际串口名idf.py -p PORT monitor日志中应周期性出现唤醒与再次入眠的记录例如 示例 README 给出的输出Wake up from timer. Time spent in deep sleep: 20313ms ... Enabling timer wakeup, 20s Entering deep sleep第五步查看电流波形并读数打开 Joulescope 配套软件即可看到如下电流波形从波形可读出以 ESP32-S3-WROOM-1 实测为例Deep-sleep 模式电流8.14 μAActive 模式电流约23.88 mADeep-sleep 期间平均功耗26.85 μWActive 期间平均功耗78.32 mW。上图为功耗波形显示一个完整周期的总功耗为 6.37 mW。数据的应用综合模块在 Deep-sleep 与 Active 等不同模式下的功耗数据你可以估算自己应用的整机功耗从而选择合适的电源例如电池容量规划。以本文示例为例若应用大部分时间处于深睡、周期性短暂唤醒则可用“深睡平均功耗 × 深睡时长 活动平均功耗 × 活动时长”对单个周期做能量预算再按实际唤醒占空比折算长期平均功耗。小结本文完整继承了 ESP-IDF 官方“Current Consumption Measurement of Modules”文档的测量方法论选型C6/H2/C5/C61 类芯片可用官方开发板直接测ESP32/S2/S3/C2/C3/P4 建议用裸模块方案仪表必须选低内阻、能动态切换量程的表Joulescope 或 Nordic PPK2避免量程切换慢与压降导致的不稳定接线ESP-Prog 负责烧录与供电其 VPROG 经电流表 IN/OUT 串入模块 3V3UART/Boot/EN/GND 直连 ESP-Prog流程刷 deep_sleep 示例20 秒定时唤醒可改wakeup_time_sec→ 针对性 menuconfig 降底电流禁用 touch 唤醒、ESP32 用rtc_gpio_isolate隔离 GPIO12→idf.py -p PORT monitor验证 → 读取 μA 级深睡电流、mA 级活动电流与周期总功耗落地用多模式功耗数据估算应用整体功耗指导电源选型。相关仓库资源deep_sleep 示例含 主程序与 Kconfig、Sleep Modes API 参考、本文中文版 current-consumption-measurement-modules。【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表