• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Утечка 3мкА при deep sleep и EN подтянутом к земле

Evgeny D

Member
Есть модуль ESP-01 . Все пины подтянуты к земле или питанию.
К пину TX подключен очень яркий светодиод через резистор на землю.

После выполнения кода deep_sleep() + снятия с EN высокого уровня светодиод остается еле-еле включенным.



Светодиод тухнет, если до него дотронуться пальцем или установить резистор к земле.
Я померил потребление светодиода - где-то 3мкА.

Есть предложение решить вопрос резистором, подтягивающим TX на землю:



Что за источник этого свечения и почему оно пропадает при дотрагивании?
Корректное ли решение, добавление резистора?
 

enjoynering

Well-known member
в качестве костыля можно сделать Serial.swap() и назначить GPIO1 выходом с подтяжкой к земле pinMode(1, INPUT_PULLDOWN) или входом pinMode(1, OUTPUT)

Serial uses UART0, which is mapped to pins GPIO1 (TX) and GPIO3 (RX). Serial may be remapped to GPIO15 (TX) and GPIO13 (RX) by calling Serial.swap() after Serial.begin. Calling swap again maps UART0 back to GPIO1 and GPIO3.

Serial1 uses UART1, TX pin is GPIO2. UART1 can not be used to receive data because normally it's RX pin is occupied for flash chip connection. To use Serial1, call Serial1.begin(baudrate).
 

Evgeny D

Member
в качестве костыля можно сделать Serial.swap() и назначить GPIO1 выходом с подтяжкой к земле pinMode(1, INPUT_PULLDOWN) или входом pinMode(1, OUTPUT)
Нет PULLDOWN резисторов у ESP8266 ,кроме как на 16-м пине.
INPUT_PULLDOWN Doesn't work · Issue #478 · esp8266/Arduino

Вот тут человек пробовал INPUT - не решает проблему =(.
Не тухнет светодиод · Issue #48 · dontsovcmc/waterius
 

Evgeny D

Member
Вопрос как измерили 3 мка?
Эмпирическим путем. Китайский мультиметр отображает вполне точные мкА (сверял с советским стрелочным). Но т.к. тинька просыпается 8 раз в секунду, то показания прыгают:

"У меня ESP8266-01:
при горящем светодиоде мультиметр прыгает 10.7-14.4 мкА.
если замкнуть TX через резистор 50к на GND, то светодиод гаснет и потребление 6.9-10.5 мкА.
на ESP8266-01S ситуация аналогичная."
 

Evgeny D

Member
Аррр. Я ничего не понимаю в электронике =(.
У меня Вотериус с ESP8266-01S потребляет 19мкА (это MCP1700 3.0В + Attiny85 в спячке + ESP).

Serial.end();
шлю по i2c команду "можешь отключать через 50мс"
ESP.deepSleep(0, RF_DEFAULT);
через 50мс с пин EN снимется HIGH и он будет через 3к3 ом на земле.

С резистором 47к на GND светодиод не горит, но потребление такое же большое (пробовал и 4к. светодиод при этом перестает TX показывать. но ток 4мкА в спячке жрет). Дотрагивание в этом случае не помогает!
Вставка Serial.flush(); перед Serial.end(); не влияет на потребление, но светодиод ГАСНЕТ!

Нашел, что влияет:
Если выполнить
ESP.deepSleep(0, RF_DEFAULT);
а только через 5 секунд отключить пин EN, то потребление на 4мкА ниже (!).

При этом светодиод опять предательски горит. Причем палец не всегда снимает с него свечение, щуп вольметра всегда.

У меня есть "хипстерский" USB осциллограф Velleman PCSU200 ... Вот, что выдал в самом конце:
Код:
Serial.flush(); Serial.end(); ESP.deepSleep(20e6, RF_DEFAULT);

Он "исцеляет" TX и потребление снимается. Светодиод не горит "честно".
 
Последнее редактирование:

pvvx

Активный участник сообщества
шлю по i2c команду "можешь отключать через 50мс"
ESP.deepSleep(0, RF_DEFAULT);
через 50мс с пин EN снимется HIGH и он будет через 3к3 ом на земле.
Команда выхода чипа в deep-sleep в SDK выполняется от 100 мс. В программе данной функции в SDK запускается таймер на 100 мс, закрываются соединения. По срабатыванию таймера, через 100 мс, отключается Flash (командой sleep) и чип переводится в режим deep-sleep. До этого чип и Flsah не отключены и жрут больше...
Уточняйте вариант работы deep-sleep в зависимости от номера версии SDK. На старых версиях присутствует и ещё и баг - после отключения Flash и её кеш выполняется ret в процедуру из её области :), что вызывает протектед и параметры deep-sleep в RTC переписываются на "перезагрузка по ошибке". Глюк плавающий* и я не видел его исправления в SDK кроме как самому накатывать бинарный патч, а с последней SDK не работал и не хочу.

* Плавающий от того, что: RTC тактируется что-то к N us, а CPU 80/160 МГц и пока RTC выполняет отключение чипа по команде с шины к ней со своим тактированием CPU успевает выполнить ещё много команд, а китайцы и ардуинщики после неё поставили “ret” с возвратом в область отключенной Flash, а не “while(1);”... Как и многое другое в ESP :)
 
Последнее редактирование:

Evgeny D

Member
Команда выхода чипа в deep-sleep в SDK выполняется от 100 мс.
Фантастика! (Сколько открытий меня ещё ждёт....)
Спасибо!
Попробовал увеличивать время отключения до 200-500мс - только иногда потребление падает до 1 мкА, а обычно 11 мкА =(.

У меня есть ESP-01 где всегда потребление 1мкА (оно другого производителя и отличается визуально только другим чипом памяти).
 

Evgeny D

Member
а при управлении по EN( это не deep-sleep) примерно 5-10 мка
Откуда Вы решили что должен быть 1 мка?
Да, я понимаю, что EN - это не полное отключение. Тем не менее, на некоторых чипах у меня 1мкА. А на других _иногда_ 1мкА... В 10мкА содержится горящий светодиод =(.
 

Evgeny D

Member
Резистор на картине не установлен на плате. Правда, когда он установлен ничего с потреблением не меняется.
Я думаю диод не открыт - все таки 3мкА вряд ли на это способны. Когда диод действительно горит - его как фонарик в темноте можно использовать - яркий.
 

enjoynering

Well-known member
я уже запутался. горит, не горит, стоит резистор или не стоит, на всех платах у автора 11мкА или на какой то особенной. и вроде на русском общаемся. чудеса.
 

Evgeny D

Member
я уже запутался. горит, не горит, стоит резистор или не стоит, на всех платах у автора 11мкА или на какой то особенной. и вроде на русском общаемся. чудеса.
Прошу прощения за путаницу. На первой картинке светодиод формально выключен (После выполнения кода deep_sleep() + снятия с EN высокого уровня светодиод остается еле-еле включенным. ). Если дотронуться осциллографом до TX то светодиод выключается и потребление снижается на 4мкА. Иногда палец дает такой же эффект.
 

Evgeny D

Member
Прошу прощения за путаницу. На первой картинке светодиод формально выключен (После выполнения кода deep_sleep() + снятия с EN высокого уровня светодиод остается еле-еле включенным. ). Если дотронуться осциллографом до TX то светодиод выключается и потребление снижается на 4мкА. Иногда палец дает такой же эффект.
Резистор 47к отсутствует.

Если припаять его, то светодиод не светиться после отключения, но потребление остается.
 
Сверху Снизу