В рамках этой статьи я детально расскажу о разработке драйвера шагового двигателя. Я уже много лет держал в голове этот проект и хотел им заняться. Наконец такая возможность появилась: этот проект стал моей дипломной работой.
Выбор архитектуры
Тема диплома звучала так: “Проектирование системы управления шаговым двигателем”. Под эту формулировку подходит не только драйвер, но я сразу понял, что буду делать именно его.

Я согласовал тему с научным руководителем и отправился мучить DeepSeek вопросами, как же работают такие драйвера. Моё понимание принципов работы драйвера ШД на этом этапе было примерно на уровне схем, основанных на L297 и L298.

После отрезвляющей беседы с искусственным интеллектом стало понятно, что песок сыпется с этих схем и надо делать нормальный драйвер с дроблением шага. Я решил просто почитать документацию на популярную микросхему A4988.
Там всё было достаточно подробно написано, но меня смутила система стабилизации тока. В таких драйверах ток регулируется довольно топорно. Компаратор сравнивает падение напряжения на шунте с опорным напряжением и отключает ключи на фиксированный интервал времени. Причём для улучшения характеристик такой схемы были введены некоторые решения, которые выглядят как костыли. В зависимости от каких-то условий может меняться скорость спада тока, так называемый Fast Decay и Low Decay режим. Мало того, что такое решение просто некрасивое, оно еще и сомнительное с точки зрения электромагнитной совместимости. Уверен, специалисты в этой теме меня поправят, но мне кажется, что подобные непредсказуемые и нерегулярные переключения ключей приводят к ужасным широкополосным помехам, которые не отфильтруешь. Мне такое категорически не понравилось, и я решил искать схемы, в которых стабилизация тока работает плавно и с использованием ШИМ сигнала фиксированной и высокой частоты. Драйверы с таким принципом работы были быстро обнаружены в более старшем сегменте. Все они управляются микроконтроллерами или сигнальными процессорами, которые в реальном времени, на несущей частоте ШИМ сигнала, регулируют ток и вращают токи в фазах. Чтобы было не скучно, я решил разрабатывать драйвер с векторно-ориентированным принципом управления синхронной машиной с постоянными магнитами. Разрабатывать драйвер с полного нуля я не стал, а взял за основу драйвера DM556 и 2HSS57.

Функционал я хотел получить как у драйвера 2HSS57, но в качестве донора корпуса я приобрёл самый дешёвый клон DM556. Вот такое чудо там было:


Посмотрим на архитектуру типичного драйвера. В левой половине платы находится силовая часть схемы: разъём, предохранитель, резистор, какая-то кринжатина на месте компенсирующего и шунтирующего конденсатора, шунты, два полных транзисторных моста. Кучка SMD-деталей, размазанных тонким слоем в середине платы — это импровизированный драйвер затворов ключей на дискретных элементах. Синий блок переключателей служит для выбора конфигурации драйвера. В правой части платы расположены понижающие преобразователи, микроконтроллер STM8(бедняга, помолимся за него) и интерфейс управления.
С архитектурой палёного DM556 всё понятно. Но я собирался делать аналог драйвера 2HSS57, а не DM556. Драйвер 2HSS57 устроен аналогично, но имеет отдельный разъём для подключения энкодера, отдельный интерфейс связи для настройки конфигурации, более продвинутый микроконтроллер и специализированные микросхемы для управления затворами ключей. При разработке своего драйвера я придерживался более продвинутой архитектуры драйвера 2HSS57. Примерно так она выглядит в моём исполнении:

Для задания положения используется стандартный интерфейс STEP/DIR, в котором сигнал STEP сообщает драйверу о необходимости сделать шаг, а сигнал DIR определяет направление шага. Интерфейс управления содержит дополнительный вход ENABLE (для выключения драйвера) и выход ALERT (выдаёт сигнал тревоги при внутренней ошибке драйвера). Интерфейс энкодера содержит выход питания 5 вольт и два входа для импульсов A и B. Для конфигурации предусмотрен USB-порт, через который драйвер подключается к ПК для тонкой настройки параметров. Настраиваемые параметры могут быть сохранены в ПЗУ. Многие элементы выбираются только после проведения предварительных расчётов, поэтому в первую очередь определяются те элементы, которые можно выбрать без сложных расчётов, опираясь только на основные целевые характеристики и обоснованные предположения.
Выбор микроконтроллера
Одним из важнейших компонентов драйвера, который выбирается в первую очередь, является микроконтроллер. Он должен обслуживать задачи с достаточной скоростью и детерминированностью. Для систем реального времени предпочтительны специализированные промышленные микроконтроллеры и DSP, а не микроконтроллеры общего назначения. Основные критерии выбора: наличие специализированной периферии (продвинутые таймеры с ШИМ, квадратурные счётчики для энкодера, быстрый АЦП, встроенные компараторы и усилители), производительное ядро, развитая система прерываний, математические ускорители и высокая тактовая частота.
В качестве основного микроконтроллера выбран STM32G431RBT6. Данный микроконтроллер полностью удовлетворяет всем перечисленным требованиям: он обладает необходимой периферией, производительным ядром и развитой системой прерываний. Кроме того, он является достаточно современным, распространённым, доступным по цене и не дефицитным.
Параметр |
Значение |
Ядро |
Cortex-M4 |
Производительность, DMIPS |
213 |
Частота тактирования, МГц |
170 |
Объём ПЗУ, кБ |
128 |
Объём ОЗУ, кБ |
32 |
Скорость преобразования АЦП, мкс |
0.25 |
Разрешение АЦП, бит |
12-16 |
Математические ускорители |
DSP, FPU, CORDIC, FMAC |
Количество таймеров |
14 |
Количество продвинутых таймеров |
4 |
Напряжение питания, В |
1.71 – 3.6 |
Максимальный ток потребления, мА |
150 |
Выбор усилителя датчика тока
Следующим ключевым элементом схемы является усилитель сигнала с датчика тока. Для измерения тока используется шунт, установленный после H-моста. Такая топология позволяет измерять величину и направление тока в обмотке в любой момент времени. Однако прямое измерение падения напряжения на шунте встроенным АЦП микроконтроллера в данной точке невозможно, так как напряжение на шунте относительно общей массы достигает напряжения силового питания.
Для решения этой задачи был выбран специализированный усилитель INA240A1. Он способен измерять дифференциальное напряжение на шунте в широком диапазоне напряжений. Микросхема усиливает сигнал с фиксированным коэффициентом усиления и формирует однополярное выходное напряжение, смещенное на половину опорного, что позволяет измерять как положительный, так и отрицательный ток. Максимальное напряжение питания драйвера составляет 60 вольт, а микросхема INA240A1 допускает синфазное напряжение до 80. Целевая частота ШИМ составляет 50 кГц, а полоса пропускания усилителя по уровню –3 дБ равна 400 кГц, что почти на порядок превышает частоту сигнала, гарантируя передачу формы тока без критических искажений.
Параметр |
Значение |
Синфазное напряжение, В |
-4 – 80 |
Коэффициент усиления |
20 |
Полоса пропускания (–3 дБ), кГц |
400 |
Напряжение питания, В |
2.7 – 5.5 |
Максимальный ток потребления, мА |
1.8 |
Выбор ПЗУ
Конфигурация драйвера должна храниться в ПЗУ, но в микроконтроллере STM32G431RBT6 нет EEPROM памяти, есть только FLASH, но её неудобно использовать. Учитывая низкую цену и простоту внешних микросхем EEPROM памяти, принято решение использовать микросхему M24C02.
Параметр |
Значение |
Тип |
EEPROM |
Интерфейс |
I2C |
Объём, Б |
256 x 8 |
Напряжение питания, В |
2.7 – 5.5 |
Максимальный ток потребления, мА |
5 |
Выбор оптопар
Для интерфейса энкодера и для интерфейса STEP/DIR нужны высокоскоростные оптопары с логическими уровнями на выходе. При мелком микрошаге и максимальной скорости вращения двигателя частота следования импульсов может достигать сотен килогерц, поэтому необходимо выбрать оптопары, скорость работы которых достаточна для пропускания такой высокой частоты. Сигналы ENABLE и ALERT могут быть переданы с помощью обычных низкоскоростных оптопар.
В качестве высокоскоростных оптопар выбраны двухканальные оптопары HCPL2631M, а в качестве низкоскоростных – PC817.
Параметр |
Значение для HCPL2631M |
Значение для PC817 |
Напряжение питания, В |
4.5 – 5.5 |
- |
Ток потребления, мА |
15 |
- |
Ток диода, мА |
10 – 15 |
10 – 30 |
Время переключения, нс |
45 – 100 |
4000 – 18000 |
Выбор преобразователя интерфейсов
Далее нужно выбрать USB-UART преобразователь. Эта микросхема служит только для перепрошивки и конфигурации, поэтому к ней предъявляются пониженные требования. Гальваническая развязка, высокая точность, высокая термостабильность и электрическая защита не требуется. Возможно использование микросхемы CH340N.
Параметр |
Значение |
Скорость передачи данных, бит/с |
50 – 2000000 |
Напряжение питания, В |
4.0 – 5.3 |
Максимальный ток потребления, мА |
20 |
На этом элементы, не требующие расчётов, закончились. Далее выбор элемента должен сопровождаться расчётом или математической моделью или качественным обоснованием.
Расчёт ключей и драйвера ключей
Для расчёта ключей и драйвера необходимо задаться исходными данными. Часть этих данных уже определена, другая часть должна быть задана в процессе расчёта на основании разумных предположений или общепринятых практик.
Параметр |
Значение |
Максимальное напряжение питания Umax, В |
60 |
Максимальный ток обмотки Imax, А |
5 |
Частота ШИМ PWMf , кГц |
50 |
Максимальный коэффициент заполнения ШИМ PWMkmax, % |
95 |
Минимальный коэффициент заполнения ШИМ PWMkmin, % |
5 |
Температура окружающей среды Tamb, °C |
30 |
Температура кристалла транзистора максимальная Tmax, °C |
90 |
Необходимо выбрать N-канальный MOSFET транзистор с максимальным напряжением порядка 100 вольт и током в несколько раз больше максимального тока обмотки. Рассматривается возможность применения транзистора IRF540NPBF. Заявленное максимальное напряжение транзистора 100 вольт и с ростом температуры оно не уменьшается. Согласно графику зависимости максимального тока от температуры, максимальный ток при Tmax = 90°C находится на уровне 24 ампер. Запас по току многократный.

Расчет дальнейших параметров ключа следует проводить совместно с расчетом параметров микросхемы драйвера для управления этим ключом. В качестве драйвера ключей выбрана микросхема IR2104, которая представляет собой драйвер верхнего и нижнего ключа полумоста. Этот драйвер поддерживает логические уровни 3.3 вольта, имеет встроенную защиту от сквозного тока и аппаратную задержку при переключении (dead time).
Дополнительные данные представлены в таблице ниже, эти данные взяты из официальной документации на микросхему IR2104 и на ключи IRF540NPBF. В соответствии с графиками выбрано сопротивление перехода сток-исток, значение параметров CISS, CRSS и рекомендованное значение сопротивления токоограничительного резистора на затворе. Сопротивление подтягивающего резистора на затворе ключа указано 10 МОм, потому что этот резистор не установлен.


Параметр |
Значение |
Напряжение питания драйвера ключей UDRV, В |
12 |
Суммарный заряд включения силового ключа QG, нКл |
50 |
Заряд восстановления обратного сопротивления QRR, нКл |
760 |
Сопротивление между затвором и истоком RGS, кОм |
10000 |
Падение напряжения на бутстрепном диоде UF, В |
1 |
Величина пульсаций напряжения на бутстрепном конденсаторе ΔUBST, В |
1 |
Ток схемы сдвига уровня ILK, мкА |
50 |
Ток питания драйвера IQBS, мкА |
55 |
Ток утечки затвора силового транзистора IGS, нА |
100 |
Ток утечки бутстрепного диода при максимальном входном напряжении ILKD, мкА |
10 |
Сопротивление токоограничительного резистора на затворе ROR и ROF, Ом |
33 |
Пороговое напряжение затвор – исток UGSth, В |
2 |
Напряжение, при котором наступает эффект «Миллера» UGP, В |
5.5 |
Сопротивление перехода сток-исток с учетом температурного коэффициента RDS, мОм |
70.4 |
Входная емкость транзистора CISS, пФ |
1960 |
Обратная переходная емкость транзистора CRSS, пФ |
40 |
Внутреннее сопротивление затвора RG, Ом |
5.1 |
Тепловое сопротивление кристалл – подложка RthJC |
1.15 |
Тепловое сопротивление подложка - диэлектрическая прокладка – радиатор RthCS |
1.5 |
Максимальное напряжение затвор-исток:

Ток утечки:

Минимальная емкость бутстрепного конденсатора:

Ток через бутстрепный диод:

В качестве бутстрепного конденсатора выбран керамический конденсатор GRM21BR61H475KE51L ёмкостью 4.7мкФ.
В качестве бутстрепного диода выбран быстродействующий диод ES1D-E3/61T на средний ток 1A.
Напряжение затвор-исток:

Время включения транзистора:

Время выключения транзистора:

При частоте 50 кГц и при минимальном коэффициенте заполнения 5% время удержания транзистора в фиксированном состоянии должно быть больше времени необходимого на включение и выключение.
Время включения и выключения:

Минимальное время удержания транзистора:

Время удержания транзистора в фиксированном положении при минимальном коэффициенте заполнения импульса ШИМ больше времени включения и выключения, значит сопротивления токоограничительных резисторов на затворе выбрано верно для заданных параметров ШИМ.
Расчёт радиатора
Мощность потерь:

Разница температур кристалл – среда:

Тепловое сопротивление радиатора:

Коэффициент теплоотдачи от радиатора в окружающую среду σ = 1.5.
Эмпирическая формула расчёта площади радиатора:

В каждом Н-мосте единовременно открыты только 2 ключа, поэтому необходимо увеличить полученную для одного ключа площадь радиатора в 4 раза. Минимальная необходимая площадь радиатора:

Выбран радиатор от драйвера DM556, который имеет площадь ребристой поверхности 350 см2.
Расчёт компенсирующего конденсатора
В звене постоянного тока, перед H-мостом, требуется установка компенсирующего конденсатора. Данный компонент является одним из критически важных элементов схемы. Конденсатор выполняет роль буфера для реактивного тока, циркулирующего между ним и обмоткой двигателя. Через него протекает значительный импульсный ток высокой частоты, поэтому он должен обладать низким эквивалентным последовательным сопротивлением (ESR) и малой эквивалентной последовательной индуктивностью (ESL), а также выбираться по допустимому значению тока.
Прежде, чем приступить к выбору конденсатора необходимо посчитать необходимую ёмкость и величину тока.
Параметр |
Значение |
Максимальное напряжение питания Umax, В |
60 |
Максимальный ток обмотки Imax, А |
5 |
Частота ШИМ PWMf , кГц |
50 |
Коэффициент пульсаций напряжения ku |
0.2 |
Максимальный коэффициент заполнения ШИМ PWMk_max, % |
95 |
Минимальный коэффициент заполнения ШИМ PWMk_min, % |
5 |
Амплитуда пульсаций напряжения на компенсирующем конденсаторе:

Ёмкость компенсирующего конденсатора:

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

Максимальный импульсный ток через конденсатор:

В документации на конденсаторы редко указан максимальный ток, потому что он зависит от множества факторов, но его можно рассчитать исходя из тангенса угла потерь, емкости, частоты и рассеиваемой мощности. Такой метод оценки тока приблизительный, но достаточный для инженерных задач.
Рассмотрим возможность использования сборки из конденсаторов К73-17, JFB02A475K275000B.

Параметр |
Значение |
Максимальное напряжение Uк, В |
100 |
Емкость Ск, мкФ |
4.7 |
Тангенс угла потерь tg(δ)к |
0.008 |
Эквивалентное последовательное сопротивление:

Для оценки максимального тока таким методом необходимо предположить рассеиваемую мощность корпуса конденсатора. В документации рассеиваемая мощность не указана, но известны габариты 27.5мм*20мм 30мм. Это достаточно крупный корпус, можно грубо оценить рассеиваемую мощность в 1 Вт
Формула расчёта мощности:

Мощность будет выделяться на конденсаторе только в момент зарядки и разрядки, поэтому формула расчёта выделившейся мощности может быть записана так:

Тогда:

При заданных условиях один конденсатор К73-17, JFB02A475K275000B способен пропустить приблизительно 43 ампера импульсного тока. Для достижения требуемого импульсного тока в 134,4 ампера и требуемой ёмкости 11.2 мкФ необходимо собрать сборку из 4х параллельно подключенных конденсаторов.
Выбор шунтирующих конденсаторов
Помимо плёночных компенсирующих конденсаторов, которые забирают на себя большую часть нагрузки, хорошим тоном считается установка керамических шунтирующих конденсаторов малой ёмкости вплотную к контактам ключей для шунтирования ВЧ помех.

Для шунтирования ВЧ помех будет установлено 4 конденсатора CC1812KKX7RYBB474. Эти конденсаторы выбраны с большим запасом по напряжению и в достаточно крупных корпусах. Для шунтирующих конденсаторов подробный расчёт не обязателен, потому что они не так сильно нагружены, как компенсирующие. Выбор основан на рекомендациях и успешных практиках.
Минимальные требуемые параметры и ожидаемые характеристики от конденсаторной сборки:
Параметр |
Минимальное значение |
Ожидаемое значение |
Напряжение, В |
100 |
100 |
Ёмкость, мкФ |
11.2 |
18.8 (20.6) |
Импульсный ток, А |
134.4 |
172 |
Выбор системы питания
На данном этапе надо определиться с системой питания. Драйвер требует 4 уровня напряжения. Силовое питание составляет 18 – 60 вольт, питание драйверов ключей составляет 12 вольт, питание оптопар и USB-UART преобразователя составляет 5 вольт, питание микроконтроллера, усилителей и памяти составляет 3.3 вольта. Топология выбрана последовательная. Напряжение 18 – 60 будет понижено до 12 вольт с помощью импульсного DC-DC преобразователя, затем напряжение 12 вольт будет понижено до 5 вольт с помощью линейного стабилизатора и, наконец, напряжение 5 вольт будет понижено до 3.3 вольт с помощью второго линейного стабилизатора.
Выбор стабилизатора напряжения линии 3.3В
Начать следует с расчёта параметров линейного стабилизатора напряжения на 3.3 вольта. Точный расчёт не требуется, достаточно грубой оценки максимального тока потребления всех устройств на шине питания 3.3 вольта. Энергопотребление подтягивающих резисторов и индикаторов было грубо, но с большим запасом учтено в момент, когда был взят максимальный ток потребления микроконтроллера, который в таких цепях является источником тока для некоторых других потребителей.
Потребитель |
Ток потребления одного потребителя, мА |
Количество, шт |
Суммарный ток, мА |
STM32G431RBT6 |
150 |
1 |
150 |
INA240A1 |
1.8 |
2 |
3.6 |
M24C32 |
5 |
1 |
5 |
Итого: |
158.6 |
||
Максимальный ток потребления всех потребителей на шине 3.3 вольта не превышает 158.6 мА. Выделяемая мощность на корпусе линейного стабилизатора рассчитывается по формуле:

где Uвх – напряжение на входе стабилизатора,
Uвых – напряжение на выходе стабилизатора,
I – ток.
В качестве линейного стабилизатора на 3.3 вольта выбран стабилизатор LD1117S33CTR. Стабилизатор выбран в корпусе SOT-223, этот корпус имеет теплоотводящую подложку, которая отводит тепло на плату. Стабилизатор взят с многократным запасом по мощности.
Параметр |
Значение |
Максимальное входное напряжение, В |
15 |
Минимальное входное напряжение, В |
4.5 |
Выходное напряжение, В |
3.3 |
Максимальный ток, мА |
800 |
Выбор стабилизатора напряжения линии 5.0В
Напряжение 5 вольт тоже обеспечивается линейным стабилизатором. Важно учесть не только ток потребления микросхем на линии 5 вольт, но и ток потребления всей линии 3.3 вольта, который был посчитан выше. Помимо потребителей на плате, от 5 вольт питается энкодер внутри двигателя. Ток потребления оптического инкрементального энкодера не превышает 100 мА.
Потребитель |
Ток потребления одного потребителя, мА |
Количество, шт |
Суммарный ток, мА |
HCPL2631M |
15 |
2 |
30 |
CH340N |
20 |
1 |
20 |
LD1117S33CTR |
158.6 |
1 |
158.6 |
Энкодер |
0.1 |
1 |
100 |
Итого: |
308.6 |
||
Максимальный ток потребления всех потребителей на линии 5 вольт не превышает 308.6 мА. Выделяемая мощность P(ст 5.0) на корпусе линейного стабилизатора рассчитывается по формуле:

где Uвх – напряжение на входе стабилизатора, Uвых – напряжение на выходе стабилизатора, I – ток. В качестве линейного стабилизатора на 5 вольт выбран стабилизатор L7805ABD2T-TR. Стабилизатор выбран в корпусе D2PAK, этот корпус имеет теплоотводящую подложку, которая отводит тепло на плату. Размер платы 100x70 мм, площадь платы 70 см^2. Основываясь на информации из технической документации и учитывая, что на плате имеется ещё несколько источников тепла, тепловое сопротивление кристалл – среда RθJA принято равным 30 °C/Вт.
Температура кристалла может быть найдена по формуле:

Согласно документации, максимальная допустимая температура кристалла 125 °C. Соответственно стабилизатор выбран правильно.
Параметр |
Значение |
Максимальное входное напряжение, В |
35 |
Минимальное входное напряжение, В |
7 |
Выходное напряжение, В |
5 |
Максимальный ток, мА |
1500 |
Выбор стабилизатора напряжения линии 12В
Напряжение 12 вольт должно обеспечиваться импульсным стабилизатором напряжения, потому что разница входного и выходного напряжения очень велика. Необходимо посчитать максимальный ток на линии 12 вольт. Важно учесть не только ток потребления линии 5 вольт, но и средний ток, который расходуется на перезаряд затворов силовых ключей.
Средний ток перезаряда затворов двух ключей в полумосте может быть найден по следующей формуле:

Потребитель |
Ток потребления одного потребителя, мА |
Количество, шт |
Суммарный ток, мА |
Затворы ключей полумоста |
162 |
4 |
648 |
L7805ABD2T-TR |
308.6 |
1 |
308.6 |
Итого: |
956.6 |
||
Расчёт показал, что ток потребления на линии 12 вольт не превышает 956.6 мА. Необходимо выбрать импульсный DC-DC стабилизатор, номинальный ток которого не менее 1 ампера. Выбрана микросхема LM5164DDAR. В технической документации есть типовая схема подключения с рекомендованными номиналами компонентов, поэтому их расчёт не требуется.

Обозначение на схеме |
Номинал |
CIN |
3x0.47 мкФ, 250 В |
СBST |
2.2 нФ, 250 В |
СA |
3.3 нФ, 100 В |
CB |
100 пФ, 100 В |
COUT |
3x22 мкФ, 25 В |
RA |
453 кОм, 0.25 Вт |
RFB1 |
453 кОм, 0.125 Вт |
RFB2 |
49.9 кОм, 0.125 Вт |
RRON |
100 кОм, 0.125 Вт |
L0 |
68 мкГн, 1.7 А |
Параметр |
Значение |
Максимальное входное напряжение, В |
100 |
Минимальное входное напряжение, В |
15 |
Выходное напряжение, В |
12 |
Максимальный ток, мА |
1000 |
Дополнительные компоненты системы питания
Система питания такого устройства, как драйвер двигателя, нуждается в дополнительной защите. Необходимо установить плавкий предохранитель и защитный TVS диод на линию 18 – 60 вольт. Предохранитель защищает схему от возгорания при коротких замыканиях, а TVS диод работает как мощный стабилитрон, который не позволяет напряжению на линии питания подняться выше определенного порога. В момент резкого торможения, собственная ЭДС двигателя представляет угрозу для полупроводниковых элементов схемы, поэтому установка TVS диода обязательна. Самым низковольтным элементом в силовой цепи является усилитель INA240A1, его максимальное заявленное напряжение составляет 80 вольт. Защитный TVS диод должен быть подобран таким образом, чтобы напряжение не могло подняться выше 80 вольт.
В качестве защитного TVS диода выбран диод 1.5KE56A. В таблице представлены основные характеристики диода.
Параметр |
Значение |
Типовое рабочее напряжение, В |
56 |
Максимальное напряжение фиксации, В |
77 |
Максимальный импульсный ток, А |
200 |
Максимальный ток на входе драйвера может быть рассчитан по формуле:

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

где Uвых – выходное напряжение стабилизатора,
Iвых – выходной ток стабилизатора,
Uвхмин – минимальное входное напряжение стабилизатора,
u – КПД принят за 92%.
Расчёт максимального тока собственного потребления драйвера:

Расчёт максимального входного тока драйвера:

В качестве плавкого предохранителя выбран предохранитель 0451008.MRL
В таблице представлены основные характеристики предохранителя 0451008.MRL.
Параметр |
Значение |
Максимальное рабочее напряжение, В |
125 |
Номинальный ток, А |
8 |
Линия 5 вольт выведена на клеммы для подключения энкодера. Длинные провода питания энкодера подвержены воздействию электромагнитных помех. Случайный пик наведённого напряжения может вывести из строя энкодер или другие элементы запитанные от линии 5 вольт. Для защиты от перенапряжения необходимо установить защитный TVS диод. Для защиты линии 5 вольт выбран диод SMBJ5.0A. В таблице представлены основные характеристики диода SMBJ5.0A.
Параметр |
Значение |
Типовое рабочее напряжение, В |
5 |
Пробивное напряжение, В |
6.4 |
Максимальный импульсный ток, А |
65.2 |
Проектирование полной схемы и печатной платы
На данном этапе архитектура драйвера определена и основные компоненты подобраны. Необходимо спроектировать полную схему устройства и трассировать печатную плату. Разработка печатной платы ведётся с использованием специализированного программного обеспечения для автоматизированного проектирования KiCad. Схема разбита на функциональные блоки. Функциональные блоки располагаются на нижнем уровне иерархии. Соединение функциональных блоков между собой выполняется на верхнем уровне иерархии.
Схема системы питания
На входе системы питания устанавливается предохранитель и защитный TVS диод. Линия питания 18 – 60 вольт разделяется на две ветви. Первая ветвь силовая, она напрямую подключается к силовой части преобразователя частоты. Параллельно к силовой ветви подключен делитель напряжения, этот делитель необходим для измерения напряжения питания. Напряжение силового питания может меняться в очень широких пределах, система управления двигателем должна учитывать это изменение. Средняя точка делителя подключена к одному из входов АЦП микроконтроллера. Вторая ветвь слаботочная, она предназначена для собственного питания драйвера. Слаботочная ветвь отделена от силовой последовательно включенным диодом. Этот диод отделяет ёмкость компенсирующих конденсаторов и ёмкости входных конденсаторов DC-DC преобразователя. Этот диод уменьшает влияние двух ветвей друг на друга.

Схема преобразователя интерфейсов
Для прошивки и конфигурации через USB интерфейс установлен преобразователь интерфейсов CH340N. Этот преобразователь имеет высокую степень интеграции и не требует большого количества внешних элементов. Требуется установка только двух керамических конденсаторов емкостью 2.2 мкФ на линии питания 5 и 3.3 вольта. Линия 3.3 вольта микросхемы CH340N является выходом, а не входом. Эта линия не используется и не подключена, потому что в схеме уже имеется отдельный стабилизатор на 3.3 вольта.

Схема подключения микросхемы EEPROM памяти
Для хранения конфигурируемых параметров применяется микросхема EEPROM памяти M24C02. Для передачи данных используется интерфейс I2C. Этот интерфейс подключается к микроконтроллеру напрямую. Для корректной работы необходимо использовать подтягивающие резисторы на каналах SDA и SCL. Микроконтроллеры STM32 имеют внутренние подтягивающие резисторы, которые могут быть программно подключены, поэтому установка внешних резисторов не обязательна. Вблизи микросхемы рекомендуется установить керамический конденсатор ёмкостью 2.2 мкФ на линию питания 3.3 вольта.

Схема подключения оптопар
Опторазвязка в первую очередь обеспечивает корректную работу дифференциальных каналов. Наведенная помеха не оказывает значительного влияния на дифференциальную гальванически разомкнутую линию передачи сигналов. Напряжение сигнальных линий Uс=5 В. Необходима установка токоограничительных резисторов. Сопротивление токоограничительных резисторов рассчитывается по формуле:

где Uс – напряжение сигналов,
Uд – напряжение диода,
Iд – ток диода.
Согласно документации Uд=1.15 В, Iд=15 мА.
Сопротивление токоограничительных резисторов:

Номинал токоограничительных резисторов выбран равным 220 Ом.
Для увеличения скорости включения и выключения диода рекомендуется установка конденсатора параллельно токоограничительному резистору. Рекомендованное значение ёмкости 10 нФ.
Каждый выход оптопары с открытым коллектором требует установки подтягивающего резистора к линии +3.3 вольта. Микроконтроллер имеет внутренние подтягивающие резисторы, но их сопротивление слишком велико. Фронт сигнала сильно завален при таком сопротивлении. Рекомендуется установка внешних подтягивающих резисторов для обеспечения тока подтяжки Iп порядка 5 мА.
Расчет сопротивления подтягивающих резисторов:

Номинал подтягивающих резисторов выбран равным 680 Ом.

Схема подключения усилителей
Микросхема INA240A1 не требует установки внешних элементов, кроме шунтов. Шунты являются частью силовой цепи и подключаются к входам A_IN_SENS+ и A_IN_SENS-. На рисунке представлена схема подключения усилителей, но шунты расположены в другом функциональном блоке. Схема включения соответствует сценарию, когда опорным напряжением является напряжение питания 3.3 вольта. Для АЦП микроконтроллера это напряжение также является опорным. Абсолютное значение опорного напряжения не влияет на соотношение тока в обмотках двигателя и соответственно не влияет на точность позиционирования. Линейный стабилизатор обеспечивает достаточную стабильность питающего напряжения.

Схема подключения микроконтроллера
Первым делом к микроконтроллеру необходимо подвести питание. Далее необходимо подключить контакты специального назначения. Контакт NRST должен быть подтянут к напряжению питания подтягивающим резистором и шунтирован конденсатором. Контакт BOOT0 должен быть подтянут подтягивающим резистором к минусу питания.
Для перепрошивки устройства планируется использовать стандартный загрузчик, который позволяет перепрошивать микроконтроллер через последовательный интерфейс. Для введения микроконтроллера в режим перепрошивки необходимо удерживать контакт BOOT0 в состоянии логической единицы в момент сброса. Сброс микроконтроллера может быть выполнен программно, а вот вход в режим перепрошивки, при использовании стандартного загрузчика, программно быть выполнен не может. Для решения этой проблемы к контакту BOOT0 подключен конденсатор и один из выходов GPIO через диод. Такое дополнение позволяет программно-аппаратно вводить микроконтроллер в режим перепрошивки без ручного вмешательства. Команда на перепрошивку может быть получена любым удобным способом, например, через последовательный порт. Выход GPIO устанавливает на контакте BOOT0 логическую единицу, а конденсатор удерживает эту логическую единицу в течение определённого времени. В то же самое время производится программный сброс микроконтроллера. Таким образом выполняются все необходимые условия для входа в режим перепрошивки. Так нельзя перепрошить микроконтроллер в первый раз, зато можно перепрошивать в последующем. Предполагается, что таким образом будет производиться обновление прошивки драйвера пользователем, а не производителем.

Схема подключения драйверов ключей
Микросхема IR2104 требует установки бутстрепного конденсатора, диода и токоограничительных резисторов. Параметры этих компонентов были рассчитаны ранее.

Силовая схема
Силовая часть схемы состоит из двух H-мостов, компенсирующих конденсаторов и токоизмерительных шунтов. Компенсирующие и шунтирующие конденсаторы должны быть расположены максимально близко к ножкам ключей. Расположение токопроводящих дорожек должно быть выбрано таким образом, чтобы площадь сечения цепей была минимальной.

Схема связей между функциональными блоками

Трассировка печатной платы
Печатная плата разработана специально под выбранный корпус, который по совместительству является радиатором. Наиболее удачное расположение ключевых компонентов в таком корпусе хорошо известно.
В левой половине платы располагается силовая часть схемы. Для плотного прижима подложек ключей к радиатору предусмотрены четыре отверстия с нарезанной резьбой в которые вкручиваются прижимные винты. Ключи запаиваются на заднюю часть платы, их подложки изолируются от радиатора тонкой термопроводящей прокладкой. На передней стороне платы, прямо над ключами, устанавливаются пленочные компенсирующие конденсаторы. На левом краю платы установлен предохранитель и защитный TVS диод. На нижнем краю платы установлены горизонтальные клеммники и индикатор состояния. Правую половину платы занимают все остальные узлы. На этой стороне платы расположены стабилизаторы напряжения, микроконтроллер, драйверы ключей, усилители, память, преобразователь интерфейсов, разъем USB и оптопары.
Рекомендуемое количество слоёв для такой печатной платы от 2 до 4. Использование четырёхслойной платы позволило бы расположить токопроводящие дорожки значительно более удачным образом, чем при использовании двухслойной платы, но прототип решено трассировать с использованием только двух слоёв.





Система управления
Для шагового двигателя с обратной связью по положению подходит векторно-ориентированный принцип управления. Суть векторно-ориентированного управления заключается в том, чтобы для поддержания момента на валу двигателя отклонять вектор магнитного поля статора на определённый угол относительно магнитного поля ротора. Угол поворота вала шагового двигателя зависит от соотношения тока в обмотках. В отличие от трехфазных двигателей, шаговый двигатель имеет две раздельные обмотки. Это позволяет установить два независимых регулятора тока. Ток в первой обмотке должен быть пропорционален синусу угла поворота, а во второй косинусу угла поворота. При этом все углы поворота векторов удобно представить в виде целого числа, которое соответствует номеру дискретного шага. На рисунке (а) электрический угол 90° эквивалентен смещению ведущего вектора на 20 шагов энкодера, а на рисунке (б) электрический угол 0° эквивалентен смещению ведущего вектора на 0 шагов энкодера.

Система управления состоит из пропорционально-интегрального (ПИ) регулятора положения, который на выходе выдаёт нормализованное вещественное значение требуемого момента от -1.0 до +1.0, где -1.0 — полный назад, 0.0 — отсутствие момента, +1.0 — полный вперёд. Полученное значение умножается на количество дискретных шагов, эквивалентное электрическому углу 90°, и суммируется с текущим дискретным положением вала. Таким образом получается механический угол поворота ведущего вектора поля статора выраженный в дискретных шагах.
Такой способ регулирования момента примечателен тем, что даже при нулевом моменте, когда вектор поля статора сонаправлен с вектором поля ротора, через обмотки двигателя течёт ток. Это неэкономично и нагревает двигатель, но взамен помогает удерживать вал в определённом положении. Тут стоит принять во внимание, что для шаговых двигателей такой режим работы абсолютно нормален.
Для получения целевых токов в фазах необходимо сделать следующие действия:
- преобразовать механический угол поворота ведущего вектора в электрический угол поворота ведущего вектора путем нахождения остатка от деления на отношение количества шагов в механическом периоде к количеству шагов в электрическом периоде;
- использовать получившийся электрический угол, выраженный в дискретных шагах, в качестве аргумента в таблице поиска синусов и косинусов;
- умножить получившиеся значения синуса и косинуса на номинальное значение тока обмотки.
Затем происходит поиск ошибки между целевыми значениями тока и измеренными значениями тока. Эта ошибка поступает на входы ПИ регуляторов тока, которые стремятся поддерживать заданный ток в каждой обмотке. Для обеспечения одинаковой реакции регуляторов при разном напряжении питания происходит деление выходных значений регуляторов на напряжение питания. Получившиеся значения поступают в блок генератора ШИМ сигнала. Регулятор тока работает на двойной частоте ШИМ — 100 кГц, а регулятор положения — на частоте 10–50 кГц.
Стоит обратить внимание на то, что количество шагов на механический оборот вала определяется программно: путём умножения коэффициента интерполяции на количество импульсов энкодера на оборот. Такое увеличение количества шагов не влияет на точность позиционирования, но повышает плавность хода и устраняет ошибку квантования, которая может привести к дребезгу вблизи заданной позиции.
В системе нет петли обратной связи по скорости, потому что этот драйвер не является полноценным контроллером сервопривода, ему не нужно планировать или поддерживать скорость. Интерфейс STEP/DIR требует от драйвера только одного - сделать шаг точно и быстро. Драйверу не нужно делать шаг с какой-то определённой скоростью. Количество импульсов на канале STEP определяет количество шагов, а частота их следования определяет скорость вращения. Планированием траектории, заданием скорости и положения управляет внешний контроллер, а не драйвер двигателя.
В среде MATLAB Simulink выполнено моделирование части системы. На рисунке представлена система, моделирующая работу шагового двигателя в микрошаговом режиме с двумя независимыми регуляторами тока, которые поддерживают в обмотках ток синусоидальной и косинусоидальной формы. Для моделирования электрической цепи использована библиотека Simscape. Схема состоит из источника постоянного напряжения, компенсирующего конденсатора, двух H-мостов, двух датчиков тока, шагового двигателя, генератора симметричного ШИМ сигнала, системы управления током и системы компенсации входного напряжения.
Синей и зелёной линией показан заданный ток в обмотках, а жёлтой и оранжевой линией показан измеренный ток. Ожидаемо, измеренный ток стремится к заданному. Имеется незначительное смещение по фазе, вызванное задержкой регулятора.




К сожалению, симулировать полную математическую модель не получилось из-за очень высокой вычислительной нагрузки на симулятор и недостатка оперативной памяти для моделирования достаточно длительного периода работы.
Разработка прошивки для микроконтроллера
Микроконтроллер STM32G431RBT6 содержит в себе много специализированных периферийных устройств, которые необходимы для управления электроприводом. Кроме того, имеется возможность выбирать способы взаимодействия периферийных устройств между собой для достижений максимальной производительности системы. Для измерения тока используется АЦП ADC1. Для генерации ШИМ сигнала используется продвинутый таймер TIM1. Для подсчёта задающих импульсов STEP/DIR и импульсов энкодера A/B используются таймеры TIM3 и TIM4.
Таймер TIM1 способен генерировать ШИМ сигнал сразу на нескольких каналах с прямым и инверсным выходом. Внутренний счётчик генератора сигнала настроен таким образом, чтобы первую половину периода счёт шёл вверх, а вторую половину шёл вниз. В момент смены направления счёта срабатывает аппаратный триггер, который запускает чтение каналов АЦП. Момент срабатывания триггера никогда не совпадает с моментом коммутации ключей. АЦП запускается ровно в тот момент, когда ток в обмотках стабильно нарастает или стабильно спадает. Измерение тока в определённые моменты времени по команде таймера, который управляет ключами, позволяет с достаточной точностью получить среднее за период ШИМ значение тока в обмотке.
На рисунке показана диаграмма тока в обмотке (зелёная линия) и диаграмма значений счётчика таймера (красная линия). На временной шкале отмечен момент начала и окончания чтения аналоговых входов. Важно, чтобы в момент чтения аналоговых входов не произошло коммутации. Это условие накладывает ограничение на максимальный и минимальный коэффициент заполнения ШИМ сигнала. Из документации на микроконтроллер известно, что чтение трёх каналов АЦП занимает порядка 1 микросекунды. При частоте ШИМ сигнала 50 килогерц длительность периода составляет 20 микросекунд. При симметричном ШИМ это означает, что минимальный коэффициент заполнения 5%, а максимальный 95%.

Запуск АЦП происходит аппаратно без участия процессора, поэтому необходимо использовать контроллер DMA, который автоматически записывает считанные значения в специально выделенную область памяти. В момент, когда DMA завершает передачу данных в память, вызывается прерывание. На момент входа в вектор прерывания данные с АЦП уже готовы и ожидают обработки.
Для управления шаговым двигателем с обратной связью необходим специальный алгоритм, который должен обрабатываться в векторе прерывания. Это означает, что все вычисления должны выполняться менее, чем за 9 микросекунд.
При таких жёстких ограничениях по времени необходимо использовать любые доступные способы оптимизации. Большим преимуществом микроконтроллера STM32G431RBT6 является наличие блока FPU, который предназначен для выполнения операций с числами с плавающей запятой. Кроме того, в микроконтроллере имеется аппаратный ускоритель математических функций CORDIC, который может быть использован для расчёта синуса и косинуса. Однако микрошаговый режим управления двигателем позволяет применить другой способ получения значений тригонометрических функций – таблицы поиска (lookup table). Таблицы поиска занимают много памяти, но дают максимальный выигрыш в скорости. Во время инициализации таблицы поиска заполняются предрассчитанными значениями синуса и косинуса с выбранной точностью. Кроме того, механический угол поворота вала двигателя выражен в дискретных микрошагах, которые представлены в виде целого беззнакового числа, которое без дополнительных преобразований может быть использовано в качестве индекса в таблице поиска.
Дополнительная оптимизация достигается эффективной работой с кэшем: часто используемые поля структуры кэшируются перед использованием. Используется оптимальный порядок полей структуры и выравнивание данных в памяти. Тяжёлая операция деления везде, где это возможно, заменена операцией умножения.


Я реализовал необходимый минимум в прошивке для работы двигателя. Я решил вырезать из проекта всё, что не касается непосредственно управления двигателем, чтобы не перегружать проект. Из проекта вырезан модуль передачи данных по UART и модуль для сохранения настроек в ПЗУ. Задел для самостоятельной реализации остался.
Изготовление и сборка прототипа
Неотъемлемой частью разработки является прототипирование. Математическая модель практически никогда не бывает полной и точной. Проверка работы алгоритма и всей системы целиком возможна только на реальном оборудовании. Необходимо изготовить печатную плату, собрать драйвер и установить его в испытательный стенд. Печатная плата для прототипа изготовлена в домашних условиях.
На фольгированный стеклотекстолит с двух сторон наносится плёночный фоторезист. Затем производится экспонирование и проявка фоторезиста.

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



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

Испытания прототипа на стенде
Во время испытаний снимаются осциллограммы с важных точек схемы и измеряются различные параметры. Важно проконтролировать, что характеристики драйвера близки к ожидаемым. Условия испытаний приведены в таблицах.
Параметр |
Значение |
Температура воздуха, С° |
25 |
Напряжение питания, В |
58 |
Модель двигателя |
57HSE2N-D25 |
Частота импульсов STEP, кГц |
0 - 100 |
Параметр |
Значение |
Количество пар полюсов |
50 |
Разрешение инкрементального энкодера |
4000 |
Коэффициент интерполяции |
20 |
Номинальный ток обмотки, А |
4.2 |
Критическая ошибка позиционирования |
1000 |
Инвертировать направление вращения двигателя |
НЕТ |
Инвертировать направление вращения энкодера |
НЕТ |
Инвертировать вход ENABLE |
НЕТ |
Инвертировать выход ALERT |
НЕТ |
Снимать ток с обмоток при ENABLE = FALSE |
НЕТ |
Снимать ток с обмоток при ALERT = TRUE |
ДА |
Пропорциональный коэффициент регулятора тока |
0.6 |
Интегральный коэффициент регулятора тока |
0.002 |
Интегральный лимит регулятора тока |
1.0 |
Пропорциональный коэффициент регулятора положения |
0.05 |
Интегральный коэффициент регулятора положения |
0.00001 |
Интегральный лимит регулятора положения |
1.0 |
Результаты измерений:
Параметр |
Значение |
Коэффициент пульсаций напряжения питания |
0.1 |
Предел скорости вращения двигателя, Об/мин |
1500 |
Температура радиатора через 1 час работы, С° |
38 |
Абсолютная погрешность стабилизатора тока, % |
2 |
Фазовый сдвиг между заданным и измеренным значением тока, мкс |
200 |
Время выполнения программы в векторе прерывания, мкс |
3.0-3.8 |
Тут синей линией обозначен момент работы вектора прерывания, а жёлтой линией выделен один из каналов генератора ШИМ сигнала. Масштаб временной сетки 1 мкс/кл. По этой осциллограмме можно сделать вывод, что чтение каналов АЦП занимает около 1.1 мкс, а выполнения вектора прерывания занимает 3.0-3.8 мкс.

А тут виден фазовый сдвиг между заданным и измеренным значением тока. Масштаб временной сетки 1 мс/кл. Осциллограмма снята во время равномерного вращения двигателя. Величина фазового сдвига не зависит от частоты вращения вала и составляет порядка 200 мкс.

Ниже показана реакция системы стабилизатора тока на ступенчатое воздействие. Масштаб временной сетки 100 мкс/кл. Заданное значение тока изменилось с 0 до 1 ампера. Видно, что переходный процесс апериодический.

Демонстрация
Архив проекта
Заключение
Фух, я устал. Проект не лишён недостатков, но надеюсь он кому-то понравится) Учтите, что готовой методички у меня не было, методика расчёта является плодом моей фантазии, простите мои ошибки и заблуждения. Спасибо всем, кто дочитал, обязательно оставляйте комментарии!
Комментарии (7)

Fox_Alex
19.08.2026 10:32Воспоминание разблокировано. Серьезность темы электропривода я понял в момент, когда керамический конденсатор размером около 1210 прожег в плате такую дыру, что можно было палец просунуть. После этого я тоже начал считать импульсные токи)

N1X
19.08.2026 10:32Да, в этом что-то есть... У меня похожее было: неправильно посчитанный дроссель BUCK-конвертера насыщался и у электролитического конденсатора ноги грелись почти до выпаивания... Нагреть конденсатор это видимо какое-то становление начинающего электроника... Нагреть сердечник дросселя при холодной обмотке в принципе тоже :D
ruomserg
Эт - прямо вот хорошо! Отложил в закладки - мало ли когда понадобится!
Единственное в чем наверное разочарую - компилятор скорее всего вырезал ваши трюки с кешированием переменных при расчете. Там конечно надо посмотреть ассемблерный листинг, но в большинстве случаев оно прекрасно видит ситуации когда идет цепочка присваиваний a->b->c и помечает 'b' как no-effect. Ну и дальше вообще убирает его из внутреннего представления программы. Раньше в чистых Сях был допустим трюк со словом 'register' - который рекомендовал компилятору выделить регистр для хранения локальной переменной в блоке. Но работало это не всегда - и в современных процессорах обычно компилятор распределяет регистры лучше человека. Если вы все-таки хотите туда вмешаться - то надо смотреть не-портабельные расширения платформы или компилятора (прагмы, аттрибуты переменных и проч).
Если сейчас набегут варвары, которые будут кричать что ваша поделка не имеет смысла и ее изготовление обошлось дороже покупки готовой в Китае с доставкой - гоните их в сад! Умение повторить - это минимальный уровень владения технологией. Без этого нет и не будет следующих шагов: ни улучшения/адаптации, ни разработки нового.
Удачи!
Superzoos Автор
Спасибо. Оптимизации точно повлияли. Первая версия алгоритма работала примерно в 3-4 раза медленнее. Я мониторил начало и конец прерывания по осциллографу. Не могу утверждать, что ни одна из оптимизаций не была вырезана компилятором, но что-то явно помогло.
N1X
А при сборке в параметрах компилятора какая оптимизация задана?
Superzoos Автор
Я скорее всего в дебаге шил с флагом -00.
N1X
Ну вот поэтому ручные оптимизации помогают: просто потому что с -o0 компилер собирает "как есть"... А так начиная с -o2 уже руками чаще всего лучше не сделаешь (если это не какие-то специфические случаи)