ESP32 快速入门(六): Power Management 电源管理

一曲冷凌霜 提交于 2020-01-13 08:49:41

1. 前言

最近笔者实践了 ESP32 的电源管理,故在此简要记录一些相关知识。如果需要系统的了解电源管理,请查看 espressif 官方文档之电源管理

2. 电源管理使用方式

主要是在代码中添加如下代码段:

#if CONFIG_PM_ENABLE
    // Configure dynamic frequency scaling:
    // maximum and minimum frequencies are set in sdkconfig,
    // automatic light sleep is enabled if tickless idle support is enabled.
    esp_pm_config_esp32_t pm_config = {
            .max_freq_mhz = CONFIG_EXAMPLE_MAX_CPU_FREQ_MHZ,
            .min_freq_mhz = CONFIG_EXAMPLE_MIN_CPU_FREQ_MHZ,
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
            .light_sleep_enable = true
#endif
    };
    ESP_ERROR_CHECK( esp_pm_configure(&pm_config) );
#endif // CONFIG_PM_ENABLE

编译时可使用 CONFIG_PM_ENABLE 选项启用电源管理功能。应用程序可以通过调用 esp_pm_configure() 函数启用动态调频 (Dynamic Frequency Scaling) 功能和自动 Light-sleep 模式。

此函数的参数为 esp_pm_config_esp32_t,定义了频率调节的相关设置。需要初始化里面的参数。此结构体的参数解释如下:

  • max_freq_mhz:最大 CPU 频率 (MHz),即获取 ESP_PM_CPU_FREQ_MAX 锁后所使用的频率。该字段通常设置为 CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ
  • min_freq_mhz:最小 CPU 频率 (MHz),即仅获取 ESP_PM_APB_FREQ_MAX 锁后所使用的频率。该字段可设置为晶振 (XTAL) 频率值,或者 XTAL 频率值除以整数。注意,10 MHz 是生成 1 MHz 的 REF_TICK 默认时钟所需的最小频率。
  • light_sleep_enable:没有获取任何管理锁时,决定系统是否需要自动进入 Light-sleep 状态 (true/false)。

注:自动 Light-sleep 模式基于 FreeRTOS Tickless Idle 功能,因此如果在 menuconfig 中没有启用 CONFIG_FREERTOS_USE_TICKLESS_IDLE 选项,在请求自动 Light-sleep 时,esp_pm_configure() 将会返回 ESP_ERR_NOT_SUPPORTED 错误。
在 Light-sleep 状态下,外设设有时钟门控,不会产生来自 GPIO 和内部外设的中断。Sleep Modes 文档中所提到的唤醒源可用于从 Light-sleep 状态触发唤醒。例如,EXT0 和 EXT1 唤醒源就可以通过 GPIO 唤醒芯片。

3. 电源管理锁

应用程序可以通过获取或释放管理锁来控制电源管理算法。应用程序获取电源管理锁后,电源管理算法的操作将受到下面的限制。释放电源管理锁后,限制解除。ESP32 支持以下三种电源管理锁。

  • ESP_PM_CPU_FREQ_MAX:请求使用 esp_pm_configure() 将 CPU 频率设置为最大值。ESP32 可以将该值设置为 80 MHz、160 MHz 或 240 MHz。
  • ESP_PM_APB_FREQ_MAX :请求将 APB 频率设置为最大值,ESP32 支持的最大频率为 80 MHz。
  • ESP_PM_NO_LIGHT_SLEEP:禁止自动切换至 Light-sleep 模式。

注:APB 为 Advanced Peripheral Bus。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!