Нужна помощь по доп.питанию Arduino

Room13
Offline
Зарегистрирован: 02.03.2022

Здравствуйте!

Есть ардуинка, на которой висит: лазер, датчик лазера, MHT22 (или BME280), дисплей, RTC + SD + Ethernet.

Все это дело считает, условно - количество страниц с принтера (лазер+датчик). Параллельно собираются данные температуры/влажности в комнате, и все это отдается на сервер. Если сервер не доступен, данные пишутся на SD-карту (кодовая база своя). 

Так вот, понадобилось, чтобы при отключении электроэнергии, счетчик не сбрасывался, а данные не потерялись в момент записи на карту. Соответственно решил сделать резервное питание. 

Не совсем пойму, как реализовать следующую задумку:

Основное питание: БП 12 вольт, идет через преобразователь LM2576 и понижается до нужного значения (может можно по-другому? не принципиально).

Если питания нет - идет автоматом с аккума Li-ion (БЕЗ перезагрузки МК естественно). (Как?)

При этом, дабы не насиловать аккум, постоянная зарядка ему не нужна, ибо это резерв, а значит подключаем INA226, которая будет следить за аккумом. Если его заряд упал до 20-30% - включаем подзарядку (+ индикация светодиодом RGB - если аккум то красный, если сеть - зеленый), если заряд >30% - просто игнорим, не заряжаем и питаем от сети (процентовка заряда отображается на дисплее), если >95% - выключаем зарядку, и просто мониторим заряд через INA.

Также есть доп.выход на USB-TTL, но там перемычка - если шьем по USB - значит отключаем любое питание, и питаемся от USB - тут проблем нет.

Так вот не могу понять как правильней сделать схему и выбрать напряжения. Ардуино, а точнее ESP32 питается 3.3 V, в тот момент когда для зарядки аккума необходимо (не уверен) около 4.7 V. при этом отдает оно 3.7 которое нужно понизить до 3.3. Также в цепи питания идет периодический замер остаточного заряда, вдруг пора подзарядиться.

INA226/LM2576 можно использовать шилдами, но желательно все-таки всю цепь распаять на плате вручную.

По итогу: два источника питания но один выход 3.3 V.

Примерно так выглядит задумка:

Выслушаю предложения/цены/решения. Заранее благодарю.

b707
Offline
Зарегистрирован: 26.05.2017

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

Morroc
Offline
Зарегистрирован: 24.10.2016

Room13 пишет:

Так вот, понадобилось, чтобы при отключении электроэнергии, счетчик не сбрасывался, а данные не потерялись в момент записи на карту. Соответственно решил сделать резервное питание. 

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

По вашему варинту поищите такой модуль https://mcustore.ru/store/moduli-pitaniya/modul-pitaniya-ot-lipo-akkumulyatora-s-podderzhkoj-zaryada/ они же есть такие готовые.

Room13
Offline
Зарегистрирован: 02.03.2022

b707 пишет:
Вы эту ерунду через инет решили заказать? Тут, простите, вам пионер из соседнего радиокружка нужен, а не удаленный разработчик.

А в чем собственно проблема? Разве раздел "Ищу исполнителя" подразумевает только разработчиков скетчей? Возможно, конечно неправильно обозначил суть задачи, писал уже в полудреме. Код - напишу сам. Распаяю сам, плату сделаю сам. Нужна только принципиальная схема: Два входа: сеть и аккум и выход на 3.3 вольт. Всё. Большую проблему у меня создает INA226 посреди цепи питания, ее не пойму как сделать. Поэтому готов заплатить за разработку схемы.

Morroc пишет:

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

По вашему варинту поищите такой модуль https://mcustore.ru/store/moduli-pitaniya/modul-pitaniya-ot-lipo-akkumulyatora-s-podderzhkoj-zaryada/ они же есть такие готовые.

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

Radius
Offline
Зарегистрирован: 03.03.2017

