Контроллер заряда для солнечных батарей своими руками


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

Такие контролеры можно сделать своими руками.

Самодельный контроллер: особенности, комплектующие

Устройство предназначено для работы только с одной солнечной панелью, которая создает ток с силой, не более 4 А. Емкость аккумулятора, зарядкой которого управляет контроллер, является 3 000 А*ч.

Для изготовления контроллера нужно подготовить следующие элементы:

  • 2 микросхемы: LM385-2.5 и TLC271 (является операционным усилителем);
  • 3 конденсатора: С1 и С2 являются маломощными, имеют 100n; С3 имеет емкость 1000u, рассчитан на 16 V;
  • 1 индикаторный светодиод (D1);
  • 1 диод Шоттки;
  • 1 диод SB540. Вместо него можно использовать любой диод, главное, чтобы он мог выдержать максимальный ток солнечной батареи;
  • 3 транзистора: BUZ11 (Q1), BC548 (Q2), BC556 (Q3);
  • 10 резисторов (R1 – 1k5, R2 – 100, R3 – 68k, R4 и R5 – 10k, R6 – 220k, R7 – 100k, R8 – 92k, R9 – 10k, R10 – 92k). Все они могут быть 5%. Если хочется большей точности, то можно взять резисторы 1%.


Как выбрать контроллер для солнечной батареи?

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

  • Мощность батареи. На выходе общая мощность не должна быть больше показателя тока.
  • Уровень входящего напряжения. Он должен быть больше на 20% чем U АКБ, которое производится преобразователями света в ток.

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

Чем можно заменить некоторые комплектующие

Любой из этих элементов можно заменять. При установке других схем нужно подумать об изменении емкости конденсатора С2 и подборе смещения транзистора Q3.

Вместо транзистора MOSFET можно установить любой другой. Элемент должен иметь низкое сопротивление открытого канала. Диод Шоттки лучше не заменять. Можно установить обычный диод, но его нужно правильно разместить.

Резисторы R8, R10 равны 92 кОм. Такое значение нестандартное. Из-за этого такие резисторы найти сложно. Их полноценной заменой может быть два резистора с 82 и 10 кОм. Их нужно включать последовательно.

Способы подключения контроллеров

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

Перед началом работ надо выделить для установки контроллера место с соответствующими условиями — сухое, чистое, отапливаемое. Не должно быть контакта с солнечными лучами, не допускается наличие поблизости механизмов, создающих вибрацию.

PWM

Порядок подключения контроллеров PWM состоит из следующих этапов:

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

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

Кроме этого, не допускается присоединение на контакты, предназначенные для соединения с нагрузкой, инвертора. Его можно присоединять только к блоку АКБ.

MPPT

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

Перед присоединением рекомендуется еще раз выполнить несложный расчет (разделить максимальное значение силы тока на 4 и прибавить около 10-15 % на запас прочности). Это позволит обеспечить штатную работу коммутации, исключить нагрев и опасность возникновения пожара.

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

Простейшие контроллеры типа Откл/Вкл (или On/Off)

Контроллеры такого типа работают только на запуск или остановку зарядки АКБ при падении или повышении заряда. Они не учитывают дополнительные условия работы, не определяют оптимальный режим, выполняя только функции триггера, настроенного на переключение при достижении минимального и максимального значений.

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

Принцип работы

При отсутствии тока с солнечной батареи контроллер находится в спящем режиме. Он не использует ни одного вата из аккумулятора. После попадания солнечных лучей на панель электрический ток начинает поступать к контроллеру. Он должен включиться. Однако индикаторный светодиод вместе с 2 слабыми транзисторами включается только тогда, когда напряжение тока достигнет 10 В.

После достижения такого напряжения ток будет проходить через диод Шоттки к аккумулятору. Если напряжение поднимется до 14 В, начнет работать усилитель U1, который откроет транзистор MOSFET. В результате светодиод погаснет, и состоится закрытие двух не мощных транзисторов. Аккумулятор заряжаться не будет. В это время будет разряжаться С2. В среднем на это уходит 3 секунды. После разрядки конденсатора С2 гистерезис U1 будет преодолен, MOSFET закроется, аккумулятор начнет заряжаться. Зарядка будет происходить до момента, когда напряжение поднимется до уровня переключения.

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

Схема включается за очень короткое время. На ее включение влияет время зарядки С2 током, который ограничивает транзистор Q3. Ток не может быть больше 40 мА.

Как подключить контроллер заряда для солнечных батарей?

Этот прибор может находится внутри инвертора, а также может быть, как отдельным инструментом.

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

