Здесь разрабатываем эталонную таблицу коммутации BLDC мотора на основе цифрового двойника и создаем алгоритм для автоматической генерации таблицы в сервоконтроллере MC50. Таблица коммутации используется для 6-шагового управления вращением ротора BLDC мотора с датчиками Холла. Хотя найти правильный способ коммутации несложно путём перебора (6! => 720 вариантов), но такой путь опасен неправильным выбором последовательности коммутаций, которые могут создать вращение, но крайне неэффективное и нестабильное.
Все статьи по открытому проекту MC50
Хорошая новость в том, что эталонная таблица коммутации единственная и валидная для роторов с разным числом полюсов. Все остальные варианты можно привести к ней простым переименованием выводов обмоток, датчиков Холла и инверсией сигналов.
Да, такую таблицу можно найти в многочисленных источниках, но у нас задача шире, а потому пойдём своим путём.
Чтобы построить таблицу коммутаций по документации, нужно точно знать расположение датчиков Холла и их полярность. Но даже разобрав мотор это бывает сложно понять. Вот как все может выглядеть в документации:
Мы получаем проблемы определения таблицы коммутации практически с каждым новым BLDC мотором. Потому что мы не знаем, как соотнести текущие выводы обмоток и датчиков с аналогичными из эталонной модели. Нужен надёжный алгоритм для автоматизации процесса генерации таблицы.
Разработка алгоритма начинается с создания в MATLAB электрической модели управления BLDC мотором c датчиками Холла и механической вращающейся модели идеализированного мотора в SolidWorks
Повороты ротора очень сложно представлять мысленно и делать по этим представлениям статические иллюстрации состояний. Поэтому в SolidWorks в закладке Motion Study присваиваем режим Motor нарисованному ротору и стрелкам по периметру. Стрелки изображают направление токов и их величину. Величина тока отображается углом поворота стрелки. Красный цвет стрелки означает втекающий ток, синий - вытекающий. Задаём нужную частоту вращения ротору и соответствующую частоту вращения стрелок. Тут ошибиться сложно.
Механическая модель мотора с помощью инструмента Motion Study и режима Motor позволяет видеть угол поворота ротора в произвольный момент времени, визуально контролировать положение полюсов, направление и величину токов. Состояния датчиков Холла уже задаётся вручную на основе положений ротора разные моменты времени. В результате получается безошибочная модель с корректным чередованием состояний датчиков Холла во времени.
Но нужна еще и электро-механическая модель в MATLAB, чтобы создать и проверить эталонную тестовую последовательность коммутаций 3-фазного инвертера. Помогает то, что в предыдущей статье основная модель MATLAB Simulink была уже создана. Я её несколько упростил и модифицировал. Мотор в модели по характеристикам соответствуем мотору из этой статьи.
В модели в заданной последовательности подаются сигналы напряжения на обмотки мотора и на графиках проверяется правильность сигналов с датчиков Холла, углов поворота, токов, напряжений и прочих.
Чтобы ускорить вычисления инвертер с ШИМ модуляцией был заменён на модель инвертера с управляемыми источниками усреднённого напряжения.
Хотя в Simulink есть модели моторов с интегрированными датчиками Холла в библиотеке Motor Сontrol Blockset, но эти модели несовместимы с библиотекой Simscape, которая объединяет мир моделирования механических и электрических систем. В нашем проекте Simscape широко используется. Эта библиотека точнее моделирует физический мир по сравнению со старыми библиотеками из Motor Сontrol Blockset. Поэтому для мотора из Simscape пришлось создать свою реализация блока модели датчиков Холла с учётом их позиций. Позиции датчиков выбраны так как указано выше на механической модели идеализированного мотора.
Таким образом для разработки не требуется настоящий мотор и серво-контроллер. Получается то, что нынче модно называть - "цифровой двойник". Расположение полюсов мотора, направление вращения, расположение датчиков Холла и именования выводов в нашем двойнике точно соответствуют электромеханической модели BLDC мотора в Simulink. Мы можем однозначно соотнести угол поворота ротора в модели Simulink повороту ротора в модели SolidWorks, также совпадают названия всех выводов.
Теперь поворачивая ротор в SolidWorks можно наглядно видеть позицию полюсов, а применяя различные сигналы в Simulink проверить реализуем ли такой поворот подачей соответствующих рисунку токов.
После того как обе модели верифицированы строим пошаговую диаграмму поворотов и токов для составления эталонной таблицы состояний битов датчиков Холла. Таблица дана ниже. Слева столбцы с диаграммой для 8-полюсного ротора, справа для 4-полюсного ротора. В таблице символы U_A, U_B, U_C применяются для обозначения нормированного напряжения на фазах мотора: 0 - означает нулевое напряжение, 1 - высокое напряжение. Уровень напряжения здесь не важен. Главное чтобы его хватило для прокрутки ротора из предыдущего состояния, но это уже задача реализации в железе. Символы Hall_A, Hall_B, Hall_C обозначают сигналы на датчиках Холла. Датчики Холла могут быть выполнены по разному, сигналы в реальных датчиках могут быть инвертированы. Но здесь сигналы строго соответствуют тем что будут выданы нашей эталонной моделью в Simulink.
Состояния в таблице стабильны. Роторы в этих состояниях не испытывают вращательного момента. Сигналы с датчиков Холла также стабильны, поскольку границы перехода из отрицательного в положительны полюса ротора находятся на значительном угловом удалении. Переход из состояния в состояние по таблице сверху вниз вызывает вращение ротора без побочных тормозящих моментов. Это и есть искомая последовательность вращений.
Надо отметить, что 4-полюсный ротор при той же последовательности подачи напряжений вращается в обратную сторону. Но это не проблема, поскольку какое вращение прямое, а какое обратное мы будем задавать в настройках уже при запуске физического механизма просто сменой знаков напряжений на обмотках. Да, поменять направление вращения можно просто инвертировав сигналы напряжения на обмотках. На нашей эталонной модели что было 0 должно стать 1, что было 1 должно стать 0.
Далее строится другая таблица, где показаны напряжения на обмотках для перехода из каждого стабильного состояния в фазу вращения в нужном направлении. Но здесь она не приводится для экономии места. Приведу лишь представление таблицы в программном коде:
// Структура записей в таблице коммутации
typedef struct
{
int8_t rv_U;
int8_t rv_V;
int8_t rv_W;
int8_t fw_U;
int8_t fw_V;
int8_t fw_W;
} T_comm_rec;
// Референсная таблица мягкой коммутаций для шагов 1...6 при вращении в обратном и прямом направлении
// 0 - означает выключенное состояние фазы
// 1 - означает подачу ШИМ на фазу
// -1 - означает подачу 0 на фазу
const T_comm_rec reference_comm_table[6] =
{
// | FORWARD | REVERSE |
// | U V W | U V W |
{ 0, 1, -1, 0, -1, 1 },
{ -1, 1, 0, 1, -1, 0 },
{ -1, 0, 1, 1, 0, -1 },
{ 0, -1, 1, 0, 1, -1 },
{ 1, -1, 0, -1, 1, 0 },
{ 1, 0, -1, -1, 0, 1 }
};
Проект MC50 теперь дополнен приложением для тестирования BLDC моторов. Номер приложения - 4. Выбирается в терминале устройства. Приложение позволяет запускать вращение в прямом и обратном направлении, запускать поиск закона (таблицы) коммутации и сохранять результаты в энергонезависимой памяти контроллера.
Как всегда, лог работы поиска закона коммутации, графики сигналов в реальном времени и друга информация доступны в среде Freemaster череp интерфейс USB
Тестирование на реальных моторах
Поскольку процесс определения таблицы коммутации не требует большой мощности, то сервоконтроллер MC50 можно применить в паре с довольно мощными моторами. Однако тестировать моторы надо без нагрузки со свободным ротором. Кроме того в терминале нужно отрегулировать настройки микросхемы драйвера, чтобы не произошло преждевременных срабатываний по перегрузке:
У мотора также надо корректно установить максимальную величину тока в процессе тестирования (параметр 3):
Важно, что мягкая 6-шаговая коммутация в данном случае даёт меньшее рассеивание тепла в сервоконтроллере, чем 6-шаговая коммутация из предыдущей статьи. Это получается из-за того, что в данном случае на каждом шаге работают оба плеча полумоста и нижний транзистор закорачивает нижний диод, в то время как при мягкой коммутации с использованием функции Output Phase Switching (OPS) нижний транзистор не работал и его диод рассеивал на себе часть мощности тока обмотки.
Однако при использовании OPS нет никаких проблем с мёртвым временем, так как одно из плеч активного полумоста там просто не работает. Это позволяет обходится без микросхем драйверов с защитами и вместо них ставить довольно медленные транзисторные пары с большим разбросом времени переключения.
Что из двух способов применить остаётся на усмотрение разработчика. В текущем релизе проекта оставлены оба способа на выбор.
Резюме
Не применяя сторонние источники информации в виде апноутов и учебников и только на основе цифровых моделей удалось воспроизвести весь процесс управления BLDC мотором. В результате проделанной работы с помощью MC50 мы теперь можем менее чем за секунду легко узнать магическое число из 6 цифр означающее закон коммутации конкретного мотора со случайной и неизвестной распиновкой.
Исходники проекта здесь
MicroKoder
Мягкая коммутация я так понял это комплементарный ШИМ.
Indemsys Автор