1. 如何开启该功能
ESP32 内部集成掉电检测电路,并且会默认启用。
如果电源电压低于安全值,掉电检测器可以触发系统复位。掉电检测器可以使用 CONFIG_ESP_BROWNOUT_DET 和 CONFIG_ESP_BROWNOUT_DET_LVL_SEL 这两个选项进行设置。
当掉电检测器被触发时,会打印如下信息:
Brownout detector was triggered
芯片会在该打印信息结束后复位。
请注意,如果电源电压快速下降,则只能在控制台上看到部分打印信息。
2. sdkconfig配置相关选项
CONFIG_ESP32_BROWNOUT_DET=y
CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set
CONFIG_ESP32_BROWNOUT_DET_LVL=0
CONFIG_ESP32_REDUCE_PHY_TX_POWER=y
3. 电压阈值
CONFIG_ESP_BROWNOUT_DET_LVL_SEL 说明
欠压电压等级说明:检测电路检测到 电源电压低于这个LVL_SEL值,就会触发系统复位。
可以选择的电压等级如下:这些等级值是评估值,每个电路需要实际测试。
-
2.43V +/- 0.05 (CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0)
-
2.48V +/- 0.05 (CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1)
-
2.58V +/- 0.05 (CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2)
-
2.62V +/- 0.05 (CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3)
-
2.67V +/- 0.05 (CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4)
-
2.70V +/- 0.05 (CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5)
-
2.77V +/- 0.05 (CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6)
-
2.80V +/- 0.05 (CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7)
4. CONFIG_ESP32_BROWNOUT_DET_LVL
这个配置项默认为0, 在初始化的时候有用到。普通开发者应该是没有应用场景。具体如何使用应该还是要咨询原厂。乐鑫的文档库里面没有这个宏的任何描述。
#define RTC_CNTL_BROWN_OUT_REG (DR_REG_RTCCNTL_BASE + 0xd4)
/* RTC_CNTL_BROWN_OUT_DET : RO ;bitpos:[31] ;default: 1'b0 ; */
/*description: brown out detect*/
#define RTC_CNTL_BROWN_OUT_DET (BIT(31))
#define RTC_CNTL_BROWN_OUT_DET_M (BIT(31))
#define RTC_CNTL_BROWN_OUT_DET_V 0x1
#define RTC_CNTL_BROWN_OUT_DET_S 31
void esp_brownout_init()
{
REG_WRITE(RTC_CNTL_BROWN_OUT_REG,
RTC_CNTL_BROWN_OUT_ENA /* Enable BOD */
| RTC_CNTL_BROWN_OUT_PD_RF_ENA /* Automatically power down RF */
/* Reset timeout must be set to >1 even if BOR feature is not used */
| (2 << RTC_CNTL_BROWN_OUT_RST_WAIT_S)
| (BROWNOUT_DET_LVL << RTC_CNTL_DBROWN_OUT_THRES_S));
ESP_ERROR_CHECK( rtc_isr_register(rtc_brownout_isr_handler, NULL, RTC_CNTL_BROWN_OUT_INT_ENA_M) );
REG_SET_BIT(RTC_CNTL_INT_ENA_REG, RTC_CNTL_BROWN_OUT_INT_ENA_M);
}
5. 降低发射功率
CONFIG_ESP32_REDUCE_PHY_TX_POWER
这个是在发生了brownout的情况下,芯片再次启动的时候,降低 PHY TX 功率,保证code能够正常运行。
6. 应用场景说明
在有些灯具产品上面,上电的时候3.3V供电不稳定,会导致ESP32先上电起来,触发brownout,也可能会多次触发brownout。知道供电电路的3.3V电路稳定。