В последнее время из-за частых отключений света купленная около года назад пара AGM-батарей 12V 55 Ah начала умирать практически на глазах – сначала высокоприоритетное железо работало около 6 часов (что крайне мало – изначально было почти около суток), буквально через пару недель время работы снизилось уже до 4 часов, а потом – и того меньше. По ходу дела поделал оптимизации – например, заменил Tp-link TL-SG1016PE на TP-SG2008, что освободило около 7 Вт – но это уже не помогало. Более глобальной оптимизацией было избавление от Mustek 1000 совсем и переход на схему с двойным преобразованием, в которой нагрузка питалась бы напрямую от батарей через DC-DC-преобразователи.
Соответственно, требовалось:
- Достаточно мощный БП, способный вытянуть подключенное железо и при этом заряжать аккумуляторы. Использовал блок, описанный в “Недорогой БП с ARDUINO.UA”
- При этом иметь возможность лимитировать ток заряда – хотя бы чтоб не спалить блок.
- Получать на выходе 12 В для питания местного железа и 48 В – для удаленного.
- Схема отключения батареи при достижении критического разряда.
- Контроль напряжения со стороны сервера для корректного завершения работы.
По второму пункту – в идеале сделать это частью самого БП, но времени сейчас переделывать схему, чтобы добавить стабилизатор тока, особо не было, поэтому просто поставил step up dc-dc – такой же, как стоит для получения 48 V.
Для контроля со стороны сервера и NUT весьма вовремя попался на глаза проект с форума arduino.ua – правда, проприетарщина и пришлось делать костыли вокруг того, что там есть, но на сейчас это был самый быстрый вариант запустить все в работу. PZEM и высоковольтная часть не используются – фактически, это просто АЦП, с которым умеет работать NUT.
Схему отключения при разряде батареи сделал на базе TL431 – оказался весьма удобной штукой. TL431 меряет напряжение на батарее через делитель и управляет модулем реле. Подходящего варианта сделать экономное питание модуля не нашлось – мелкие dc-dc, имеющиеся в наличии, не были рассчитаны на напряжение до 30В – в итоге ограничился стабилитроном. При высоком напряжении реле включено и стабилитрон никак не участвует в работе, а напряжение на модуле просажено примерно до 10В, чего вполне достаточно для удержания сработавшего реле. При разряде батареи реле выключается, а стабилитрон начинает ограничивать напряжение на модуле, но ток при этом через него уже достаточно небольшой. Когда делал возможность питания модуля от напряжения батареи – сменил реле с 5В на 12В для уменьшения тока, а дополнительно – убрал светодиоды индикации, что позволило сэкономить еще несколько мА.
Для запуска UPS при подаче сетевого питания выход БП через диоды соединен напрямую с выходными DC-DC и одновременно с точкой питания реле напряжения. В итоге при подаче сети в эту точку приходит 24В с блока, реле срабатывает и подает питание уже с DC-DC.
Для того, чтобы весь UPS выключался при отключении сервера, а не ожидал полного разряда батареи, пошел на такой финт: измерительный контакт у TL431 через цепочку диодов висит на +5В USBasp. Если со стороны сервера присутствует питание – то цепочка не оказывает никакого влияния. Если питание на шине +5В пропало – вход стабилитрона через диоды притягивается к нулю и схема считает, что батарея разряжена, отключая при этом реле. Количество диодов подобрано при этом таким образом, чтобы при отсутствии подключения к компьютеру модуль USBasp не притягивал вход TL431 к земле. На деле, возможно, стоило или попробовать поставить 5 диодов, или использовать подобранный стабилитрон + диод, так как порог отключения при отключенном и подключенном компьютере немного отличаются – но не критично, поэтому я с этим ничего не делал.
Ну и напоследок добавил кнопку для “холодного” запуска – подающую питание на реле напряжения в обход контактов реле. Все хорошо, но уже при испытаниях вылез неучтенный момент – при подключенном компьютере получается логическая петля: нет разрешения работы, потому что выключен комп, а комп не включится, пока не подастся питание, которого нет из-за отсутствия разрешения работы. Поэтому на сейчас самым простым вариантом при необходимости холодного запуска видится отключение USB-шнурка.
В итоге получился вот такой блок. Сверху ставится 120 мм вентилятор, который запитал от отдельного мелкого БП на 5В.
И напоследок вылезла еще одна проблема: даже при отсутствии нагрузки при включении за счет броска тока при заряде емкостей в DC-DC слипались контакты реле. Т.е., оно включалось, а отключиться при разряде батареи уже не могло. Пришлось спешно искать пути решения – в итоге последовательно с контактами добавил дроссель, взятый с какой-то дохлой платы и намотал туда до заполнения объема эмалированный провод 1 мм. Дополнительно параллельно контактам реле добавил RC-цепь.
Update: точки подключения АЦП к USBasp, кажется, перепутаны местами на схеме. Иначе говоря, ноль должен быть связан с нулем.
На сейчас все успешно запущено в работу. На некоторое время это продлило жизнь свинцовым батареям, но ненадолго – пришлось задуматься о покупке замены. И чем удобна эта схема – можно без проблем перейти на другой тип батарей, всего лишь подстроив пороги заряда и разряда.
В итоге недавно был куплен комплект из 8 LiFePo4 на 50 А*ч и уже запущен в работу.
Да, из-за закрытости прошивки USBasp приходится в настройках NUT ориентироваться на “половинное” напряжение. Т.е., при реальных 29В там показывается 14,5.
На полностью заряженной батарее потребление от сети сейчас 51 Вт, сюда входят: сервер + tp link tl-sg2008 + 2 x tp link 6400 + 2 x tp link 108e + xiaomi wifi 3g + tp link 741.
Update: для батареи заказал балансир с этого лота на Али – в версии smart active bt на 8S.
Ссылки по теме USB HID NUT:
https://github.com/abratchik/HIDPowerDevice
https://projecthub.arduino.cc/abratchik/3e597a31-9844-4981-bede-fdac7944ad71
https://github.com/abratchik/HIDPowerDevice/issues/1
https://octopuslabs.io/blog/how-to-update-usbasp-firmware-using-another-usbasp/ – заливка прошивки в USBasp