Заметки о разработке МРРТ контроллера

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Приветствую! Ранее я уже рассказывал в статье о своем проекте контроллера заряда для небольшой СЭС с алгоритмом поиска ТММ. Сей проект вялотекущий из-за нехватки времени и порой отcутствия настроения, но все же он развивается. С момент последней статьи я сделал еще 2 ревизии железа, проверил разные схемотехнические решения, например, способы измерения тока и как итог — пришел к финальной версии аппаратной части о которой сегодня и пойдет рассказ.


Все исходники на железную часть проекта открыты и доступны на github — тут.


Фото МРРТ контроллера


Фото МРРТ контроллера


Концепция


Если вы решили просмотреть предыдущую статью о старой версии железа, то заметили, что концепция устройства изменилась радикально. Изначально хотелось сделать довольно универсальный отладочный комплекс, но в процессе работы с ним понял, что на практике он не такой удобный, довольно дорогой и использовать как готовое устройство тоже проблематично. Наверное к этому приходят все попытки сделать что-то "универсальное" и "хорошее" разом. Как итог решено было пересмотреть реализацию в пользу полноценного завершенного устройства, которое не будет валяться на полке, как 146% оталдочных плат, а займет свое место в небольшой СЭС в доме, на даче или где-то еще.


На момент старта проекта у меня не было цели сделать дешевое устройство, хотя мне некоторые люди писали в качестве претензии, использование "редких" компонентов. Сейчас у меня цели делать дешево так же нет, но в результате ухода от универсального модуля MotorControlBoard цена компонентов в цифровой части резко уменьшилась и решено было "перекачать" деньги в силовую часть, поставив более интересные силовые ключи, токовые шунты от Bourns, твердотельные кондеры от Panasonic и Wi-Fi модуль. В итоге при той же себестоимости немного улучшились ТТХ преобразователя и снизилась температура устройства в целом.


Интерфейсы


В первой версии контроллера у меня был реализован RS-485 и USB через преобразователь CP2102, так же был предусмотрен разъем с UART-ом и питанием для подключения Nextion или самодельной HMI панели. Все это было интересно, но как в итоге оказалось, слишком избыточно и не логично. Сейчас объясню почему...


Во-первых, RS-485 это очень хорошо, пока еще популярно, но на фоне CAN как-то и не очень. Сейчас во многих современных железках начинают применять CAN, там конечно же идет и RS-485 (а иногда и RS-232) для совместимости, но прогресс не остановить. Мне совмещаться особо не с чем, поэтому решил заменить RS-485 на CAN и сделать его единственным проводным интерфейсом.


Во-вторых, решил отказаться от использования дисплея как такогово и "герлянды" из светодиодов. Вешать дисплей на тот же контроллер, что управляет преобразователем не хотелось, а делать отдельную плату с еще одним МК, дисплеем, кнопками и светодиодами оказалось довольно дорого. К тому же стоит задаться вопросом — "а как часто вы будете ходить в условный сарай смотреть на этот дисплей?" За 4 месяца эксплуатации контроллера первой ревизии я этого не сделал ни разу, что как бы намекает на его бесполезность. Однако, хочется знать что происходит с системой, сколько энергии выработано и всякое такое. Для реализации удаленного монтиринга есть CAN и...


В-третьих, для реализации удаленного монтиронга решил поставить ESP32. Данный чип я как-то обходил стороной всегда, но наткнулся на статью, которая рассказывала про ESP32-PICO-D4. Это SiP в корпусе QFN-48 7х7 мм, в который разработчики уместили и саму ESP32, флеш память, кварц и дискретные элементы — остается накинуть питание и антенну. Это очень компактное решение, сильно меньше любого модуля (из тех, что видел), что важно, т.к. модули у меня на плату уже просто не влезали.


В конечном счете я пришел к варианту, когда дисплей и индикация на самом устройстве отсутствуют почти полностью, а вывод информации осуществляется в web-морду или в приложение. Вернее будет осуществляться, т.к. с ESP я ни разу не работал и еще не реализовал эту часть. Одно радует — в сети много информации и примеров работы, а значит в скором времени реализую мониторинг по воздуху.


Измерение тока


Во всех ревизиях у меня были разные способы измерения тока, т.к. это пет-проект и можно было городить что захочется, решил попробовать все. Сейчас поделюсь своими соображениями об этом. В первой ревизии (она в предыдущей статье) я использовал датчики на эффекте Холла — ACS713ELCTR-30A. В принципе они справились со своей задачей, но есть ряд минусов:


  • Чувствительны к металлическим элементам рядом с ними. В процессе экспериментов я попробовал сделать корпус из стали (резка, гибка, сварка, порошковая покраска), получилось дешево и вполне симпатично, но вот эти ACS начинали сходить с ума как только плата оказывалась внутри корпуса, напряжение на выходе датчика начинало плавать на 200-300 мВ в обе стороны и никакими цифровыми фильтрами "полечить" это не получилось. Если на него поставить болт типа М10, то тоже весело становится;


  • На номинальном токе 20А датчик начинал греться до 80-90 Co, что очень расстраивало. Согласно ДШ попробовал добавить параллельно к нему резистор, но точность начала существенно плавать. Вместо ±1% я получил уже ±3%, что несколько огорчило;


  • Датчики ACS не продаются на Mouser! Все закупаю там, т.к. удобно получить все желаемые компоненты в одной посылке, но вот почему-то данный производитель (и некоторые другие) отсутствует.



Следующими в бой пошли шунты и датчики INA196. Работать с ними одно удовольствие, они позволяют измерять ток в "плюсе" питания, а это удобно, т.к. потенциал земли (GND) остается равным на всей плате. Ведь если мы включим шунты в разрыв земли, то получится, что на земле у нас будет 3 разных потенциала, которые будут зависеть от падения напряжения на шунтах, то есть от тока.


Случай №1 — у нас шунты в "плюсе" нам надо измерять ток на одном шунте, ток на втором и напряжение на входе и выходе:


График №1


Это эквивалентная схема МРРТ контроллера, сильно упрощена, но суть понятна. Для удобства ток задан 25А, шунты как в контроллере на 4 мОм. Если вспомнить закон Ома, то на шунте будет падать I * R = 25А * 0.004 Ом = 0.1В, что мы и наблюдаем. В данном случае очень удобно измерять напряжение и на входе (на солнечной панели) и на выходе (на АКБ), т.к. земля "сплошная", АЦП сидит на ней и без всяких трудностей можно измерить напряжение в любой точки схемы через обычный делитель. Теперь перенесем шунты в "землю", земля цифровой части окажется между двумя шунтами, посмотрим что покажут вольтметры:


График №2


Так как земля АЦП расположена между шунтами, то есть все измерения идут относительно этой точки, получается ситуация, что мы не знаем реального напряжения на входе и реального напряжения на выходе, т.к. шунты вносят свой вклад в 0.1В. Много это или мало? Для свинца в принципе терпимо, а вот Li-ion или LiFePo4 аккумуляторы эта "десятка" очень быстро убьет, если на самих банка не установлена плата защиты или полноценный bms. Да и на определение ТММ это тоже скажется. В этом случае можно выкрутиться, например, измерение тока сводится к обычному измерению падения напряжения, а значит мы пожем посчитать входное напряжение как Uизмерено + Uпадение1. Соответственно для получения выходного напряжения: Uизмерено + Uпадение2. Итог такой:


График №3


Процесс измерения напряжения даст нам значение Uизмерено, а процесс измерения тока даст значения Uпадение1 и Uпадение2, после этого можно считать. Сложно? Я бы сказал излишне и точность теряется дополнительно. Еще одним решением могло быть измерение напряжение на входе и выходе с помощью операционного усилителя (ОУ), включенного в дифферинциальном режиме, но это потребует 2 лишний ОУ. Поэтому очень удобно было использовать INA и Холлы, включенные в "плюсе". Однако и у INA196 есть минусы — цена, 10$ за пару датчиков меня не очень радовали.


Так же еще стоит отнести к минусам подобных датчиков — ограниченность масштабирования. Дело в том, что у них есть ограничение по напряжению в измеряемой цепи, обычно это значение в пределах 80В. В дальнейшем у меня есть планы сделать МРРТ на 150В 40А, то есть измерять подобным методом уже не получится, а мне хочется получить железку, которая довольно легко масштабируется по напряжению и току без глобальных переделок.