Установку нужно выполнять в то место где не будет влаги. Дальше приведем варианты подключения двух распространенных типов контроллеров для солнечной батареи.

Подключение МРРТ

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

Подключение

Перед тем как включить устройство mppt в цепь переключите выключатели на контактах в положение «Выкл» и вытащите предохранители. Все это делается по такому алгоритму:

  1. Выполнить сцепление клеймов АКБ и контроллера.
  2. Прицепить солнечные панели к контроллеру.
  3. Обеспечить заземление.
  4. Поставить на контролирующий прибор датчик отслеживающий уровень температуры.

Выполняя данную процедуру следить за правильностью полярности контактов. Когда все будет выполнено переведите выключатель в положение «ВКЛ» и вставьте предохранители. Правильность работы будет заметна если на табло контроллера высветится информация о заряде.

Подключение солнечной батареи к контроллеру PWM

Чтобы это сделать выполните простой алгоритм соединения:

  1. Кабеля АКБ сцепите с клеймами контроллера pwm.
  2. У провода с полярностью «+» нужно включить предохранитель для защиты.
  3. Соедините провода от СБ контроллером заряда солнечной батареи.
  4. Присоедините лампочку на 12 вольт к выводам нагрузки контроллера.

Подключение PWM

В момент подключения соблюдайте маркировку. В противном случае приборы могут поломаться. Не следует соединять инвертор с контактами контролирующего устройства. Он должен цепляться к контактам АКБ.

Контроллер Майкла Дэвиса

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

Есть два варианта этого контроллера. Первый является старым и несовершенным. Второй – простым и более эффективным. Его схема на рисунке:

Для его создания нужно подготовить:

  • 2 регулятора: 7805 (К142ЕН5А) (IC1) и NE555 (IC1);
  • 2 стандартные кнопки (РВ1 и РВ2);
  • 2 LED-лампочки. Одна зеленого цвета, другая – желтого;
  • 1 автомобильное реле на 12 В (RLY1). Желательно подбирать такое реле, которое позволяет коммутировать токи 30-40 А;
  • 1 диод 1N4001. Можно взять любой подобный;
  • 2 подстроечных резистора 10К. На схеме они обозначены, как R1 и R2. Лучше, чтобы они были многооборотными. Разрешается брать такие резисторы, интервал подстройки которых составляет 0-100К. Однако элементы с 10К дают лучшую подстройку;
  • 3 резистора 1К Ом 1/8 Вт 10% (обозначены R3-R5);
  • 1 резистор 330 Ом (R6);
  • 1 резистор 100 Ом (R7);
  • 2 транзистора 2N2222 и IRF540. Обозначены как Q1 и Q2 соответственно. Вместо первого транзистора можно взять 2N3904, NTE123 или любой другой, имеет биполярную NPN структуру и аналогичные характеристики. Так же можно поступить со вторым транзистором;
  • 2 конденсатора 0,33 uF и 0,1uF. Оба рассчитаны на 35 V. Вид конденсатора может быть любой.

Все эти элементы размещают на плате и припаивают. После чего проводят первичную регулировку схемы. Она заключается в выставлении уровней напряжения на контрольных точках ТР1 и ТР2. Напряжение на первой должно равняться 1,667 В, на второй – 3,333 В. Эти уровни выставляют, настраивая кнопки. Также на каждую цепочку питания следует установить предохранитель на соответствующий ток.

Небольшое вступление. 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 или тут Этот узел я нагло слизал у индуса. (Нет, конечно, я честно попытался заменить “полевик” на 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)
. Вот, что натолкнуло на эту мысль: Реализация кода — Конечный автомат (он же, ). Граф состояний (может будет кому-то полезным):


