[Из песочницы] О вкусном и здоровом питании ESP8266 от батареек

Многие из тех, кто мастерит разные штуковины на ESP8266, в какой-то момент задумывались, что было бы здорово взять ту штуковину, положить в карман — и пойти с ней погулять. ESP8266 ведь такой маленький, так и просится. И тут на нашем пути встречается небольшое препятствие — одним программированием здесь не обойтись, придётся брать в руки паяльник, но всё не так страшно, и, надеюсь, эта статья вам поможет.

В datasheet на ESP8266 указано напряжение питания от 3.0 до 3.6 вольт, что, в принципе, позволяет питать ESP8266 напрямую от двух батареек AA или одной литиевой 1S батарейки. Если нам не очень важна стабильность и аккуратное поведение устройства при падении напряжения, или не жалко литиевую батарейку, можно этим и обойтись, в противном случае перед нами встаёт ряд вопросов.

Преобразование напряжения


В большинстве случаев напряжение батареи будет выше, чем нужные нам 3.3 В, и оно будет заметно изменяться по мере разряда батареи, поэтому нам нужно его понизить и стабилизировать. Первое, с чем нужно определиться — это хотим ли мы питать остальную часть схемы от стабилизированного напряжения, или можно напрямую от батарейки. От этого зависит необходимый ток, отдаваемый регулятором напряжения. Самому ESP8266 надо максимум 200 mA, набросив немножко сверху на заряд конденсатора и прочие непредвиденные расходы, можно считать что 300. Стабильное напряжение часто любят датчики, а мощные исполнительные устройства часто лучше питать напрямую от батареи.

Дальше надо определиться с типом регулятора, тут есть два варианта, каждый со своими достоинствами и недостатками — линейный регулятор, или импульсный.

Линейный регулятор напряжения
Линейный регулятор, по сути, представляет из себя управляемый резистор, на котором падает всё «лишнее» напряжение и рассеивается в виде тепла.

Достоинства линейного регулятора:

  • Крайняя простота — обычно микросхема с 3 выводами и два конденсатора. Почти невозможно накосячить.
  • Дешевизна — от 6 рублей за микросхему.
  • Отсутствие высокочастотного шума в выходном напряжении. Это может быть полезно, например, если от этого же напряжения питается какой-нибудь чувствительный датчик.

Самый распространённый вариант — микросхема типа 1117, выпускаются многими производителями, как правило выпускаются в нескольких вариантах на линейку фиксированных выходных напряжений, среди которых всегда есть 3.3 В — например AZ1117C-3.3 производства компании Diodes Inc.

image
Рис. 1. Типовая схема включения линейного регулятора типа 1117

На что стоит обратить внимание:

  • Падение напряжения на регуляторе. Если падение напряжения на регуляторе 1.2 В (типовое значение для регуляторов типа 1117), это значит, что для поддержания напряжения 3.3 В на выходе нам надо иметь как минимум 4.5 В на батарее, что означает, что с мечтой о питании от трёх пальчиковых батареек придётся расстаться. Чем ниже это падение напряжения — тем лучше.
  • Максимальное напряжение конденсаторов. Для конденсатора на выходе регулятора достаточно 6 В, а вот на входе запас в +50% от максимального напряжения батареи никогда не повредит.
  • Максимальный ток редко бывает проблемой, потому что даже простейший регулятор, как правило, без проблем обеспечит ток до 1 А.
  • Максимальное входное напряжение. Типовое значение для регуляторов типа 1117 — 15 В, если у вас более высоковольтная батарея (например LiPo 4S) — обратите внимание.

Недостаток линейного регулятора — не очень большой КПД, сильно зависящий от разницы между напряжением на батарее и выходным 3.3 В. Эта разница бесполезно рассеивается регулятором в виде тепла. Если устройство питается от трёх батареек размера АА (4.5 В), то примерно 27% энергии потратится впустую. Если напряжение батареи 12 В, то впустую потратится уже 73%.Импульсный регулятор
Импульсные регуляторы обычно имеют более высокий КПД, мало зависящий от разницы напряжений между входом и выходом. Платить за это приходится усложнением схемы, а также определёнными требованиями к разводке печатной платы. Поскольку в регуляторе используется относительно высокая частота (обычно от десятков килогерц до единиц мегагерц), схема становится чувствительной к паразитным индуктивностям и ёмкостям, поэтому мало соединить элементы правильно, взаимное расположение самих элементов и проводников между ними тоже может критически повлиять на работоспособность. В моей практике был случай, когда из-за неудачной разводки проводников на плате регулятор начинал работать только при поднесении к нему пальца — то есть внесении дополнительной паразитной ёмкости. Также это может быть не самый удачный выбор, если ваша схема чувствительна к высокочастотным помехам — например рядом на печатной плате расположен чувствительный датчик.

