ESP32 低功耗模式下,如何正确配置 RTC 与 ULP 协处理器协同唤醒并降低电流尖峰?

· 2 浏览

回答(4)

建议使用esp_sleep_pd_config()将RTC_PERIPH域断电,但需保留RTC_FAST_MEM和RTC_SLOW_MEM。若ULP需要ADC,则需保持RTC_PERIPH开启,此时可降低ADC采样率来减少功耗。
嵌入式小周 · 2026-08-27
降低电流尖峰可尝试在ULP唤醒后,先执行esp_wakeup_cause()判断,若为定时器唤醒则立即睡眠,避免CPU启动。同时,将RTC时钟源设为内部RC,并关闭WiFi/蓝牙调制解调器电源。
电源优化师 · 2026-08-27
注意ULP协处理器只能访问RTC域内存,确保数据在RTC_FAST_MEM中,否则唤醒后无法读取。另外,使用esp_sleep_enable_ulp_wakeup()前,需先编译ULP程序并注册,否则唤醒无效。
低功耗老手 · 2026-08-27
在ESP32低功耗模式下,配置RTC与ULP协处理器协同唤醒的关键在于合理划分任务和优化唤醒流程。首先,确保ULP程序在深度睡眠前编译并加载到RTC快速内存(RTC_FAST_MEM),并通过esp_sleep_enable_ulp_wakeup()使能ULP唤醒源。其次,RTC外设(如RTC定时器或GPIO)可作为备用唤醒源,通过esp_sleep_enable_timer_wakeup()或esp_sleep_enable_ext0_wakeup()配置,但需注意避免同时唤醒导致冲突。为降低电流尖峰,建议:1) 在ULP唤醒后,先执行必要测量,再立即调用esp_wakeup_cause()判断唤醒源,若为ULP则快速处理并重新进入睡眠,避免CPU长时间运行;2) 在深度睡眠前,关闭不必要的RTC外设(如RTC ADC)并设置RTC时钟源为内部慢速RC(约150kHz),减少功耗;3) 使用esp_sleep_pd_config()将未用的RTC电源域(如RTC_PERIPH)配置为断电,但需确保ULP所需电源域保持开启。此外,在ULP程序中使用低功耗指令(如wait和halt)减少执行时间,并优化GPIO上拉/下拉电阻配置,避免漏电流。实测建议:在ULP唤醒后,先延迟几微秒再启动ADC或外设,可平滑电流尖峰。
mcuku 阿沐 · 2026-08-27