本教程適用于ESP32-S3、ESP32-C3、ESP32-C6
睡眠模式介紹
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系列模組既支持外置32.768 kHz的時鐘振蕩器作為RTC睡眠時鐘,也支持外部激勵信號(如有源晶振)作為RTC睡眠時鐘。ESP32外置32.768 kHz晶振的電路如下圖所示。具體的32k晶振引腳請參考對應芯片的技術規格書。
(https://www.espressif.com.cn/zh-hans/support/documents/technical-documents?keys=&field_download_document_type_tid%5B%5D=510)
軟件準備
部分源碼解析
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
-
藍牙
+關注
關注
114文章
5866瀏覽量
171202 -
功耗測試
+關注
關注
0文章
16瀏覽量
9657 -
樂鑫
+關注
關注
0文章
191瀏覽量
25517
發布評論請先 登錄
相關推薦
評論