Для того чтобы Li-ion аккумулятор быстро не умер, то заряжать его желательно через специальный контроллер, например BQ21040. Процент заряда аккумулятора просто определяется по напряжению. Подключать питание от аккумулятора можно просто через диод, но на нем упадет минимум 0,5 В. Можно через транзисторный ключ (идеальный диод) там падение будет существенно меньше. Могу нарисовать схему и плату за 5 т.руб.

 

andyparker
Offline
Зарегистрирован: 20.12.2020

Нельзя просто параллельно подсоединить Li-ion аккумулятор через TP4056? Вроде как проще не придумаешь.

Green
Offline
Зарегистрирован: 01.10.2015

+1. Только контроль разряда лучше с помощью МК, а не средствами TP4056.

Room13
Offline
Зарегистрирован: 02.03.2022

Green пишет:

+1. Только контроль разряда лучше с помощью МК, а не средствами TP4056.

Для этого и хочу использовать INA226, дабы дополнительно выводить заряд на дисплей.

Radius пишет:

Для того чтобы Li-ion аккумулятор быстро не умер, то заряжать его желательно через специальный контроллер, например BQ21040. Процент заряда аккумулятора просто определяется по напряжению. Подключать питание от аккумулятора можно просто через диод, но на нем упадет минимум 0,5 В. Можно через транзисторный ключ (идеальный диод) там падение будет существенно меньше. Могу нарисовать схему и плату за 5 т.руб.

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

Сразу смутила фраза: "чтобы Li-ion аккумулятор быстро не умер"... Возможно, вы предполагаете работу от аккумулятора постоянную, с подзарядкой при падении от нужного номинала (как мы заряжаем мобильники: сел аккум до 30% - подзарядили, и устройство по факту всегда работает). Но этого быть не должно. Все прямо наоборот.

Он не должен быстро умереть в принципе, поскольку использоваться аккумулятор практически не будет. Основное питание - розетка (БП 12V). Питание аккумулятора не задействуется при этом совершенно никак (как будто аккум просто лежит на столе и ни к чему не подключен). Через INA226 (или другой чип) средствами МК(!) я проверяю остаточное напряжение/емкость (т.к. логично может быть саморазряд, либо затраты энергии при опросе через INA). Пока заряд >30% - подзарядка исключена. Постоянной подзарядки (как в мобильном) до 100% быть не должно, поскольку устройство 24/7 работает от сети. Если аккум разрядился <30% - только тогда включается его подзарядка (видимо в схему добавляется реле? Иначе как средствами МК мне разрешить подзарядку? Пока других идей нет). При этом, если вдруг я отключаю розетку - то питание не должно пропасть, а будет браться уже от аккума (бесшовная подача энергии: диоды/реле/транзисторы - не важно), и МК естественно не должен при этом выключиться/перезагрузиться.

Итого на плате 2 входа, 1 выход: 

Вход: +/- 12V от БП, +/- 3.7V аккум (подключен к общей цепи и к INA для мониторинга)

Выход: +/- 3.3V для Ардуины.

andyparker
Offline
Зарегистрирован: 20.12.2020

Мне кажется, если подключить параллельно безо всяких полупроводников, то МК будет питаться от источника питания с более высоким напряжением. Например, 4,7В БП и 4,2В аккум - у БП напряжение больше, в аккум идет встречный ток из-за разности напряжений (4,7 - 4,2 = 0,5В), но если питать через TP4056 с защитой, то я думаю, что там как минимум стоит диод, который такое не позволит провернуть, т.е. получается, что дополнительно организовывать ничего не нужно. Если я не прав, поправьте, самому интересно :)

rst
Offline
Зарегистрирован: 25.06.2018

Room13 пишет:
Так вот, понадобилось, чтобы при отключении электроэнергии, счетчик не сбрасывался, а данные не потерялись в момент записи на карту. Соответственно решил сделать резервное питание.
Если цель только в этом, то всё решается намного проще: добавьте чип FRAM и храните данные там, а не в ОЗУ.

И SD-карта (с файловой системой) - здесь самое худшее, что можно придумать. Так как ФС - слишком нежна для внезапных сбоев питания. Если даже нужно хранить большой объём и FRAM большого объёма для вас слишком дорога, то можно использовать большую SPI-FLASH + маленькую FRAM.

 

