— Держать ток под 90 градусов.
Термин «векторное управление» электродвигателями знаком всем, кто хоть как-то интересовался вопросом, как с помощью микроконтроллера управлять двигателем переменного тока. Однако обычно в любой книге по электроприводу глава про векторное управление находится где-нибудь ближе к концу, состоит из кучи волосатых формул с отсылками ко всем остальным главам книги. Отчего разбираться в этом вопросе совсем не хочется. И даже самые простые объяснения всё равно держат путь через дифференциальные уравнения равновесия, векторные диаграммы и кучу другой математики. Из-за чего появляются примерно вот такие вот попытки как-то закрутить двигатель без использования мат.части. Но на самом деле векторное управление – это очень просто, если понимать принцип его работы «на пальцах». А там уже и с формулами разбираться в случае надобности будет веселее.
Принцип работы синхронной машины
Рассмотрим принцип работы самого простого двигателя переменного тока – синхронной машины с постоянными магнитами. Удобный пример – компас: его магнитная стрелка представляет из себя ротор синхронной машины, а магнитное поле Земли – магнитное поле статора. Без внешней нагрузки (а в компасе её нет, если не считать трение и жидкость, гасящую колебания стрелки) ротор всегда ориентируется по полю статора. Если мы будем держать компас и вращать под ним Землю, то стрелка будет крутиться вслед, совершая работу по перемешиванию жидкости внутри компаса. Но есть и чуть более простой способ – можно взять внешний магнит, например, в виде стержня с полюсами на концах, поле которого значительно сильнее магнитного поля Земли, поднести его к компасу сверху и вращать магнит. Стрелка будет двигаться вслед за вращающимся магнитным полем. В настоящем синхронном двигателе поле статора создается электромагнитами – катушками с током. Схемы обмоток там сложные, но принцип один – они создают статором магнитное поле, направленное в нужную сторону и имеющее нужную амплитуду. Посмотрим на следующий рисунок (Рисунок 1). В центре изображен магнит – ротор синхронного двигателя («стрелка» компаса), а по бокам два электромагнита – катушки, создающие каждая свое магнитное поле, одна в вертикальной оси, другая в горизонтальной.
Рисунок 1. Принцип действия синхронной электрической машины
Магнитный поток катушки пропорционален току в ней (в первом приближении). Нас будет интересовать магнитный поток от статора в том месте, где расположен ротор, т.е. в центре рисунка (краевыми эффектами, рассеянием и всем прочим пренебрегаем). Магнитные потоки двух перпендикулярно расположенных катушек векторно складываются, образуя для взаимодействия с ротором один общий поток. Но так как поток пропорционален току в катушке, удобно рисовать непосредственно вектора токов, сонаправив их с потоком. На рисунке показаны некоторые токи I? и I?, создающие магнитные потоки по осям ? и ? соответственно. Суммарный вектор тока статора Is создает сонаправленый ему магнитный поток статора. Т.е. по сути Is символизирует внешний магнит, который мы подносили к компасу, но созданный электромагнитами – катушками с током.
На рисунке ротор расположен в произвольном положении, но из этого положения ротор будет стремиться повернуться согласно магнитному потоку статора, т.е. по вектору Is (положение ротора в этом случае показано пунктирной линией). Соответственно, если подать ток только в фазу ?, скажем, I? = 1А, ротор встанет горизонтально, а если в ?, вертикально, а если приложить I? = -1А то перевернется на 180 градусов. Если запитать ток I? по закону синуса, а I? по закону косинуса от времени, то будет создано вращающееся магнитное поле. Ротор будет следовать за ним и крутиться (как стрелка компаса следует за вращением магнита руками). Это базовый принцип работы синхронной машины, в данном случае двухфазной с одной парой плюсов.
Давайте нарисуем график момента двигателя в зависимости от углового положения вала ротора и вектора тока Is статора – угловую характеристику синхронного двигателя. Эта зависимость синусоидальная (Рисунок 2).
Рисунок 2. Угловая характеристика синхронной машины (здесь есть некоторая историческая путаница со знаками момента и угла, из-за чего часто рисуют характеристику перевернутой относительно горизонтальной оси).
Чтобы получить этот график на практике, можно поставить на вал ротора датчик вращающего момента, затем включить любой вектор тока, например, просто подать ток в фазу ?. Ротор повернется в соответствующее положение, которое нужно принять за ноль. Потом через датчик момента «руками» нужно поворачивать ротор, фиксируя на графике в каждой точке угол ?, на который повернули, и момент, который показал датчик. Т.е. нужно растягивать «магнитную пружину» двигателя через датчик момента. Самый большой момент окажется при угле в 90 градусов от вектора тока (от начала). Амплитуда получившегося максимального момента Ммакс пропорциональна амплитуде приложенного вектора тока. Будет приложен 1А, получим, скажем, Ммакс = 1 Н•м (ньютон*метр, единица измерения вращающего момента), если подадим 2А, получим Ммакс = 2 Н•м.
Из этой характеристики следует, что двигатель развивает наибольший момент, когда ротор находится под 90° к вектору тока. Так как мы при создании системы управления на микроконтроллере хотим получить от двигателя наибольший момент при минимуме потерь, а потери, в первую очередь, это ток в обмотках, то рациональнее всего ставить вектор тока всегда под 90° к магнитному полю ротора, т.е. перпендикулярно магниту на рисунке 1. Нужно поменять всё наоборот – не ротор едет к задаваемому нами вектору тока, а мы задаем вектор тока всегда под 90° к ротору, как бы он там не вращался, т.е. «прибить» вектор тока к ротору. Регулировать же момент двигателя будем амплитудой тока. Чем больше амплитуда – тем выше момент. А частота вращения, частота тока в обмотках это уже «не наше» дело – какая получится, как ротор будет вращаться, так и будет – мы управляем моментом на валу. Как ни странно, именно это и называется векторным управлением – когда мы управляем вектором тока статора так, чтобы он был под 90° к магнитному полю ротора. Хотя некоторые учебники дают более широкие определения, вплоть до такого, что векторным управлением называют вообще любые законы управления, где задействованы «вектора», но обычно под векторным управлением понимается именно приведенный выше способ управления.
Строим структуру векторного управления
Но как векторное управления достигается на практике? Очевидно, для начала понадобится знать положение ротора, чтобы было относительно чего отмерять 90°. Это проще всего сделать установив, собственно, датчик положения на вал ротора. Потом нужно разобраться, как создать вектор тока, поддерживая желаемые токи в фазах ? и ?. На двигатель-то мы прикладываем напряжение, а не ток… Но раз мы хотим что-то поддерживать, то нужно это измерять. Поэтому для векторного управления понадобятся датчики токов фаз. Далее нужно собрать структуру векторного управления в виде программы на микроконтроллере, которая будет делать всё остальное. Чтобы такое объяснение не было похоже на инструкцию «как нарисовать сову», давайте продолжим погружение.
Поддерживать ток микроконтроллером можно использовав программный ПИ (пропорционально-интегральный) регулятор тока и ШИМ. Например, структура с регулятором тока для одной фазы ? показана ниже (Рисунок 3).
Рисунок 3. Замкнутая по току структура управления для одной фазы
Здесь задание тока i?_зад – некая константа, тот ток, который мы хотим поддерживать для этой фазы, например 1А. Задание поступает на сумматор регулятора тока, раскрытая структура которого показана выше. Если читатель не знает, как работает ПИ-регулятор – то увы и ах. Могу лишь посоветовать что-то из этого. Регулятор тока на выходе задает напряжение фазы U?. Напряжение поступает на блок ШИМ, который рассчитывает задания скважностей (уставок сравнения) для таймеров ШИМ микроконтроллера, формирующих ШИМ на мостовом инверторе из четырех ключей, чтобы сформировать это U?. Алгоритм может быть разный, например, для положительного напряжения ШИМим правой стойкой пропорционально заданию напряжения, на левой замкнут нижний ключ, для отрицательного ШИМим левой, на правой замкнут нижний. Не забываем добавить мёртвое время! В итоге такая структура делает программный «источник тока» за счет источника напряжения: мы задаем нужное нам значение i?_зад, а данная структура с определенным быстродействием его реализует.
Дальше, возможно, некоторые читатели уже подумали, что до векторной структуры управления осталось дело за малым – нужно поставить два регулятора тока, на каждую фазу по регулятору, и формировать на них задание в зависимости от угла с датчика положения ротора (ДПР), т.е. сделать что-то типа такой структуры (Рисунок 4):
Рисунок 4. Неправильная (наивная) структура векторного управления
Так делать нельзя. При вращении ротора переменные i?_зад и i?_зад будут синусоидальными, т.е. задание на регуляторы тока будет всё время меняться. Быстродействие регулятора не бесконечно, поэтому при изменении задания он не мгновенно его отрабатывает. Если задание постоянно менять, то регулятор будет всё время его догонять, никогда не достигая. И с ростом скорости вращения двигателя отставание реального тока от заданного будет всё больше и больше, пока желаемый угол в 90° между током и магнитом ротора совсем не перестанет на него быть похожим, а векторное управление не перестанет быть таковым. Поэтому делают по-другому. Правильная структура следующая (Рисунок 5):
Рисунок 5. Структура векторного датчикового управления для двухфазной синхронной машины
Здесь добавились два блока – БКП_1 и БКП_2: блоки координатных преобразований. Они делают очень простую вещь: поворачивают вектор на входе на заданный угол. Причем БПК_1 поворачивает на +?, а БКП_2 на -?. Это вся разница между ними. В иностранной литературе их называют преобразованиями Парка (Park transformation). БКП_2 делает преобразование координат для токов: от неподвижных осей ? и ?, привязанных к статору двигателя, к вращающимся осям d и q, привязанных к ротору двигателя (используя для этого угол положения ротора ?). А БКП_1 делает обратное преобразование, от задания напряжения по осям d и q делает переход к осям ? и ?. Формул для преобразования координат не привожу, но они простые и очень легко ищутся. Собственно, в них нет ничего сложнее школьной геометрии (Рисунок 6):
Рисунок 6. Координатные преобразования из неподвижных осей ? и ?, привязанных к статору двигателя, к вращающимся осям осям d и q, привязанных к ротору
То есть вместо «вращения» задания регуляторов (как было в прошлой структуре), вращаются их входы и выходы, а сами регуляторы работают в статическом режиме: токи d, q и выходы регуляторов в установившемся режиме постоянны. Оси d и q вращаются вместе с ротором (так их вращает сигнал с датчика положения ротора), при этом регулятор оси q регулирует как раз тот ток, который в начале статьи я называл «перпендикулярным полю ротора», то есть это моментообразующий ток, а ток d сонаправлен с «магнитом ротора», поэтому он нам не нужен и мы задаём его равным нулю. Такая структура избавлена от недостатка первой структуры – регуляторы токов даже не знают, что что-то где-то крутится. Они работают в статическом режиме: отрегулировали каждый свой ток, вышли на заданное напряжение – и всё, как ротор от них не убегай, они про это даже не узнают: всю работу по повороту делают блоки координатных преобразований.
Приведенная выше структура действительно работает и используется в современных электроприводах. Только в ней не хватает целой кучи мелких «улучшалок», без которых её уже не принято делать, типа компенсации перекрестных связей, разных ограничений, ослабления поля и т.п. Но базовый принцип именно такой.
А если нужно регулировать не момент привода, а всё-таки скорость (по правильному угловую скорость, частоту вращения)? Ну тогда ставим еще один ПИ-регулятор – регулятор скорости (РС). На вход подаем задание скорости, а на выходе имеем задание момента. Так как ток оси q пропорционален моменту, то можно для упрощения выход регулятора скорости подать сразу на вход регулятора тока оси q, вот так (Рисунок 7):
Рисунок 7. Регулятор скорости для векторного управления
Здесь ЗИ – задатчик интенсивности, плавно изменяет свой выход, чтобы двигатель разгонялся с нужным темпом, а не гнал на полном токе до задания скорости. Текущая частота вращения ? взята из обработчика датчика положения ротора, так как ? это производная от углового положения ?. Ну или можно просто время между импульсами датчика засекать…
Как сделать тоже самое для трехфазного двигателя? Ну, собственно, ничего особенного, добавляем еще один блок и меняем модуль ШИМ (Рисунок 8).
Рисунок 8. Структура векторного датчикового управления для трехфазной синхронной машины
Трехфазные токи, точно так же как и двухфазные, служат для одной цели – создать вектор тока статора Is, направленный в нужную сторону и имеющий нужную амплитуду. Поэтому трехфазные токи можно просто пересчитать в двухфазные, а дальше оставить ту же систему управления, что уже была собрана для двухфазной машины. В англоязычной литературе такой «пересчёт» называют преобразованиями Кларк – Clarke transformation (Эдит Кларк – это она), у нас — фазными преобразованиями. В структуре на рисунке 8, соответственно, эта операция производится блоком фазных преобразований. Делаются они опять при помощи курса школьной геометрии (Рисунок 9):
Рисунок 9. Фазные преобразования – из трех фаз к двум. Для удобства принимаем равенство амплитуды вектора Is амплитуде тока в фазе
Думаю, комментарии не нужны. Немного слов про ток фазы C. Туда можно не ставить датчик тока, так как три фазы двигателя соединены в звезду, и по закону Кирхгофа всё, что втекло через две фазы, должно вытечь из третьей (если, конечно, у вас в двигателе не пробита изоляция, и половина не утекла куда-то на корпус), поэтому ток фазы C вычисляют как скалярную сумму токов фаз A и B со знаком минус. Хотя третий датчик иногда ставят чтобы снизить погрешность измерений.
Также нужна полная переделка модуля ШИМ. Обычно для трехфазных двигателей используют трехфазный шестиключевой инвертор. На рисунке задание напряжения поступает всё ещё в двухфазных осях. Внутри модуля ШИМ с помощью обратных фазных преобразований можно пересчитать это в напряжения фаз A, B, C, которые надо приложить в этот момент к двигателю. А вот что делать дальше… Возможны варианты. Наивный метод – это задать на каждую стойку инвертора скважность, пропорциональную желаемому напряжению плюс 0.5. Это называется синусоидальной ШИМ. Именно такой метод применил автор в habrahabr.ru/post/128407. В этом методе всё хорошо, кроме того, что таким методом будет недоиспользован инвертор по напряжению – т.е. максимальное напряжение, которое будет получено, окажется меньше, чем вы могли бы получить, если бы использовали более совершенный метод ШИМ.
Посчитаем. Пусть у вас есть классический преобразователь частоты, питающийся от промышленной трехфазной сети 380В 50Гц. Здесь 380В это линейное (между фазами) действующее напряжение. Так как в преобразователе стоит выпрямитель, он выпрямит это напряжение и на шине постоянного тока окажется напряжение, равное амплитудному линейному напряжению, т.е. 380•v2=540В постоянного напряжения (по крайней мере без нагрузки). Если мы применим синусоидальный алгоритм расчета в модуле ШИМ, то амплитуда максимального фазного напряжения, которое получится у нас сделать, окажется равной половине от напряжения на шине постоянного тока, т.е. 540/2=270В. Пересчитаем в действующее фазное: 270/v2=191В. А теперь в действующее линейное: 191•v3=330В. Теперь можем сравнить: вошло нам 380В, а вышло 330В… И больше с этим типом ШИМ никак нельзя. Для исправления этой проблемы используется так называемый векторный тип ШИМ. В нем на выходе будут снова 380В (в идеальном случае без учета всех падений напряжения). Метод векторной ШИМ никакого отношения к векторному управлению электродвигателем не имеет. Просто в его обосновании снова используется немного школьной геометрии, поэтому он и называется векторным. Однако его работу на пальцах не объяснить, поэтому отправлю читателя к книжкам (в конце статьи) или к википедии. Могу еще привести картинку, которая немного намекает на разницу в работе синусоидальной и векторной ШИМ (Рисунок 10):
Рисунок 10. Изменение потенциалов фаз для скалярной и векторной ШИМ
Виды датчиков положения
Кстати, а какие датчики положения используются для векторного управления? Чаще всего используются четыре типа датчиков. Это квадратурный инкрементальный энкодер, датчик на основе элементов Холла, абсолютный датчик положения и сельсинный датчик.
Квадратурный энкодер не выдает абсолютного положения ротора – по своим импульсам он позволяет лишь определить, сколько вы проехали, но не куда и откуда (как начало и конец связаны с расположением магнита ротора). Поэтому для векторного управления синхронной машиной сам по себе он не подходит. Немного спасает ситуацию его реперная метка (индекс) – она одна на механический оборот, если до неё доехать, то абсолютное положение становится известно, а от неё можно уже отсчитывать сколько проехали квадратурным сигналом. Но как до этой метки доехать в начале работы? В общем, это не всегда удобно.
Датчик на основе элементов Холла – это грубый датчик. Он выдает всего несколько импульсов на оборот (в зависимости от кол-ва элементов Холла, для трехфазных двигателей их обычно три, т.е. шесть импульсов), позволяя знать положение в абсолютной величине, но с низкой точностью. Точности обычно хватает, чтобы держать угол вектора тока так, чтобы двигатель по крайней мере ехал вперед, а не назад, но момент и токи будут пульсировать. Если двигатель разогнался, то можно начать программно экстраполировать сигнал с датчика по времени – т.е. строить из грубого дискретного угла линейно изменяющийся угол. Это делается на основе предположения, что двигатель вращается с примерно постоянной скоростью, как-то так (Рисунок 11):
Рисунок 11. Работа датчика положения на элементах Холла для трехфазной машины и экстраполяция его сигнала
Часто для серводвигателей используется сочетание энкодера и датчика Холла. В этом случае можно сделать единый программный модуль их обработки, убирая недостатки обоих: делать экстраполяцию угла, приведенную выше, но не по времени, а по меткам с энкодера. Т.е. внутри от фронта до фронта датчика Холла работает энкодер, а каждый фронт Холла чётко инициализирует текущее абсолютное угловое положение. В этом случае неоптимальным (не под 90°) окажется лишь первое движение привода, пока он не доехал до какого-нибудь фронта датчика Холла. Отдельную проблему в этом случае представляет обработка неидеальности и того и другого датчика — симметрично и равномерно элементы Холла редко кто располагает…
В еще более дорогих применениях используют абсолютный датчик положения с цифровым интерфейсом (абсолютный энкодер), который сразу выдает абсолютное положение и позволяет не испытывать описанных выше проблем.
Если в электродвигателе очень жарко, а также когда требуется повышенная точность измерения угла, используют «аналоговый» сельсинный датчик (резольвер, вращающийся трансформатор). Это маленькая электрическая машина, используемая как датчик. Представьте, что в рассмотренной нами синхронной машине на рисунке 1 вместо магнитов стоит еще одна катушка, на которую мы подаем высокочастотный сигнал. Если ротор стоит горизонтально, то сигнал наведется только в катушку статора фазы ?, если вертикально – то только в ?, если перевернуть его на 180 – то изменится фаза сигнала, а в промежуточных положениях наводится и туда и сюда по закону синуса/косинуса. Соответственно, измеряя амплитуду сигнала в двух катушках, по соотношению этой амплитуды и по фазовому сдвигу можно также определять положение. Установив такую машину как датчик к основной, можно узнавать положение ротора.
Есть еще много экзотических датчиков положения, особенно для сверхвысокоточных применений, например, для изготовления электронных чипов. Там в ход идут уже любые физические явления, чтобы только узнать положение наиболее точно. Их рассматривать не будем.
Упрощение векторного управления
Как вы поняли, векторное управление достаточно требовательное – и датчиков положения ему наставь, и датчиков тока, и ШИМ ему векторную, и микроконтроллер не абы какой, чтобы всю эту математику обсчитывать. Поэтому для простых применений его упрощают. Для начала можно исключить датчик положения, сделав бездатчиковое векторное управление. Для этого используют немного больше математической магии, находящейся в желтом прямоугольнике (Рисунок 12):
Рисунок 12. Структура бездатчикового векторного управления
Наблюдатель – это такой блок, на который подается информация о приложенном к двигателю напряжении (например, из задания на модуль ШИМ) и о токах в двигателе с датчиков. Внутри наблюдателя работает модель электродвигателя, которая, грубо говоря, пытается подстроить свои токи в статоре под измеренные с реального двигателя. Если у неё это получилось, то можно считать, что и положение моделируемого внутри вала ротора тоже совпадает с реальным и им можно пользоваться для нужд векторного управления. Ну это, конечно, совсем упрощённо. Видов наблюдателей таких – не пересчитать. Каждый аспирант по специальности «электропривод» пытается изобрести именно свой, который чем-то лучше других. Основной принцип – отслеживание ЭДС электродвигателя. Поэтому чаще всего бездатчиковая система управления работоспособна только на относительно высокой частоте вращения, где ЭДС большая. А также имеет еще ряд недостатков по сравнению с наличием датчика: нужно знать параметры двигателя, быстродействие привода ограничено (если частота вращения резко меняется, наблюдатель может не успеть её отследить и какое-то время «врать», а то и «развалиться» совсем), настройка наблюдателя – это целая процедура, для его качественной работы нужно точно знать напряжение на двигателе, точно измерять его токи и т.п.
Есть и другой вариант упрощения. Например, можно сделать так называемую «автокоммутацию». В этом случае для трехфазного двигателя отказываются от сложного метода ШИМ, отказываются от сложной векторной структуры и начинают просто включать фазы двигателя по датчику положения на элементах Холла, даже иногда без всякого токоограничения. Ток в фазах получается не синусоидальный, а трапецеидальный, прямоугольный или еще более искаженный. Но стараются сделать так, чтобы средний вектор тока был всё равно под 90 градусов к «магниту ротора» выбором момента включения фаз. При этом, включая фазу под напряжение, неизвестно, когда же в фазе двигателя нарастет ток. На низкой частоте вращения он это делает быстрее, на высокой, где мешает ЭДС машины, медленнее, еще темп нарастания тока зависит от индуктивности двигателя и т.п. Поэтому, даже включая фазы точно в нужный момент времени, совсем не факт, что средний вектор тока окажется в нужном месте и с нужной фазой – он может как опережать, так и запаздывать относительно оптимальных 90 градусов. Поэтому в таких системах вводят настройку «опережения коммутации» – по сути просто время, насколько раньше нужно на фазу двигателя подавать напряжение, чтобы в итоге фаза вектора тока получилась более близка к 90 градусам. По-простому это называют «настройка таймингов». Так как ток в электродвигателе при автокоммутации не синусоидальный, то, если взять рассмотренную выше синусоидальную машину и управлять ей таким вот образом, момент на валу будет пульсировать. Поэтому в двигателях, предназначенных для автокоммутации, часто специальным образом меняют магнитную геометрию ротора и статора, чтобы они стали более подходящими к такому типу управления: ЭДС таких машин делают трапецеидальной, благодаря чему в режиме автокоммутации они работают лучше. Синхронные машины, оптимизированные для автокоммутации, получили название бесколлекторных двигателей постоянного тока (БДПТ) или по-английски BLDC (Brushless Direct Current Motor). Режим автокоммутации также часто называют вентильным режимом, а двигатели с ним работающие – вентильные. Но это всё просто разные названия, ничем не влияющие на суть (но матёрые электроприводчики часто страдают СПГС в вопросах, связанных с этими названиями). Есть неплохое видео, иллюстрирующее принцип работы таких машин. На нем показан обращенный двигатель, где ротор снаружи, а статор внутри:
А вот здесь есть курс статей по таким двигателям и аппаратной части системы управления.
Можно пойти даже на еще большее упрощение. Коммутировать обмотки так, чтобы одна фаза всё время оказывалась «свободна» и к ней не прикладывался ШИМ. Тогда в ней можно измерять ЭДС (наведенное в катушке фазы напряжение), и, когда это напряжение переходит через ноль, использовать это как сигнал датчика положения ротора, потому что фаза этого наведенного напряжения зависит как раз от положения ротора. Получается бездатчиковая автокоммутация, что широко используется в различных простеньких приводах, например, в «регуляторах» для пропеллеров авиамоделей. При этом надо помнить, что ЭДС машины появляется только на относительно высокой частоте вращения, поэтому для старта такие системы управления просто не спеша перебирают фазы, надеясь, что ротор двигателя будет следовать за подаваемым током. Как только ЭДС появилась, включается режим автокоммутации. Поэтому бездатчиковая система (такая простая, да и сложная чаще всего тоже) не подходит для задач, где двигатель должен уметь развивать момент на околонулевых частотах вращения, например, для тягового привода автомобиля (или его модели), сервопривода какого-то механизма и т.п. Зато бездатчиковая система с успехом подходит для насосов и вентиляторов, где как раз и применяется.
Но иногда делают даже и еще большее упрощение. Можно совсем отказаться от микроконтроллера, ключей, датчиков положения и прочего, осуществляя переключение фаз специальным механическим коммутатором (Рисунок 13):
Рисунок 13. Механический коммутатор для переключения обмоток
При вращении ротор сам переключает свои части обмоток, меняя приложенное к ним напряжение, при этом ток в роторе протекает переменный. Коммутатор располагают таким образом, чтобы магнитный поток ротора и статора снова оказывался близким к 90 градусам, дабы достичь максимума момента. Такие двигатели
Заключение
Все электрические машины работают схожим образом. В теории электропривода даже существует понятие «обобщенная электрическая машина», к которой сводят работу других. Показанные в статье объяснения «на пальцах» никоим образом не могут служить практическим руководством к написанию кода микроконтроллера. В статье рассмотрен хорошо если один процент информации, которая требуется для реализации настоящего векторного управления. Чтобы сделать что-то на практике, нужно, во-первых, знать ТАУ, хотя бы на уровне понимания, как работает ПИ-регулятор. Потом нужно всё-таки изучить математическое описание как синхронной машины, так и синтеза векторного управления. Также изучить векторную ШИМ, узнать, что такое пары полюсов, познакомиться с типами обмоток машин и прочее. Это можно сделать в свежей книге «Анучин А. С. Системы управления электроприводов. МЭИ, 2015», а также в «Калачев Ю. Н. Векторное регулирование (заметки практика)». Следует предостеречь читателя от погружения в формулы «старых» учебников по приводу, где основной упор сделан на рассмотрение характеристик электродвигателей при питании напрямую от трехфазной промышленной сети, без всяких микроконтроллеров и датчиков положения. Поведение двигателей в этом случае описывается сложными формулами и зависимостями, но для задачи векторного управления они почти никакой пользы не несут (если только изучить для саморазвития). Особенно следует с осторожностью относиться к рекомендациям старых учебников, где, например, сказано, что синхронная машина не должна работать на максимуме своего момента, так как там работа неустойчива и грозит опрокидыванием – для векторного управления всё это «вредные советы».
На каком микроконтроллере можно сделать полноценное векторное управление, читайте, например, в нашей статье Новый отечественный motor-control микроконтроллер К1921ВК01Т ОАО «НИИЭТ», а как это отлаживать в статье Способы отладки ПО микроконтроллеров в электроприводе. Также заходите на наш сайт: там, в частности, выложено два
P.S.
У специалистов прошу прощения за не совсем корректное обращение с некоторыми терминами, в частности с терминами «поток», «потокосцепление», «магнитное поле» и другими – простота требует жертв…
Комментарии (43)
Halt
21.01.2016 14:40+1Великолепные статьи! Вы умеете делать сложное простым, это дорогого стоит. Большое спасибо за труд!
ProLimit
21.01.2016 14:45Крутая статья, довольно широкий охват темы без лишних соплей. Жаль что когда изучал эту тему, такой материал не втретился и пришлось все самому собирать по крупицам.
Вопросы, как к специалисту: 1. Есть ли у вас информация, в чем заклчается конструктивное отличие BLDC от трехфазного двигателя, предназначенного для управления синусом? Можно ли определить тип, наблюдая осциллограмму ЭДС? Насколько велика между ними раница? т.е. может ли BLDC работать под векторным управлением, и наоборот? 2. Для серво-двигателей прямого привода, контроллер (железо, алгоритмы) как-то отличается от обычного?BelerafonL
21.01.2016 15:07Спасибо.
1. Конструктивно всё сложно — это надо использовать программу для расчета магнитных потоков, чтобы гарантировано глядя на пакеты железа ротора и статора сказать, какая это машина. Там малозаметные отличия могут быть очень на вид. Но неплохую «прикидку» можно сделать глядя на статор, если там отдельные катушки, то скорее всего это окажется BLDC (потому они и дешевле), а если там распределенная обмотка с большим количеством пазов, то скорее всего PMSM. Но это не гарантированный метод. А вот по ЭДС — проще простого. Поищите в картинках поисковика PMSM vs BLDC. Много будет картинок типа таких. Только там учтите, какую ЭДС смотрите, фазную или линейную — они будут разные.
2.Прямой привод алгоритмически ничем от «обычного» (с редуктором) принципиально не отличается. Но прямой привод обычно оказывается низкооборотистым, моментным, и ток там получается часто выше, чем в таком же с редуктором. Кроме того, датчик положения ротора приходится ставить в соответствующее число меток больше, чтобы получить такую же точность позиционирования.BelerafonL
23.01.2016 23:00Ах, я пропустил одну часть вопроса. Да, DLDC взаимозаменяем с PMSM, но появятся ненужные пульсации тока и момента при работе. Для автокоммутации это, можно сказать, всё равно, там и так всё пульсирует, а вот если BLDC в векторную поставить — ничего качественного не получится. Но работать как-то будет.
Halt
21.01.2016 14:46Скажите, а в реальной машине специально учитываются отклонения питающего напряжения от стандарта? Например, подключилась большая индуктивная нагрузка, напряжение просело. Или же подобный контроль происходит автоматически за счет того что устройство «знает», какое в данный момент нужно приложить напряжение и как-то компенсирует.
Ведь перенапряжение еще можно выровнять ШИМом уменьшив скважность, а просадку как нивелировать? Учитывает ли машина «историю болезни»? Например то, что некоторое время назад была просадка питающего напряжения и обмотки недополучили напряжение, что может привести т к запаздыванию ротора. Я так понимаю, эта ситуация отличается от внутреннего пере- или недо-регулирования.BelerafonL
21.01.2016 15:21+2Во-первых, если говорить о промышленных двигателях, скажем, асинхронных, то сами электродвигатели проектируются по ГОСТу с учетом как повышения, так и просадки напряжения питающей сети. То есть на них можно понизить напряжение на определенное число процентов и они обязаны работать. Что касается векторного управления, то регуляторы токов задают соответствующий текущей нагрузке ток, независимо от входного напряжения. Если оно меняется, регуляторы отрегулируют всё как надо. Также блок компенсации «гуляния» входного напряжения часто встраивают прямо в модуль ШИМ, чтобы «не напрягать» регуляторы токов по пустякам. Однако если напряжение просело, а мы работали на максимальной скорости и нагрузке, то регуляторы «упрутся» в максимум инвертора и не смогут по физическим причинам задавать такое напряжение, как было. Здесь уже зависит от программиста, что он будет делать. Обычно можно просто снизить скорость вращения пропорционально снижению напряжения (ЭДС машины уменьшается, напряжения начинает «хаватать»). Можно уменьшить поток ротора, размагнитив его временно дополнительным током. В общем, много всякого применяют. Если же мы работали не с максимальной нагрузкой/скоростью, то регуляторы не упрутся в максимум напряжения и на изменение питания никак привод не отреагирует. Никакого «запаздывания» ротора при векторном управлении не происходит, это удел прямого подключения двигателя «на сеть». Вы, как программист, видите, что вам не хватает напряжения -> принимаете меры.
Halt
21.01.2016 15:52Понятно, спасибо. Примерно так себе и представлял.
Я так понимаю, что фактические решения которые принимают зависят уже от того, что важнее в конкретной установке: сохранять скорость постоянной или момент?BelerafonL
21.01.2016 16:10Не совсем: момент и скорость связаны и зависят от нагрузки. Если это, скажем, вентилятор, то у него чем выше скорость, тем выше момент сопротивления. Если вы работаете в какой-то точке в установившемся режиме с поддержанием скорости ПИ-регулятором, то момент определяется уже нагрузкой: вентилятором. Если напряжение на входе упало, то можно снижать скорость, чтобы напряжения начало хватать, а именно снизить момент и скорость снизится, собственно, сама от нагрузки вентилятора. Или продолжать работать на этой же скорости и с этим же моментом, но «задавив» ЭДС машины. Это делается для синхронной машины с магнитами за счет задания отрицательного тока по оси d — вы как бы снижаете поток, который дает магнит. В этом случае ток в машине увеличится (по оси момента, оси q ток сохранится, а по оси d мы добавим ещё сами), но мы продолжим работать в той же точке. Но у этого метода (ослабления поля осью d) есть свои ограничения, да и машина будет греться сильнее. Поэтому тут выбор не между скоростью и моментом, а между сохранением рабочей точки (скорость и момент) за счет поднятия тока, или снижением скорости. Но чтобы это всё осознать надо знать уже теорию электропривода более глубоко, так, на пальцах, тут уже тяжело объяснить.
Halt
21.01.2016 16:24Так, теперь вроде понял, спасибо. Интересно а существует ли вариант импульсной компенсации с помощью ЭДС самоиндукции? Или это не имеет смысла, так как потом все равно придется выходить на режим и индуктивность будет уже сопротивляться, а не помогать? С другой стороны, если растянуть фронт во времени…
P.S.: Прошу прощения за детские вопросы, просто тема интересная, а кроме вас, пожалуй, никто не ответит :)BelerafonL
21.01.2016 16:32Я не понял… что имеется ввиду под «импульсной компенсации с помощью ЭДС самоиндукции». Особенно применительно к векторному управлению. Но сдается мне, что это тоже самое, что задать отрицательный ток по оси d, что я описал выше. Только это будет не импульсно, а в «статическом» режиме.
pencilTM
30.01.2016 16:31понятно
BelerafonL
30.01.2016 16:57Этот метод называется ослаблением поля в синхронной машине с постоянными магнитами, оно же «размагничивание», оно же field weaking, хотя на самом деле все эти названия не совсем точно отражают суть. Метод применяется при недостатке напряжения на инверторе и необходимости разгонять синхронную машину дальше вверх. Для этого в векторном управлении подают отрицательное задание тока по оси d — по оси магнита. В том случае ЭДС машины уменьшается (на самом деле там всё сложнее, но с точки зрения управления выглядит именно так) в результате чего напряжения начинает «хватать» и можно раскрутить машину выше по частоте. Совсем по-простому объяснено вот здесь (глава «Функция ослабления поля»), но существует просто неисчислимое количество англоязычных, да и наших тоже статей по этому вопросу. Подробнее читайте со всей математикой в учебнике «Анучин А. С. Системы управления электроприводов. МЭИ, 2015». На самом деле метод так себе — и КПД плохой там, и есть опасность перенапряжений (если система управления отключится), и колебания возможны с потерей устойчивости и т.п.
pencilTM
30.01.2016 19:03Не совсем понятен механизм. Если ослабляем поле, то ведь и «притяжение» ротора к статору должно ослабнуть…
Да, скорость должна повыситься. На холостом ходу. (Ток тоже резко повышается — ему же теперь меньшее сопротивление оказывается — отсюда перегрев обмотки и всего остального, по чему течёт ток). Но ведь нагрузку никто не уменьшал. Или там физика процесса сложнее, наверное?
Просто математические формулы ничего не объясняют. В лучшем случае они помогают посчитать. Но не понять. Во всяком случае тем, у кого в голове моделирование визуальное и «тактильное», а не просто абстрактно-логическое.BelerafonL
30.01.2016 19:17Если «на пальцах», то отрицательным током по оси d мы ничего не размагничиваем. Мы создаем реактивный, не создающий момента ток. Но для его создания, если посмотреть формулы машины, требуется такое напряжение, вектор которого направлен в противоположную сторону от ЭДС машины. И если сначала нам не хватало напряжения на инверторе, то создавая ток по оси d в минус нам приходится прикладывать вектор напряжения меньший по амплитуде, чем был. Ток по оси q мы не трогаем, а значит момент на машине не меняется. Просто… обмениваем напряжение на ненужный нам ток :) За счет этого можно теперь разогнать машину выше. Но так как машина рассчитывается на определенную амплитуду тока, то создавая ненужный ток по оси d требуется соответственно снижать ток по оси q, чтобы не перегреть обмотки. И, в зависимости от того, насколько сильны у машины магниты и насколько большая индуктивность обмоток, на которой можно «просадить» мешающую нам ЭДС, зависит то, насколько таким образом можно разогнаться выше. В теории можно даже создать машину, ЭДС которой можно током по оси d подавить полностью. И разгоняться до бесконечности :)
Конечно, там еще много процессов и в магнитной системе при этом происходит, но совсем «на пальцах» объяснение «ослабления поля» именно такое. В подтверждение этому можете посмотреть формулу момента синхронной машины — туда ток по оси d не входит, только ток q. То есть никакого «размагничивания» магнита на самом деле не происходит, если не учитывать всякие там совсем уж тонкости.
unnk2004
21.01.2016 16:28Статья отличная! Все показано очень наглядно. Единственное, на чем я бы остановился подробнее — это понятие обобщённой эл. машины. Зачем она нужна и почему она именно двухфазная. Помню когда я учился, эти, казалось бы простые вопросы, многих студентов ставили в тупик.
BelerafonL
21.01.2016 16:38+2Ну двухфазная она именно потому, что так проще — моя статья тоже начинает объяснение с двух фаз. И векторная структура тоже строится в декартовых осях, независимо от числа фаз реальной машины. А зачем нужна — ну чтобы вот, например, привести трехфазную машину к двухфазной. Чтобы магнит заменить обмоткой и тогда привести к одним и тем же формулам и синхронную машину с магнитом, и без. И к ней же привести асинхронник, просто «закоротив» катушку с обмоткой, которая только что была «магнитом»… Тогда у вас есть универсальные формулы, которые описывают вообще все электродвигатели — только чуть-чуть параметры меняете и всё.
ToSHiC
21.01.2016 17:01Сейчас в формуле 1 применяют электродвигатели для раскручивания турбины/генерации электричества (MGU-H). Какой тип двигателей они могут применять, если обороты порядка 150 тысяч в минуту? Если асинхронный — то нужен ли какой либо аналог векторного управления для работы двигателя в качестве генератора?
BelerafonL
21.01.2016 17:22Хороший вопрос! Отвечает… Борис Бурда!
Честно говоря, я не знаю. Можно только фантазировать или найти в какой-нибудь статье, если повезет. Вот здесь на форуме есть всякие рассуждения… Когда речь идет о «высоких материях», то применять могут самые неожиданные технические решения. Если это синхронный двигатель, то для управления наиболее вероятно применяется какой-нибудь тип автокоммутации, причем сделанный скорее всего аппаратно (ПЛИС). А программа микроконтроллера только формирует «задание» тока для такой системы. В любом случае «аналог» векторного управления нужен, иначе сложно управлять потоком мощности туда-обратно, да еще и так быстро, как это требуется в этой задаче.ToSHiC
21.01.2016 18:26я читал этот тредик в прошлом году. Сам считаю, что там довольно жарко, и поэтому магниты долго не проживут. + ротор крутится очень быстро, желательно, чтобы он был сплошной деталью, ну или хотя бы просто собран из нескольких в монолитную сборку.
unnk2004
21.01.2016 17:32Может там редуктор стоит?
BelerafonL
21.01.2016 17:52+1В статьях пишут именно про 150 000 rpm и на картинках рисуют тоже напрямую. Да и редуктор на такие обороты… задача не менее сложная, чем, собственно, сам двигатель и система управления.
Bronx
28.01.2016 04:36Скорее всего обычный асинхронник с частотным управлением. Особо сложного закона управления там не нужно, так как для асинхронного мотора нормально иметь большое скольжение (разность частоты вращения ротора и магнитного поля статора), и точного выдерживания магнитного угла не требуется.
Alexeyslav
21.01.2016 18:03+1Шайтан, как же теперь это всё запомнить?
Давно хотел запустить моторчик от очень старого винчестера, там всего 3 вывода — Видимо это всё-таки BLDC и обмотки соединены треугольником.BelerafonL
21.01.2016 18:09Да, в винчестерах BLDC. Это вам надо статьи из курса про BLDC прочитать, на которые ссылка в статье.
qbertych
21.01.2016 19:05Есть ли какие-то особенности при запуске однофазного двигателя? Типа особенностей реакции при неправильном направлении вращения, или снижения роли интегральной компоненты в ПИ-регуляторе скорости если двигатель инерционный и медленно раскручивается?
BelerafonL
21.01.2016 19:52Однофазного какого именно? Асинхронного? Это того, который на самом деле двухфазный, но на второй фазе делают фазовый сдвиг конденсатором? Или SRD? Или синхронного однофазного? Обычно для таких простых двигателей никаких векторных управлений не делают, по-простому «на сеть» сажают или регулируют в напряжение питания (для асинхронного), а SRD и синхронные (шаговые) простеньким коммутатором щелкают.
qbertych
21.01.2016 20:36Пардон, имелся в виду двухфазный синхронный. Как на первых примерах.
BelerafonL
21.01.2016 20:51Двухфазный синхронный? Или однофазный синхронный? :) Давайте определимся до конца :)
Потому что двухфазный синхронный никаких проблем не имеет с направлением вращения и математически ничем от трехфазного не отличается по управлению.qbertych
21.01.2016 22:07У меня вопрос скорее про то, что может вращаться в ненужную сторону, не уверен как именно оно классифицируется =). Там могут быть какие-то тонкости?
BelerafonL
22.01.2016 09:41Если двигатель однофазный синхронный, то он действительно мог бы вращаться в другую сторону. Но обычно в тех применениях, где такие двигатели могут использоваться, обратное направление вращения предотвращается как-то механически. Или вообще рабочий режим такого двигателя может быть колебаниями (часы). Векторное управление к такому двигателю не применяется, собственно, по определению: нечем создавать «вектор», если у нас только одна фаза. Одно фазой можно сделать только «скаляр». Ну или вектор, который нельзя поворачивать :) Так что в таких приводах применяют просто автокоммутацию, включая обмотку по какому-то датчику или просто по времени (шаговые двигатели).
barsuksergey
22.01.2016 06:57Хорошая статья, спасибо. Когда 6 лет назад моделировал частотник в Симулинке, продираясь через бездну формул, хотелось отгрызть себе что-нибудь от недостатка понятных аналогий.
Представляю, как много ребят сейчас воодушевится «максимально упрощённым» ДПТ :)
LeonidLenin
24.01.2016 10:08Очень хорошо, жаль год назад, когда я начинал, такой статьи не было!
«Калачев Ю. Н. Векторное регулирование (заметки практика)» — казалась эльфийскими рунами)
Мне лично очень помогло видео от TI www.youtube.com/watch?v=cdiZUszYLiA я просто до ушей расплылся когда его смотрел, от того что всё стало ясно) + от этого же автора есть ролик про BLDC.
Ну и «библию» могу порекомендовать — «ELECTRIC MOTORS AND DRIVES Fundamentals, Types, and Applications Fourth Edition AUSTIN HUGHES AND BILL DRURY» — исключительно понятным языком объяснено почти всё, что необходимо для понимания, в т.ч. векторного управления.
В догонку к теме про отладку электропривода: мощный и точный FOC таки можно сделать на микроконтроллерах ST, буквально вчера провёл все тесты и остался доволен — STMStudio позволяет получать очень детальные графики параметров, до миллисекунды и даже лучше. Всё что нужно — использовать dataAcq.c из дистрибутива студии и добавить в код пару строчек (см UM1025 от ST).BelerafonL
24.01.2016 10:15Значит STMStudio умеет отображать массивы данных из оперативки? Отличная новость, спасибо за тест! А можете привести пару скриншотов интерфейса — оценить, как там у них это сделано, чтобы всем остальным показывать?
LeonidLenin
24.01.2016 10:27Скриншот я приложил в «соседней» теме. На самом деле — это не отображение массива. Это вызываемая в коде функция, делающая snapshot запрошенных студией переменных в свой внутренний массив, размер которого можно изменять(у меня порядка 200 элементов). Данные, из этого массива студия умудряется забирать с контроллера быстрее, чем она считывает переменные в обычном режиме. Если не делать снапшот слишком часто — то график в студии будет непрерывный и с очень плотными точками. При этом на едином графике можно наблюдать и «обычные» переменные, с реденькими точками и плотные, полученные снапшотом. режим переключается одним кликом. Разве что одни могут уползать относительно других, из-за нерегулярности вызова функции снапшот'а.
Это четверть экрана, на самом деле переменных одновременно получается намного больше, то есть плотность не максимальна, но разница между разными способами получения данных на лицо(время в миллисекундах):
BelerafonL
24.01.2016 10:43Это использование массива как кэша данных. Да, тоже интересный подход. Но тоже привязан к частоте передачи данных «наверх» получается. 1мс дискретизация это почти хорошо, но для некоторых задач — мало. Например, часто бывают ситуации, когда процесс происходит за два -три периода ШИМ на частоте ШИМ 10кГц. Т.е. это меньше 1мс. Ну, например, если вам надо настроить регулятор тока — там весь переходной процесс около 1мс. А бывает, что датчик положения или АЦП глючит на «один такт», проскакивает «шилка» и потом на всех графиках видны только растянутые «последствия». Бывает, что надо сделать «подхват двигателя на лету» — типа он уже вращается, а вы раз — и попадаете выходами регуляторов в текущее мгновенное напряжение и продолжаете вращение. Там, если не попасть, то 2-3 периода ШИМ и будет защита по превышению тока — надо рассматривать «потактово» что система управления делает. Думаю, раз в STMStudio сделали так сложно, с кешированием, то где-нибудь есть и просто функция отображения массивов, поищите :)
LeonidLenin
24.01.2016 10:52Да, потеря детализации естественно есть. Если углубиться в раскопки их кода получения массива то наверно что-то можно наколхозить)
У меня ШИМ и FOC просчитывается на 30кГц, для совсем быстрых иголок я в коде ловлю локальный максимум (на картинке VsMAX — он медленно спадает). Ну а максимальную частоту с которой можно получать студией одну 32х-битную переменную я измерю и сразу напишу, думаю будет около 5-10кГц. Надо снапшот затолкать в прерывание с малым приоритетом, пока она у меня в главном цикле.
Ещё есть варианты с использованием дополнительного пина SWO — специально для trace, но нужен уже другой, использующий его софт. Keil это умеет, но графопостроитель там намного менее удобный.LeonidLenin
24.01.2016 13:05
Здесь 2кГц. Можно больше, если причесать код. Можно на много больше, если с пропусками. Можно с триггером по нужному событию.
klirichek
27.01.2016 21:55А как работает двигатель привода HDD?
там стоит некая микросхема, которая по определённому закону «приземляет» питание на, собственно, обмотки.
Ну или что-то ещё, подключённое по нескольким на вид совершенно равноценным дорожкам (может что-то из них питание, а что-то — датчики. Или всё вместе датчики… )
— Есть разобранный HDD (без печатки; только механика — движок с шпинделем и диски). Есть контакты. Как завести?BelerafonL
27.01.2016 22:32Двигатель HDD наиболее вероятно класса BLDC. Как запустить смотрите здесь.
MichaelBorisov
27.01.2016 21:58Отличная статья, спасибо, автор, за подробный ликбез по электродвигателям!
Скажите, а с индукционными (асинхронными) двигателями как обстоит дело? Там же ток в короткозамкнутом роторе возникает за счет индукции от статора. Может тиснете еще статейку про такие двигатели, все-таки у них есть важное преимущество — отсутствие постоянных магнитов?BelerafonL
27.01.2016 22:37+2Спасибо за вопрос! Честно признаться — я его ждал. Сначала я хотел написать в этой же статье про асинхронные двигатели, а потом увидел её размер… И решил пока асинхронный привод оставить на потом. Именно асинхронный, а не индукционный — на русском языке он называется именно асинхронным. Если получится объяснить про него на пальцах, то попробую оформить статью.
mphys
Так обьяснили что даже я понял. А если я понял — все разберутся.
Спасибо.