ESP32: отключить детектор отключения питания

У меня есть ESP-WROOM-32, и я использую Arduino IDE для передачи кода на него. Мой ESP питается от 2 батареек типа АА, и у меня возникла проблема с блоком питания.

Он хорошо работает с новой батареей, но через некоторое время я всегда буду повторять эту ошибку:

8 июня 2016 г., 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv: 0x00, q_drv: 0x00, d_drv: 0x00, cs0_drv: 0x00, hd_drv: 0x00, wp_drv: 0x00 режим: DIO, часы div: 2 load: 0x3fff0018, len: 4 load: 0x3fff001c, len: 812 загрузка: 0x40078000, длина: 0 загрузка: 0x40078000, длина: 11584 запись 0x40078a60

Сработал детектор пониженного напряжения

Итак, я знаю, что эту функцию можно отключить в ESP32. Мой вопрос: как это сделать?

Что из того, что я сделал, не сработало:

Добавьте этот код в мою среду разработки Arduino IDE:

#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
setup(){
    WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //отключаем детектор отключения
}

Измените Arduino\hardware\espressif\esp32\tools\sdk\sdkconfig на:

CONFIG_BROWNOUT_DET=                //предыдущее значение было "=y"
CONFIG_BROWNOUT_DET_LVL_SEL_0=      //предыдущее было "=y"
CONFIG_BROWNOUT_DET_LVL_SEL_1=
CONFIG_BROWNOUT_DET_LVL_SEL_2=
CONFIG_BROWNOUT_DET_LVL_SEL_3=
CONFIG_BROWNOUT_DET_LVL_SEL_4=
CONFIG_BROWNOUT_DET_LVL_SEL_5=
CONFIG_BROWNOUT_DET_LVL_SEL_6=
CONFIG_BROWNOUT_DET_LVL_SEL_7=
CONFIG_BROWNOUT_DET_LVL=           //предыдущий был "=0"

, 👍1

Обсуждение

Почему вы хотите отключить его? Это не просто так: ваши батареи слишком разряжены, чтобы надежно питать ESP-32., @Majenko

Потому что производитель устройства сказал мне сделать это, но он использует ESP-IDF, а я предпочитаю программировать на Arduino., @Gazouu

Какие батареи вы используете?, @Majenko

Я использую 2 батарейки типа АА по 1,5 В каждая., @Gazouu

Я спросил, какой *вид*, а не *размер*. Алкелин? Цинк Карбон? никель-металлогидридный?, @Majenko

Alkaline Plus Power от Panasonic, @Gazouu

При среднем токе 100 мА вы можете ожидать, что они будут работать около 20 минут, прежде чем они упадут ниже минимального напряжения для ESP-32., @Majenko

Существуют ли какие-либо батареи, кроме размера AA, которые могут питать мой ESP-32 и работать более 20 минут?, @Gazouu

Для работы от батареи приходится использовать очень агрессивные энергосберегающие режимы работы., @Majenko

У меня уже есть спящий режим для устройства. Он просыпается каждые 15 минут, чтобы отправить данные на сервер через Wi-Fi, а затем снова засыпает. Может ли аккумуляторы LiFePO4 решить проблему?, @Gazouu

Возможно, вам повезет получить ответ, если вы спросите авторов плагина ESP для Arduino IDE, поскольку они гораздо более близки к внутренней работе ESP-32 и ESP8266, чем мы здесь., @Majenko

Щелочная батарея начинается с 1,5 В, но очень быстро падает примерно до 1,2 В и остается между 1,1 и 1,2 для большей части разряда в зависимости от тока, пока она не разрядится и не упадет ниже 1,1 В. Это означает, что 2xAA обеспечивает напряжение от 2,2 В до 2,4 В в течение большей части срока службы батареи, за исключением первого небольшого периода. Вам нужны 3xAA (щелочные, но также и большинство других типов) для надежной работы микроконтроллера 3,3 В, а также LDO. Отключите обнаружение пониженного напряжения, если вы знаете, что делаете, и знаете, что ваше приложение может достичь определенного пониженного напряжения без каких-либо последствий., @thomasrutter


2 ответа


2

Для меня проблема отключения была решена путем удаления esp32 из диспетчера плат Arduino IDE + удаления файлов с диска и использования процедуры установки «Использование Arduino IDE с репозиторием разработки» - https://github.com/espressif/arduino-esp32/

Я предполагаю, что он будет использовать более новую версию arduino-esp32, которая имеет некоторую защиту от отключения из-за активации CONFIG_REDUCE_PHY_TX_POWER по умолчанию. Также вам, вероятно, следует узнать, как уменьшить мощность Wi-Fi + глубокий сон для более длительного использования батареи.

,

0

Может быть, это глупо, но я добавил задержку в свой сценарий, прежде чем я получил ошибку.

Serial.println("Delay 5s Brownout detector was triggered");
delay(5000);
,