А весь этот комбайн с аккумуляторами и квадратными колёсами - выкинуть.

rst
Offline
Зарегистрирован: 25.06.2018

andyparker пишет:
Мне кажется, если подключить параллельно безо всяких полупроводников, то МК будет питаться от источника питания с более высоким напряжением. Например, 4,7В БП и 4,2В аккум - у БП напряжение больше, в аккум идет встречный ток из-за разности напряжений (4,7 - 4,2 = 0,5В)
...и через очень короткое время аккум приказывает долго жить. И хорошо ещё если без пожара.

Так как 4.7V для LiON - это слишком. К тому же без ограничения тока заряда.

А когда БП вдруг отключится (из-за отсутствия вольтов в розетке), то ток видимо пойдёт обратно из аккума в БП. И будет идти до тех пор, пока аккум не сдохнет. Может и не будет идти, но откуда вы знаете как устроен выходной контур этого БП?

 

PS: Прежде чем что-то советовать, хотя бы изучите основы электротехники. И почитайте как работают те компоненты, о которых советуете.

andyparker
Offline
Зарегистрирован: 20.12.2020

Так я же написал, что аккум подключен через TP4056 + защита (стандартная плата на Али), вы вообще читали это? Я даже завтра ради интереса это сделаю и посмотрю, будет ли аккум заряжаться, я уверен, что не будет. 

rst
Offline
Зарегистрирован: 25.06.2018

andyparker пишет:
Так я же написал, что аккум подключен через TP4056 + защита
Ну да, а это:
andyparker пишет:
подключить параллельно безо всяких полупроводников
видимо почтальон печкин напейсал.

andyparker
Offline
Зарегистрирован: 20.12.2020

Классно из контекста выдернули, мне понравилось. Ничего, что полное предложение "Мне кажется, если подключить параллельно безо всяких полупроводников, то МК будет питаться от источника питания с более высоким напряжением" такое?
PS: Прежде чем что-то советовать, хотя бы изучите основы логики. И почитайте как работают логические связи в тексте, о которых советуете.
 

Room13
Offline
Зарегистрирован: 02.03.2022

В общем, примерно накидал "схему", что получилось. Можно кинуть камнем, если где-то не прав/не правильно.

В Ардуино реализован автоматический выбор источника питания: при подключении внешнего питания на пин Vin линия питания USB блокируется. Поскольку я использую только модуль ESP32-WROVER-IB - у него нет данной функции. Раз уж от отдельных модулей, полностью избавиться не получится, поэтому взял из Ардуино-схемы основной блок, отвечающий за питание.

VIN: Питание +12V от БП которое идет в реле (для зарядки аккумулятора), а также преобразуется через LP2985 в 3.3V рабочего напряжения платы ESP32

Battery VCC - благодаря полевому транзистору FDN304P, из батареи подается напряжение только если нет питания по VIN.

C5: неполярный конденсатор (10uF 16V) - для сглаживания. Пока транзистор откроется, может быть перепад напряжения в цепи(?), хоть в 0,0001сек и дабы был какой-то остаточный заряд, используем неполярный конденсатор. Может быть стоит поставить другого номинала?

U3: стабилизатор напряжения с фиксированным выходом, но уже на 5V (поскольку на подаче сети у нас 3-12V)- для работы реле 

U4: стабилизатор напряжения L7805ABD2T-TR (или LM2940S-5.0/NOPB) (или NCP1117ST50T3G) (в схеме опечатка) с фиксированным выходом, также на 5V, но уже чтобы заряжать Li-Po аккумулятор.

Реле: поскольку постоянный заряд не нужен, посылаем заряд аккума только при <30% заряда, выключаем на 95%. (программно в скетче). Если при этом внешнего питания не будет, то ничего страшного и не произойдет, аккум сам себя заряжать не будет, реле отработает, просто не будет зарядки.

Могу чего-то не понимать, поэтому осталось пара вопросов: Нужно ли (и зачем?) использовать конденсаторы С3 и С4?

