程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

乐鑫esp32系列在睡眠模式蓝牙连接功耗测试,启明云端乐鑫代理商

balukai 2025-07-02 17:34:24 文章精选 16 ℃

本教程适用于ESP32S3、ESP32C3、ESP32C6

睡眠模式介绍

ESP32系列常见的休眠方式有三种,分别为Modem-sleep、Light-sleep 和 Deep-sleep。

Modem-sleep模式:CPU 正常工作,可以对时钟进行配置。 进入 Modem-sleep 模式后,还可以选择降低 CPU 时钟频率,进一步降低电流。休眠期间WiFi或 Bluetooth LE 可保持连接。

Light-sleep模式:CPU 暂停工作,数字内核时钟受限。任何唤醒事件(MAC、主机、RTC 定时器或外部中断)都会唤醒芯片。休眠期间WiFi或 Bluetooth LE 可保持连接。

Deep-sleep模式:数字内核断电,CPU 内容丢失。RTC 时钟定时器或 RTC GPIO 可以将芯片从Deep-sleep模式中唤醒。进入休眠状态后,关闭除RTC 模块外的所有其他模块。休眠期间WiFi或Bluetooth LE无法保持连接。

关于睡眠模式的具体说明请参考睡眠模式 - ESP32 -  ESP-IDF 编程指南 latest 文档

硬件准备

ESP32系列模组既支持外置32.768 kHz 的时钟振荡器作为 RTC 睡眠时钟,也支持外部激励信号(如有源晶振)作为 RTC 睡眠时钟。ESP32外置32.768 kHz晶振的电路如下图所示。具体的32k晶振引脚请参考对应芯片的技术文档 | 乐鑫科技

软件准备

部分源码解析

1. 电源管理功能

电源管理功能(power_managenment) 是ESP-IDF中集成的电源管理算法,可以根据应用程序组件的需求,调整外围总线 (APB) 频率和 CPU 频率,并使芯片进入Light-sleep模式,尽可能减少运行应用程序的功耗。


通过调用 esp_pm_configure() 函数,在应用程序中启用动态调频 (DFS) 功能和自动 Light-sleep 模式。此函数的参数 esp_pm_config_t 定义了频率调节的相关设置。在此参数结构中,需要初始化以下


三个字段:

max_freq_mhz :最大 CPU 频率 (MHz),获取 ESP_PM_CPU_FREQ_MAX 锁后所使用的频率。

min_freq_mhz :最小 CPU 频率 (MHz),即未持有电源管理锁时所使用的频率。注意,10 MHz 是生成1MHz的REF_TICK默认时钟所需的最小频率。

light_sleep_enable :没有获取任何管理锁时,决定系统是否需要自动进入Light-sleep状态( true/false)。

2. ble广播间隔


在程序中有个结构体 adv_params,其中有两个变量 .adv_int_min 和 .adv_int_max,这两个参数影响着广播间隔,可设置范围为 0x20~0x4000,广播时间间隔为 Time = N * 0.625 ms。

例如:0x640(十六进制)= 1600(十进制)* 0.625ms = 1s

3. ble连接间隔


当连接成功后,在连接事件中有两个变量 conn_params.max_int 和 conn_params.min_int,这两个参数影响着连接间隔, 可设置范围为0x0006~0x0C80,连接间隔为 Time = N * 1.25 ms

例如:0x320(十六进制)= 800(十进制)* 1.25ms = 1s

注:最大连接间隔是 4 s,所以当设置超过4s时设置无效,则会变成了默认的间隔,功耗会增加。

完整示例代码链接(基于ESP-IDF release/v5.3版本)

https://gitee.com/SNKjxn/ble_power_save

获取工程后,激活esp-idf并进入工程目录下

设置目标芯片

idf.py set-target (目标芯片型号)

例如:

编译烧录

正常运行log如下:

功耗测试结果参考

注意:下面的测试结果,硬件均为外加32k晶振的单模块。

软件广播间隔1s,连接间隔1s。

ESP32-C3

平均功耗 474ua

ESP32-C6

平均功耗 512ua

ESP32-S3

平均功耗 826ua

Tags:

最近发表
标签列表