ESP32 как сохранить время RTC во время brownout

Я хочу использовать встроенные часы RTC ESP32. В моей ситуации мой ESP32 не будет иметь доступа к серверу NTP Я не хочу использовать внешние модули RTC

ESP32 предоставляет пин VDD_RTC, который будет питать исключительно домен RTC Моя проблема была бы решена, если бы я прикрепил монетную ячейку к этому булавочному знаку. В этом случае в случае отключения питания VDD_RTC будет включен, а часы RTC сохранены.

Но все наборы разработчиков, которые я видел, похоже, имеют VDD_CPU, VDD_DSIO и VDD_RTC, соединенные вместе Таким образом, если я буду использовать батарею или какой-то небольшой ИБП для питания моего ESP32 во время отключения, он будет истощен из-за использования GPIO, процессора и других функций.

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

Может быть, у меня была бы схема, которая давала бы мне сигнал, когда происходит потемнение. Я мог бы прикрепить этот сигнал к выводу GPIO и вызвать прерывание, которое заставит ESP32 погрузиться в глубокий сон

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

Может ли кто-нибудь поделиться со мной каким-либо опытом сохранения RTC с использованием минимальной внешней схемы?

, 👍5

Обсуждение

вы смотрели таблицу данных ESP32? ... или примечание к приложению ESP32 ... один из них может иметь рекомендуемую схему цепи, @jsotola

Я так и сделал и не нашел ничего интересного, @mquevedob


1 ответ


1

Вам не нужно делать ничего особенного, чтобы обнаружить потемнения. ESP32 сам обнаруживает их и автоматически сбрасывает чип. Затем причина сброса будет указывать на отключение (не помню точного названия). Таким образом, вам нужно только проверить причину сброса в начале вашего кода, будь то обычное включение питания или отключение. esp не загрузится до тех пор, пока не закончится отключение, поэтому вам даже не нужно проверять, когда начинается состояние отключения и когда оно прекращается.

Более того, в общем случае (независимо от отключений) вам не нужны никакие внешние контакты, чтобы перевести esp32 в спящий режим, и они не нужны вам, чтобы разбудить его. Вы просто звоните:

esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
esp_deep_sleep_start();

Первая строка сообщает esp, как долго нужно спать. Второй инициирует глубокий сон. esp32 (в отличие от esp8266) автоматически проснется. Если отключение происходит во время сна, оно загрузится снова, как только оно закончится, но причина пробуждения будет отличаться в зависимости от случая.

Напряжение по умолчанию, которое вызывает состояние потемнения, составляет, я думаю, 2,8 В. Это настраивается только в esp-idf, а не в Arduino. Но вам не нужно беспокоиться об этом. Выше 2,8 В esp32 продолжает правильно отсчитывать время. Ниже 2,8 В он останавливается, а затем просыпается, как только поднимается выше 2,8 В. Однако если вы не используете внешний RTC и не используете стабильный источник питания, то нет никакого способа отслеживать время после отключения питания. Вы не можете знать, как долго продолжалось потемнение. Нет никакого способа сделать это. Единственный вариант-найти вывод, который питает только RTC, отсоединить его и подключить к отдельной батарее. Это требует больших навыков SMD.

,

Я думаю, что встроенный детектор потемнения мне не подходит, потому что он сбрасывает чип. Мне нужно, чтобы он заснул, чтобы поддерживать работу внутреннего RTC., @mquevedob

некоторое время назад в этом блоге была дискуссия ... https://esp32.com/viewtopic.php?t=1558, @mquevedob