Введение
Работа бесколлекторного двигателя постоянного тока (BLDC) ассоциируется с классической шестишаговой коммутацией (trapezoidal control). Такой тип управления прост в реализации, требует минимум вычислительных ресурсов и отлично подходит для множества задач: вентиляторы, насосы, простые приводы.
Однако такая коммутация кроме преимущества в виде простоты реализации имеет ряд существенных недостатков:
1. Коммутационные пульсации момента, которые вызывают вибрации и шум, снижают точность позиционирования, увеличивают износ;
2. Низкий КПД в режимах работы, отличных от номинального;
3. Узкий диапазон рабочих скоростей. Особенно сложно добиться плавного пуска и работы на низких оборотах.
Добиться плавности, точности и эффективности работы BLDC можно путём применения векторного управления (Field-Oriented Control, FOC). Это позволит минимизировать коммутационные пульсации момента, снизит шум работы двигателя, расширит диапазон работы по скорости, включая низкие обороты, повысит динамику регулирования момента.
Немного теории
Суть FOC — преобразование координат, позволяющее управлять машиной переменного тока так, как обычным ДПТ. Для её реализации нужно создать в двигателе магнитное поле статора, которое всегда перпендикулярно (опережает на 90 электрических градусов) магнитному полю ротора. В этом положении создаваемый электромагнитный момент будет максимален.
В интернете, в том числе на Хабре, есть много статей, где подробно описан принцип работы векторного управления. Также рекомендую учебник А.С. Анучин "Системы управления электроприводов", МЭИ, 2015 г. Подробно останавливаться на этом не буду, коротко опишу суть.

Для того, чтобы добиться обозначенной выше цели, и иметь максимальный вращающий момент, необходимо в каждый момент времени поддерживать прямой угол между векторами потокосцепления статора и ротора. Для этого переходят к ортогональной системе координат d-q, привязанной к ротору. Продольную составляющую тока Id стремятся поддерживать равной 0 для того, чтобы не тратить энергию на поток. Электромагнитный момент же регулируется поперечной составляющей Iq. Для того, чтобы вычислить эти координаты, применяется преобразование Парка - координатное преобразование из неподвижной системы α, β, привязанной к статору. Чтобы выполнить данное преобразование, в каждый момент времени необходимо знать текущий угол θ поворота ротора относительно статора.
Для вычисления координат составляющих токов по осям α и β выполняется фазное преобразование. В обоих преобразованиях математика довольно простая, доступна для понимания школьнику, освоившему курс тригонометрии. В упомянутом выше учебнике координатные преобразования описаны на рис. 1.9 (стр. 36), фазные — на рис. 1.10 (стр.41).
В качестве регулятором тока, как правило, используются ПИ-регуляторы. В качестве регуляторов скорости — П-регуляторы. Силовая установка представляет собой автономный инвертор, состоящих из трёх транзисторных мостов. Управление ключами инвертора осуществляется с помощью ШИМ.
Математическая модель
Прежде чем реализовать систему в железе, полезно провести её моделирование в любой CAE системе, настроить регуляторы, проверить работоспособность.
Вместе со студентами направления "Мехатроника и робототехника" сделал математическую модель системы векторного управления синхронным двигателем с постоянными магнитами СДПМ. Симуляция осуществляется в среде Ansys Twin Builder. Выбор в пользу данного программного продукта был сделан в связи с возможностью использования в качестве модели двигателя не только модели с сосредоточенными параметрами (как в этом проекте), но и моделей с распределенными параметрами, расчет которых ведется методом конечных элементов. В любом случае, среда симуляции - это всего лишь инструмент и результат получился бы идентичным и в Simulink и на Python и в других средах — математика везде одинаковая.

Сборку модели начнем с силовой части. На рисунке представлена модель двухзвенного преобразователя частоты. От трех идеальных источников напряжения энергия поступает на неуправляемый выпрямитель. Далее в звене постоянного тока стоит конденсатор. От звена постоянного тока запитан трехфазный автономный инвертор, к нему и подключен двигатель.

Управление ключами инвертора происходит с помощью ШИМ. Генератор опорного напряжения формирует пилообразный сигнал с несущей частотой 4 кГц. Этот сигнал сравнивается с сигналом задания. В результате на выходе компараторов мы имеем управляющие сигналы на открытие и закрытие верхних ключей инвертора. В каждой стойке нижние ключи всегда работают в противофазе с верхними, для того, чтобы не допустить короткого замыкания. Поэтому сигнал на нижние ключи инвертируем из 0 в 1, и наоборот. Эти сигналы берем с блоков NEG.

Координатные и фазные преобразования можно сделать на блоках элементарной математики. Но можно взять и готовые — они представлены на модели голубым цветом. Наконец, добавляем регуляторы тока по осям d и q. Как и говорилось выше, в качестве такого регулятора используем ПИ-регулятор. Его коэффициенты выставляем исходя из требований по быстродействию и точности системы.
Столь высокоточная система может работать в режиме позиционирования. Для этого добавляем регулятор положения. В нем настраиваем П и И-каналы.

В итоге получаем следующую модель.

Ниже представлены осциллограммы задания на положение и угол поворота ротора.

Как видим, система идеально отрабатывает сигнал задания. Токи и скорости находятся в допустимых пределах.

Дальнейшая реализация "в железе"
Система векторного управления на ответственных технологических участках реализуется на базе сигнальных процессоров DSP. Однако, для технологических процессов, не требующих высоких требований, систему вполне можно реализовать на микроконтроллерах (ядра Cortex-M4/M7/M33), имеющих дополнительный сопроцессор для операций с плавающей точкой — аппаратные FPU. Существуют и специально оптимизированные для векторного управления библиотеки (STM32 MotorControl SDK, TI MotorControl SDK, Microchip MPLAB® MCC Motor Control).
Силовая часть может быть также реализована самостоятельно. Инвертор собирается из трёх мостов на IGBT или MOSFET транзисторах с драйверами затворов. В качестве датчика положения лучше всего использовать энкодер.
Систему собственной сборки с более гибкими возможностями настройки и оптимизированную под конкретный проект целесообразно использовать в робототехнике: шарниры манипуляторов, приводы колес или шасси.