Исходя из этого решил поискать альтернативу, чтобы не хуже и дешевле. Решил обратиться к опыту других open source проектов и различных промышленных контроллеров. В некоторых стояли датчики ACS, в основном у китайцев, но в остальных случаях все было сделано примитивнейше — шунт в "минусе" и усиление на ОУ, а дальше АЦП. Почитав форумы и различные статьи о данном варианте наткнулся на очередной холивар. Если кратко, то есть проблема с разными потенциалами и их надо измерять, но как плюс — цена, простота, надежность. К тому же я все равно измеряю ток и мне известно падение на шунте, поэтому решил на макетке собрать данный вариант. Все работало и работало с хорошей точностью, я было обрадовался, но оказалось, что есть и ложка дегтя (хотя и предсказуемая) — земля контроллера довольно "грязная" и при длинной цепи от шунта до ОУ появлялся шум и сказывалось различие потенциалов в разных точках полигона (оно мизерное, но на фоне пары мВ существенное). Чтобы победить это аппаратно решил поступить просто — использовать ОУ в дифферинциальном режиме, поставив сам ОУ ближе к МК, а сигнал от шунта до ОУ (примерно 60 мм) тянуть уже "дифферинциальной парой". В результате получил очень приличный результат в совокупностью с цифровым фильтром.


Схема измерения тока


Данное решение оказалось самым дешевым, это позволило поставить нормальный шунт от Bourns и ОУ с приличной полосой (TSV991ILT), при этом измерять напряжение решил относительно земли АЦП, не применяя еще 2 ОУ и диф. режим для этого. В принципе для моей задачи получилось измерять довольно точно, т.к. сама система инертна (ток и напряжение на панели или АКБ не изменяется быстро) и можно накапливать большой массив данных с АЦП для последующей фильтрации. Да и панель с АКБ не генерируют какой либо шум, а значит практически все помехи идут от самого buck преобразователя. Чтобы с ними побороться я синхронизировал старт АЦП с HRPWM так, чтобы измерение никогда не попадало в переходный процесс (момент закрытия и открытия транзисторов). Все это дало свои результаты и позволило применить наиболее простое и дешевое решение.


Корпус


Кто бы что не говорил, а корпус устройства это один из ключевых элементов, особенно если вы планируете это продавать. В моем случае продавать не надо, но люблю чтобы железка по мимо того, что работает еще и выглядела так, чтобы не стыдно знакомым показать. Как итог — озадачился с изготовлением корпуса. Пробовал разные варианты… и печатал на 3D принтерах разного качества, и заказывал из листового металла коробку, все или выглядело как говно крайне убого или не переживало стресс-теста в виде падения с метра на бетон, да и при этом цены не сказал что дешевые были на изготовление.


Вспомнил прекрасные статьи от anvos, решил посмтотреть как делают нормальные люди, глянул примеры работ, оценил свой бюджет и пришел к выводу, что мне нужна или фрезеровка или экструзия алюминия. Сломать почти нереально, выглядит "дорага-багата" симпатично и при этом механически прочный, в перспективе можно рассеивать на корпус тепло (изготовив плату из алюминия) и вроде как прототип изготовить не очень дорого. Литье пластиков мне тоже понравилось, но ценник не для хобби-проекта, экструзия алюминия тоже. Последний метод, как я понял, дешевый на серии, но изготовить 1-5 штук стоит слишком дорого или я не тем китайцам писал. Осталась фрезеровка! Вооружился SolidWorks-ом и нарисовал вот такое:


Модель корпуса


Первый корпус решил заказать у обладателя ЧПУ станка, а не у компании, т.к. сроки были самые интересные и цена адекватная — за работу, материал и доставку отдал 55$. В итоге изготовили корпус очень быстро и качество меня устроило. Все собралось идеально, резьбы нарезаны качественно, точность обработки хорошая:


Корпус №1


Корпус №2


В дальнейшем нужно еще обработать пескоструем, в идеале анодировать, этим займусь в ближайшее время, а пока так. Показал знакомым и первая реакция была в стиле: "Выглядит круто, но он наверное тяжеленный?", да я и сам ожидал получить увесистый кирпич, но на практике оказалось, что вес корпуса примерно как у платы в сборе (по ощущениям как плитка шоколада):


