MPPT контроллер заряда на STM32F334C8T6

В комментариях под моими предыдущими статьями неоднократно возникал вполне резонный вопрос: «Зачем делать dc/dc преобразователи на микроконтроллере, когда есть готовые?» и я в качестве ответа постоянно упоминал, как наиболее яркий пример, контроллер заряда с алгоритмом MPPT. Но сказать это одно, а показать… уже куда интереснее и нагляднее, поэтому сегодня расскажу о своем небольшом вялотекущем проекте такого контроллера.

Проект контроллера является открытым, все исходные файлы доступны на github. Сам контроллер является достаточно простым в реализации, построен он на топологии buck, в нем применены доступные компоненты и все это дает хорошую повторяемость даже без особых знаний. Компоновка разъемов и компонентов выполнены таким образом, чтобы данный контроллер можно было использовать и как отладочную плату для изучения силовой электроники, и как готовое устройство, останется просто изготовить корпус для него.

Фото МРРТ

Глава 1. Что такое алгоритм MPPT и зачем он нужен

Собственно MPPT — это процесс поиска точки максимальной мощности у солнечной панели. Наличие данного алгоритма в контроллере позволяет в определенных условиях значительно повысить эффективность использования солнечных панелей. Когда производитель пишет на панели мощность, например, 100…200…250…320 Вт, то имеет ввиду номинальную мощность солнечной панели при уровне инсоляции 1000 Вт/м2. Разумеется производители не выносят панели на улицу и не ждут идеальных погодных условий, поэтому данная величина принята как стандартная и «генерируется» на лабораторном стенде.

В реальных условиях при ясном небе максимальный уровень инсоляции имеет значения от 250 Вт/м2 где-нибудь в Норвегии и до 900-1000 Вт/м2 в Северной Африке. Из этого следует, что на Севере солнечная панель не выдаст своей заявленной мощности, а вот в Африке легко. НО… Как только на небе появляются тучи, которые затеняют солнечную панель, то уровень инсоляции снижается. Вспомните погоду за последний месяц, много ли идеально солнечных дней вы видели? Если вы с Краснодара, то возможно много, а вот у жителей средней полосы облаков однозначно больше.

Собственно в чем проблема… При снижение освещенности солнечной панели — изменяется расположение точки максимальной мощности (ТММ) на ВАХ реальной солнечной панели. Теперь давайте разберемся что же такое ТММ… Для этого берем солнечную панель с заявленной мощностью 200 Вт (у меня это Delta BST200-24P) и снимаем с нее вольт-амперную характеристику (ВАХ) при уровне инсоляции в 1000 Вт/м2:

ВАХ солнечной панели

ТТХ солнечной панели

Если посмотреть на график мощности, то на нем четко виден пик в котором панель отдает максимально возможную мощность — это и есть ТММ. Так же если из этой точки опустить линию вниз, то она пересечет ВАХ — координаты этой точки являются тем самым результатом, который необходимо найти. Если говорить проще: «MPPT — это процесс поиска точки на ВАХ в которой произведение тока и напряжения имеет максимальное значение»

Дополнительно стоит обратить внимание, что солнечная панель может выдавать несколько больше, это нормальное явление, т.к. эффективность ее зависит не только от уровня инсоляции, но еще и от температуры. Если поставить панель под солнце, то через несколько часов она достаточно сильно нагреется и мощность упадет примерно на 10%.

Теперь давайте разберемся что именно будет делать контроллер заряда и зачем ему МРРТ. Как ранее было сказано — уровень инсоляции будет значительно меняться в процессе эксплуатации: облака, пасмурная погода, рассвет и закат Солнца, соответственно будет изменяться и ВАХ солнечной панели:

ВАХ от инсоляции

На графике изображены ВАХ для 4-х случаев: 1000, 800, 600 и 400 Вт/м2 и соответственно для каждого случая у нас будет своя точка на ВАХ, где произведение тока и напряжения будет иметь максимальное значение. Задача контроллера заряда с MPPT — искать точку максимальной мощности для конкретных погодных условий. Например, живете вы где-нибудь в Воронеже, у вас тепло и много солнечной энергии и вы нашли ТММ и получаете максимальную отдачу мощности, но через 15 минут над вашими панелями встала туча и частично закрыла собой панели и значение инсоляции изменилось, а следовательно изменилась ВАХ панели. Чтобы контроллер заряда мог подстроиться под новые условия ему необходимо с некоторой частотой, например, раз в 5 минут, производить вычисления и поиск ТММ для новой ВАХ.

Существует множество алгоритмов поиска ТММ, начиная от простейшего «0,8*Uxx» до различных сканирующих алгоритмов с нейронными сетями, но более подробно об алгоритмах и их реализации в коде я расскажу в отдельной статье. Надеюсь вам стало понятно, что такое ТММ и зачем мы ее ищем, теперь можно перейти непосредственно в железу.

Глава 2. Технические характеристики и функционал контроллера

Теперь необходимо решить что же должен уметь контроллер, чтобы обеспечить необходимый функционал. Во-первых, контроллер заряжает АКБ, а следовательно необходимо реализовать CC/CV управление (стабилизация тока и напряжения) на выходе и для этого понадобиться измерять ток и напряжение на выходе. Во-вторых, для поиска ТММ необходимо измерять ВАХ солнечной панели, а значит нужно измерять ток и напряжение на входе. В-третьих, должен быть понижающий dc/dc, который опустит входное напряжение до 12 или 24В, в данном случае это будет синхронный buck. Это все позволит реализовать основной функционал устройства, в итоге функциональная схема будет выглядеть так:

Функциональная схема

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

Технические характеристики:

  • Входное напряжение: 15…60В
  • Выходное напряжение: 12/24В
  • Номинальный выходной ток: 20А
  • Алгоритмы МРРТ: да
  • Частота преобразования: 100 кГц
  • Защита от перегрева: да
  • Защита от сквозного тока: да
  • Защита АКБ: OVP и OCP
  • Интерфейсы: USB, Modbus
  • Ресурс: не менее 50 000 часов
  • Габаритные размеры: 110х90х20 мм

Особых изысков в данном решение не предполагается, основной уклон на повышенную надежность, эффективность алгоритмов ТММ и сохранение адекватной стоимости контроллера. Из удобств было решено заложить гальванически развязанный USB для настройки и перепрошивки управляющего микроконтроллера + его можно использовать для отладки, если SWO вам не нравится. Так же для реализации удаленного управления и мониторинга заложил RS-485, который надежен, дешевый в реализации и позволяет организовать связь на расстояние до 1000 метров. От wi-fi и прочего радио отказался сразу, т.к. контроллер обычно эксплуатируется в металлическом щите и как вариант в ж/б здании.

Глава 3. Выбор компонентов

На КДПВ видно, что устройство состоит из двух печатных плат: 4-х слойных модуль управления и основная 2-х слойная плата. Внимательные могут заметить, что модуль управления похож на решение из прошлой статьи, только основательно переработанное. И действительно, после испытания предыдущей версии control board и после обсуждений в комментариях было решено внести ряд глобальных изменений:

  • Отказ от вертикального монтажа в разъем и переход к горизонтальному. Это позволило решить проблему с разъемом и обойтись обычными 2.54 мм PLS-ами, а так же значительно уменьшить высоту устройства. С вертикальной версией высота контроллера была бы 60 мм, а не 20 и был бы велик шанс отломить плату управления. Сейчас же она не выступает на фоне остальных компонентов и по-прежнему занимает мало места;
  • Размеры платы уменьшены до 90х35 мм;
  • Контроллер STM32F334R8T6 заменен на более компактный и дешевый STM32F334C8T6. Эта замена так же привела к уменьшению количества каналов для управления полумостом с 5 до 4-х. Как показала практика данный контроллер не вывозит управление разом 5-ю полумостами, разве что совсем простые алгоритмы. Исходя из этого было решено отказаться от корпус LQFP-64 в пользу LQFP-48;
  • Добавлен гальванически развязанный USB, а если быть точнее, то мост USB-UART, т.к. в самом микроконтроллере нет аппаратного USB интерфейса;
  • С платы управления убрана микросхема PHY для RS-485, т.к. нужна она не всем и не всегда, но для ее возможного использования на разъем выведен UART и дополнительный gpio для управления прием/передачей. Так же теперь на основную плату можно поставить гальванически развязанный PHY и не быть привязанным к выбранному мною решению;
  • На отладочный разъем помимо интерфейса SWD было решено вывести и SWO для более удобной отладки программы.

Плата управления

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

Датчик тока

Для управления зарядом АКБ и измерения ВАХ солнечной панели необходимо измерять постоянный ток в диапазоне от 0 до 20А. Вариантов измерить постоянный ток не так много, самые эффективные и простые способы — токовый шунт и датчик на эффекте Холла. В первой версии я опробовал связку «шунт + INA194», вариант в общем-то рабочий, но сам монитор оказался достаточно шумным и была проблема в измерение токов менее 3-4А. Проблема решалась увеличением номинала шунта и цифровым фильтром, но тогда повышалась мощность, выделяемая на шунте в виде тепла, чего сильно не хотелось.

Изначально вариант с применением датчиков Холла я откинул сразу, а именно серии ACS (например, ACS758 или ACS711), т.к. в прошлом уже пытался их применить, но они сильно врали и у них низка полоса измерения. Правда в одном из обсуждений человек рассказал об успешном опыте применения данных датчиков, оказалось, что относительно новые серии перестали реагировать на малейшие наводки, главное чтобы около них не было ничего железного или того, что может намагнититься. Измерять мне нужно постоянный ток в системе, где скорость изменения тока не высока, а следовательно и полосы в 100 кГц хватит. Исходя из простоты и цены решения во второй версии MPPT контроллера я поставил ACS713ELCTR-30A. У Allegro есть две версии датчиков — DC и DC/AC, мне переменку измерять не нужно, а следовательно выбор очевиден в пользу DC, которые так же обладают бОльшим значением «вольт на ампер». Это позволило достаточно точно измерять не только большие значения тока, но и малые на уровне 0,3…0,5А с реальной погрешностью ±5%. Схема включения данного датчика крайне проста:

Схема датчика тока

Включение стандартное, никакой магии в схеме нет, единственное что необходимо сделать — «согласовать» выходной диапазон датчика 0…5В с тем, что может измерить АЦП у микроконтроллера STM32, а именно с диапазоном 0…3,3В. У датчика выход напряжением, он линеен и увеличение выходного напряжения на 133 мВ означает увеличение тока, протекающего через датчик, на 1А. Исходя из этого минимальное напряжение на выходе 0В, а максимальное 30А * 133 мВ/А = 3,99В. Теоретически делитель напряжения можно было бы не ставить, т.к. максимальный ток всего 20А и следовательно напряжение на выходе будет в пределах 2,66В и никак не угрожает входу АЦП, но лучше перестраховаться. Возможно после тестирования и длительной обкатки устройства я все таки уберу делитель и поставлю повторитель напряжения на ОУ.

Драйвер управления затворами транзисторов

Еще на стадии идеи я решил сразу отказаться от полной гальванической развязки управляющей схемы от силовой, это банально дорого, хотя и избавляет от наводок и защищает цифровую часть. Введение гальванической развязки 2-х напряжений и драйвера повысило бы цену преобразователя на 40%. Поэтому от любимых драйверов Infineon серии 1ED/1EDI пришлось отказаться и выбрать что-то приличное с бутстрепным питанием верхнего ключа, мой выбор пал на достаточно новое решение — NCP5183DR2G. Драйвер показал себя в работе очень стабильным и достаточным для управления парой mosfet-ов на частоте 100 кГц. Минус в нем я нашел один — отсутствие отдельного входа, например, ShutDown или Enable для выключения драйвера в случае аварии, поэтому для реализации защиты необходимо ставить дополнительную дискретную логику или использовать аппаратный вход FAULT в самом микроконтроллера STM32F334. Я выбрал второй вариант и пока он меня не подвел, хотя изначально относился скептически к надежности такого решения. Схема управления транзисторами выглядит так:

Схема драйвера

Решение простое и понятное, единственное добавлю от себя — конденсатор С1 должен быть керамическим с диэлектриком X7R и желательно не самый поганый, оригинального Yageo/Murata/Samsung хватит всем. Вся остальная рассыпуха может быть и брендом попроще. Кстати, о «муках выбора» номинала затворных резисторов R1 и R5 вы можете прочитать в данной статье.

Выходные конденсаторы

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

В моем контроллере заряда целых 2 таких места: конденсаторы на входе и выходе. Было решено заменить выходные электролиты на твердотельные полимерные конденсаторы (как в ваших видеокартах), которые куда легче переносят работу на токах в десятки ампер и обладают ресурсом на порядок выше, чем у самого качественного электролитического конденсатора. Минус у них один — цена, данное удовольствие от Panasonic стоит 2$/шт, но оно того стоит.

На входе устройства напряжение может достигать 60В, а это значит, что твердотельные полимерные конденсаторы уже не поставить, их просто нет, максимум 35В. Правда есть гибридные варианты, это промежуточное звено между электролитом и твердотельным конденсатором, они есть до 100В. У данного типа конденсаторов жидкий электролит заменен на пастообразный, что позволяет в разы повысить его ресурс.

Фото МРРТ

Самые внимательные могут заметить, что выходные твердотельные конденсаторы разные на двух платах. Я думаю, что все «оценили» стоимость за конденсатор 120 мкФ 35В, электролит от Wurth стоит в 10 раз дешевле. Исходя из этого я решил для тестов купить альтернативу конденсаторам 35SEK330M от Panasonic. Ну как альтернативу… есть такая азиатская компания Lelon, которая делает полный аналог (с их слов) конденсаторов от Panasonic. На одну плату я поставил оригинал, на другую аналог, сами устройства у меня уже тестируются около месяца и пока разницы действительно не замечено, посмотрим какой будет итоговый ресурс, но для желающих уронить цену в 5 раз до 0,4$/шт советую задуматься.

Общие сведения по компонентам

Хотелось бы отдельно сказать о политике выбора компонентов и решений. Так как идея предполагает использование данного контроллера не только для изучения на столе, но и работу «в поле», то было решено использовать только проверенных производителей и не использовать китайские компоненты (кроме опыта с Lelon) и различные поделки с алиэкспресс. В моем варианте исполнения и в BOM-е фигурируют оригиналы с digikey от производителей типа Infineon, TI, ON, ST, Yageo, Bourns и прочие. В принципе никто не запрещает вам поставить компоненты попроще, с того же алиэкспресс, но будьте готовы к снижению надежности и КПД контроллера.

Глава 4. О проекте и исходниках

Про силовые компоненты и методику расчетов я уже писал в своей статье про buck, прочитать ее можно тут. Я лишь приведу те результаты, что у меня получились:

  • Индуктивность силового дросселя — 30 мкГн, намотан на кольце R32/20/10 из материала Kool Mu. Кольцо откровенно с запасом выбрано, т.к. планировались эксперименты с частотой и повышением тока;

  • Емкость выходных конденсаторов — около 300 мкФ, в реальности емкость набрана существенно бОльшая, что уменьшило выходные пульсации. Я пробовал работу и с 3-мя конденсаторами, все отлично, так что если вы надумаете повторить, то смело оставляйте половину посадочных мест под выходные конденсаторы пустыми. В принципе можно попробовать впаять 6 обычных электролитических конденсаторов, если нет возможности купить твердотельные. По моим предположениям работать контроллер будет без каких-либо проблем;

  • Транзисторы (IPD053N08N3GATMA1) я выбрал те, что были у меня в запасах и достаточно легко покупаются. Если у вас уже есть ключи или не смогли купить те, что заложены у меня, то выбирайте транзистор с сопротивлением канала не более 8 мОм и затвором не более 100 нКл. В противном случае КПД достаточно сильно упадет и транзисторы будут существенно перегреваться.

Так же наверняка найдутся те, кому лень идти на github, поэтому оставлю полную схему устройства в формате PDF:

Железная часть проекта выполнена в Altium Designer 19, так же проект можно открыть в Curcuit Studio. Для тех, кто не хочет связываться с покупкой софта или пиратством, есть принципиальная схема в PDF и Gerber-файлы, этого вам будет достаточно для самостоятельного заказа печатных плат и сборки МРРТ контроллера.

Теперь что касается софта… В ближайшее время я «причешу» тестовый проект на котором сейчас работают контроллеры и так же выложу на github, все желающие смогут посмотреть реализацию тех или иных модулей, а может и помочь в его написании и поиске ошибок. Так же планирую пару статей касательно софтовой части управления dc/dc преобразователем, а именно про П-, ПИ-, ПИД-регуляторы, их реализацию, цифровые фильтры и соответственно про алгоритмы поиска ТММ.

Заключение

В дальнейшем предполагается еще одна ревизия железа, т.к. в процессе работы вылезли небольшие, но неприятные мелочи, например, с некоторой вероятностью без прошивки на выводах МК может появиться лог.1 и она откроет оба транзистора и приведет к КЗ. Данная проблема побеждается или предварительной заливкой прошивки перед первым включением контроллера или более правильный путь — установка резисторов 10 кОм, подтягивающих входы HIN и LIN на землю (GND). Хотя и в текущем состоянии контроллер работоспособен, но хочется в дальнейшем «вычистить» все потенциально проблемные места.

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

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

Проекты на Github

Специально для сайта ITWORLD.UZ. Новость взята с сайта Хабр