image
Рис. 2. Типовая схема включения LM2736 производства компании Texas Instruments, цена примерно 80 рублей

На что стоит обратить внимание (гораздо больше пунктов, чем у линейного регулятора!):

  • Импульсные преобразователи бывают очень разные, поэтому будьте готовы потратить немало времени на выбор подходящего.
  • Необходимая «обвязка» преобразователя. Количество и номиналы используемых деталей могут заметно повлиять на габариты, стоимость и сложность.
  • Разводка платы. В datasheet почти всегда будут или словесные рекомендации, или даже картинка с эталонным дизайном платы, но это не догма — часто можно обойтись здравым электрическим смыслом (все проводники на плате как можно короче, на другой стороне платы сплошной заземлённый слой и т.п.).
  • Диапазон напряжения на входе.
  • Максимальный ток на выходе.
  • Частота преобразования. Схемы с более низкой частотой менее капризны с точки зрения паразитных ёмкостей, но требуют больших конденсаторов (обычно танталовые, полярные) и индуктивностей. Также многие люди слышат их высокочастотный свист — индуктивности работают как маленькие пищалки. Схемы с более высокой частотой более капризны, но требуют меньших конденсаторов (обычно многослойных керамических) и индуктивностей, и не свистят.
  • Максимальные напряжения конденсаторов. В импульсном преобразователе могут быть значительные высокочастотные колебания выходного напряжения (ripple), поэтому рекомендуется хороший запас.
  • Почти все импульсные преобразователи имеют регулируемое выходное напряжение, которое задаётся делителем из двух сопротивлений, поэтому их номиналы и допустимое отклонение должны быть довольно точными.

Контроль напряжения батареи


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

Сделать это очень просто — достаточно делителя из двух резисторов, подключённых ко входу ADC. Делитель рассчитывается так, чтобы максимальное напряжение на входе ADC не превышало 1 В (верхний предел ADC). В принципе, если оно будет немного выше, то ничего страшного не случится, но надо быть внимательным, чтобы не превысить напряжение питания — помните, что напряжение батареи, которое мы измеряем, может быть существенно выше 3.3 В — если его случайно подать на ADC то ESP8266 сгорит.

Недостаток один — это занимает единственный доступный ADC. Эту проблему, в свою очередь, можно решить использованием внешнего мультиплексора (например NLAS4599 производства компании ON Semiconductor, цена примерно 10 рублей), но он, в свою очередь, займёт один или несколько GPIO для управления. Также к недостаткам этого метода можно отнести, что на ADC нельзя повесить прерывание, и его надо регулярно опрашивать самому.

Детектирование «brownout»


«Brownout» — это проседание напряжения питания ниже номинала, но не до нуля. Зачем нужно его детектировать? Представьте, что у вас есть грелка с батарейным питанием и управлением на ESP8266. Становится холодно — обогреватель включается, становится тепло — выключается. Казалось бы, что может пойти не так? Но давайте посмотрим подробнее.

Батарейка как источник питания имеет определённое внутреннее сопротивление, при попытке забрать от неё большой ток (например, при включении обогревателя) её выходное напряжение проседает. Что происходит с ESP8266, если оно проседает ниже 3.3В? А происходит вот что — небольшого проседания напряжения недостаточно для того, чтобы наступил общий ресет и все выходы перешли в неактивное состояние, но достаточно для того, чтобы «мгновения остановились» для мозгов ESP8266. В результате, в нашем примере с грелкой, получается, что ESP8266 включает грелку, тут же уходит в коматоз из-за brownout, а GPIO выход, управляющий грелкой, сохраняет высокий уровень — соответственно грелка продолжает греть и прогревает вас до состояния medium well, если батарейка не кончается раньше и не наступает наконец долгожданный общий ресет.

