乐鑫技术交流
直播中

温暖镜头

10年用户 1059经验值
擅长:电源/新能源 制造/封装
私信 关注
[问答]

请问ESP32休眠时IO口要怎么处理才能低功耗?

我看有的IO只能输入, 而且悬空, 这样的IO会不会漏电?
有么有deep sleep的例子, 功耗可以低到6uA的那种

回帖(2)

贾小龙

2024-6-21 10:19:55
这个取决于应用设计,如果 io 口是直接驱动外部电路或者外部有上下拉电阻之类的应用,在进入 deep sleep 前应该使用 rtc_gpio_isolate 函数来孤立(断开)这个 gpio (RTC IO);如果 io 口是用来控制外部 mos 管或者三极管之类的器件,应该根据实际应用场景使用 gpio_hold_en  hold 住某个电平来断开晶体管。

deep sleep 的功耗取决于你使用哪种唤醒方式,如果仅仅使用 RTC Timer 作为 wakeup source 的话,芯片待机功耗完全可以达到 6ua,具体 example 可以参考 idf 的 example/system/deep_sleep 目录。
                                                                                           
举报

张鹏

2024-6-21 16:49:47
在ESP32进入深度休眠(Deep Sleep)模式时,IO口的处理对于降低功耗至关重要。以下是一些建议和步骤,以确保在深度休眠模式下IO口的低功耗:

1. **配置GPIO模式**:在进入深度休眠之前,确保将所有未使用的GPIO配置为输入模式。这是因为输入模式的功耗通常低于输出模式。

2. **设置GPIO上拉/下拉电阻**:为了避免悬空的GPIO口产生不稳定的电平,可以为这些GPIO配置上拉或下拉电阻。这有助于减少功耗并防止意外触发。

3. **禁用未使用的外设**:在进入深度休眠之前,确保禁用所有未使用的外设,如SPI、I2C等。这可以进一步降低功耗。

4. **使用低功耗唤醒源**:选择一个低功耗的唤醒源,如GPIO中断或定时器。这可以确保ESP32在唤醒时消耗的电量最小。

5. **优化电源管理**:在深度休眠模式下,可以关闭VDD3P3电源域,以进一步降低功耗。

以下是一个示例代码,展示了如何配置ESP32以实现低功耗深度休眠:

```c
#include
#include
#include

#define GPIO_WAKEUP_PIN 4  // 设置唤醒GPIO引脚

void app_main() {
    // 初始化GPIO
    gpio_config_t gpio_conf;
    gpio_conf.mode = GPIO_MODE_INPUT;
    gpio_conf.pull_up_en = GPIO_PULLUP_ENABLE;
    gpio_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
    gpio_conf.intr_type = GPIO_INTR_LOW_LEVEL;  // 设置中断类型为低电平触发
    gpio_config(&gpio_conf);

    // 禁用未使用的外设
    // ...

    // 进入深度休眠
    while (1) {
        esp_deep_sleep_enable_gpio_wakeup();
        esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
        esp_deep_sleep_pd_config(ESP_PD_DOMAIN_WIFI, ESP_PD_OPTION_ON);
        esp_deep_sleep_pd_config(ESP_PD_DOMAIN_VDD3P3, ESP_PD_OPTION_OFF);
        esp_deep_sleep_start();
    }
}
```

这个示例代码将ESP32配置为使用GPIO4作为唤醒源,并在深度休眠模式下禁用VDD3P3电源域。这样可以实现低功耗,功耗可以降低到6uA左右。

请注意,实际功耗可能会因硬件和软件配置的不同而有所不同。为了获得最佳效果,请根据您的具体需求调整代码。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分