Корпус на весах


В итоге устройство собралось с минимальными зазорами, я на все размеры вырезов давал запас 0.1 мм и разъемы встали без всяких усилий и пристукивания молотком. Хотя были опасения, что взятые с 3dcontent модели окажутся не достаточно точные или с ошибками, но все обошлось. Вообще, если берете 3D модели с внешнего источника, то настоятельно рекомендую проверять хотя бы внешние габариты для элементов, которые задают габариты и под которые выполняются вырезы, тогда проблем быть не должно.


Реализация аппаратных защит


Данная тема заслуживает полноценного холивара, но я лишь опишу свой опыт, а там думайте. "Классическим" способом реализации защиты по току (OCP) и по напряжению (UVLO, OVP) является прямое использование компаратора, подключенного к шунту или делителю напряжения, сигнал ошибки с которого подается на D-триггер, обрывающий ШИМ-сигналы. Когда каналов защиты много, то логично заменить большое количество дискретной логики на CPLD. Все это работает и работает хорошо, но занимает место на плате и добавляет к себестоимости.


Благо в современных контроллерах, которые заточены под работу в преобразователях (TMS320F28, STM32F334/G474, XMC4200 и другие) все эти компоненты имеются внутри контроллера. Например, в используемом мною STM32F334C есть 3 быстрых компаратора, сигналы с которых заведены на входы аппаратной защиты FAULT от HRTIM (HRPWM). Так же внутри МК имеется ЦАП, которым можно регулировать опорный сигнал компаратора и тем самым задавать порог срабатывания защиты. Все это внутри выглядит примерно так:


Схема защиты


Как видите все, что нужно для реализации защиты уже есть в МК и можно значительно упростить внешнюю обвязку, сократив количество примененных компонентов. Изначально я "не верил" в надежность данной реализации защиты, но применив в качестве эксперимента его в парочке проектов проблем не выявил. Время срабатывания защиты всегда примерно 3-4 мкс, чего достаточно во многих задачах. Так же стоит отметить гибкость решения и наличие аппаратных фильтров на сигналах ошибки. В итоге я остановился именно на такой реализации защиты в МРРТ контроллере.


Так же стоит отметить, что в F334/G474 уже есть встроенные ОУ и возможность включить входы АЦП в дифферинциальном режиме, например, их можно было бы применить для измерения напряжения и избавиться от необходимости вычислять входное и выходное напряжение. Однако в цепь измерения тока их я не стал применять, т.к. усиление достаточно высокое, а полоса у них так себе, на единичном же усиление пожалуйста.


Итоги


На данном этапе я получил финальный вариант аппаратной части контроллера, в будущем возможно и будут какие-то исправления или переделки, но совсем незначительные. Дальше все усилия будут брошены на написание софта и реализации аппаратно заложенного функционала, пока что работает лишь CC/CV режим для AGM и GEL батарей в паре со сканирующим алгоритмом ТММ, теперь необходимо будет поднять CAN open, добавить популярные алгоритмы поиска ТММ и изобрести web-морду для мониторинга. Так же в планах есть перенос проекта из Altium Designer в открытый KiCAD.


Все исходники на железную часть проекта открыты и доступны на github — тут.

Источник: https://habr.com/ru/post/495548/


Интересные статьи

Интересные статьи

Все больше инженеров выбирают Kotlin для разработки серверных приложений. Полная совместимость с Java, корутины и высокая безопасность делают Kotlin отличным инструментом для подобных зад...
Jupyter Notebook — любимый инструмент-среда для data scientist'ов, аналитиков, инженеров, математиков, студентов и даже для нас — самых обычных ученых в экспериментальной физике. Этот инструмен...
Компании растут и меняются. Если для небольшого бизнеса легко прогнозировать последствия любых изменений, то у крупного для такого предвидения — необходимо изучение деталей.
PVS-Studio поддерживает анализ проектов на языках C, C++, C# и Java. Использовать анализатор можно под системами Windows, Linux и macOS. В этой заметке речь пойдет об анализе кода, написанного на...
С версии 12.0 в Bitrix Framework доступно создание резервных копий в автоматическом режиме. Задание параметров автоматического резервного копирования производится в Административной части на странице ...