Во многих серьёзных микроконтроллерах эта проблема давно решается аппаратно, и часто даже можно выбирать программно реакцию на brownout — это может быть как принудительный ресет, так и прерывание, в котором микроконтроллер «из последних сил» может успеть (без гарантий, конечно) сам перевести себя в безопасное состояние. В ESP8266 ничего такого нет, поэтому придётся браться за паяльник. К счастью, всё давно придумано до нас, и для решения этой проблемы давно существуют микросхемы с всего тремя выводами, которые можно подключать к ESP8266 без какой-либо дополнительной обвязки. Куда подключать — есть два варианта: или на ресет, или на GPIO и обрабатывать ситуацию программно, возможно через прерывание.

image
Рис. 3. Типовая схема включения микросхемы CAX803TTBI-T3 производства компании ON Semiconductor, цена примерно 10 рублей. Обратите внимание, что в ESP8266 есть программно включаемые pull-up сопротивления, так что внешнее сопротивление не нужно

На этом всё, в большинстве случаев описанного выше хватит, чтобы обеспечить вашей ESP8266 вкусное, здоровое и недорогое питание. Да пребудет с вами электродвижущая сила!

Комментарии (7)

  • 6 июля 2016 в 20:45 (комментарий был изменён)

    0

    1. Почему на хабре, а не на гиктаймс?
    2. Думал, что будет разговор про спящий режим.
    3. Зачем таскать esp в кармане — зона покрытия wifi ограничена. Для автномных устройств без wifi масса других микроконтроллеров.
    4.
    грелка с батарейным питанием и управлением на ESP8266
     — если только с атомной батарейкой…
    5. есп сама умеет мерить питание без внешних резисторов.
    • 7 июля 2016 в 00:39

      0

      Плюс нет никакой практически полезной информации, ток потребления, время работы от батарейки в разных режимах. Каким боком к статье относится ESP8266… вставить название любого другого потребителя напряжения, ничего не изменится, STM32, Atmega, светодиод…
      • 7 июля 2016 в 04:05

        0

        Ток и время работы, как Вы понимаете, будут очень сильно зависеть от железа и программы, так что приводить конкретные цифры едва ли есть смысл. Одно из моих устройств раз в секунду передавало сообщение по WiFi и работало 20 часов от 3xAAA, если это Вам поможет.
        Каким боком ESP8266 — объясняю. В «нормальных» микроконтроллерах обычно предусмотрено много всяких фишек про проблемы с питанием, в ESP8266 — нет, он на это не был рассчитан изначально, это должна была быть не его забота. А простой нагрузке падение напряжения с 3.3 до 3.0 едва ли сделает проблему.
    • 7 июля 2016 в 04:00

      0

      3. Затем, что бываhttps://habrahabr.ru/post/304936/#ют нужны именно автономные устройства с WiFi.
      5. ESP8266 умеет мерять питание, которое на неё подали. Она не умеет мерять питание до преобразователя.
  • 6 июля 2016 в 22:23

    0

    в ESP8266 есть программно включаемые pull-up сопротивления, так что внешнее сопротивление не нужно

    , а вот тут можно проблемку получить, из-за экономии на резисторе. Ведь если подтяжка внутри контроллера включается программно (и если она по умолчанию выключена, я не смотрел, мне лень), то до того момента как отработает часть программы, включающая подтяжку, внешняя микросхема может повести себя не так, как ожидается (ведь пока подтяжки нет), и, например, выполнить сброс раньше времени. И так по кругу. Такие «мелочи» нужно прорабатывать.
    • 7 июля 2016 в 03:57

      0

      В описанном случае единственное, что может случиться, если нет подтяжки — ESP8266 может эту ногу неправильно прочитать, но прежде чем читать, мы включаем подтяжку.
    • 7 июля 2016 в 04:13

      0

      К тому же, по умолчанию все ноги — входы, кроме GPIO0. Если на RESET — то да, это проблема. Но опять же, всё придумано до нас, и тогда мы в описанном примере просто меняем CAX803 на CAX809/810.

© Habrahabr.ru