Войти

Управление скоростью двигателя постоянного тока

 А на картинке мой первый стенд. Его подарил мне коллега перед отъездом в Корею много лет назад. Потом один студент взял для работы над дипломом и не вернул. Осталась одна картинка –  “по-памяти”. Именно на этом простеньком стенде было проведено множество любопытных экспериментов, связанных с эффектами цифровых систем.

first-tool.png

В предыдущих постах я  представил вниманию общественности  свой подход к настройке регуляторов “очень похожих на ПИ” на примере системы управления током мотора. Теперь в том же духе “мастер-класс” покажу как просто настроить контур скорости.

На следующей картинке – модель объекта управления. Она разбита на 3 блока. Блок DPT- это модель двигателя. DT – датчик тока, DS – датчик скорости. Силовой преобразователь смоделирован просто коэффициентом усиления. Более подробная модель силового преобразователя не имеет особого смысла- “не те времена” – все переходные процессы в нем на столько быстрые, что у цифровой системы управления нет ни какой возможности ни наблюдать их ни должным образом реагировать на них. Поэтому все эффекты от широтно-импульсной модуляции сведены к источнику шума, который я встроил в модель датчика тока.

В данном примере я использую модель  импульсного датчика. Принцип измерения прост – считается количество импульсов, приходящих за такт.  И с этим как раз очень большая  проблема.  Сколько реально приходит импульсов за такт? Например, на роботе пума за 1мс на максимальной скорости приходит 40 импульсов .  То есть, максимальный диапазон регулирования при подобном измерении скорости – 2.  Потому что с 5% точностью я могу регулировать только на уровне 20 импульсов за такт. Более низкая скорость не доступна.  А хотелось бы диапазон регулирования хоть 10, а лучше 100.

Данный пример мне как раз этим и нравиться- очень ярко проявляет себя квантование измеряемого сигнала по уровню, которое отправляет классику ТАУ в нокаут.

Итак приступим. Модель ДПТ и датчиков (alfa- угол поворота, omega – угловая скорость, omega*- данные датчика):

На следующей картинке реакция ДПТ  на ступеньку в половину напряжения. Обратите внимание на показания датчиков (лиловый цвет на графике). И особенно, на датчик скорости (внизу) – вот такой рваный ступенчатый сигнал (плюс-минус 8 рад/сек) будет виден программе микроконтроллера.

 

Этап первый и второй. Сначала настроим пропорциональный регулятор тока.  Настраиваем фильтр тока и пропорциональный коэффициент (Kp_t) – я об этом уже писал. Но одно важное отличие. Увеличьте пропорциональный коэффициент, так что бы перерегулирование составило 50%. 

У меня получились вот такие переходные процессы по току (напряжение- U, ток – I):

 

Этап третий. Изменяем структуру регулятора, как на картинке ниже. Обратите внимание куда переместился коэффициент Kp_t!  Он теперь в обратной связи по току. И его больше изменять не надо! И появился еще один коэффициент  Kp_w.  Начинаем настраивать Kp_w так, что бы  скорость изменялась без перерегулирования. Статическая ошибка пока отсутствует, так как работаем без нагрузки.

Но посмотрите просто чудовищный сигнал напряжения на двигателе! (следующий рисунок, первый график ). В реальной системе такое управление вызовет вибрации на частоте 100-500 Гц.  И это очень плохо. Этот эффект вызван низким разрешением датчика скорости (четвертый график).

 

Теперь посмотрим, для чего нужна обратная связь по току. Я ее убрал и получил автоколебания. Комментарии, думаю будут излишне.

 

Далее я вернул  обратную связь потоку и добавил нагрузку. Появилась статическая ошибка (надо было 30 рад/c отработать, а получилось 20)

 

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

Подбираем коэффициент при интеграторе Ki_w – все, проблема статической ошибки решена, Но сигнал напряжения по-прежнему корявый.

 

Я обошел эту проблему удивительным для самого себя способом. Первым делом я снизил период времени, на котором считаю импульсы с 1мс до 63мкс. Я снизил разрешение датчика в 16 раз. Теперь даже на максимальной скорости будут приходить единичные импульсы. НО! после датчика скорости поставлен цифровой фильтр с большой постоянной времени. И на его выходе теперь совсем другая картинка.

 

Повторяю третий и четвертый этапы настройки. Переходные процессы существенно затянулись, зато и картинка скорости и картинка напряжения вышли замечательные!

 

 Эксперимент

На стенде с синхронной машиной (подход тот же, только сигнал управления на 3 фазы раскладывается) экспериментально подтвердил полученные результаты.  Скорость снималась с импульсного датчика.

Максимальная скорость, которую можно было увидеть- это 30 импульсов за 1 мс.  Это значит, что диапазон регулирования при 5% ошибке: 1,5.

Далее действуем уже по описанному алгоритму:

Снижен период измерения скорости в 4 раза до 250 мкс . Теперь разрешение датчика – 7-8 дискрет за такт. Поставлен самый простой цифровой фильтр:

скорость = (скорость*15 + датчик*16) /16.

Формулу фильтра не сокращаю намеренно!  Из-за чудес с целочисленными вычислениями.

Подобраны коэффициенты регулятора скорости.

Графики снимались Codewarrior Freemaster с периодом 250 мкс .

Переходный процесс на максимальной скорости(100 попугаев ~ 30 импульсов датчика за 1 мс –  7-8 дискрет за 250 мкс):

s4

 

Переходный процесс на минимальной скорости(16 попугаев ~ 4 импульса датчика за 1 мс –  1 дискрета за 250 мкс):

s1

 

 

Переходный процесс на самой минимальной скорости(1 попугай~ 1/4 импульса датчика – 1/16  дискреты за 250 мкс). В таком режиме машина уже залипает на сухом трении, двигается рывками, но упрямо продолжает продвигаться вперед (пытались остановить вращение плоскогубцами до первой травмы) и средняя скорость на самом деле составляла 1 импульс за 4 мс -мотор делает один оборот за 4 с. При скорости 1 оборот за секунду рывки  прекращались.

s2

Выводы.

1. Совершенно реально крутить машину со скоростью 1 импульс за такт с 5% точностью.

2.  На реальной машине удалось повысить диапазон регулирования скорости в 5 раз.  Но за это приходится платить быстродействием.

Практические советы. (положения дискуссионные)

Повышать разрешение датчика путем увеличения периода измерения категорически не советую. Даже при наличии столь медленного фильтра, каждый пришедший импульс все равно заставляет систему управления реагировать в течении 250 мкс. Попытайся я в 5 раз увеличить период измерения, то машина реагировала бы в с 20-ти кратной задержкой .

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

Есть еще подход к регулированию скорости, который называют “фазовая автоподстройка частоты”  (ФАПЧ), но мой подход все равно лучше и по точности и по быстродействию. Проверял, правда, только на модели . Однако для следящих систем (это те, которые управляют углом поворота или требуют быстрого изменения скорости) совсем не годится по очевидным причинам.

Витает в воздухе замечательная идея- крутить машину  измеряя (наблюдая) противо-ЭДС (которая пропорциональна скорости). Вот этот подход требует детального изучения. Но все ,что я видел по этой теме,  для следящих систем тоже не годится по различным причинам. Например, пытаются разорвать ток и измерить напряжение на двигателе. Бедные силовые ключи и бедный оператор. Или посчитать противо-ЭДС так: E = U-IR, без учета само-ЭДС . При изменении скорости мотора или при переменной нагрузке совсем не годится. А с явнополюсной машиной, даже при детерминированном режиме работы , тоже очевидный абзац.

Говорят, что про управление моторами (по крайней мере ДПТ) все давно уже известно. Врут. Если речь идет об системах, где дорог каждый такт и каждый импульс- там все сложно. Я еще вам про чудеса с сухим трением и трением покоя в связке с дискретизацией по времени и квантованием по уровню не рассказывал. Но это совсем другая история.

 

 

 

 

Комментарии (2) на “Управление скоростью двигателя постоянного тока”

  • Артём:

    Здравствуйте! Очень интересная и познавательная статья. Но как перейти от мат. модели к программе микроконтроллера?
    Нашёл Ваш блог, так как сейчас занимаюсь разработкой плат управления для “Пума”.

  • Здравствуйте!
    В проекте по МГУ столкнулись мы с российской программой SimInTech, якобы аналогом Simulink. Поддержка отечественного ПО дело понятное, но альма-матер подставлять нет ни малейшего желания. Вы не сталкивались? Нет данных о сравнении? Явно сыроват продукт, но потенциал оценить возможно?

Добавить комментарий для Артём

Improve Your Life, Go The myEASY Way™