Arduino PWM контроллер солнечной зарядки
Как сделать очень маленький, простой и дешевый ШИМ — контроллер солнечной зарядки с Arduino Pro Mini для 12V вне сетки установок. Размер печатной платы совпадает с размером Pro миниплаты, так что они могут быть зажаты вместе. PCB планы для универсального прототипа борту.
Подключение и использование этого Arduino контроллера солнечного заряда очень просто — есть 2 входных провода от панели солнечных батарей (+ и -) и 2 выхода приводит идти к свинцово-кислотной батарее. Основание панели солнечных батарей и батареи соединены вместе. Любой груз должен быть подключен непосредственно на клеммах аккумулятора и контроллера заряда будет автоматически обрабатывать остальное.
Arduino регулярно измеряет напряжение батареи свинца и кислоты в соответствии с определенным значением, переключает на МОП-транзистор для зарядки аккумулятора от солнечной панели и переключатели МОП-транзистор выключается, когда батарея полностью заряжена. Когда нагрузка тянет энергию от батареи, контроллер обнаруживает падение напряжения и сразу же начинает снова зарядить аккумулятор. В течение ночи, когда солнечная панель перестанет производить, контроллер ждет, пока панель снова не начнет выводить.
Положительный провод к панели солнечных батарей необходим защитный диод Шоттки, устанавливаемую непосредственно на кабеле (завернутое в термоусадочной трубки). Это не входит в основную печатную плату, как это делает его легче заменить его и остыть в то же время. Вы можете легко сделать борту немного дольше, чтобы поместиться в другой тип диода.
Схема и функции Описание:
Функция основана на N-канальный МОП — транзистор IRF3205 в высокой стороне цепи. Это требует напряжения затвора выше, чем 12 В, чтобы открыть МОП — транзистор правильно. Для того, чтобы исключить необходимость внешнего драйвера MOSFET, он приводится в движение заряда насоса, созданного с диодами, 2 конденсаторов и двух выходных выводов Arduino ШИМ (3 и 11). Pin A1 измеряет напряжение аккумуляторной батареи и пин — код 9 управляет MOSFET ON / OFF цикла. Arduino Pro Mini интегрированные светодиодные подключен к контакту 13 используется, чтобы показать текущий цикл ШИМ — сигнала.
Регулятор напряжения и все конденсаторы вокруг (C6, C5 и C4) могли бы быть исключены, поскольку есть регулятор включен в Arduino Pro Mini. Тем не менее, потому что я использовал дешевый клон доска, я не хочу, чтобы рассчитывать на его способности поддерживать более высокие напряжения, чем 12В в течение более длительных периодов времени. LP2950 очень дешево и эффективно до 30 вольт, так что стоит иметь его на борту в любом случае.
PCB — сверху и вид снизу:
Список деталей: Регулятор напряжения с низким энергопотреблением LP2950ACZ-5.0 Транзисторы 2N3904 2N3906 х 2 N-канальный МОП-транзистор IRF3205 Резисторы 82K (1%) 20K (1%) 220K x3 (0,4W достаточно) 4K7 (0,4W достаточно) Диоды 1N4148 х 5 P6KE33CA 90SQ035 (или любой подобный диод Шоттки 35V минимальной 9А) Конденсаторы 47N / 50V x2 керамические 220P / 100V керамические 1M / 50V (1000nF) керамические 4M7 / 10V тантал 1M / 35V тантал х 2
Схема и код этого контроллера заряда является Джулиан Илетт, он является вдохновителем этой умной вещью. Все это лишь утонченный документация и подходящая дизайн печатной платы, чтобы идеально соответствовать Arduino Pro Mini доска. Он разделяет видео более эффективного регулятора заряда Arduino MPPT, но его строительство гораздо сложнее, и проект еще не завершен. Если вы можете, улучшить код или конструкцию в любом случае, пожалуйста, поделитесь своими улучшениями в комментариях.
Доброго времени суток, коллеги! |
Целью создания данного проекта является примером того, что программой многоуважаемого Сергея Глушенко активно пользуются и на ней можно собирать довольно серьезные проекты. Практически в самом начале я написал простенький таймер на FLProg и опубликовал сюда, когда еще в программе не было и половины того, что мы имеем сейчас. Далее мне захотелось создать нечто большее и соответственно полезное и применимое)). Но довольно долгое время у меня не хватало фантазии на что-нибудь интересное.
Но вот настал тот день когда на меня нахлынуло вдохновение! Виновником оказался мой коллега по работе и близкий друг. Он приобрел солнечную батарею и пару аккумуляторов, а вот от заводского контроллера заряда он отказался, так как посчитал что можно это и самим сделать. Вот и решили совместными силами собрать собственный контроллер.
Прочитав множество статей в просторах интернета о принципе смарт зарядки аккумуляторов, мы уже примерно представляли алгоритм программы. Осталось лишь применить это в железе.
Я занялся программированием, а друг взял на себя скрутить и спаять все это. Программа была написана примерно за день, но после многочисленных тестов добавлялись новые плюшки, корректировались ошибки. В данный момент все прекрасно заряжается и отрабатывают все защиты.
Что могу сказать об алгоритме программы? Зарядка идет «плавная», то есть ШИМ. Так же есть режим boost (интенсивная зарядка). Защиты по температуре, от разрядки и перезарядки батареи. Вывод показаний на дисплей и конечно же в COM-порт. Включение дисплея и включение/отлючение выхода нагрузки в ручном и автоматическом режиме.
Как все наверно догадываются, что у всех разный стиль написания программы и поэтому сильно не пинайте)) Если будут какие-либо замечания или добрые советы, то я с удовольствие выслушаю и приму к сведению в дальнейшем.
Спасибо за внимание.
Собственно программа
https://yadi.sk/d/oPgcPit8eSHyX
Извиняюсь за скучный ролик)) Он без слов и без музыки
Небольшое вступление.
1- Заранее предчувствуя высказывания и «советы» типа, “а на кой это нужно”, «Проще кабель проложить”, “купи готовое и не парься”, скажу сразу, весь этот проект носит скорее академический интерес, а не экономический.
2 — Читать данный „опус“ можно „по диагонали“, т.е., перейти непосредственно к практическим частям. А именно „Переделка UPS в инвертор 220 Вольт“ и „Самостоятельное изготовление PWM контроллера заряда аккумулятора“. Дело в том, что я не хотел разрушать целостность повествования, и мне было интересно!
Лето. Период дачного сезона в полном разгаре. Всякие посадки и крупные работы сделаны, теперь тупо шашлыки, отдых и ожидание сбора урожая :). И моя очередная попытка совместить полезное с приятным. А именно, захотелось мне попробовать свои силы в организации энергоснабжения второго этажа дачи (пока его там нету в принципе, только с помощью удлинителя).
Немного погуглив, и почитав соответствующие ресурсы я обозначил “кубики” будущего проекта. Типовая блок-схема организации “солнечного электроснабжения”.
»В крупную клетку" — все просто! Очень удобно, что любой такой кубик можно заменить/проапгрейдить в дальнейшем. Например, можно будет добавить в параллель еще один аккумулятор. Или доустановить солнечную панель, если мощности этой недостаточно ну и так далее. Короче, решил попробовать.
Как говорят, “Большому кораблю — большое плавание”, так и “К серьезному проекту — научный и тщательный расчет!” 🙂
Энергетическое обоснование.
Вот что я планирую использовать на втором этаже дачи:
Посидеть часок другой с ноутом (80 ватт), возможно роутер с 3G модемом, пару лампочек светодиодных (10..20 ватт), небольшой телевизор (80..100 ватт), небольшой паяльник иногда (25..35 ватт), ну и подзарядить телефон (планшет) (пусть еще 10 ватт). Это все, как правило, не одновременно и пару часов. Считаем, 250 ватт. Час работы всех энергопотребителей — 0,25 кВатт-час.
(Тут можно посмотреть примеры расчетов:
ru.wikipedia.org/wiki/%D0%9A%D0%B8%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%82-%D1%87%D0%B0%D1%81 )
Обычный, средний автомобильный аккумулятор (55 А*Ч) имеет запас энергии 55*12=660 Ватт. Т. е., при грубом подсчете (даже с учетом всяческих потерь при преобразовании) должно хватить на больше, чем два часа (660/250=2.6) работы всего запланированного электрооборудования включенного одновременно. Еще немаловажно, что пользоваться этим я буду только в выходные- 2 дня, а заряжаться АКБ будет 5 дней. Даже учитывая, что погода у нас (в Республике Беларусь) не всегда солнечная, 50 ватная солнечная панель (3 Ампера) должна заряжать АКБ за 12 часов ВЕЛИКОЛЕПНОЙ солнечной погоды. Это теория. Практика говорит, что нужно накинуть еще. Хорошо-хорошо, пусть заряжается 20 часов. Очень-очень надеюсь, что за неделю в сумме должно же набраться эти ясные/солнечные 20 часов 🙂
Естественно, все блоки для солнечного электроснабжения можно купить. (Да и вообще, можно купить в этом мире практически все. Ну, кроме, наверное, самих денег. Но тогда вообще скучно жить).
Так что, дайте попробуем максимально все сделать самостоятельно.
Итак, Солнечная панель (далее по тесту СП) и аккумулятор (далее в тексте АКБ) — ничего не попишешь… Сэкономить не удастся.
Эти компоненты придется купить.
(Небольшая поправка насчет СП. Изначально я думал собрать ее самостоятельно, из отдельных панелек (0.5 вольта при стоимости около 3 у.е.). Получалось, что как минимум мне понадобиться порядка 30 панелек. Плюс ровные руки и куча терпения и аккуратности. Но, к счастью, нашел людей продающих готовые панели для наружного применения и не очень дорого-80 у.е. Ее параметры: 20 вольт холостого хода и ток КЗ порядка 3-х Ампер. Мощность 50 Ватт. Прямо, то, что мне и нужно. Заказал, пока жду).
А вот инвертор и контроллер — все в наших руках 😉
ИНВЕРТОР.
Для преобразования электроэнергии из 12 вольт АКБ в переменные 220 Вольт, обычно используются инверторы. Естественно, идеально для такого применения подойдет автомобильный инвертор. Но… Любимый принцип Ивановича: “используй то, что под рукою и не ищи себе другого”. Попробуем в качестве инвертора использовать UPS. Он же бесперебойник.
Думаю, в каждом офисе найдется парочка исправных ИБП (источник бесперебойного питания) с высаженными АКБ. Вот с ним то и попробуем замутить. Интернет просто кишит материалом о таком варианте. К счастью, бесперебойники у меня были ДАЖЕ на выбор. Однако я остановился на Vivaldi 800VA. Попробую пояснить почему. Что тоже важно:
1. он оказался самым мощным (800 ватт)
2. у него включение просто кнопка с двумя состояниями (а не сенсорная или интеллектуальная, типа нужно нажать и подержать пару секунд)
3. он выключается в зависимости от состояния АКБ (а не по заданному интервалу времени). Что тоже важно: он сам контролирует степень разряда аккумулятора.
4. у него на задней пенили две обычные розетки.
5. он оказался полностью рабочим и был в металлическом корпусе 😉
В качестве доработки я сделал:
— Установил небольшую плату переходник с предохранителем на 25 ампер
— Убрал сетевой шнур. Вместо него вывел мощные провода (сечением 4 мм2) с клеммами для подключения АКБ.
— Выпаял на фиг раздражающую пищалку-буззер
— Усилил самый горячий радиатор дополнительным медным
— Установил принудительный вентилятор и насверлил в корпусе под него отверстия
Провел “ходовые испытания”. Обычный ПЭВМ с ЭЛТ монитором (да, я нашел такой монитор) чудесно отработал 2 часа. Вполне хороший результат.
Ну и основная часть моего опуса:
КОНТРОЛЛЕР ЗАРЯДА.
Немного теории. Для общего понимания и развития.
Контроллер заряда является важным элементом в задуманной системе электроснабжения. Он поддерживает необходимый уровень напряжения на аккумуляторах, предотвращая их полный разряд или перезаряд. Существует несколько типов контроллеров:
Погуглив, я нашел два любопытных варианта контроллера MPPT:
1) www.256.co.uk/?p=1158
2) duino4projects.com/arduino-peak-power-tracker-solar-charger/
Но для реализации варианта MPPT нужно контролировать ток. Ничего подходящего для этого у меня под рукой не оказалось. На будущее, пришлось заказать в Китае микросхему MAX4173.
Ну, что же. Попробуем свои силы в изготовлении PWM контроллера.
За основу взял творение некого товарища из далекой Индии. Очень хорошо все описано и разжевано (правда, не на русском). Читайте тут: www.instructables.com/id/ARDUINO-SOLAR-CHARGE-CONTROLLER-PWM/
Мои “хотелки”:
— плата-шилд (стандартного размера)
— плата должна быть односторонней
— возможность быстрого подключения проводов (т.е., клеммники)
— вывод полезной информации на двухстрочный LCD 16х2
— LCD сделать выносным (вдруг понадобится разместить в корпус) и отключаемым (на разъемах)
— дополнительная светодиодная индикация (что бы издалека понимать, что происходит)
— автономная работа устройства (т.е., без дополнительных батарей и аккумуляторов)
— безопасность работы устройства без присмотра
Схема контроллера — это фактически компиляция кусков из разных схем. В окончательном виде она выглядит так.
Обратите внимание, в схеме отсутствует узел управления нагрузкой. Дело в том, что изготовленный мною самодельный “ИНВЕРТОР” сам контролирует этот момент.
Как говорится: «Хорошая мыслЯ — приходит опосля» 🙂 Честно говоря, я думаю, что было бы более правильным сделать три отдельных линии от АКБ (5 Вольт, 12 Вольт и 220 Вольт) и все же контролировать напряжение на АКБ, во избежание сильного разряда аккумулятора. Например, зачем подключать к линии 220 Вольт блок питания того же роутера, если логичнее подключить его сразу к линии 5 Вольт. Но этот вариант я попробую учесть в следующей поделке. Хм, если не потеряю интерес.
Условно эту схему можно разбить на следующие узлы:
Узел питания. На рисунке под №5.
Чуть-чуть лирики. На работе многие коллеги обзавелись видео регистраторами. И для подключения к бортовой сети многие отказались от штатного подключения в прикуриватель. В связи с этим, нашей радиолюбительской братией был довольно плотно проштудирован вопрос DC-DC преобразователей. Для этих целей из Китая были получены чудесные STEP-DOWN преобразователи LM2576 в достаточно большом количестве. Ниже кусочек из даташита:
Согласитесь, что грешно пропадать полученным таким образом полезным наработкам и микросхемам :). Итак, для питания Arduino в автономном режиме я разместил на шилде такой преобразователь. Он будет запитываться (через диоды) и от СП и от АКБ (в темное время суток).
Что нам дает такое подключение? Пусть Анод первого диода подключен а АКБ (Аакб), анод второго диода подключен к СП (Асп), Катоды соединены вместе и подключены к преобразователю (К).
Имеем в худшем случае: Аакб = 14В, Асп = 18В. Падение на диоде пусть в худшем случае 1В,
тогда на общем катоде будет К = 18 — 1 = 17В. А, заметь, на Аакб = 14В, т.е. диод заперт обратным напряжением.
Посему с СП будет течь ток, потребляемый стабилизатором (сколько-то там ампер), а через диод АКБ будет лишь обратный ток утечки (он будет _в_ АКБ, типа зарядный) в несколько там микроампер, т.е. НОЛЬ. Ток будет потребляться с обоих источников — АКБ и СП — только когда их напряжения примерно равны. Когда напряжение на СП упадет ниже напряжения на АКБ примерно на 0.7-1В, ток будет потребляться только с АКБ.
Были небольшие сомнения, при выборе напряжения преобразователя 5 вольт или 9. Однако, решив, что двойное преобразование (на самой Arduino есть линейный стабилизатор) неэффективно, остановил свой выбор на 5-ти вольтовом варианте.
Контроль напряжения на АКБ и на СП. (Узлы №1 и 3 соответственно)
Берем с запасом, максимальные напряжения на выводах солнечной панели 25 вольт, на АКБ — 15 Вольт. Естественно такие напряжения напрямую подавать на Ардуино — смерти подобно.
Воспользуемся on-line калькулятором для делителя напряжения (он же Voltage Divider). Кому лень (или нет интернета :)), расчет ведется по формуле
Vout=(Ra*Vin)/(Ra+Rb).
Чтобы не “плодить номенклатуру”, резистор Ra возьмем 100 kOm.
Получаем такие величины
Для СП:
Input Voltage=25V
Ra=100kOm
Output Voltage=4.5V
=> Rb=22 kOm
Для АКБ:
Input Voltage=15V
Ra=100kOm
Output Voltage=4.5V
=> Rb=42 kOm (у меня под рукой был на 47 kOm)
Для пересчета значения “из попугаев” на входе АЦП в реальные вольты пришлось высчитать нужные коэффициенты.
Индикация состояния: два светодиода и LCD дисплей.
Светодиоды — ничего нового. А подключение LCD — “дудка в дудку” в соответствии с описанием на официальном ресурсе
Сам дисплей сделан выносным и к шилду подключается двумя шлейфами: питание и сигнальная линия.
ШИМ-контроллер (Узел №2).
Подробнее о ШИМ можно почитать тут arduino.cc/en/Tutorial/PWM
или тут robocraft.ru/blog/arduino/34.html
Этот узел я нагло слизал у индуса. (Нет, конечно, я честно попытался заменить “полевик” на n- канальный (они более распространены и в открытом состоянии имеют меньшее сопротивление). Но, для его полного открытия необходимо обеспечить положительный потенциал (обычно около 10 вольт) между Gate и Source. Напомню, что Source в нашей схеме подключается к “+” АКБ. Выход из такой ситуации есть: т.н., Charge pump. Но мне что-то не хотелось в тот момент усложнять схему. Тем более, что я планирую в дальнейшем изготовление MPPT контроллера).
Обычно PWM контроллеры работают с частотой 50/100 Герц. А у Ардуино по умолчанию на 6-ом пине ШИМ с частотой 976.5625 Герц. Короче, для изменения частоты ШИМа просто изменим значение предделителя на 1024 (вместо 64).
TCCR0B = TCCR0B & 0b11111000 | 0x05; // prescaling 1024
И получим что-то около 61 Герца. Пока так. Естественно, при этом перестают корректно работать функции delay() и тому подобные. К счастью, в данном скетче это не критично.
В целях защиты, на плате дополнительно установлен предохранитель на 3 Ампера. (Хотя, более удобно было бы его установить в разрыв соединительных проводов).
Итак, печатная плата:
Далее, классическая цепочка: ЛУТим — ТРАВИМ — ЛУДИМ — ПАЯЕМ…
Фу, Готово. Готовый контроллер выглядит примерно вот так:
Обратная сторона (предохранитель по цепи питания от преобразователя (на всякий пожарный случай) и SMD-диодик)
Вид “сбоку” с установленным на “полевик” радиатором:
Назначение узлов, перемычек и разъемов на плате
Перемычка №3 — питание Ардуино от СП и АКБ (при использовании внешнего БП или батарейки, перемычку нужно снять)
№2 — индикатор работы преобразователя (можно отключить перемычкой №1)
№4 — регулировка контрастности LCD дисплея
№5 — делители напряжения
№6 — светодиодные индикаторы заряда батареи и состояния
Для отладки системы я пользовался “полудохлым” АКБ из авто (как раз один коллега купил новый, а старый отдал на опыты) и блоком питания 15 Вольт (3 Ампера) -(т.к., пока у меня нету реальной солнечной панели).
Теперь переходим к софтверной части.
Алгоритмы “правильного” заряда нашел на форуме arduino.ru/forum/proekty/pwm-kontreller-zaryada-na-attiny13?page=2 (Спасибочки товарищу с ником HWman, который не поленился и разрисовал для меня каждую стадию заряда).
Я решил выделить пять состояний, в которых будет находиться контроллер:
— режим сна. (SLEEP Mode). В этот режим контроллер переходит в случае, если напряжение с СП меньше, чем необходимое для заряда АКБ
— режим ЗАРЯДА (Charge Mode). В этом режиме весь ток, от СП отдается АКБ
— режим ВЫРАВНИВАЮЩЕГО ЗАРЯДА (Balance Mode). В этом режиме, с помощью изменения ШИМ на АКБ поддерживается необходимое напряжение
— режим ПОДДЕРЖИВАЮЩЕГО ЗАРЯДА (Storage Mode). В этом режиме ничего не происходит, а контролируется напряжение на АКБ. И при определенном значении, переходит в режим заряда.
— Ну и небольшой BONUS 🙂 режим ВОССТАНОВЛЕНИЯ АКБ (Refresh MODE). Вот, что натолкнуло на эту мысль:
Реализация кода — Конечный автомат (он же, [ Finite State Machine ]).
Граф состояний (может будет кому-то полезным):
Для удобства восприятия, на графе я использовал те же переменные и константы, что и в скетче.
А ниже и собственно скетч. Он оказался не очень объемным, поэтому я привел здесь его полностью. Для отладки, оставлен вывод в СОМ-порт. Естественно, полезная критика приветствуется 🙂
(Прокомментирован — по максимуму. Несколько раз перечитывал, даже сам разобрался 🙂
Над кодом я трудился несколько недель… (период отпусков, и все такое. ). При тестировании с блоком питания (вместо солнечной панели, никак не довезут) — все очень даже красиво и хорошо.
Во время зарядки, «полевик» достаточно хорошо нагревался. Я замерял его температуру (есть у нас такой прибамбас к тестеру)- и она доходила до 65 градусов Цельсия. Многовато, но вполне приемлемо.
Честно говоря, я пока не могу уверенно сказать, что КАЧЕСТВО заряда — ИДЕАЛЬНОЕ! Время покажет 🙂
Естественно, данный код можно приспособить для зарядки других аккумуляторов и реализации других алгоритмов. Как Ваша душа пожелает.
Для всех заинтересовавшихся и желающих повторить, весь материал одним архивом — ТУТ .