Для удобства восприятия, на графе я использовал те же переменные и константы, что и в скетче. А ниже и собственно скетч. Он оказался не очень объемным, поэтому я привел здесь его полностью. Для отладки, оставлен вывод в СОМ-порт. Естественно, полезная критика приветствуется :)
(Прокомментирован — по максимуму. Несколько раз перечитывал, даже сам разобрался :)
/* Simple Arduino Solar Charger Controller PWM Version with P-chanel MOSFET Ghost D. 2014 ==================================== И окончательный алгоритм (спасибо HWman, с ресурса ARDUINO.RU) будет такой: 1- ШИМ=255 пока Uакб<14.4 2- Как только Uакб=>14.4 ставим ШИМ при котором Uакб=13.8 и держим напряжение на таком уровне 3- Если значение ШИМ уже очень мало(ток заряда уже маленький), то отключаем заряд вообще и переходим в ждущий режим 4- как Uакб<=12.7 — снова с пункта 1 ==================================== Lead-Acid Batteries BOOST Voltage = 14.4 Volts NORMAL Voltage = 13.9 Volts STORAGE Voltage = 13.3 Volts */ #include LiquidCrystal lcd(12,11, 5, 4, 3, 2); int redLed=7; // Светодиод — состояние АКБ — разряжен int greenLed=8; // Светодиод — состояние заряда int pwmPin=6; // ШИМ вывод на MOSFET byte batPin=A0; // Аналговый порт подключения делителя с АКБ byte solarPin=A1; // Аналоговый порт подключения делителя с АКБ float solar_volt =0; // Напряжение на солнечной панели float bat_volt=0; // Напряжение на АКБ float real_bat_volt=0; // Напряжение на АКБ при ШИМ=0 float start_bat_volt=0; //Напряжение на АКБ, с которого стартовал режим REFRESH (Восстановление) byte curPWM=0; //Текущее значение ШИМ int charged_percent =0; //Заряд АКБ в % volatile boolean state = LOW; //для мигания светодиодом //long int timeWork=0; byte mode=0; //Режим работы «КОНЕЧНОГО АВТОМАТА» byte tmpCount=0; //счетчик, для возможности «крутиться» в нужном режиме нужное кол-во раз char outMess[16]; //содержимое второй строки на LCD //коэф. делителя для 100к/47к #define batDev 3.2 //коэф. делителя для 100к/22к #define solDev 5.8 //коэфициент для пересчета данных с АЦП в вольты #define adc2volt 0.0047 //Границы напряжения на АКБ #define bat_full_volt 14.3 #define bat_balance_volt 13.8 #define bat_disch_volt 11.4 #define bat_storage_volt 12.7 #define bat_refresh_volt 9 //Значения для ШИМ #define pwm_charge 255 #define pwm_off 0 //шаг изменения значения ШИМ #define deltaPWM 10 //режимы работы #define mode_charge 1 #define mode_balance 2 #define mode_storage 3 #define mode_sleep 4 #define mode_refresh 5 //———————————— // Чтение значения АЦП с аналогового порта // 250 замеров и подсчет среднего float readVolts(byte pin){ float tmpRead=0; for (int i=0;i<250;i++){ tmpRead+=analogRead(pin); } tmpRead=tmpRead/250; return(tmpRead*adc2volt); } //———————————— // считываем значения напряжений на СП и АКБ void read_U() { solar_volt=(readVolts(solarPin))*solDev; bat_volt=(readVolts(batPin))*batDev; } // считываем значения напряжения на АКБ при ШИМ=0 void read_U_bat_real() { analogWrite(pwmPin,0); real_bat_volt=(readVolts(batPin))*batDev; analogWrite(pwmPin,curPWM); } void setup() { TCCR0B = TCCR0B & 0b11111000 | 0x05; // Устанавливаем ШИМ 61.03 Hz (при этом портиться функция delay) Serial.begin(9600); pinMode(pwmPin,OUTPUT); pinMode(redLed,OUTPUT); pinMode(greenLed,OUTPUT); digitalWrite(pwmPin,LOW); digitalWrite(redLed,LOW); digitalWrite(greenLed,LOW); lcd.begin(16,2); // lcd.clear(); // read_U(); mode=mode_sleep; } //end setup void loop() { switch (mode){ case (mode_charge): // Режим ЗАРЯДА. ШИМ=100% // В этом режиме горит красный светодиод, зеленый мигает // Пока напряжение на АКБ напряжение не станет больше, чем 14.4Вольта // после этого переход в режим ВЫРАВНИВАЮЩЕГО заряда Serial.println(«==============»); Serial.println(«MODE: Charge»); Serial.println(«==============»); curPWM=pwm_charge; digitalWrite(redLed, HIGH); digitalWrite(greenLed,state); state = !state; if (bat_volt >= bat_full_volt) { mode=mode_balance; tmpCount=3; } sprintf(outMess, «%2d%% CHRG PWM=%3d»,charged_percent, (map(curPWM,pwm_off,pwm_charge,0,100))); break; case (mode_balance): // Режим ВЫРАВНЕВАЮЩЕГО ЗАРЯДА. ШИМ= динамический, для удержания напряжения на АКБ =13,8В // В этом режиме красный и зеленый светодиоды перемигиваются // При значении ШИМ меньше, чем 10 // переход в режим ПОДДЕРЖИВАЮЩЕГО заряда // после изменения ШИМ, «для устаканивания» значения делаем 3 прохода Serial.println(«==============»); Serial.print(«MODE: Balance/Count: «); Serial.println(tmpCount); Serial.println(«==============»); if (tmpCount==0) { if (bat_volt >= bat_balance_volt) { if (curPWM < deltaPWM) curPWM=pwm_off; if (curPWM != pwm_off) curPWM=curPWM-deltaPWM; Serial.print(«- Decrise. «); Serial.println(curPWM); } if (bat_volt < bat_balance_volt) { if(curPWM > (pwm_charge-deltaPWM)) curPWM=pwm_charge; if(curPWM != pwm_charge) curPWM=curPWM+deltaPWM; Serial.print(«+ Incrise. «); Serial.println(curPWM); } tmpCount=3; } digitalWrite(redLed, state); digitalWrite(greenLed,!state); state = !state; tmpCount=tmpCount-1; if (curPWM < 10) mode=mode_storage; sprintf(outMess, «Balance. PWM=%3d», (map(curPWM,pwm_off,pwm_charge,0,100))); break; case (mode_storage): // Режим ПОДДЕРЖИВАЮЩЕГО ЗАРЯДА. ШИМ=0 // В этом режиме горит зеленый светодиод, красный мигает // Пока напряжение на АКБ напряжение станет меньше, чем 12.7 Вольта // переход в режим ЗАРЯДА Serial.println(«==============»); Serial.println(«MODE: Storage»); Serial.println(«==============»); curPWM=pwm_off; if (bat_volt < bat_storage_volt) mode=mode_charge; digitalWrite(greenLed, HIGH); digitalWrite(redLed,state); state = !state; sprintf(outMess, «Storage Mode «); break; case (mode_sleep): // Режим СНА. ШИМ=0 // В этом режиме светодиоды не горят // Когда напряжение на СП станет больше, чем 14.4 Вольта // переход в режим ЗАРЯДА sprintf(outMess, «Sleep Mode «); Serial.println(«==============»); Serial.println(«MODE: Sleep»); Serial.println(«==============»); curPWM=pwm_off; digitalWrite(redLed, LOW); digitalWrite(greenLed,LOW); if ((solar_volt > bat_full_volt) && (bat_volt >= bat_disch_volt)) mode=mode_charge; if ((solar_volt > bat_full_volt) && (bat_volt < bat_disch_volt) && (bat_volt >= bat_refresh_volt)) { mode=mode_refresh; start_bat_volt=bat_volt; tmpCount=5; } break; case (mode_refresh): // Режим ВОССТАНОВЛЕНИЯ АКБ. ШИМ= ИМПУЛЬСЫ, соотношение времени 4/1 // В этом режиме красный и зеленый светодиоды вспыхивают // Выход из этого режима при достижении значения на АКБ bat_disch_volt // или если напр. на АКБ станет (вдруг, откл. АКБ) < bat_refresh_volt Serial.println(«==============»); Serial.println(«MODE: Refresh»); Serial.println(«==============»); lcd.setCursor(0,0); lcd.print(«- Refresh Mode -«); curPWM=pwm_charge; if (tmpCount==0) { tmpCount=5; curPWM=pwm_off; } tmpCount=tmpCount-1; lcd.setCursor(0,1); lcd.print(«Ust:»); lcd.print(start_bat_volt,1); lcd.print(» Uc:»); lcd.print(real_bat_volt,1); if (real_bat_volt >= bat_disch_volt) mode=mode_charge; digitalWrite(redLed, state); digitalWrite(greenLed,state); state = !state; break; } //end switch //Общая процедура вывода информации (пока сумбурно) read_U(); if (solar_volt < bat_full_volt) mode=mode_sleep; read_U_bat_real(); if (real_bat_volt

Над кодом я трудился несколько недель… (период отпусков, и все такое…). При тестировании с блоком питания (вместо солнечной панели, никак не довезут) — все очень даже красиво и хорошо.

Во время зарядки, «полевик» достаточно хорошо нагревался. Я замерял его температуру (есть у нас такой прибамбас к тестеру)- и она доходила до 65 градусов Цельсия. Многовато, но вполне приемлемо.

Честно говоря, я пока не могу уверенно сказать, что КАЧЕСТВО заряда — ИДЕАЛЬНОЕ! Время покажет :) Естественно, данный код можно приспособить для зарядки других аккумуляторов и реализации других алгоритмов. Как Ваша душа пожелает!!!

Для всех заинтересовавшихся и желающих повторить, весь материал одним архивом — ТУТ!!!

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями: