Предыстория вопроса
Коллега, талантливый конструктор, разрабатывает порой необычные вещи. Таких штук на рынке, как правило, не купить, либо они есть, но с худшими параметрами или же по заоблачным ценам. Для одной из его разработок требовался инвертор для управления шаговым двигателем. И вдобавок небольшой контроллер, который бы и осуществлял логику работы устройства. Если инвертор ещё можно найти на рынке, хотя тут не всё так просто, а почему – объясню ниже, то контроллер как ни крути, а разрабатывать самому, тут совсем индивидуальные пожелания и логика работы. А тут на кофепоинте оказался я - человек, который что-то слышал про электронику. После пары печенек и гранёного стакана лате, и обговорили предварительные условия сотрудничества.
В большинстве случаев, когда ко мне приходят за разработкой каких-то изделий, люди не всегда знают, чего хотят и что им нужно на выходе. В лучшем случае они хотя бы структурированное описание могут дать. В данной ситуации мне предоставили достаточно хорошее описание, практически, техническое задание, в историческом его понимании. Это был хорошо оформленный документ с подробным описанием всего желаемого, с эскизами некоторых частей и блок-схемами. Достаточно быстро, за одну-две встречи, за пару-тройку стаканов чая, согласовали все требования к разрабатываемому блоку.
Цель и средства
Опишу основные этапы «большого пути».
1. В системе есть два двигателя. Первый силовой (5кВт) BLDC с уже имеющимся контроллером VESC. Второй - которым и нужно управлять (более слабый), шаговый мотор.
2. На каждом двигателе присутствует по энкодеру. Значение «скорость» и «положение» необходимо считывать с них.
3. Разрабатываемый блок будет работать совместно с VESC контроллером. Взаимодействие по CAN шине.
4. Скорость вращения шагового мотора должна регулироваться: 0 – 850 об/мин.
5. Необходим вариант «изолированной» работы разрабатываемого блока от VESC. То есть вращение шагового мотора необходимо подстраивать в зависимости от показаний энкодера с вала тяговой установки на VESC.
6. Необходим вариант, когда в силовом инверторе производится расчёт скорости вращения мотора. Эта скорость передаётся в разрабатываемую плату управления по CAN.
7. Реализовать работу с двумя энкодерами: раз или двас.
8. Реализовать поддержку двух концевых выключателей.
9. Напряжение питания системы: 72 В.
10. Необходимо наличие RS232 и RS485 для внешней связи и управления установкой (один на выбор, или-или).
11. Реализовать стандартный STEP/DIR интерфейс с гальванической развязкой.
12. Установить три светодиода для отображения статусов.
13. Установить 4 переключателя для выбора режима работы.
14. Постараться разработать прототип для контрактной сборки в дружественном Китае у одного из производителей электроники.
15. Разработать блок дешёвый на производстве мелкими сериями.
Вообще это выжимка из большого ТЗ с картинками и блэкджеком для того, чтобы не публиковать тут текста на 15 минут внимательного прочтения.
Анализ ТЗ
Шаговый мотор был приведён в ТЗ – это ST57-100E. Какой момент он должен обеспечить и какую скорость, тоже дано. Ну, по классике видится использование H-моста для управления каждой обмоткой. Драйвер и ключи будут подобраны потом в процессе детальной проработке схемы и после расчётов. Примерная прикидка дала очень малую частоту тока (что-то до 5кГц, что меня совсем не пугает). А вот напряжения и токи сразу показались большими. Нужно детально рассчитать.
Интерфейсная часть.
CAN, RS232, RS485 особо и нечего рассматривать, просто запомнить, что нужны под них UART на контроллере и выбрать микросхемки китайские подешевле из тех, в которых уверен. А совсем идеально будет, если напряжения их питания ещё будут совпадать с питанием контроллера.
STEP, DIR интерфейс. Что-то слышал про него, 5 минут чтения в интернете и понял, что тут тоже особо нет ничего сложного. Нужна гальваническая развязка – оптопара.
Завести два концевых выключателя. Вообще, датчики бывают с выходом npn и pnp, предусмотрю-ка, на всякий случай, возможность подключения любых типов (я просто уверен, что когда-то купят или поставят не те датчики), и защиту от КЗ (на этот же случай).
Энкодеры. Один энкодер штатно установлен на шаговом моторе, второй же - покупной. Радует, что питания у них одинаковые — уже меньше работы. Энкодеры имеют дифференциальные выходы сигнала, стандартные выходы инкрементальных сигналов А и В, а один ещё имеет и метку полного оборота Z. Для таких решений сразу вспомнилось стандартное решение на AM26C32CD, кстати, тоже питается от +5В и, конечно же, китайского производства. Их, пожалуй, и применю. Хорошим тоном будет также, как и с концевыми выключателями, предусмотреть защиту от КЗ по питанию.
Осталось переключатели и индикация, тут совершенно нет вопросов — пусть заказчик выберет, что ему по внешнему виду больше понравится, а моё дело маленькое – пририсовать их на схеме к контроллеру.
Немного математики
После анализа пунктов ТЗ начал изучать тёмные моменты (не материю, а жаль).
Показалось самым важным — это определиться с параметрами драйвера двигателя, всё остальное счёл незначимым.
Основное, что нужно было сделать – расчёт параметров мотора. Практически все блоки, которые управляют моторами, имеют некоторые особенности. Они связаны с требуемыми параметрами. Важно учесть какая скорость и какая мощность требуется от двигателя. От этого будет зависеть какой ток нужно приводить к обмоткам мотора. А от скорости будет зависеть какое напряжение мы должны будем иметь с данными параметрами токов. В нормальной документации приводят графики зависимости момента от скорости вращения. Иногда бывают и от токов, но чаще дают при номинальном токе обмоток.
Тип мотора был приведён в ТЗ – это ST57-100E, который имеет следующие параметры:
1) Количество фаз: 2
2) Ток фазы: 4,2 А
3) Сопротивление обмотки 0,8 Ом
4) Индуктивность 2,6 мГн
5) Шаг 1,8 градуса (я не математик, но это 200 шагов на оборот ?)
6) Момент удержания 2,5 Н/м
7) Имеет встроенный энкодер с питанием +5В
Насколько я знаю шаговые двигатели делятся по разным параметрам и конструктиву, но есть большие три группы: с постоянным магнитом на роторе, с ротором из специального сплава, который подмагничивается в процессе работы (по-разному называют: реактивный, с переменным магнитным сопротивлением) и гибридный. У меня тут гибридный, который имеет 200 полюсов. Вообще тема интересная и много информации есть в интернете.
Далее я знаю, что двигатели имеют два деления по структуре обмоток: униполярные и биполярные. Мне дан биполярный. Для меня это значит, что для управления мне нужно делать полный мост. То есть я должен обеспечить движение тока в разных направления в каждой обмотке.
Далее, нужно понять, чем питать этот мотор, чтобы получить необходимую скорость с необходимым моментом силы.
Мне нужно его заставить крутиться со скоростью до 850 об/мин. Чтобы узнать сколько шагов в минуту мне нужно с него получить, следует умножить количество его шагов в полном обороте на нужное число оборотов в минуту.
850 (об/мин) * 200 (шаг/об) = 170000 шагов в минуту.
После этого определяю необходимую частоту управления им в кГц. Для этого узнаю количество шагов, которые необходимо сделать в секунду. А потом делю на тысячу (а то в Гц получится).
170000 (шаг/мин) / 60 (сек) = 2833,3(3) (Гц), то есть 2,834 кГц максимум.
Дальше добавляю к математике немного физики. Узнаю, что станет с сопротивлением катушек двигателя при переменном токе заданной частоты (это что-то про реактансы, импедансы…):
R(L) = 2*π*f*L
f – частота, приложенная к катушке индуктивности (наша обмотка двигателя)
L – индуктивность катушки индуктивности
2* π=6,28 ?
Вообще этот расчёт не даст суперточного результата, так как двигатель более сложная система (не катушка индуктивности), с общим сердечником, в котором электромагнитные поля при вращении ротора ведут себя хитрО, да и сам статор – сердечник своеобразно влияет на процесс. НО этот расчёт даёт достаточно информации для проектирования драйвера двигателя и понимания какие токи и напряжения мне нужны. Для более полной картины можно воспользоваться программой Maxwell от ANSYS, если у вас, конечно же, есть столько денег, чтобы себе её купить и есть достаточно времени для её освоения.
2*3,14*2800 (Гц) * 0,0026 (Гн) = 45,7 (Ом) – реактивное сопротивление обмотки мотора.
А ещё у меня есть активное сопротивление, про которое на таких значениях реактивного легко забыть, но лучше учесть:
45,7 (Ом) + 0,8 (Ом) = 46,5 (Ом) - полное сопротивление катушки двигателя.
По закону Ома, чтобы получить необходимый ток в катушке (ну что бы получить нужный мне момент), необходимо приложить к ней:
U = R*I,
U = 46,5 (Ом) * 4,2 (А) = 195,3 (В)
Целых 195В, не малые такие значения.
После этой простой математики и не более сложной физики можно и драйвер начать разрабатывать.
Есть отличный онлайн визуализатор от уважаемых nanotec, который демонстрирует работу двигателей, драйверов и даже обратной связи.
Тут есть много вариантов как для шаговых моторов, так и для BLDC, также много вариантов их подключения. Можно настроить скорость вращения, можно пройтись по шагам и посмотреть какие значения на системе управления должны быть. Эта тулза поможет как профессионалам, так и новичкам понять принцип работы и более быстро реализовать свой драйвер.
А инструмент, показывающий работу в режиме микрошаг – просто шикарен.
Проработка схемотехники
Я люблю рисовать блок-схемы перед началом разработки чего-либо. Первоначальная была приведена в ТЗ заказчиком (но то была общая блок-схема прибора), что, кстати говоря, очень помогло понять суть проекта. Далее рисую в блокноте кучу разных функциональных блоков и соединяю их стрелочками. И когда уже есть какое-то решение, удовлетворяющее ТЗ и моим эстетическим парадигмам, вырисовываю это в чистовик. Вот что у меня получилось:
Ещё один момент, часто финальная реализация отличается от первоначальной блок-схемы из-за того, что в процессе проработки схемы электрической находишь более лучшие решения. Причём, это не тот случай, когда лучшее — враг хорошему. И это нормально (с). Однако без первоначальной блок схемы разрабатывать устройства не рекомендую.
После проработки блок-схемы приступаю к частичной проработке схемотехники и выбору элементной базы. Почему именно так? Поскольку реализовать одну и ту же функцию в приборе, как правило, можно кучей разных способов, а каким именно лучше, решаешь сам. Моя давняя мысль такая: десять схемотехников реализуют одно и то же устройство десятью разными способами; из десяти решений восемь даже будут работать ?, шесть будут реально отвечать ТЗ, а три - четыре будут ещё вдобавок элегантно сделаны.
Итак, у меня самое интересное – это драйвер мотора, с которого и начну. По рассчитанным мною параметрам двигателя, требованиям к его скорости вращения и зная питающее напряжение, были выбраны силовые ключи. Выбор пал на N-канальные транзисторы. Проще было бы сделать на P – канальных в верхнем плече и на N – канальных в нижнем, но P- канальные сильно проигрывают по параметрам. Далее, для их управления заложить бы всеми известные полумостовые драйверы IRхххх, но я сделал свои на транзисторах. Это решение проигрывает по некоторым параметрам интегральным драйверам, но действительно сильно выигрывает по цене. Как говорится: «копейка рубль бережёт, а рубль голову стережёт». Да и очень порой хочется изобрести велосипед. Типа йога для извилин.
На этом листе нарисованы (не совсем соблюдая правила черчения схем) два Н – моста. Схема с bootstrap ёмкостью для верхнего транзистора и классика для нижнего. Данная схема получилась дешёвая, но плата за это такова: постоянное потребление тока верхним драйвером (не критично в данном устройстве), частота переключений ограничена примерно 100кГц, схема критична к выбранным компонентам, особенно к ёмкостям затворов полевых транзисторов.
Вообще на 100 кГц уже заваливается фронт, но меня это не беспокоит, так как в этом изделии скорость переключения будет достаточно маленькая.
После этого была реализована схема измерения тока, совмещённая с аппаратной защитой. Измерение тока может быть полезно при управлении мотором именно построением форм тока в катушках. А защита всегда полезна. И всем…
Защита достаточно проста. При превышении тока границы сработки компаратора, он даёт сигнал на триггер, который защёлкивает своё состояние, и отключает управляющие сигналы с драйверов моста. Ещё это очень полезная функция при отладке! Несмотря на то, что верхние ключи управляются через драйвер с зарядовым конденсатор (Bootstrap capacitors в иностранной литературе) и не могут быть открыты долгое время, времени открытия с лихвой хватит чтобы при сквозном токе сжечь плечо.
Ещё здесь есть важный момент. Фильтр на входе ОУ и полоса среза самого ОУ. Конденсаторами стоит выставить верную частоту, что бы блок не уходил постоянно в защиту при работе, и что бы защита была не настолько «дубовой», чтобы допустить фиаско. Этому моменту я уделил особое внимание при пусконаладке.
После этого была нарисована схема цифровых интерфейсов, реализованная на одних из самых простых и дешёвых микросхемах, производства Поднебесной — спасибо товарищу Си за наше почти счастливое настоящее! Чтобы мы без него делали…
Из приятных особенностей отмечу, что все микросхемы имеют питание 3,3В, что удобно как для организации общего питания с контроллером, так и для согласования уровней. На линиях, выходящих «наружу» установлены простые защитные диоды, из-за различия в уровнях напряжений интерфейсов не получилось сделать оптимизацию и применить одинаковые супрессоры, «каждому своё» — не буду напоминать, где эта надпись присутствовала — ночь на дворе…
Как писал выше, ещё при анализе ТЗ были идеи как ввести энкодеры. Такие микросхемы и применил. AM26C32 также производится китайскими производителями микроэлектроники и стоит копейки, а в юанях и того дешевле будет. При этом в надёжности не проигрывает американским от TI.
Из интересного на этой схеме. Энкодеры питаются от 5В, так что само применение микросхем с ещё одним доменом питания меня не смутило. По-любому +5В было бы в устройстве. Очень не рекомендовано выводить напряжения питания наружу с устройств. Всегда есть вероятность, что внешнее КЗ обесточит всё устройство и все наши надёжности сведутся на нет замыканием какого-то провода. Поэтому, тут организованы стабилизаторы тока на выходах питания энкодеров. При замыкании выхода питания на землю, максимальный ток в этой цепи составит 100мА, приемлемо. Видим на схеме прикидку по мощности на транзисторах (440 и 60 мВт), не страшно, но полигон подключить стоит к ним по жирнее при трассировке.
Почти аналогично я поступил и с питанием концевых выключателей. Но для них пришлось реализовать защёлку, так как они требуют бОльшего питания, ток КЗ которого уже совсем не хочется просто рассеивать на транзисторах (да и зачем?). Пусть при КЗ просто выключатся и всё, приемлемо.
А сами входы были сделаны достаточно универсальными, выбор типа датчика (PNP или NPN) выбирается внешним переключателем, который подключает подтягивающий резистор.
Из внешнего осталось реализовать STEP, DIR. Тут есть простая гальваническая развязка, защита от переполюсовки включения и схема, как расширяющая входной диапазон напряжений управления, так и являющаяся источником тока для диода оптопар.
Далее HMI (капец модное слово сейчас) интерфейс, то есть светодиоды и переключатели.
На красный светодиод заведено как аппаратное включение от триггера защиты, так и управление от микроконтроллера. Опять же мелочь, но приятная и помогающая при отладке понять, что ты накосячил. На переключатели можно не вешать конденсаторы от дребезга, так как это статичные выключатели и их положение опрашивается очень медленно (возможно вообще один раз при включении питания).
А сейчас шок-контент! Что же управляет всей это схемой на россыпухе и китайских микросхемах? Американский микроконтроллер серии Tiva, а точнее TM4C123xxx. Не логично как-то это, но обо всём по порядку.
А завершает и питает всю схему китайская троица из двух DC/DC понижающих конвертеров и одного линейного стабилизатора.
Китайские XLsemy имеют в своём ряду интересные, надёжные и дешёвые (жаль, низкочастотные, но за всё надо платить) преобразователи напряжений. Тут высоковольтный, аж с диапазоном входных напряжений 100+ (В) очень выручил, ибо питание от 75В, а надо учесть и выбросы с моста и вообще добавить запас на надёжность.
Общая структура проекта выглядит так:
После разработки схемы, как правило, заказываю комплектацию, но данный проект будет собираться «под ключ» в Китае, так что пока просто выгрузил BOM и отправил на оценку изготовителю.
Изначально будет собрано 2 экземпляра для отладки. А это даёт некое удорожание компонентов и монтажа. Вот что мне прислали, привожу не полный BOM, но порядок цен можно понять:
Да, цены не радуют, но это цены на штучное, а не на серийное, пока, изделие. Так что принимаем. А вот сборку после этих цифр решили сделать у себя. Так что закажем просто кит для сборки.
А сам приступлю к разработке печатной платы.
PCB
Изначально было принято решение делать на двухслойной и двухсторонней плате, так как это стоит сейчас столько же, сколько и однослойная. И потому, что сама схемотехника не требует каких-то сложных стеков слоёв. Класс точности тоже может быть стандартным (то, что называется третьим). Для этого вначале в каде задаю все правила проектирования платы.
Процесс компоновки модуля. Так как нет жёстких требований по габариту платы, то можно поступить следующим образом: элементы располагаю как это было бы оптимально для узлов, а затем стягиваю их в общий габарит платы.
Данный метод часто проигрывает в габаритах простому переносу всех компонентов в плату, но есть и свои большие плюсы. Например, он позволяет разместить и растрассировать критические узлы с минимальным влиянием друг на друга.
На картинке видно самое начало компоновки.
После компоновки согласовываю внешний вид блока с заказчиком, двигаем переключатели, светодиоды, некоторые коннекторы, меняем габаритные электролиты на несколько более компактных.
Процесс трассировки, при грамотной расстановке элементов, и достаточно свободных габаритах платы, не занимает много времени. После чего проводятся проверки, расставляется шелкография по плате.
Ну, скажите, какой проект в «наше трудное время» массового ипортозамещения делается без собственного логотипа? Вот и в данном случае человек предоставил своё лого для размещения на плате.
Кстати говоря, Altium отлично в несколько кликов позволяет добавить практически любой логотип на плату проекта. Главное — выбрать нужный слой шелкографии. В более старых версиях программы приходилось использовать специальный скрипт, сейчас же достаточно просто скопировать изображение в буфер обмена и потом вставить его в проект платы.
Заказ плат
Платы заказывал в Китае с вариантом сбора комплектации ими. Дело в том, что так в цене выигрываем по стоимости компонентов, нежели приобретая их в России, при этом мелкосерийная сборка сейчас на родине дешевле: человеческая сила у нас ныне ценится дешевле. Зато заказывать серии плат со сборкой на автоматах выгоднее, чем собирать тульским «Левшой» — пока автоматы там ещё дешевле, чем люди тут. Но не стоит отчаиваться...
Вот так выглядит посылка с Китая. Видим плату и элементы по пакетикам. Разложено всё с умом, удобно — как для людей…
Монтаж блоков
Монтаж блоков был осуществлён вручную, но с использованием проверенных временем технологий. Без паяльного трафарета, но зато паста наносилась дозатором и компоненты на неё устанавливались пинцетом вручную. После этого блок поехал в печку на оплавление. Результат — с пылу-жару — высший класс!
После печки были доставлены выводные элементы обычным паяльником.
В финале, после сборки, блок стал выглядеть так:
После монтажа идёт этап контроля.
Сначала визуальный контроль: всё нормально стоит и никуда не сползло. Затем мультиметром проверяются ответственные цепи на КЗ (питания, высоковольтные линии, линии высоких токов). И только после этого блок уходит на пусконаладочные работы.
Пусконаладка
Первым делом подаётся напряжение питания с лабораторного источника питания с малым током ограничения. Проверяются напряжения источников питания, в норме ли они. Проверяю их осциллографом и сразу же контролирую их пульсации.
Микроконтроллер
Выше писал, что на удивление был выбран и заложен в схему не Китайский артери или wch или любой другой от гига, а американский 32-разрядный микроконтроллер на базе Arm Cortex-M4F.
А связано это с 4 причинами:
Во-первых, знаю его, и запустить блок именно на нём супер просто и быстро. Он уже был использован неоднократно и проявил себя отлично. Порог вхождения в него и в среду чрезвычайно низкий. Среда бесплатная и удобная.
Во-вторых, этот электронный блок разрабатывался в конце 2022, когда кризис кремния + санкции сделали всеми любимые stm какой-то фантастически дорогой редкостью, а упоротые заявления директоров ST ещё и подорвали веру в то, что в мелкосерийных устройствах стоит применять их продукты. А эти контроллеры, не знаю почему и как, до сих пор в избытке на складах и спокойно покупаются в РФ. На Элитане, Алиэкспрессе и на складе JLC, PCBway они лежат тысячами. При этом их цена около 5-6$ при штучной закупке. Как это происходит – не знаю, но меня устраивает подобный расклад.
В-третьих, в этих контроллерах есть все необходимые интерфейсы, а если посмотреть глубже, то даже больше. Например, вот что видим в описании про PWM: «усовершенствованное управление, включающее в себя: восемь блоков генератора широтно-импульсной модуляции, каждый с одним 16-разрядным счётчиком, два ШИМ-компаратора, генератор ШИМ-сигнала, генератор мёртвой зоны и селектор прерываний / триггеров АЦП; два ШИМ-входа для отключения с низкой задержкой; два модуля интерфейса квадратурного кодера (QEI) с позиционным интегратором для отслеживания положения кодера и определения скорости с помощью встроенного таймера». То есть, даже два энкодера, которые у меня есть в блоке, супер удобно заведутся и почти не будут отжирать программных ресурсов. Я уже не говорю про простое управление двумя H-мостами. Даташит, для тех, кто ещё может открывать сайт Texas Instruments .
В четвёртых, эрата у них отличная и полная, а комьюнити нормально собрало готовых реализаций.
Для контроллеров от Texas есть своя программа, похожая на куб от ST. Она помогает сделать распиновку на контроллере и сгенерировать ioc файл из этого. Также помогает учесть некоторые возможные проблемы при дальнейшем написании программы, когда вдруг какой-то интерфейс не ремапится.
Для работы с программой не нужно даже инструкцию читать, настолько отличная работа была проделана UX дизайнерами. Что куда нажать — понимается интуитивно. Порог вхождения, пожалуй, 5 минут. Вот так выглядит раскидка пинов в моём проекте:
Сама же прошивка пишется тоже в бесплатном Code Composer Studio.
Ну ладно, заканчиваю оду тексасу (тем более они мне не платят за рекламу — жлобы! Всё же нашёл недостаток!) и продолжу.
Пусконаладка. Продолжение.
Как и следовало ожидать, изобретённый велосипед заработал со скрипом. Именно тот драйвер верхнего плеча, с которым хотелось поэкспериментировать, доставил кучу проблем, но на самом деле подарил кучу знаний.
Сделал ещё несколько вариантов управления верхним ключом. На трансформаторе и на оптопаре. В принципе, оно как бы всё работает, но....
В конце концов решено было сделать по старому, проверенному варианту, хотя некоторые идеи я всё же сохранил.
И так, я заменил элементы "И", собранные на транзисторах, на классическую логику. И применил интегральные драйверы полумостов.
Всю эту доработку сделал на маленькой плате, которая будет вставать на первую версию моего контроллера.
Плата получилась достаточно компактная и отлично ложится на основную плату контроллера.
Понятно, что в дальнейшем, после отладки, эта схемотехника перекочует на основную плату, где и достойно займёт своё место.
Установка платы потребовала снятия всех моих предыдущих экспериментов с драйвером верхнего и нижнего ключей и снятие транзисторных элементов "И".
И после этой доработки, плата начала работать стабильно, чего от неё и ждал.
Что дальше?
Сейчас имеем рабочую плату и несколько вариантов управления. Вот и набор всего и вся для проекта.
Мне кажется, у этого проект есть интересные перспективы, хотя спрос на него точно не большой. Ну а я пока жду завершения процесса отладки и буду не спеша вылавливать косяки электронного блока, что бы в версии 2 уже всё было гут.
Может быть, ещё что-то изменится, но это уже, как говорится: совсем другая история…
Автор: RV3EFE