Не понял назначение U1B - в моем случае наверное не нужно (можно ноги не распаивать)?

U1A1 - на минусе по оригинальной схеме +3V3 - мне оттуда оно пригодится? или просто использовать ноги 3-1 и хватит?

С5 в разрыв цепи? Или все-таки притянуть на GND?

INA226 подключить напрямую к аккумулятору, как на схеме, или поставить на выход из модуля питания?

rst
Offline
Зарегистрирован: 25.06.2018

Room13 пишет:
Нужно ли (и зачем?) использовать конденсаторы С3 и С4?
Не нужно ничего из этого нагромождения. Нужна только одна микросхема FRAM/MRAM.

Room13
Offline
Зарегистрирован: 02.03.2022

rst пишет:

Нужна только одна микросхема FRAM/MRAM.

Для сохранения конфига это было бы идеальное решение. Но все было бы так просто, я её бы и использовал, но ранее уже писал: Параллельно собираются данные температуры/влажности в комнате, и все это отдается на сервер. Если сервер не доступен, данные пишутся на SD-карту (кодовая база своя). 

Соответственно это не хранение одного числа, а "лог". Данные записываюnся в txt/csv(каждый час - новый файл) в определенном формате, примерно следующего вида:

07.03.2022 12:44:00;+15;74грд //температура/влажность

07.03.2022 12:44:30;255142 //страницы

07.03.2022 12:45:00;+17;70грд

07.03.2022 12:44:30;255142 //страницы

07.03.2022 12:46:00;+16.2;73грд

07.03.2022 12:47:00;+15.7;74грд

Эти данные забирает сервер, после чего удаляет эти данные (пока сервер доступен, данные на карту не пишутся) При этом, шедулер сервера ходит на МК и смотрит наличие txt/csv, забирает его, и если файл обработан - удаляет с SD.

Насколько долго мне хватит 256 Кб памяти, если опрос будет каждые 15/30 сек? Как разделять строки? Как отдавать их в читаемом формате для сервера, не нагружая МК (ведь проще выдать файл, чем его обработать и "выклюнуть" наружу)?

В общем, от суди дела отошли... вернемся к ТС: доп питание такого формата имеет право на жизнь, или обвешаться резисторами/конденсаторами/и т.д. (если да, то где)?

rst
Offline
Зарегистрирован: 25.06.2018

Room13 пишет:
Насколько долго мне хватит 256 Кб памяти, если опрос будет каждые 15/30 сек? Как разделять строки? Как отдавать их в читаемом формате для сервера, не нагружая МК (ведь проще выдать файл, чем его обработать и "выклюнуть" наружу)?
Никак не разделять. Потому как во флешь не нужно писать csv/txt. Нужно писать бинарные данные. А переводить их в текст в момент запроса от сервера.

Тогда и реализация будет проще: простой кольцевой буфер из элементов фиксированного размера - отдельных записей/структур. И гигабайты с файловыми системами не потребуются. И флешки (SPI-флешь) давно уже есть на МБ и дешёвые: взять на несколько МБ и хватит на очень долгое время. А стоит - копейки.

 

PS: А вообще у меня когда-то работала подобная погодная станция. На MSP430FR5739. Вообще без SD-карт, файловых систем и прочей лабуды. Работала от одной батарейки. Писала во внутреннюю память МК (FRAM) температуру, давление, влажность, напряжение батареи. В сумме одна запись = ~10 байт. Писала каждые 5 минут. И тоже - периодически передавала накопленные данные на сервер (по запросу сервера). А памяти в том МК всего то = ~16КБ. И ничего - памяти хватало на несколько суток непрерывной записи. Зачем нужно больше - ума не приложу. У вас что - питание 220V на несколько столетий отключают, что целая SD-карта потребна??? Или вы к ядерной зиме готовитесь?

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

Итого: MSP430FR5739 + DHT22 + BMP180 + nRF24L01+ + 1-а_батарейка. И никаких больше микросхем, SD-карт и пр.