Батарейное питание для устройств MySensors

    Эта музыка будет вечной если я заменю батарейки (С)



    Это опус посвящен моим изысканиям по питанию автономными беспроводными устройствами, входящими в систему умного дома MySensors.


    Сперва был литий...


    Вернее литий-ионные и литий-полимерные аккумуляторы.


    Долгое время эти аккумуляторы от старых гаджетов копились в ящике. Думал — вот оно, универсальное питание для всех малогабаритных микроконтроллеров. Тем более, напряжение 3.3-4.2В отлично подходит как для AVR, так и для всяческих ESP и STM. Для надежности можно поставить LDO стабилизатор нужной мощности и получить стабильные 3.3 для МК и всей периферии.



    Но как оказалось, не все так хорошо.


    1. Аккумуляторы требовалось заряжать. Для этого нужно было делать их съемными, либо добавлять в свое устройство модуль зарядки, что, в свою очередь, давало дополнительную стоимость, габариты и отверстия для зарядки в корпусе. Да и не всегда удобно заряжать устройства, например, погодный сенсор за окном.
    2. Литиевые аккумуляторы (как и вообще большинство источников питания) не годятся для работы при отрицательных температурах. В погодном сенсоре, закрепленном за окном, зимой в мороз аккумулятор садился сразу.
    3. При длительной эксплуатации если вовремя не отследить напряжение аккумулятора, можно разрядить его "в ноль", то есть ниже допустимого значения, что гарантировано его убьет. Значит нужны средства защиты от переразряда.
    4. Разнообразие размеров и емкости аккумуляторов значительно ограничивали повторяемость устройств в одинаковых корпусах. Да и запасы старых аккумуляторов, быстро подошли к концу — в результате нужно было покупать где то новые. И, как оказалось, стоимость таких источников питания оказалась совсем не копеечной и добавляла как минимум $2 к стоимости каждого устройства (а с учетом платы зарядки и больше). Причем экономии от перезаряжаемости не было, так как большинство автономных контроллеров потребляли очень мало энергии и могли работать долгие месяцы без перезарядки.

    NiMH и прочие AA/AAA аккумуляторы были еще хуже. Их обязательно нужно было заряжать в специальном заряднике, они имели имели "эффект памяти" и изначально низкое напряжение (1.2-1.3В), а при последовательном включении из за разности внутреннего сопротивления одна из батарей могла разрядиться сильнее других, что опять же приводило к ее порче.


    И вновь литий ...


    Теперь уже круглые малогабаритные литиевые батарейки на 3.0В, в пользу которых я решил отказаться от капризных и дорогих аккумуляторов.


    Батарейки CR2032 применяются во огромном количестве BIOSов компьютеров, электросчетчиков и прочих устройств с RTC, наручных часах, калькуляторах и различных игрушках. При маленьких габаритах и невысокой цене они имеют 3.0В напряжения, вполне достаточного для МК и приличную для своих габаритов емкость 200-250мА/ч.



    Но опять проблемы. Дело в то. что постоянный ток такой батарейки всего 0.4мА. Если нагрузить ее более высоким током, напряжение батареи будет падать, хотя потом может частично или полностью восстановиться. Типовой контроллер Mysensor в режиме сна потребляет несколько микроампер. Но вот в режиме передачи — уже порядка 15-20мА. При этом новые версии библиотеки MySensors заставляют устройства посылать много пакетов — пинг, приветствие, презентации, поиск шлюза или маршрутизатора что выливается в длительную, порой в несколько секунд, работу радиомодуля. При напряжении около 2В дешевые китайские NRF24L01 начинают глючить, при этом иногда даже не получается увести их в режим сна sleep() от MySensors.


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


    В зависимости от производителя и "свежести" батареи устройство может проработать от пары дней до месяца. Если покупать дешевые батарейки на алиэкспресс — то и вовсе лотерея. Немного спасает переход на более емкие CR2450 и CR2477, но и они длительно отдавать ток более 0.5мА не умеют.


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


    Пальчики — мизинчики



    Пора бы уже успокоится и перенять "передовой" китайский опыт, питать все свои устройства от трех AAA (батарейки в комплект не входят). Но же решил поискать решение хотя бы с двумя 1.5 вольтовыми батарейками .


    Остановился на такой схеме с повышающим стабилизатором NCP1400:



    Две последовательно включенные щелочные батареи ААА дают изначально 2.7-3.1В к концу продуктивного периода снижая напряжение до 1-2В


    При отключенном NCP1400 (низкий уровень на управляющем входе) питание от батарей сразу поступает на МК через катушку L1 и диод шоттки D1 с минимальным падением напряжения около 0.1В. Если на управляющий вход подать высокий уровень, то запускается стабилизатор NCP1400 и выдает на МК напряжение 3.3В при суммарном напряжении батарей от 0.8В до 3.1В.


    Алгоритм работы такой:


    1. Основное время контроллер находится в PowerDownMode, вся периферия, включая NRF24 отключена или также находится в режиме низкого энергопотребления.
    2. Выходит МК из режима сна по прерыванию от таймера либо внешнему прерыванию (например в выключателях по прерыванию от кнопки), мерит напряжение питания VCC (встроенная функция AVR контроллеров).
    3. Если напряжение питания больше 3В (или другого напряжения, достаточного для стабильной работы периферии), то NCP1400 не запускается и вся обработка ведется при этом напряжении питания до следующего цикла сна.
    4. Если напряжения ниже 3В, то запускается стабилизатор NCP1400, устанавливается напряжения питания 3.3В, выполняются все регулярный обработки устройства включая отправку данных через NRF24
    5. Далее, если напряжения выше 1.7В (достаточное напряжения для выхода МК из режима сна), то NCP1400 отключается до следующего цикла пробуждения.
    6. Если напряжение менее 1.7 (минимальное напряжение работы МК), то NCP1400 не отключается до перезагрузки контроллера или до снижения напряжения питания ниже 0.8В (напряжения работы NCP1400)

    Скетч данного алгоритма
    #define MY_RF24_CE_PIN    9
    #define MY_RF24_CS_PIN    10
    #define MY_RF24_POWER_PIN 8
    #define MY_RADIO_NRF24
    #include <MySensors.h>  
    #define PIN_NCP1400       2
    #define CHILD_ID_VCC      0
    MyMessage msgVcc(CHILD_ID_VCC, V_VOLTAGE);
    bool low_power = false;
    int readVcc();
    //
    void before(){
      pinMode(PIN_NCP1400,OUTPUT);
      digitalWrite(PIN_NCP1400,HIGH);
    }
    void presentation(){
        sendSketchInfo("NCP1400 test", "1.0");
        present(CHILD_ID_VCC, S_MULTIMETER,"mV");
    }
    //
    void loop(){
      int vcc = 1000;  
      if( low_power == false ){
         vcc = readVcc(); 
         digitalWrite(PIN_NCP1400,HIGH); //Включаем стабилизатор NRF1400
      }
      if( vcc < 1700 )low_power = true; //Переходим в режим постоянно включенного стабилизатора NRF1400
      send(msgVcc.set(vcc)); //Посылаем занчение VCC
      if( low_power == false )digitalWrite(PIN_NCP1400,LOW); //Выключаем стабилизатор NRF1400 
      sleep( 300000 ); //Переходим в режим низкого потребления на 5 минут
    }
    /**
     * Считываем напряжение питания на VCC контроллера
     */
    int readVcc() {
      long result;
      // Read 1.1V reference against AVcc
      ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
      delay(2); // Wait for Vref to settle
      ADCSRA |= _BV(ADSC); // Convert
      while (bit_is_set(ADCSRA,ADSC));
      result = ADCL;
      result |= ADCH<<8;
      result = (1100L * 1023)/result;
      return((int)result);
    }

    Тестирование


    А как у нас состоит дело на практике с потреблением тока? Подключаю свою схему к ЛБП и делаю замеры тока потребления и напряжения на выходе.



    Ток холостого хода при выключенном NCP1400 и входном напряжении питания 1-3В составил 0.3мкА. Даже ниже заявленного по даташиту 0.5мкА (а может на таком диапазоне у меня приборы дают большую погрешность). А вот при включенном стабилизаторе без нагрузки ток оказался неожиданно большим — более 0.3мА. Оказалось, большое потребление вызывал подтягивающий резистор R1. Заменив номинал R1 с 10К до 150К получил 30мкА при входном напряжении 3.0В и 44мкА при 1.0В.


    Если совсем убрать резистор R1, то стабилизатор при отсутствии подключения этого входа к МК будет постоянно включенным потребляя при входящих 2В порядка 11мкА.
    Теперь подключаю микроконтроллер с NRF24L01 и датчиком HUD21, работающим по выше описанному алгоритму:


    • Входное напряжение 3.0В — активный режим (NCP1400 включен) 32мА, режим сна (NCP1400 выключен) 9мкА
    • Входное напряжение 2.0В — активный режим (NCP1400 включен) 51мА, режим сна (NCP1400 выключен) 6мкА
    • Входное напряжение 1.7В — активный режим (NCP1400 включен) 63мА, режим сна (NCP1400 выключен) 5.6мкА
    • Входное напряжение 1.0В — NCP1400 включен постоянно — режим сна 197мкА
    • Входное напряжение 0.5В — NCP1400 включен постоянно — режим сна 397мкА

    Потребление от батареи в активном режиме растет при снижении питания. Напряжение 1.7В подобрано опытным путем. Ниже этого значения микроконтроллер уже может стабильно не работать. При снижении напряжения батареи ниже этого порога стабилизатор NCP1400 уже не выключается и потребление в режиме сна довольно высокое. В этом режиме батареи уже долго не проживут, но времени будет вполне достаточно для их замены.


    Воплощение в железе


    Спроектировал универсальные платки питания для моих устройств умного дома




    И хотя готовые устройства получились не столь компактными как с литиевыми батарейками, результат меня вполне устроил. особенно учитывая стоимость щелочных батареек в магазинах Галомарт, Касторама, Леруаль и пр.



    В настоящее время я эксплуатирую у себя дома больше десятка разных устройств контроля температуры, влажности почвы и др. в системе MuSensors/MajorDoMo.


    Подробнее можно почитать в моем блоге

    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 42

      +3

      Сама идея сети датчиков и устройств на батарейном питании в данном контексте — провальная. Забот и так много, а теперь ещё и безумному бегать менять штаны.
      И это если десятки устройств, а если их 100+?
      А если это не ардуино коробки, а что то глубоко запрятанные?
      В итоге подобная система будет производить больше геморроя, чем забирать.

        0
        Ну опутывать квартиру проводами — еще хуже. А раз в пол года поменять пару батареек не сильно тяжело. Со встраиваемыми устройствами согласен — замена батареи то еще геммор. С другой стороны, стационарное питание сильно связывает по мобильности размещения
          0

          Все можно записывать от соседних розеток, размеры и стоимость ИИП на 0.2Вт вас приятно удивят.
          И это не так долго занимает, как может показаться.
          К тому же многие датчики можно аки калькулятор от маленьких солнечных панелей записывать.

            +1
            Ну не любитель я проводами опутывать квартиру.
            Да и не очень это безопасно — дешевые БП. Один мне чуть пожар ночью не сделал. Хотя практически не нагруженный был.
            Солнечные батареи в помещении — то еще извращение
            Но я никого не агитирую за батарейки. Просто делюсь опытом.
            0
            Ну опутывать квартиру проводами — еще хуже

            Строго наоборот. Если при очередном ремонте думаете, проложить ли в старом кабель-канале дополнительную пару или сразу витую — кладите две. Витых.
            0
            Мне кажется именно «в данном контексте» – оптимальный вариант.
            Ведь автор просто рассказывает про конкретный свой опыт под свои конкретные задачи со своим конкретным количеством (10+) устройств.
              0
              Только если срок смены батарейки равен сроку службы устройства это имеет смысл. Т.е. примерно 7+ лет.
              0
              стоимость щелочных батареек в магазинах Галомарт, Касторама, Леруаль
              Лайфхак — если брать батарейки не по 20 рублей за пачку из 10 штук — то проработают они «до десяти раз дольше»(с)
                +4
                Ты, мягко говоря, не прав:
                habr.com/ru/company/lamptest/blog/458856
                Заключительная фраза того текста по ссылке:
                «Главный вывод из моего теста: не стоит покупать дорогие батарейки, они ничем не лучше дешёвых».
                  +1
                  Уверены? Тестировали?
                  habr.com/ru/company/lamptest/blog/458856
                  Полностью согласен с автором, когда дюраселы и энержайзеры живут ничуть не дольше чем те что 20 рублей за пачку
                    0
                    А вот такой литий не рассматривали? Как раз для датчиков/сенсоров/счётчиков и прочего с низким потреблением используется обычно, очень низкий саморазряд, широченный рабочий температурный диапазон, куча типоразмеров, с выводами/коннекторами/без оных. Ёмкость от 1600 до 19000mAh. Единственное — ценник местами негуманный, но заметно дешевеют в последнее время.
                      0
                      Довольно редкие батареи
                      Очень сложный режим использования, тренировки постоянные и прочее.
                        0
                        Какие-такие тренировки, какой-такой сложный режим использования?
                        Поставил и забыл, пока не пришло время менять на новую, так же как и с обычными щелочными пальцемизинцами.
                        Хотя проект ваш и вам виднее.
                          0
                          У этих элементов есть т.н. «пассивация» электродов. Выражается в сильном росте внутреннего сопротивления элемента. Так, при необходимости выдать заметный ток после длительного ожидания в «спячке», можно получить критический провал напряжения.
                            0
                            В статье речь про пиковый ток аж 20 мА, сомнительно что внутреннее сопротивление вырастет настолько сильно.
                              0
                              Паутина в помощь. Например:
                              duckduckgo.com/?q=LiSOCl2+thionylchloride+passivation&t=h_&ia=web
                                0
                                Из вашего комментария видно только степень вашей паранойи.
                                Словами напишите что сказать хотели.

                                А вобще им достаточно тока 1.25% от ёмкости раз в сутки чтобы батарейка не «засыпала».
                                Поэтому батарейка типа ER14250 будет работать в штатном режиме при эпизодическом потреблении 20 мА.
                                Как сказано выше «поставил и забыл».
                                  0
                                  Из вашего комментария видно только степень вашей паранойи.

                                  Спасибо за диагноз, док!
                                  Словами напишите что сказать хотели.

                                  Предупреждён, значит — вооружён.
                                    0

                                    Поддерживаю, 1425 я использую и там все норм у спящих девайсов. Единственный минус высота, для миниатюрных устройств великоваты.

                    +3
                    долго пользуюсь микроконтроллерами PSOC (например CY8C27243), кроме soic8 у всех есть встроенный DC step-up. Т.е. любая батарейка работает нормально даже если разрядилась до 0.6в а устройство «тянет» HD44780 LCD
                      0
                      Интересная штука, написали бы обзорную статейку, прочитал бы с удовольствием.
                        0
                        Интересный чип, хотя для самоделок на коленке выглядит слишком слабым и слишком экзотическим. 256 байт ОЗУ не жмут?
                          0
                          Не вижу никакой проблемы, тем более там модельный ряд целый.
                            0
                            256 байт ОЗУ не жмут, делал автопилот для самолета, RF анализатор спектра с тракинг генератором и т.д и т.п,
                            www.youtube.com/watch?v=yBCh2dzXF7c

                            по делу: ТP4056+солн. панель — неверный ход, нужен импульсный MPPT, эффект будет не в процентах а в разы
                              0
                              по делу: ТP4056+солн. панель — неверный ход, нужен импульсный MPPT, эффект будет не в процентах а в разы

                              А есть MPPT микросхемы на малый ток и панель мощностью 1-2Вт?
                                0
                                сам почти остановился на SPV1040 но луче всего получилось на самом контроллере который надо питать, так работает даже с токами в несколько mA и PWM частота низкая (контроллер в режиме сна выключает все клоки кроме 32kHz), step-up/down или вместе, синхронный режим с FET вместо Шоттки повышает КПД.
                        0
                        Когда мне захотелось реализовать уличный беспроводной датчик температуры и влажности, тоже столкнулся с проблемой питания. К тому времени был опыт эксплуатации китайской метеостанции с внешним датчиком на батарейках и по этому опыту для себя лично какое-либо обслуживание уличного датчика в виде замены батарей даже раз в год я посчитал неприемлемым. В итоге остановился на маленькой солнечной панельке с буферным литиевым аккумулятором. С 2015 года у меня беспрерывно работают два таких датчика и ни разу не потребовали от меня каких-либо действий по обслуживанию, что я и ставил главной целью. За время эксплуатации были периоды, когда температура в течении недели и более не поднималась выше -20 и самые дешевые китайские 18650 это прекрасно пережили, просто даже в светлое время не работал процесс подзарядки, но при запасе емкости на несколько месяцев это не критично.
                          0
                          Тоже сейчас тестирую систему на солнечной батареи для уличного датчика
                          Правда не с аккумулятором, а ионистором.
                          Думаю, он более живучий по температуре и по всему прочкму
                            0
                            Безусловно, ионистор в данной роли выглядит предпочтительней. Весь вопрос в том, сколько времени автономной работы он сможет обеспечить. Например, у нас в Питере в середине каждой зимы бывают совсем темные периоды по нескольку дней подряд, когда солнечная батарея за день так и не может довести аккумулятор до полной зарядки. Правда, и датчик я старался расположить в достаточно затененном месте и солнечная батарея работает не от прямого солнечного света, а от общей окружающей освещенности.

                            Вы, насколько я понял, в Перми, т.е. на 2 градуса южнее меня, может для Вас это и менее актуально.
                              0
                              Ионистор 4Ф/5.5В обеспечивает 2.5 суток работы разряжаясь с 5В до 3В
                              При нормальном освещении заряжается за 1 час от солнечной батареи 1.5Вт мощности
                              В дождливую погоду хорошо если не разряжается, но сильно зависит от места установки. На южной стороне все равно идет зарядка, на северной за несколько дней дождливой погоды контроллер уходит в даун.
                              Это дето у нас как раз показательное — просто залило дождями в августе
                                0
                                Поделитесь пож-та что вы используете в качестве контроллера заряда батареи.
                                У меня датчик почвы на 18650 и есп8266. Вначале я решил использовать солнечную батарею для периодической подзарядки 18650, но потом отказался по причине того, что при нашей питерской погоде, даже летом, солнечная едва-ли компенсирует то, что съедает контроллер заряда. Я использовал ТС4056, он совсем плох, затем переключился на DD06CVSA, он получше, но все равно ест примерно столько же, сколько выдает профита батарея.
                                  0
                                  У меня в качестве контроллера заряда как раз и стоит ТС4056, точнее — китайская платка на ее основе (та, которая без дополнительных защит). С платы выброшены светодиоды и номинал резистора, определяющего ток заряда, заменен на 10 кОм (максимальное значение из таблицы в даташите).

                                  Я тоже в Питере, солнечная панель находится не под прямым солнцем (максимальный отдаваемый ток — несколько мА). Но у меня, конечно, потребление электроники существенно меньше, чем ест есп8266.
                                    0
                                    в режиме глубокого сна есп не есть много — 100мка и 80 ма в режиме передачи. Устройство передает инфу раз в 20 мин на 15сек и большую часть времени спит.
                                    Подавляющий ток потребляет периферия и справиться с этим мне так и не удалось. А какой резистор отвечает за ток заряда? Плата синенькая такая?
                                    Еще вопрос — какой размер батареи? У меня 80х80 дает от 5 до 50ма тока заряда.
                                      0
                                      А какой резистор отвечает за ток заряда?
                                      Тот, который подключен ко 2 ноге TP4056 и в даташите обозначен Rprog.
                                      Плата синенькая такая?
                                      Да они вроде все синенькие ). Та, на которой TP4056 — единственная микросхема и нет дополнительной защиты на DW01A и FS8205A.
                                      Еще вопрос — какой размер батареи? У меня 80х80 дает от 5 до 50ма тока заряда.
                                      Примерно такой же или чуть меньшей площади, только прямоугольная. Ток летом в тени чуть больше 5 мА (под прямым солнцем даже не мерил, т.к. изначально рассчитывал ставить в тень).
                                    0
                                    Для ионистора контроллер заряда не особо нужен.
                                    Батарея у меня 12В.
                                    Поэтому обычную понижайку с низким током холостого хода
                                    В первой версии — такую ru.aliexpress.com/item/33015256539.html
                                    Только «mini360» не нужно — у них сумасшедший ток холостого хода более 30мА
                                    В финальной версии сам собрал понижайку на MC34063
                            0
                            Дело в то. что постоянный ток такой батарейки всего 0.4А.

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

                            Параллельно элементу — конденсатор «потолще», который примет пик потребления на свое существенно меньшее внутренне сопротивление. См. например «Coin cells and peak current draw.» от TI (документ № SWRA349). Правда — есть риск получить некоторый дополнительный ток утечки, но это уже надо соотносить в цифрах с утечками остальной системы и саморазрядом элемента.
                            Нелишней в оценке бюджета ёмкости будет и информация от самого Nordic'а — «High pulse drain impact on CR2032 coin cell battery capacity».

                            Спроектировал универсальные платки питания для моих устройств умного дома.

                            На фото готового образца — разводку не видно. Но, по виду рендера, — она может быть недостаточно верной.
                              0
                              На фото готового образца — разводку не видно. Но, по виду рендера, — она может быть недостаточно верной.


                              В смысле неверной? Схема нормальная? Разводка трассировку прошла по данной схеме. В десятке устройств работает. Что не так?
                                +1
                                Что не так?

                                А как же рекомендации что длина соединения контроллера, индуктивности и диода должно быть минимально возможным?
                                Оно, конечно, работает, но не просто не феншуйно, а просто кровавые слёзы.
                                  0
                                  Угу, на ЖК мониторе — проступили дорожки на «финальной» плате. Именно — «кровавые слёзы».
                                  sav13 — посмотри, как «широко» и «плотно» сделана плата в документации на NCP1400 (https://www.onsemi.com/pub/Collateral/NCP1400A-D.PDF). Говоря кратко — все цепи, соединённые с выводами 5 (LX), 4 (GND) и цепи возвратных токов (через C1 и C2) должны:
                                  • быть предельно коротки (только что-бы паять удобно было) — что-бы не излучать помехи от протекания импульсных токов и уменьшить паразитные сопротивления и индуктивности;
                                  • быть расширены вдвое-втрое, как минимум, — что-бы уменьшить паразитные сопротивления и индуктивности.

                                  P.S. Диод D1 — великоват для такого мизерного тока.
                                    0
                                    Что дадут данные рекомендации?
                                    КПД увеличится? Или помех меньше станет?
                                    Диод да, великоват. Воткнул тот что был по рукой. С другой стороны много не мало — главное, чтобы падение на нем было минимальной, как и на катушке
                                      0
                                      КПД увеличится?

                                      Вероятно.
                                      Или помех меньше станет?

                                      Несомненно.
                              0
                              sav13 попробуйте литиевые батарейки CR123A
                              например


                              Используются для резервных фонариков, так как хранятся годами, работают и в жару и на морозе, имеют 3В и ~1500mAh, отдают большие токи. Их можно купить даже в небольшом городе по 200-300₽, а у китайцев PKCELL вообще по 100₽.

                              Only users with full accounts can post comments. Log in, please.