После выхода предыдущих статьей о векторном управлении электродвигателями поступило много вопросов о позиционном приводе – как приводом отрабатывать заданное положение? Как работает сервопривод в современных станках, как использовать сигнал с датчика положения, чем отличается шаговый привод от сервопривода с подчиненным регулированием? Давайте всё покажу в виде картинок и видео.

Итак, что же такое сервопривод с контуром положения? Для начала посмотрите вот это. Чтобы было видно графики на фоне советую смотреть в полноэкранном режиме.


Трехконтурная структура управления


Система управления стремится поддерживать заданное положение вала ротора. Я вношу возмущающее воздействие, отвожу ротор от заданного положения, но после отпускания вала он снова вмиг возвращается к заданию. Даже если его «закрутить» на несколько оборотов, система управления открутит эти несколько оборотов назад, причем с очень хорошей динамикой — такой, что движение даже не успевает попасть в кадры видео. На заднем фоне виден график работы привода: красным показан ток двигателя (пропорционален моменту), зеленым отображается текущее положение вала ротора, а желтым – задание положения. Максимальный разрешенный момент (ток) у двигателя в этом эксперименте был ограничен в три раза от максимального, на полном я бы не смог его так легко удерживать.

Как работает такая система управления? Это классическая трехконтурная система подчиненного регулирования с последовательной коррекцией, показанная на рис.1.


Рисунок 1. Трехконтурная система подчиненного регулирования

Почему подчиненного? Потому что каждый вложенный контур «подчиняется» заданию вышестоящего. В системе три контура, перечисляю начиная с внутреннего: конур тока (момента), контур скорости (частоты вращения), контур положения. Соответственно, каждый контур с помощью своего регулятора поддерживает на заданном уровне свою величину. В данном случае использовался ПИ-регулятор для токов, П-регулятор для скорости и ПИД-регулятор для положения. Никакой магии типа фаззи-логики, линейно-квадратичных регуляторов и прочего.

Почему именно три контура и именно таких? Попробую объяснить, как обычно, «на пальцах». Если мы хотим регулировать положение, то лучшее, чем мы можем для этого управлять – это скорость (частота вращения), потому что именно скорость напрямую влияет на изменение положения (скорость – это производная от положения), а все остальные величины (ток, напряжение и прочее) влияют на положение более сложным образом, более трудным для регулирования. Далее, если мы теперь хотим регулировать скорость, то лучшее, чем можем управлять – это момент двигателя, так как момент определяет ускорение привода, и оно также самым простым математическим законом связано со скоростью. Так как для двигателя момент — это ток (для двигателя постоянного тока это справедливо в явном виде, а для двигателей переменного тока справедливо для моментообразующего тока в векторном управлении), то для регулирования момента нужно управлять напряжением на инверторе преобразователя, потому что ток и напряжение тоже связаны в первом приближении через простое дифференциальное уравление.

Если какой-либо внутренний контур опустить, то… положение регулироваться будет, но будет регулироваться плохо, не с таким быстродействием, как в трехконтурной системе. Если выкинуть, например, контур тока, заставив регулятор скорости воздействовать напрямую на напряжение инвертора, то останется бесконтрольным момент привода (ток) – он будет меняться как хочет, переходные процессы будут пущены на самотёк. К сожалению, некоторые ардуиноводы делают структуру, показанную на рис.2.

Рис.2. То, как не нужно регулировать положение привода.

Такая структура работает отвратительно (медленно и качается), хотя как-то работает – ПИ-регулятор всё вытянет.

Постоянный и переменный ток: в чем разница для контура положения?


В чем разница в регулировании положения для двигателей постоянного тока и для двигателей переменного тока? В способе поддержания момента. В двигателе постоянного тока достаточно поставить один регулятор тока, который воздействует на напряжение якорной обмотки – получится регулирование момента. В двигателях переменного тока (например, синхронной машине с постоянными магнитами и асинхронном двигателе) придется применять векторное управление. Что это такое и как работает уже было подробно рассмотрено в статьях Векторное управление электродвигателем «на пальцах» и Векторное управление для асинхронного электродвигателя «на пальцах». Также, как и для двигателя постоянного тока, векторное управление позволяет регулировать момент на двигателе. Далее сверху «навешиваются» такие же регуляторы скорости и положения. Итоговая работоспособность контура положения не зависит от типа двигателя (меняются лишь незначительные нюансы).

Шаговый режим работы


Для синхронных машин с постоянными магнитами существует еще один вариант отработки положения – так называемый «шаговый» режим работы. Двигатели, для него оптимизированные, соответственно, называются шаговыми. Не все шаговые двигатели – синхронные машины с магнитами, но большая их часть именно такая (бывают еще шаговики индукторного типа). Как это работает? В двигатель просто подается постоянный ток в нужные фазы. И всё. Ротор под действием «магнитной пружины» сам встаёт в соответствующее току положение. Если нужно поменять положение вала, то вектор тока нужно поворачивать — плавно или дискретно зависит уже от «драйвера» шагового двигателя (с микрошагом или без). Про то, как работает синхронный двигатель, и где там в нем магнитная пружина уже было рассказано в статье.

Шаговый режим хорош тем, что кроме контура тока ему ничего не нужно – ни датчик положения, ни даже микроконтроллер. Система управления для такого режима собирается из трех с половиной микросхем и применяется во всех ЧПУ станках любительского (и не очень) уровня. В чем минусы? Положение поддерживается тоже отвратительно. Поддержанием положения в таком режиме занимается сам двигатель – в статор подается постоянный ток, а ротор стремится встать в соответствующее положение. Можно представить два прямоугольных магнита на одной оси, проходящей через их середину (рис 3). Одним магнитом мы управляем (статорный ток), а второй – ротор, болтается сам по себе и стремится повернуться согласно первому, параллельно ему.

Рис. 3. Шаговый режим работы синхронной машины

Момент на роторе в таком режиме изменяется по закону синуса от угла рассогласования между этими двумя магнитами. В согласованном положении момент равен нулю (на ротор не действует нагрузка), на 90 градусах (магниты перпендикулярны) момент двигателя максимален и стремится повернуть ротор в согласованное положение. А амплитуда этого синуса изменения момента зависит от величины поданного тока.

Число пар полюсов


Для улучшения точности поддержания положения в шаговом режиме конструктивно увеличивают количество пар полюсов у двигателя. Если пара полюсов одна, то двигатель соответствует вот тем двум магнитам на рис. 3 – ротор может болтаться вплоть до четверти оборота туда-сюда от заданного положения. Когда число пар полюсов увеличивают, то увеличивается количество чередований север-юг, как в магнитах ротора, так и в обмотках статора. Вот картинка, где показаны двигатель с одной парой полюсов и с двумя:

Рис.4. Одна пара полюсов vs две пары полюсов.

Если пытаться провернуть такой двигатель с двумя парами полюсов с поданным постоянным током в фазы, то момент на роторе вырастет до максимального не за четверть оборота (90 градусов, как в одной паре полюсов), а за восьмую часть оборота (45 механических градусов). У двигателя будет два устойчивых положения ротора на механическом обороте. Для удобства описания процессов в двигателе вводят понятие «электрического оборота» – то, насколько надо провернуть ротор, чтобы магниты ротора одного полюса встали на место таких же от другого полюса, т.е. чтобы сделать один «шаг». Тогда говорят, что ротор провернулся на 360 электрических градусов, а чтобы перевести это в механические, надо поделить на число пар полюсов. На электрическом обороте поведение всех двигателей в плане управления одинаково, независимо от числа пар полюсов. Увеличение числа пар полюсов создает лишь эдакий «электрический редуктор» – можно взять машину с одной парой полюсов и поставить дальше четырехкратный понижающий редуктор, а можно взять машину с четырьмя парами полюсов и получить, грубо говоря, то же самое.

Шаговый режим vs подчиненное регулирование: теория


Для шаговых двигателей число пар полюсов делают очень большим – 50, 100 и более. В этом случае естественные возможности по поддержанию положения получаются очень хорошими – если гарантировать, что момент нагрузки никогда не превышает максимальный момент двигателя, то положение без всяких датчиков положения будет поддерживаться с точностью (±360/(число_пар_полюсов*4)) механических градусов. Правда, цена за это – сильное ухудшение показателей двигателя в массогабаритном плане и КПД. Если сравнить по мощности шаговый двигатель с сотней пар полюсов и такого же габарита синхронный двигатель с небольшим количеством пар полюсов, то длительно-допустимая мощность у шаговика будет в разы меньше. А еще из-за увеличения числа пар полюсов у шаговиков есть проблема с работой на больших частотах вращения. Частоту тока в них приходится подавать в количество_пар_полюсов раз большую, чем в «обычную» синхронную машину, что даёт частоты тока порядка килогерца и более – там и потери на перемагничивание железа огромные, и не всякая система управления такое может.

Кроме того, шаговики не обеспечивают хорошей динамики разгона и торможения, так как при разгоне двигатель должен перебороть два момента: момент нагрузки, а также динамический момент на разгон маховой массы и рабочего органа. И если сумма всех моментов превысит максимальный момент двигателя, он пропустит шаг, что для ЧПУ недопустимо. Поэтому шаговики разгоняют и тормозят обязательно плавно, с большим запасом между суммарным моментом на валу и максимальным моментом двигателя, чтобы не пропускать шаги.
Стоит также отметить, что в шаговом режиме при приложении к ротору нагрузки он всегда будет поддаваться и отклоняться от заданного положения на некоторый угол, каким бы ни был поданный в двигатель ток. Также при резком пропадании нагрузки возможны колебания – ротор на магнитной пружине будет качаться туда-сюда. Если с нагрузкой не повезет, и она будет импульсная, то она может совпасть внутренней частотой колебаний ротора, раскачать его, после чего ротор выпадет из синхронизма – двигатель «пропустит шаг».

Что же делать, если для решения задачи нужно и хорошо поддерживать положение, и получить динамичный, высокоскоростной привод? Не использовать шаговики! А использовать «обычную» синхронную машину с небольшим числом пар полюсов в качестве серводвигателя, установить датчик положения и построить трехконтурную систему управления. В векторной системе управления никаких «шагов» уже нет – теряться нечему. В шаговом режиме через двигатель всегда требуется пропускать большой ток, а в векторном режиме с трехконтурной структурой управления ток течет только тогда, когда к валу приложена нагрузка. Точность поддержания положения в системе подчиненного регулирования чаще всего определяется точностью датчика положения ротора. Чем точнее датчик, тем качественнее получается работа контура положения. А современные датчики положения бывают очень точны – сотни тысяч меток на один механический оборот. Это на порядки лучше, чем дают шаговые двигатели с самым сильным дроблением шага.

Шаговый режим vs подчиненное регулирование: практика


А теперь давайте посмотрим на практике все вышесказанное. Нужно описать стенд, с которым я работаю. Технической информации много, спрячу это под спойлер.
Стенд для опытов
Это отладочный комплект VectorCARD К1921ВК01Т, производимый нашей фирмой, который я утащил на выходные домой, чтобы снять красивые опыты и написать статью.

Рис. 5. Отладочный комплект для управления электродвигателем VectorCARD К1921ВК01Т

Серводвигатель – Leadshine ACM601V36-1000. Трехфазная синхронная машина с постоянными магнитами на 100Вт, 4 пары полюсов, напряжение питания 36В, номинальный ток 4А, пиковый 11А. Датчик положения – встроенный инкрементальный энкодер на 1000 периодов квадратурного сигнала (или, что то же самое, 4000 фронтов (меток) по двум каналам A и B суммарно).
Инвертор – шестиключевой инвертор на полевых транзисторах из комплекта DRV8301-HC-EVM Texas Instruments.
Контроллер – отладочная плата VectorCARD К1921ВК01Т на отечественном микроконтроллере К1921ВК01Т ОАО «НИИЭТ» (ARM Cortex-M4F, 100МГц).
Общая структура векторного трехконтурного подчиненного регулирования, создана программно, показана на рис. 6.

Рис. 6. Трехконтурная структура с векторным управлением синхронным двигателем: контура токов (момента), скорости, положения.

Если кому-то эта структура кажется страшной, то всё, что обведено в зеленую рамку было до основания разобрано в статье Векторное управление электродвигателем «на пальцах». По своему принципу структура ничем не отличается от структуры рис. 1.
Частота ШИМ задана равной 20кГц, частота обсчета структуры управления (всех трех контуров) – 10кГц. Датчики тока – шунтового типа, установлены последовательно с нижними ключами инвертора. Ресурсы микроконтроллера по производительности вычислений загружены чуть более, чем на половину.


Шаговый режим vs подчиненное регулирование: сравнение в статическом режиме


Сначала сравним шаговый режим работы и трехконтурную систему подчиненного регулирования с векторным управлением «в статике». Зададим одно и то же положение ротора, а затем будем плавно увеличивать момент нагрузки на валу. В шаговом режиме работы подадим номинальный ток 4А, а в векторном режиме работы поставим токоограничение 4А. Что мы ожидаем увидеть?

В шаговом режиме работы ток будет постоянным как по фазе, так и по амплитуде, а положение ротора должно «прогибаться» на магнитной пружине под нагрузкой. Так как число пар полюсов равно 4, то максимум момента должен достигаться при отклонении 360/4/4 = 22.5 механических градусов от первоначального согласованного положения.

Что будет в трехконтурной системе управления? Регулятор положения в этом опыте – ПИД (пропорционально – интегрально – дифференциальный). Ключевая буква здесь «И» – он имеет интегральную составляющую. Это значит, что до тех пор, пока между заданным положением и текущим есть хоть какое-то рассогласование, интегратор регулятора будет интегрировать и увеличивать свой выход, пока ошибка не придет в ноль. Это значит, что если нагружать вал медленно, так, чтобы интегратор успел наинтегрировать и скомпенсировать ошибку (т.е. в статическом режиме), то вал будет стоять в одном и том же положении «мёртво». Но когда запас по току (моменту) привода будет исчерпан (задание на ток дойдет до ограничения 4А) привод сразу начнет поддаваться и отклоняться от задания (тем не менее, всё время будет тянуть с максимальным моментом по направлению к заданию).

Для отслеживания текущего положения вала ротора удобно наблюдать сигнал ошибки с датчика положения (разница между заданием и текущим положением), а также ток статора. При проведении опыта осциллограмма с этими данными будет видна на заднем фоне. Для наблюдения текущего момента нагрузки в опыте использован высокоточный специализированный динамометр, который я достал из ящика кухонного стола. Вот, собственно, сам опыт (чтобы было что-то видно — полный экран!):

Видео подтверждает сказанное. В векторной трехконтурной системе управления ротор стоял неподвижно, пока я не «выбрал» доступные 4А тока, а потом ротор стал отклоняться. В разомкнутой по положению структуре с постоянным током ротор легко поддался внешнему моменту. Так как число пар полюсов этого двигателя равно 4, то ротор отклонился более, чем на 20 градусов от задания.

Шаговый режим vs подчиненное регулирование: сравнение в динамике


Всё становится интереснее в динамике. Что если приложить импульсную, ударную нагрузку? Здесь получается соревнование двух принципиально разных систем. В векторной системе управления быстродействие зависит напрямую от быстродействия трехконтурной структуры управления. Чем жестче настроены регуляторы, чем быстрее частота обсчета структуры, чем точнее и быстрее датчики, тем лучше получится реакция на возмущение в динамике. В шаговом режиме работы система управления «отдыхает». Она создала вектор тока – это всё, что от неё нужно. Всю реакцию на возмущающее воздействие обеспечивает сам двигатель. Момент на валу при отклонении вала ротора возникает «мгновенно», так как это, по сути, взаимодействие двух магнитов. Но момент увеличивается пропорционально синусу от электрического угла отклонения, а значит, такая система будет иметь определенную жесткость. В общем, это обычная «магнитная пружина». Сравнение в динамике – это очень хороший показательный опыт для трехконтурной системы управления. Если она медленная, то она не сможет показать результат лучше, чем разомкнутая структура. Да, в статике трехконтурная структура может выбрать ошибку по положению в ноль интегральной частью регулятора, но в динамике может и «просесть» сильнее, чем обычный шаговый режим работы. Проверим?

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


Вначале включен шаговый режим работы с фиксированным вектором тока. Я показываю, как ротор прогибается под воздействием момента нагрузки, как, пересилив момент нагрузки, можно перескочить в другое фиксированное положение. Затем провожу эксперимент по сбросу груза. Далее то же самое для трехконтурной структуры управления. Заметили ли вы, насколько меньше отклонился вал ротора на видео в трехконтурной системе управления? Или, может быть, больше? Я нет.

Если бы похожее видео снимал канал Дискавери, они обязательно установили бы высокоскоростную камеру для красивых сравнительных кадров. Однако у нас есть инструмент поточнее – датчик положения ротора и микроконтроллер. Нужно просто снять осциллограмму ошибки отработки положения в момент приложения импульсной нагрузки. Как это делается подробно описано в статье Способы отладки ПО микроконтроллеров в электроприводе. Если кратко, то микроконтроллер по определенному событию записывает точки осциллограммы в массив, а затем осциллограмма скачивается на компьютер и отображается. Я в софте контроллера установил триггер захлопывания осциллограммы, когда ошибка по положению больше определенной уставки, вписав для этого пару строк кода на Си. После чего на компьютере я получил вот такую осциллограмму для шагового режима работы с током 5А:


Рис. 7. Осциллограмма реакции на импульсный наброс нагрузки в «шаговом» режиме работы – к двигателю приложен вектор тока фиксированной амплитуды и фазы. Фиолетовым показано отклонение ротора от заданного положения в электрических градусах (для перехода в механические делить на 4), голубым показана амплитуда тока статора, красным – частота вращения вала. В одной клетке по оси времени 21 миллисекунда.

В осциллограф я добавил три переменных системы управления: ошибка по положению, ток статора, частота вращения вала. Из осциллограммы видно, что ток статора оставался постоянным и равным 5А, ударная нагрузка внесла лишь небольшое возмущение в него (за счет ЭДС вращающегося двигателя). А вот положение скакнуло сильно. Максимальное отклонение положения вала от задания составило 36 электрических градусов (или 9 механических). Наблюдается затухающий колебательный режим ротора после удара. Я провел несколько таких опытов, убеждаясь в повторяемости. Все осциллограммы получились схожи – благо, что при наличии нужного инструментария время на проведение опыта и получение осциллограммы (в том виде, как вставлена в статью) составляет секунд 5-10.

Теперь посмотрим, что покажет трехконтурная структура управления (рис. 8). Предварительно я настроил у неё все регуляторы на среднее быстродействие.

Рис. 8. Осциллограмма реакции на импульсный наброс нагрузки с трехконтурной системой подчиненного регулирования. Фиолетовым показано отклонение ротора от заданного положения в электрических градусах (для перехода в механические делить на 4), голубым показан текущий ток статора по оси q (моментообразующий ток), синим – его задание, а красным – текущая частота вращения. В одной клетке по оси времени 21 миллисекунда.

Здесь процесс поинтереснее. Помимо, собственно, положения, я добавил в осциллограф еще всяких величин, по которым видно работу подчиненного регулирования. В начальный момент времени всё равно нулю: ошибка равна нулю, скорость, ток статора и его задание. На ротор не действует сил, он покоится за счет своей силы трения. Но изолента в этот момент уже неумолимо летит вниз, веревочка разматывается… В определенный момент длина нити выбирается, груз ударяет по валу, положение начинает меняться, ошибка (обратная связь регулятора положения) выстреливает вверх, вместе со скоростью вала. В ответ на это трехконтурная система резко наращивает момент на приводе, пытаясь вернуть его в первоначальное положение. Спустя пять миллисекунд после удара момент на двигателе достигает максимально-разрешенного (ток 5А), после чего положение нехотя начинает меняться в обратную сторону, скорость меняет знак. Перелетев нулевую точку и совершив пару колебаний, система приходит к заданию.

Видно, как задание на ток статора (синее) немного опережает текущее значение (голубое), но задержка менее миллисекунды, что говорит о высоком быстродействии контура тока. Однако в задании тока видна некоторая «пушистость» и «иголки», особенно под конец переходного процесса. Что это и откуда? Давайте рассмотрим, что выдает при этом процессе регулятор положения – выход его пропорциональной, интегральной и дифференциальной составляющих. Роняю изоленту еще раз, вот они:


Рис. 9. Осциллограмма реакции на импульсный наброс нагрузки с трехконтурной системой подчиненного регулирования. Фиолетовым показано отклонение ротора от заданного положения в электрических градусах (для перехода в механические делить на 4), голубым – выход пропорциональной части ПИД регулятора положения, красным – интегральной, синим – дифференциальной частей. В одной клетке по оси времени 21 миллисекунда.

Посмотрите, как отрабатывают переходной процесс все три части ПИД регулятора. Осциллограмма – как из учебника, но эта – живая, настоящая и свежая, только из двигателя. Выход пропорциональной части прямо пропорционален ошибке. Интегральная часть – это интеграл от ошибки, смотрите как он наинтегрировал «вниз» от первого большого колебания и потом нехотя приходит к нулю. Дифференциальная часть – это производная от ошибки. Но так как датчик положения инкрементальный и всего лишь на 1000 меток, то изменение каждой метки – событие. Поэтому положение для системы управления меняется дискретно, скачками, а значит и производная от такого изменения будет «игольчатой». Или даже импульсной, прямоугольной, шумной – что мы и видим.

Но постойте… Производная от положения – это же скорость! Пролистайте выше до рис. 8 и сравните тот график скорости с графиком дифференциальной части рис.9. То же самое, но без шума! Потому что скорость вращения модулем обработки инкрементального энкодера определяется более грамотно – аппаратной частью микроконтроллера, засекающего время между метками датчика. Та же самая «производная» от положения, но более правильно измеренная.

Какая же мораль? Не все составляющие регулятора одинаково полезны. То, что делает дифференциальная составляющая регулятора положения, теоретически должно делаться нижестоящим контуром скорости. Раз она мне понадобилась для более качественной настройки, то это означает лишь, что я недонастроил промежуточный контур скорости.

Ах, да. С чего мы там начали? С ошибки по положению. В разомкнутом по положению режиме работы ошибка была 36 электрических градусов (9 механических), а в трехконтурной системе подчиненного регулирования с данной настройкой регуляторов она равна 21 электрический градус (5.2 механических). Лучше, да. А можно еще лучше? Давайте задерем еще коэффициенты регулятора положения. Повышаю всё – Kп, Kи, Kд раза в полтора. Смотрим:


Рис. 10. Осциллограмма реакции на импульсный наброс нагрузки с трехконтурной системой подчиненного регулирования. Коэффициенты регулятора положения повышены в полтора раза.

Ошибка уменьшилась, да… 18 электрических градусов. Но что мы видим? Система управления практически сразу уперлась в токоограничение. Она хотела бы приложить ток больше 5А, но я поставил ограничение 5. Почему? Чтобы по-честному сравнить с разомкнутой системой управления, у которой тоже ток был 5А. Только вот получилось нечестно: векторная система управления создает ток только когда ей это нужно (когда надо реализовать момент), а разомкнутая система «гонит» заданный ток всегда. С точки зрения нагрева и потерь для двигателя гораздо предпочительнее векторая система управления.

Разрешим векторной системе «поддать» току? Хотя бы на короткое время. По паспорту двигатель допускает 11А. Разрешим 7А, чтобы оценить результат.


Рис. 11. Осциллограмма реакции на импульсный наброс нагрузки с трехконтурной системой подчиненного регулирования. Токоограничение поднято с 5А до 7А.

Ошибка всего 15 электрических градусов! Это в 2,5 раза меньше, чем в разомкнутой по положению системе управления. Но смотрите, что это там в конце графика? «Иголки» в задании тока… и они продолжаются и продолжаются, что я слышу акустически – двигатель «звенит». Это называется автоколебаниями – слишком сильно задрал коэффициенты регулятора.

Замкнутые контура и их шумы


Вот мы и добрались до специфического вопроса качества любой системы управления, который иногда не менее важен, чем точность поддержания самого регулируемого параметра – шумность. Допустимо ли, чтобы двигатель «шумел» в замкнутой системе управления? Это зависит от того, как сильно он шумит и что именно шумит. Я подготовил видео, в котором показаны различные шумы, которые могут рождаться в различных контурах системы подчиненного регулирования. Для этого я закрепил микрофон в непосредственном контакте с двигателем – на расстоянии звука от этого двигателя практически не слышно. Хотя это зависит от двигателя – разные двигатели «звучат» по-разному.

В начале видео показан шум от контура тока. Был включен только контур тока с двумя регуляторами токов. В двигателе появился шум, который мой коллега сравнил с шумом от трубы, по которой течет вода. Похоже на «белый» шум. Этот шум рождается из-за шума измерений токов фаз. Регуляторы тока из-за сравнительно большой пропорциональной составляющей (необходима для требуемого быстродействия) ловят все небольшие флуктуации измерения тока и усиливают их, передавая на задание напряжения инвертора. Т.е. изначально ток в двигателе ровный и не шумит, но шумит его измерение, регуляторы тока пытаются его скомпенсировать, «дергают» за напряжение инвертора, тем самым заставляя реальный ток в двигателе на самом деле «шуметь». На осциллограмме это видно вот так:


Рис. 12. Осциллограмма переходного процесса скачка задания (1А) регуляторов тока и их последующий «шум». Показана обратная связь по регуляторам токов (сигнал с АЦП) и выход регуляторов, подающийся на инвертор. В одной клетке по оси времени 4.2мс.

На осциллограмме показан не только шум, но и переходной процесс регуляторов тока при включении. Ток отрабатывается менее чем за 1мс, а переходной процесс близок к настройке на технический оптимум. Шум в измерении тока порядка +-0.02А приводит к изменению выходного напряжения на 20% от текущего, что и слышится как шум. Если в 10 раз замедлить регуляторы, то можно получить такую картину:


Рис. 13. Осциллограмма переходного процесса скачка задания (1А) регуляторов тока с заниженным в 10 раз Кп и Ки по отношению к настройке на технический оптимум. В одной клетке по оси времени 4.2мс.

Регуляторы токов стали мягкие и тихие, как вата, и им абсолютно неинтересно реагировать на какой-то там шум в аналоговом канале – как, впрочем, и на собственное задание…

Далее в видео показаны различные звуки от регулятора положения. Опытов там много, покажу последний случай – автоколебания при чрезмерно завышенном Кп регулятора положения. Так как датчик положения инкрементальный, при большом Кп изменение положения всего на одну метку заставляет «бешеный» регулятор сильно нервничать, подкидывая задание на контур скорости, и, соответственно, на ток. Как-то так:


Рис. 14. Автоколебания контура положения с чрезмерно завышенным Кп. Фиолетовым и красным показан моментообразующий ток статора (задание и фактический), голубым – положение с энкодера в метках (инкрементах), синим – выход регулятора положения (задание на контур скорости).

Видно, как при изменении положения всего на одну метку (один «тик» датчика положения) система управления подкидывает задание тока на 0,3А. Это немалый момент, учитывая номинал двигателя 5А, что приводит к началу движения и, соответственно, колебаниям. На видео видно, как «страшно» звучат автоколебания, хотя положение скачет на одну безобидную метку туда-сюда.

В связи с этим возникает философский вопрос: какие колебания и шумы страшны, а на какие не стоит обращать внимания? Всё зависит от объекта – где применяется сервопривод. Если это трехкоординатный станок с редуктором и люфтами, рука-манипулятор для сварки или быстродействующий сервопривод какого-то рулевого механизма – то там «звон» не так страшен. В таких применениях только именно акустический шум может вызывать недовольство, но на технический процесс едва ли что-то из показанного в видео повлияет. А вот если это прямой привод позиционирования каких-нибудь там подложек на кремниевой фабрике или если это прямой привод микроскопа – вот там шумы не допускаются никакие «от слова совсем». Не то что скрипы контура положения от энкодера, но и даже тот едва слышимый шум от контура тока уже может быть проблемой. Потому что всё это передается на рабочий орган и приведет к нарушению техпроцесса.

Да, нужно сказать, что все те звуки, которые показаны в видео – это не просто звуки. Если схватиться за вал, то все они ощущаются, и очень хорошо. Человеческие пальцы очень чувствительны – гораздо лучше многих датчиков. Даже ощущается тот шум «текущей воды» от регуляторов тока. Точно так же, как от трубы водопровода. Поэтому для задач сервопривода, которые взаимодействуют с человеком, шумы и колебания тоже нежелательны. Представьте себе симулятор самолета с наклоняющейся кабиной, где привода под ней хрустят и стонут.

Как с шумами бороться? Ну, с контуром положения более-менее понятно – нужно ставить более точный датчик. Энкодер из этих опытов на 1000 меток – это датчик «курам на смех» в сфере высокоточного сервопривода. Там если ставят энкодер, то порядка сотни тысяч меток. А чаще ставят аналоговый датчик положения, который выдает синусно/косинусный сигнал. Применяя хорошее АЦП и оверсемплинг (измеряя гораздо чаще, чем это надо, а потом усредняя результат) можно получить еще на порядок большие точности, чем дает энкодер.

Что делать с шумом АЦП в контуре тока? Во-первых, искать источник шума. В данном приводе источник шума был найден – это DC/DC, делающий из входного силового питания приборное 5В и установленный на плате инвертора. Разводка платы не совсем удачная, и DC/DC «фонит» на все рядом проходящие дорожки платы. Сам же АЦП микроконтроллера гораздо менее шумный, чем шум от этого DC/DC. Во-вторых, можно применять тот же оверсемплинг, если производительность АЦП это позволяет. В-третьих, нужно правильно выбирать диапазон измерений. Я работал с двигателем на 5А от преобразователя на 60А. Соответственно, полный диапазон АЦП по измерению тока тоже близок к 60А. Если бы диапазон был 20А, то тот же шум на аналоговый канал после преобразования в амперы оказался бы в три раза меньше.

Но шум от АЦП – это ещё не все. Я не показал в видео один из главных шумов, который не слышно – шум от ШИМ. Частота ШИМ в этих опытах была установлена равной 20кГц – на границе слышимости. Но это не значит, что на вал ротора эти вибрации не передаются. Нужно измерить пульсацию тока в двигателе, вызванную данной частотой ШИМ, пересчитать её в момент, а затем уже можно оценить, «пройдет» она на вал или нет. На рисунке 15 показаны пульсации тока в фазе двигателя, измеренные внешним датчиком и осциллографом.


Рис. 15. Пульсации тока в фазе двигателя при частоте ШИМ 20кГц. Величина пульсаций 0.3А.

Пульсации тока в 0.3А довольно значительны. Вернее, были бы значительны, если бы мы этим приводом собрались позиционировать кремниевые подложки на фабрике Intel. Благо, конкретно таким типам двигателей это не светит и о проблеме можно забыть. Но что делать, если нужно сделать более серьезный привод? Для начала можно увеличить частоту ШИМ. Современные силовые полевые транзисторы могут обеспечить частоту переключений до 500кГц. Однако тут есть… три проблемы.

Первая проблема — с увеличением частоты ШИМ увеличивается влияние так называемого «мёртвого времени» (некоторые называет его бестоковой паузой, но это неправильно – ток там течёт). Это время, когда нижний транзистор инвертора уже выключился, а верхний еще не включился (и наоборот). Это время одно и то же для одного типа транзисторов, и в процентах к периоду ШИМ оно становится всё больше с повышением частоты ШИМ. Мёртвое время искажает выходное напряжение инвертора, добавляя регуляторам тока нелинейности в инверторе.

Вторая проблема – с увеличением частоты ШИМ все сложнее генерировать эту самую ШИМ микроконтроллером. Микроконтроллер делает ШИМ с помощью аппаратного таймера, который «тикает» на единицу с каждым тактом микроконтроллера. Уставкой сравнения с таймером программист выбирает, на какое время открыть ключ. Что выйдет в такой системе с микроконтроллером на 100МГц и частотой ШИМ 500кГц? Делим одно на другое, получаем 200 квантов (дискрет) задания уставки. 200 уставок задания напряжения для ШИМ – это негодно «от слова совсем». Для сервопривода нужно минимум на два порядка больше. Для этого некоторые производители микроконтроллеров встраивают в свои изделия так называемый ШИМ высокого разрешения – позволяют отсчитать время открытия ключа с дискретностью по времени в несколько раз лучше, чем один такт микроконтроллера. В данном микроконтроллере такая возможность есть, однако включить ШИМ высокого разрешения мешает третья проблема.

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

Есть принципиально другой путь – некоторые производители сервоприводов вообще отказываются от ШИМ и делают аппаратный контур тока либо на ПЛИС, либо вообще на операционных усилителях, работающих в линейном режиме и рассеивающих на себе всю лишнюю энергию, которую призван экономить ШИМ. Но это уже совсем-совсем другая история.

Выводы


Требования к сервоприводам очень разные – кому-то хватает шагового режима управления для простого медленного ЧПУ станка (цена вопроса драйвер+двигатель пара тысяч рублей), кому-то нужно такое качество поддержания положения, что даже шум контура тока становится проблемой. Данная статья «по верхам» рассказывает о некоторых аспектах работы системы подчиненного регулирования и качества работы контура положения, чтобы познакомить читателя с чем-то, кроме всем известных «шаговиков». Качество работы сервопривода, показанного в данных опытах, на самом деле, очень посредственное, главным образом из-за низкого разрешения датчика положения ротора. При использовании датчика с хорошим разрешением качество регулирования заметно возрастает.

Реклама


Данные опыты были проведены на отладочном комплекте VectorCARD K1921BK01T от ООО «НПФ Вектор», построенного на базе отечественного motorcontrol микроконтроллера K1921BK01T ОАО «НИИЭТ» (ARM Cortex-M4F, 100МГц). В отладочный комплект входит всё оборудование, показанное в видео статьи, включая программное обеспечение микроконтроллера в исходных кодах с этой самой трехконтурной системой подчиненного регулирования, а также ПО для наблюдения осциллограмм любых переменных системы управления.

Ссылки по теме на другие мои статьи


Векторное управление электродвигателем «на пальцах»
Способы отладки ПО микроконтроллеров в электроприводе
Новый отечественный motor-control микроконтроллер К1921ВК01Т ОАО «НИИЭТ»

Бонусное видео
Смотрите внимательно на работу контура положения и вслушайтесь в звук:

Комментарии (63)


  1. machestro
    11.04.2016 17:38

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

    Ещё вопрос не совсем по теме: на сколько сильно отличается качество характеристик (переходных процессов) при векторном управлении и при прямым управлении моментом (DTC), если вы, конечно, работали с последним.


    1. BelerafonL
      11.04.2016 17:52
      +1

      Спасибо!
      С ПИ-регулятором перерегулирование совсем необязательно. Посмотрите, например, на осциллограмму с регуляторами токов, рис. 12, 13. Там тоже использованы ПИ-регуляторы, но при уменьшении коэффициентов получается вполне себе апериодический процесс без перерегулирования. Но для контура положения действительно часто мудрят с видом регулятора, чтобы получить и быструю реакцию, но без колебаний и перерегулирования (волшебство!). Чего там только не придумывают! Но обычный классический ПИ-регулятор тоже вполне себе неплохо работает, главное правильно настроить.

      Касательно векторного управления и прямого управления моментом — тут качество больше отличается не от самого способа как такового, а от конкретной реализации. Считается, что система с DTC реагирует на задание быстрее. Однако там применяется релейный режим регулирования, без ШИМ — система управления на каждом такте расчета напрямую включает те или иные ключи инвертора. В результате этого двигатель издает больше шума, пульсация тока больше, однако и выше скорость отработки момента, скорости (или что там надо регулировать). Однако… в обычной векторной системе управления можно тоже ПИ-регуляторы токов с ШИМ заменить на релейные регуляторы. Это всё еще останется тем же векторным управлением. Но по характеристикам получится примерно тоже самое, что и дает прямое управление моментом (DTC). В общем, DTC — это больше маркетинговый ход. Он дает вполне ожидаемые изменения характеристик при замене ПИДов на «релейку».


    1. BelerafonL
      15.04.2016 14:38

      Там ниже в комментарии привел осциллограммы переходного процесса с реакцией на скачок задания положения, ПИД положения настроил практически на апериодический процесс, можете посмотреть, если интересно.


      1. machestro
        15.04.2016 14:52

        Конечно интересно.
        Я понимаю что на практике настроить ПИД можно как необходимо. Просто из теории помнятся мне такие понятия, как настройка на модульный оптимум и на симметричный оптимум. Модульный оптимум по идее должен давать оптимальный вариант между перерегулированием и быстротой реакции. А поскольку я не практик поэтому я и задал свой первый вопрос


  1. alexk24
    11.04.2016 17:50

    Замечательная статья. Спасибо!

    Вопрос по экономической составляющей — понятно что в промышленных применениях подчиненное регулирование явно выигрывает и цена приводов в цене решения зачастую имеет не такую уж значительную долю, но интересно насколько оно перспективно в хоббийном применении? Например для домашнего 3Дпринтеростроения? Насколько я понимаю оно позволит увеличить скорость и точность позиционирования, но есть ли в природе двигатели с требуемой начинкой за разумные для хоббийщика деньги?


    1. BelerafonL
      11.04.2016 17:56

      Нет, для хобби однозначно шаговики. Даже и для промышленности во многих станках начального уровня стоят шаговики. Даже больше скажу, мы, фирма, у которой есть и серводвигатели и свои же системы позиционного управления для себя сделали простенький станочек на шаговиках. Все описанные «высокие материи» — только для тех задач, где без этого не обойтись совсем. Роботы, высокоскоростные манипутяторы, следящие системы, наведение чего-то куда-то и прочее.


      1. psycho-coder
        11.04.2016 21:39

        Отличаная статья!

        Можно, возможно глупый, вопрос:
        Если я правильно понял, для манипулятора домашнего станка, с точностью >=0,01 лучше использовать именно подчиненное регулирование, или же, шаговики смогут обеспечить данную точность?
        Все что мне удалось найти в сети, как-то стремно смотрится в сравнении с вашими статьями.


        1. BelerafonL
          11.04.2016 21:44

          Манипулятор — это обычно такая роботизированная рука. А «домашний» станок — это три винт-гайки по трем осям. Вы о чем именно спрашиваете?
          Точность чего 0.01 и в каком месте? Единицы измерения хотя бы неплохо…


          1. psycho-coder
            11.04.2016 22:10

            Мое упущение.
            Манипулятор — именно робо-рука, а «домашний» станок — небольшой токарный.
            Если делать манипулятор к такому станку, чтобы он стал с несколькими степенями свободы для изготовления сложных деталей, путем меньших телодвижений. Что-то вроде поточного производства чего-либо.
            Точность, имелось ввиду в миллиметрах, как на подаче резца.
            Суть, чтобы можно было установить фрезу или резец в манипулятор. Все как у «больших» станков.


            1. alexk24
              11.04.2016 22:56
              +1

              На домашнем станке в первую очередь проявятся проблемы жесткости которые не дадут точности 0.01 мм, а если под манипулятором понимать робо-руку с вылетом хотя бы 500 мм то там 0.1 мм будет уже счастье.
              А если проблему с жесткостью удастся решить, то станок уже выйдет из класса «домашних» и наберет пару тонн веса.

              Но если нужна именно смена инструмента — то нужно просто компенсировать неточность манипулятора методами крепления инструмента — конуса для фрез например. Там и пару миллиметров промаха не страшно будет.

              Справочно: «KUKA KR 6 R900»
              Вылет 900мм
              Полезная нагрузка 6кг
              Масса самой руки 52 кг
              Точность позиционирования: ±0,03мм


              1. psycho-coder
                11.04.2016 23:27

                Посмотрел видео про Kuka. С точностью в 0,01мм, я сильно загнул. Вероятней всего 1мм можно добиться. Нужно пробовать, чтобы узнать наверняка. А вот с полезной нагрузкой, надо что-то отдельно думать, меньше 6 кг, наверно нет смысла делать, ведь «дрель» будет тяжолой, а ей еще елозить.


            1. BelerafonL
              11.04.2016 23:12

              Если к манипулятору не предъявляется особых требований по скорости перемещения, а они не предъявляются, судя из описания задачи, то опять же вполне сойдут шаговики. Вам же не нужно на скорость водить манипулятором туда-сюда, работать он будет типа "подвел и стоит точит"? Тогда шаговики подойдут. А вопрос точности здесь — вопрос механики. Думаю, сделать в домашних условиях механику манипулятора с точностью 0.01мм… нереально. 1мм может быть еще можно обеспечить. Зависит от длины в первую очередь. Да и не силён я в манипуляторостроении.


              1. psycho-coder
                11.04.2016 23:33

                Спасибо за разъяснения.
                Наткнулся вот на это видео недавно https://youtu.be/iRKDfknqtbc, а сегодня на вашу статью. Поэтому и подумал, что «лучше» использовать подчиненное регулирование.
                Нужно будет самому попровать разные методы.


    1. quqdron
      12.04.2016 11:07

      При анализе «Заметили ли вы, насколько меньше отклонился вал ротора на видео в трехконтурной системе управления?» необходимо учитывать, что в показанном опыте используется двигатель не ориентированный для шагового управления, 4 пары полюсов «маловато будет», Имхо: еще не совсем оптимальна и система управления для «шага», если сравнивать комплекты за равные деньги в данном опыте, то шаговый движок наверно покажет лучший результат.
      А за статью Спасибо!


      1. BelerafonL
        12.04.2016 11:26
        +1

        Да, конечно, вы правы. Если взять настоящий ШД, схожий по требуемому моменту, то он будет держать положение в некоторых опытах даже лучше, чем приведенная система подчиненного регулирования. Более того, стоить он вместе с драйвером будет на порядок дешевле, чем минимально-работающая система подчиненного регулирования. Но при этом шаговик не сможет показать такой динамики, как в первом видео, не сможет ничего сделать с моментом больше максимального (он пропустит шаги, а подчиненное регулирование «отступит» назад, а потом вернется) и не сможет дать той точности, которую даст подчиненное регулирование при установке хорошего датчика положения.

        Поэтому для простых применений без высокой динамики — однозначно оптимальнее шаговики, без вопросов. А вот для высокоскоростных и одновременно точных перемещений, нужны «высокие материи». Также подчиненное регулирование выиграет по габаритам двигателя, так как оно поддает в двигатель ток только когда это требуется, а в шаговик нужно подавать ток постоянно. Поэтому по теплу с трехконтурной системой двигатель будет лучше себя чувствовать, а значит может быть меньших габаритов.


        1. quqdron
          12.04.2016 13:38

          немного не в тему но, «Червячная передача + ШД = наше все» :). (Конструктор)


          1. Norno
            12.04.2016 14:56
            +1

            Сдается, что такое сочетание еще в большей степени не сможет тягаться с подчиненным регулированием по параметру динамики и скорости.


      1. machestro
        12.04.2016 14:38

        Согласен с вами. В этом случае надо было к шаговому двигателю векторное управление прикрутить


  1. mmMike
    11.04.2016 18:34

    Большое спасибо за статью и особенно за иллюстрации с графиками! Весьма познавательно.

    Не могли бы Вы, опираясь на свой опыт, подсказать мне…

    Делая управления коллекторными двигателями (приводы стеклоподъемников) для своеобразной разновидности ЧПУ (polargraph), поленился сделать схему съема тока двигателя.
    В результате 3-х контурная схема сократилась на элемент управления током двигателя. Т.е. управляющий выход PID регулятора скорости задает % ШИМ, не ток.
    В принципе и такой вариант справляется с теми требованиями, что мне нужны.
    Но на малых оборотах (< 2 об/сек) двигателя плавности хода заметно не хватает. Хотя для работы данной железки это не принципиально, но…

    Есть ли смысл для коллекторного двигателя (12 обмоток на якоре) вводить PID управления током? Точнее, даст ли это выигрыш в плавности (ускорения) на столь маленьких оборотах в режиме разгона, стопа (т.е. разные моменты на валу) и поддержания скорости?


    1. BelerafonL
      11.04.2016 18:44

      Скорее всего даст. Добавление контура тока позволит быстрее создавать требуемый момент на двигателе, а значит позволит поднять коэффициенты вышестоящих регуляторов без наступления колебательного процесса. Но в то же время проблема может оказаться в чем угодно другом. Может быть у вас время дискретизации (частота обсчета) контуров микроконтроллером недостаточное, может быть ваш датчик положения/скорости не позволяет измерять низкие скорости в принципе, может быть датчик дает информацию о скорости с очень большой задержкой, может быть проблема где-то в программе и так далее. Самый верный способ — это получить осциллограммы, что же там происходит в системе управления. Типа таких, что я привел в статье. Они выведут на чистую воду, чего там не хватает, и позволят поставить диагноз. А потом уже можно придумывать решение.


      1. mmMike
        11.04.2016 19:28

        Энкодер стоит не на валу двигателя, а на измерительном ролике. Для точного измерения длинны троса. На катушку на валу червячного редуктора идет намотка в навал 20м троса (т.е. ставить энкодер на валу двигателя смысла нет).
        Разрешение энкодера в 512/оборот для выбранного диаметра измерительного ролика дает около 0.5 мм/на отсчет энкодера для линейное перемещение троса…
        в результате 12-16 отсчетов энкодера на оборот вала двигателя. ШИМ аппаратный 20Кгц. частота расчета скорости — раз в 100ms (чаще нет смысла).
        Обработка каналов энкодера — аппаратный режим/счетчики STM32F103. Производительности для обслуживания 2-х двигателей (все на прерываниях по таймерам) для таких времен хватает с избытком. Еще и на вывод графики на экран и расчет траектории остается.

        Но, наверное, я слишком много хочу и стабильной скорости подачи троса для 1-3 мм/сек в при таких условиях (разрещения энкодера) добиться в принципе нельзя.
        Хотя уже 5mm/сек и выше вполне стабильно (по данным координата/скорость в реальном времени от контроллера).

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

        Кстати, а как грамотно снять бы? Операционником падение напряжение на токовом шунте, а потом ADC усреднить за период PID? (1Мгц частота ADC у STM32F3) А с какой частотой PID по току лучше делать, при ШИМ 20Кгц?
        Подскажите пожалуйста, никогда этой темой не занимался.


        1. BelerafonL
          11.04.2016 20:05

          Прежде чем я отвечу, можно уточняющий вопрос — а какова структура управления? Там есть контур положения и контур скорости? Что обозначает «Но на малых оборотах (< 2 об/сек) двигателя плавности хода заметно не хватает.»? Если требуется поддерживать небольшую частоту вращения, то обычно не пользуются контуром скорости напрямую. Ставят поверх него контур положения, а уже контуру положения разворачивают заданный угол с той скоростью, которая нужна. Контур положения работает с точностью до одной метки датчика энкодера (обычно), точнее физически не может. Поэтому движение с низкой скоростью превращается в такой структуре в движение секундной стрелки часов. Двигатель тикает по одной метке энкодера, совсем как шаговый двигатель. У вас такая структура? Если да, то исключить скачки при переходе положения с метки на метку энкодера нельзя по понятным причинам. Но скорость в такой структуре можно вот так вот, «ступенчато» обеспечить любую, хоть самую низкую.
          Вот, например, одно видео, не попавшее в «общий выпуск».
          https://youtu.be/JQHuWUYKYOI
          Здесь та же трехконтурная система, но задание положения изменяется медленно, с требуемой скоростью. Слышно, как «щелкают» перебираемые метки энкодера. У меня, конечно, 1000 меток на оборот, но и скорость я задаю гораздо меньшую, чем 1-2 оборота в секунду. У меня здесь это примерно 0.5 об/мин, что примерно равно количеству перебираемых меток за секунду для вашего случая. Но если оставить только контур скорости и уже на него задать эту скорость (0.5 об/мин), то вообще ничего не поедет и будет дергаться. Какую структуру используете вы? И в чем именно заключается нестабильность?


          1. mmMike
            12.04.2016 06:41

            Из исходной задачи — перемещение каретки по заданной траектории по G-кодам (только X,Y без Z) требуется контролировать скорость 2-х моторов + координату (да еще с преобразованием из декартовых в полярные).
            Собственно, расчет траектории по G-коду один из стандартных и самых простых. Разбиение каждой команды G0/G1 на участки (для данного варианта шаг 400ms) с постоянной скоростью и координатами начала/конца с предпросмотром на следующую команду G кода (нужно ли торможение и пр. исходя из ограничения по максимальному ускорению).

            Для шаговых двигателей этим все и заканчивается. На входе модуля управления шаговиками: количество шагов(перемещение)+частота шагов(скорость).

            Для конструкции на коллекторном моторе использую контур PID контроля скорости и положения. На входе те же самые данные модуля расчета траектории: перемещение (только в абсолютных координатах) + скорость.
            Задача «переместится» в заданное значение энкодера, поддерживая как можно точнее заданную скорость.
            Все нормально работает для относительно высоких скоростей (отклонение в пределах 1% от заданной скорости).

            И Вы правы. Проблема, что при фактическом (с учетом редуктора) разрешении энкодера 14-16 отчетов на оборот двигателя, явно не возможно обеспечить заданную скорость с требуемой точностью для всех диапазонов перемещений и скоростей. (энкодер не на валу двигателя, а на измерительном ролике).

            На практике это выглядит, как волнистая линия (2..5 мм отклонения от требуемой) на стене вместо прямой прочерченная фломастером (фломастер на каретке).

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

            Спасибо, что уделили внимание. То что Вы рассказываете в любом случае очень интересно. Чужой опыт то же бесценен.


            1. BelerafonL
              12.04.2016 09:46

              Если датчик дает разрешение 0.5мм, а волнистая линия 5мм — это уже что-то не то. Дрожание на 1-2 метки должно быть, но на 10 уже много. Может быть, проблема в люфтах между двигателем и редуктором, может быть как раз в отсутствии контура тока. Но, опять же, 1-2 метки это для статического режима работы, т.е. очень медленного движения, там где контур положения выберет всю ошибку. В динамике там всё сложнее, конечно. Если ехать фломастером со скоростью, скажем, миллиметр в секунду, волнистая линия остаётся? В идеале должны быть ступеньки по одной-две дискрете датчика положения, т.е. 1мм. Если это не так, то можно пробовать что-то улучшать в системе управления.


              1. mmMike
                12.04.2016 10:19

                polargraph — это когда для получения декартовых X,Y необходимо рассчитать длину двух тросиков подвеса.
                Волнистая линия возникает когда нужно, например, нарисовать произвольную прямую линию в декартовых координатах, что означает:
                1. на каждом участке линии динамически считать длину подвесов и их синхронные скорость на заданное время.
                2. Четко выдерживать скорость и длинну каждого троса.

                Если dt в течении которого нужно поддерживать постоянную скорость достаточно большое, то можно считать, что все в порядке и скорость устанавливается стабильной (ну на уровне точности энкодера, как минимум и через где то в среднем 500ms).

                Но как бы я не подбирал коэффициенты PID но выход на «линию» графика скорости меньше чем за 400-700ms добиться не удалось. Собственно, за счет этого волнистость похоже и получается. Линии фломастером вообще очень на классические графики PID похожи (ну с учетом того, что по радиусу а, не по прямой).

                А что бы линия в декартовых координатах была прямой (в пределах 1-2 мм отклонений) нужно что бы укладывалось хотя бы в 100ms (ну по моим расчетам).

                Да еще ситуация, когда направление меняется вносит свою проблему с люфтом червячного редуктора.

                Вначале думал, что это упругие колебания троса свою лепту вносят, но дебаг с контроллера (время, координата по энкодеру, текущие значения PID) в принципе показывают ту же картину что я наблюдаю вживую.

                Наверное надо не поленится и попробовать сделать третий контур регуляции по току. Что бы скорость быстрее устанавливалась. Опыт лишним не бывает. Тем более, что делаю больше для развлечения, а не результата.

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

                Впрочем, наверное я хочу «странного», поскольку ни на одном видео работы аналогичных по принципу конструкций (на шаговиках в основном), я прямых линий не видел.


                1. BelerafonL
                  12.04.2016 10:30

                  Вы все говорите про скорость, скорость… Как ведет себя система, если скорость равна нулю? Если вы перемещаете фломастер контуром положения, по шагам?
                  Включили систему, фламастер стоит. И медленно, как секундная стрелка часов, меняете задание на свои две оси, чтобы по одной метке в секунду привода шли. Я пытаюсь понять результат этого эксперимента.

                  Не когда всё быстро едет, контур скорости работает в динамике, мучаясь с дискретностью дачтика, а когда контур положения «тикает» по одной метке в секунду. Так, как у меня на видео в комментарии выше. Позволяет ли ваша структура управления такой режим работы вообще? Если контур положения в силах поддерживать положение с точностью до одной-двух меток, то при медленной скорости движения, «квазистатической», можно прошагать нужную траекторию собственно, с точностью одной-двух меток, т.е. 1 мм.


                  1. mmMike
                    12.04.2016 11:02

                    Как ведет себя система, если скорость равна нулю? Если вы перемещаете фломастер контуром положения, по шагам?
                    Включили систему, фламастер стоит. И медленно, как секундная стрелка часов, меняете задание на свои две оси, чтобы по одной метке в секунду привода шли. Я пытаюсь понять результат этого эксперимента.

                    По моему я такой эксперимент проводил для подобных условий. Попробую вспомнить…

                    Фактически у меня те же два контура. Значение желаемой скорости используется просто как верхний ограничитель W (т.е. как граничное значение выходного сигнала PID регулятора положения.)

                    Параметры (взял эмпирический, возможно не правильно):
                    #define DELTA_DT_CALC_SPEED 100 // 100 ms
                    #define DELTA_DT_PID 100 // 100 ms

                    1. dt обсчета положения — 100ms (шаг PID по положению)
                    2. dt для расчета скорости — 100ms (заодно шаг PID по скорости). минимальная возможная измеряемая скорость (1 отчет на 100ms) -> 10 отчетов на сек * 0.5mm/отчет = 5мм/сек

                    Опс… начал писать и понял. Я кажется тормоз… Точнее чем 5мм/сек не получить на интервале измерения.

                    Мдаа… Дальше можно не суетится…

                    Спасибо за взгляд со стороны.


                    1. BelerafonL
                      12.04.2016 11:15

                      И опять, опять вы про скорость :) Забудьте про неё. Смотрите на контур положения. Представьте, что приводом управляете вы вручную. Глядя на сигнал с датчика и воздействуя на напряжение. Даже без всякого контура скорости и тока. Вы же можете потихоньку поддавать напряжение, пока привод не встанет в требуемое положение, метка в метку? А потом, когда изменится задание, еще сместить положение на одну метку? Ну, даже если промахнетесь, можно отъехать назад и встать снова куда надо.

                      И регулятор положения так сможет. А если сможет, то медленно, в квазистатическом режиме, не глядя на скорость, можно пройти по любой заданное траектории. Модуль определения скорости будет всё время выдавать ноль, а задание скорости от регулятора положения будет проходить сквозь регулятор скорости дальше, «напрямую» на контур положения, ну или на задание напряжения в силу его отсутствия.

                      Помешать такой работе контура положения может только сила сухого трения, отсутствие контура тока и модленная дискретизация расчета контуров программы. Т.е. привод может «прыгнуть» на несколько меток с места быстрее, чем 100мс. И тогда начнутся колебания. А может быть и нет — тогда получится провести линию с точностью 1мм.


                      1. BelerafonL
                        12.04.2016 11:48

                        описался, "«напрямую» на контур положения" следует читать как "«напрямую» на контур тока"


                      1. mmMike
                        12.04.2016 12:05

                        Ну, даже если промахнетесь, можно отъехать назад и встать снова куда надо.


                        Да я понимаю, но на скорость упираю потому что в голове стоит комплексная задача управления координатой в 2D.
                        Наверное Вы правы. Слона нужно есть по частям. Попытаюсь абстрагироваться от задачи верхнего уровня (подготовки траектории) и забыть слово скорость
                        В сущности, добавить управление по скорости — это всего лишь ограничить сверху W из контура управления положением.

                        Помешать такой работе контура положения может только сила сухого трения, отсутствие контура тока и модленная дискретизация расчета контуров программы. Т.е. привод может «прыгнуть» на несколько меток с места быстрее, чем 100мс. И тогда начнутся колебания. А может быть и нет — тогда получится провести линию с точностью 1мм.


                        Вот так это у меня по выходным данным дебага и зрительно и выглядело перемещения по 2 мм за раз с остановов на 2 сек без ограничения скорости. Т.е. сведение к позиционированию:

                        1. перемещение = 0 -> PID положения повышает W
                        2. Следующий отчет координата уже перелетела за заказанную.
                        3. Реверс и автоколебания около заказанного значения.

                        Уменьшаю коэффициент…
                        1. перемещение = 0 -> PID положения повышает W
                        2. Следующий отчет координаты не долетел чуть… новое W
                        3. Следующий отчет координаты уже перелетел за…
                        4. Реверс и автоколебания.

                        Попытка проанализировать зависимость ШИМ и оборотов показала, что есть какое то граничное значение ШИМ (35% заполнения) до которого мотор вообще не вращается даже если вниз нужно разматывать. При медленном и плавном увеличении где то с 47-45% заполнения ШИМ (непредсказуемо) — весьма резко стартует да еще и ускоряет обороты.
                        А если вверх тянуть груз каретки нужно, то стартует с 49..55% в зависимости от текущего веса каретки и расположения звезд.
                        Неужели это сухое трение червяной пары такой эффект дает?
                        (не занимался я раньше управлением коллекторным двигателем. не с чем сравнивать).

                        Поэтому я и говорил, что есть проблема на малых оборотах и старте/реверсе.
                        Реверс червячного редуктора с люфтом в 3 градуса (где то 1-3мм длины тросика в зависимости от объема намотке тросика на шкиве) это вообще непредсказуемая вещь.


                        1. BelerafonL
                          12.04.2016 12:15

                          Вот, теперь понятен диагноз. Чтобы было хорошо, во-первых, ускорьте обсчет контура! Раз в сто. Считайте все контура минимум в миллисекунде. Тогда, если привод «резко» дернулся, у регулятора положения будет возможность быстро снять задание скорости/напряжения. Т.е. как только «тикнула» метка датчика тут же должна быть реакция контура положения по снижению задания, а не через 100мс. Уже это, скорее всего, даст хорошее позиционирование. Если не поможет, надо добавить контур тока. Пробуйте.


                          1. mmMike
                            12.04.2016 13:23

                            Спасибо за совет!

                            Такая мысль с обработкой по факту(прерыванию) счетчика сигналов энкодера мне не приходила в голову!

                            Обязательно попробую.


                            1. BelerafonL
                              12.04.2016 13:38

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

                              Просто ускорьте таймер, в котором работают все регуляторы вместо 100мс до 1мс и всё. Если можете быстрее, сделайте быстрее.


                              1. mmMike
                                12.04.2016 13:42

                                ну это даже проще. всего две константы поменять.

                                Если получится, сегодня-завтра вечером попробую. Или в выходные…


                              1. mmMike
                                13.04.2016 06:49

                                Уменьшил период расчета для контура положения — линии стали практически прямыми! В общем практический результат вполне устраивает и при отсутствии контура по току.

                                Стал читать теорию ТАУ и стал смутно вспоминать курс лекций по ТАУ. Читали правда весьма абстрактно… без примеров практического приложения. Или у меня тогда не замкнулись ассоциативные цепочки в мозгу :)

                                Однако одно дело теория, а другой дело опыт приложения ее на практике.
                                Сейчас кажется очевидной ошибка в выборе частоты расчета.

                                Еще раз спасибо за консультации!

                                А авторам Математика на пальцах очень рекомендовал бы почитать теорию, а не пытаться изобрести велосипед с квадратными колесами.


        1. ProLimit
          11.04.2016 20:56

          Для идеального задания скорости на медленных оборотах можно поставьть гироскопический датчик, благо они недорогие, но придется придумать скользаящее кольцо (slipring) для механической развязки. Ещё для измерения малых скоростей можно применять адаптивную НЧ-фильтрацию. Основная проблема с цифровыми энкодерами в том, то что для регулятора нужно получить скорость на каждом сэмпле, но события смены рисок энкодера приходят реже. В итоге скорость очень дискретна: 0, то N, N*2, N*3 и т.д. в статье наглядно показано как шум. Решение: накапливайте сэмплы в кольцевом буфере, перебирайте их назад от текущего сэмпла, как только дельта-угол превысит заданный порог, делите на время (оно увеличивается пропорционально глубине «заглядвания назад» в буфер). В итоге получается нечто похожее на НЧ-фильтр, но адаптивное: как только скорость превысит порог, фильтр польностью отключается, и скорость определится по двум последним сэмплам. Когда скорость падает — число сэмплов растет, как и задержка, зато точность определения скорости повышается.


          1. BelerafonL
            11.04.2016 21:50

            Фильтрация всем хороша, кроме неизбежной задержки. Накапливать семплы для увеличения точности — значит «смотреть в прошлое», считая, что момент инерции механизма достаточно большой и скорость не может измениться мгновенно. Никакая математика не спасет от быстро изменяющейся скорости, если вал серводвигателя может встать как вкопанный. А так обычно и бывает, если нет большой маховой массы — т.е. когда есть только голый двигатель и сила сухого трения. У человека там червячный редуктор, а значит так и есть.


            1. ProLimit
              12.04.2016 00:53

              Ну трение покоя вообще плохая штука для ПИД-контроллера, ее всегда нужно стараться минимизировать. В предложенном способе фильтрации появляется задержка, что конечно же плохо для обратной связи, но если контроллер будет настроен с запасом по фазе (phase margin), то он с ней справится, зато точность поддержания низких скоростей повысится благодаря боллее точному их измерению. Правильный способ конечно в повышении разрешения энкодера, но иногда и математические хитрости помогают…


              1. mmMike
                12.04.2016 06:51

                В принципе, интересный вариант, но именно для подержания малой скорости в длительный промежуток времени. Для ЧПУ похоже мало применим.

                Единственный выход, как мне видится — энкодер более высокого разрешения. Хотя была надежда на «магические» варианты, которые я просто упускаю из виду.
                Но что было под рукой (512/оборот) то и поставил. А он дает 0.5 мм линейного перемещения на отсчет и этого очень мало для четкой фиксации скорости на участке скажем в 500ms. Всего 2 отсчета на 1 мм/сек. Никакая регулировка не справится.


  1. lex9417
    11.04.2016 18:50
    +2

    отличая статья, по больше бы таких, продолжайте в том же духе!

    когда то читал вашу статью о векторном управлении, так за пол часа чтения понял все то, чего не понял за несколько лекций в универе!


  1. Nik_sav
    11.04.2016 20:12

    Спасибо за статью, скажите пожалуйста, на сколько проигрывают датчики положения ротора на базе сельсина (resolver, 2 катушки статора, 1 катушка на роторе) оптическим? Как тип датчика отразится на точности и скорости позиционирования?


    1. BelerafonL
      11.04.2016 20:41

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


    1. impetus
      14.04.2016 19:50

      у меня на паре старых советских сельсинов написано «класс точности 2%» Что это означает конкретно и в чём выражается не изучал вопрос


  1. ProLimit
    11.04.2016 20:35

    Хорошая статья, особенно ценно то, что приводится не только ткак делать «по учебнику», но и потенциальные подводные камни. В своем проекте я не использую контур регулирования тока для упрощения системы, но зато не пришлось решать связанные с ним проблемы. Почему вы так критично относитесь к отсутсвию контура тока? Ведь в контуре скорости даже с ним остается нелинейность, только уже другого типа. Разве что если бытсродействие контура тока на порядки выше контура скорости — тогда да, можно считать систему задания момента линейной.


    1. BelerafonL
      11.04.2016 21:38
      +2

      Чем больше обратных связей, тем меньше бесконтрольных процессов. Без контура тока нельзя управлять моментом двигателя.
      В любой замкнутой системе управления быстродействие внешнего контура зависит от быстродействия внутреннего контура. Отказаться от какого-то контура — все равно что вставить звено задержки в размер постоянной времени не охваченного обратной связью объекта управления. Создав контур тока мы компенсируем электрическую постоянную времени статорной/якорной обмотки двигателя (смотря каким двигателем мы управляем): для ДПТ это Тя=Lя/Rя.

      После работы регулятора тока нескомпенсированными остаются только постоянные времени, которые нельзя компенсировать регулятором: это задержка на период ШИМ или задержка на период расчета системы управления. Для современных систем это что-то около 0.1мс, если считать, что обсчет контуров в софте мы делаем на частоте 10кГц.

      Согласно ТАУ, настроив регулятор на технический оптимум, мы получим время переходного процесса по контуру тока равную примерно 4.7*(время некомпенсируемой постоянной времени), т.е. за 5 периодов ШИМ или расчета системы управления ток выйдет на заданный уровень. Опять же, согласно ТАУ, время переходного процесса последующего контура равно удвоенному времени переходного процесса предыдущего.

      Поэтому, если позволяют датчики, в теории можно добиться времени переходного процесса контура положения примерно пару миллисекунд. При условии что регуляторы не достали до насыщения (ограничения максимума). Работа в насыщении — это совсем другая история. И это справедливо для любого двигателя, с любой постоянной времени, массой и т.п. В данной системе, показанной статье, быстродействие контура положения что-то около 10мс из-за низкого разрешения датчика положения.

      Что теперь получается, если мы выкинем контур тока? Для контура скорости некомпенсируемой постоянной времени (вместо контура тока) окажется постоянная времени якоря Тя=Lя/Rя. Эта постоянная времени может быть как маленькой — задали напряжение и сразу же потек постоянный ток, т.е. почти нет индуктивности, одно сопротивление. Так и очень большой — особенно для мощных двигателей Тя может достигать секунд(!).

      Поэтому время регулирования в контуре положения в такой системе, без контура тока, будет далеко-далеко от единиц миллисекунд. Выкидывать контур тока есть смысл только если в вашей системе есть какая-то другая некомненсируемая постоянная времени, помимо периода ШИМ, которая сравнима или больше этой самой Тя. Может быть, датчик положения очень медленный или дискретный, может быть микроконтроллер не успевает быстро обсчитывать контура или что-то такое. Или просто такое быстродействие не нужно, а нужна низкая цена конечного изделия.


      1. ProLimit
        12.04.2016 01:07

        Спасибо за развернутый ответ. Есть над чем подумать. Пока что я исхожу из теории, что переходные процессы в моторе достаточно предсказуемы, поведение регулятора тока хорошо детерменировано, и его можно заменить математически (в простейшем случае, повышением P и D-составляющей в регуляторе скорости, которая компенсирует задержку Тя=Lя/Rя, и компенсацией обратной ЭДС по простой формуле прямой зависимости от скорости).


        1. mmMike
          12.04.2016 07:05

          Было бы очень интересно, если бы кто провел физический эксперимент. Для сравнения «с» и «без».

          Я делал аналогично без контура по току. Переделывать уже существующую конструкцию наверное уже не буду.
          Но на будущее очень было бы интересно знать насколько это на практике дает преимущество.
          Все же добавление «лишних» деталей — это добавление лишних деталей. Да еще аналоговой части схемы…

          Вдруг кто ни будь займется и выложит результаты с сравнением по факту для конкретного двигателя/режима.


  1. DenverElrond
    11.04.2016 23:53

    Спасибо за статью: с большим удовольствием прочитал!
    Скажите пожалуйста!:
    1. «Пульсации тока в фазе двигателя при частоте ШИМ 20кГц. Величина пульсаций 0.3А.» — а что, фазная индуктивность позволяет таким пульсациям иметь место? Может быть это какие нибудь противо-ЭДС регистрируются?
    2. Почему Вы не используете контур управления по механической мощности развиваемой двигателем? Разве нельзя выделить некоторую величину противо-ЭДС (наблюдаемой на фазной обмотке) — пропорциональную механической мощности развиваемой двигателем? А затем, зная массу и скорость — спрогнозировать (например) местоположение (и фазный ток) через некоторый промежуток времени (например в момент когда нижний ключ разомкнут и АЦП невозможно использовать)? Мне думается, что распространенные системы управления двигателями по току и местоположению — заставляют управлять двумя «лошадьми»: 1) электрическим контуром и 2) механической подсистемой. Нельзя ли объединить их в один контур: однозначно сопоставить некоторой величине противо-ЭДС — величину механической мощности?


    1. BelerafonL
      12.04.2016 00:42
      +1

      1. Фазная индуктивность по паспортным данным для этого серводвигателя составляет 0.91мГн. Напряжение на звене постоянного тока у меня было 24В. К фазе двигателя (в зависимости от типа ШИМ) мгновенно (на периоде ШИМ) прикладывается, скажем, 16В. За половину периода ШИМ теоретически ток должен возрастать на dI=U/L*dt=16/(0.91*10^(-3))/40000=0.3А. Всё сходится. Это типовая ситуация для синхронных серводвигателей небольшой мощности. А для «безжелезных», с малым моментом инерции всё еще гораздо хуже. Это в асинхронниках индуктивность большая, там сглаживается ток хорошо.
      2. Ох, как всё смешалось в кучу, кони, люди…

      Во-первых, мощность привода рассчитать можно, и без всякого выделения противо-ЭДС. Хоть перемножением фазных токов и напряжений, хоть через ток и напряжение звена постоянного тока преобразователя. Можно для точности еще вычесть потери в меди и стали двигателя при желании. Но мощность к контурам регулирования никак не относится и не нужна там.

      Во-вторых. Нижний ключ разомкнут и АЦП мы не можем использовать только лишь какое-то время на периоде ШИМ. Частота ШИМ 20кГц. Т.е. каждый период ШИМ мы получаем все измеренные токи фаз в целости и сохранности. За это время ротор абсолютно никуда не успевает уехать, это сверхбыстрое время для него. Более того, сами контура системы управления программно успевают обсчитываться только на частоте 10кГц, т.е. чаще чем с частотой 10кГц нам и бесполезно чего-то измерять (только если для оверсемплинга, чтобы потом усреднить).

      В-третьих. Системы управления двигателями, как и любые другие замкнутые системы управления, строятся исходя из теории автоматического регулирования (ТАУ). Контура для управления выбираются не эмпирически. Объект управления, а именно: двигатель, его электрическая и механическая части, рабочий орган, все датчики и возмущающие воздействия описываются в виде дифференциальных уравнений. Т.е. строится модель объекта управления. Потом для этой модели, опять же, согласно принципам ТАУ, строится система управления. Исходя из того, какую величину мы хотим регулировать, какие обратные связи для этого имеем и какое качество регулирования хотим получить. Теория ТАУ однозначно определяет, какими должны быть контура, какими должны быть регуляторы и их коэффициенты, и что получится в итоге. Места для эмпирической фантазии тут нет. Все было изучено и посчитано еще в начале прошлого века. Да, кроме подчиненного регулирования с последовательной схемой контуров (что показана в статье) существует еще целый ряд возможных структур управления, включая всякое там модальное управление и другие. Но конкретно для электродвигателей наиболее простой, прижившейся и хорошо работающей является приведенная в статье схема подчиненного регулирования. Принципиально лучше, чем дает эта структура, согласно ТАУ, сделать невозможно. Можно только немного «допиливать» систему всякими улучшалками и предсказателями, но это совсем другой вопрос. Можно использовать чуть другие структуры, подойти к проблеме «с другой стороны», но всё равно конечный результат будет примерно таким же, что и в классической трехконтурной системе.

      То, что вы говорите — зная массу и скорость прогнозировать что-то там — это уже «надстройка» над трехконтурной системой управления, помогающая ей работать. Существуют различные системы, использующие априорные знания о параметрах объекта регулирования для улучшения регулирования. Например, это система планировщика движения, которая, зная заранее требуемую для отработки траекторию, момент инерции и ограничения привода по моменту и скорости, планирует движения из точки в точку, «подмешивая» свои рассчитанные математически данные внутрь контуров системы подчиненного регулирования. Зная, что сейчас нужно будет ускоряться, планировщик подмешивает в задание контура тока рассчитанное значение, чтобы не заставлять регулятор скорости реагировать с запозданием, компенсируя ошибку по возмущению. Система работает, так сказать, " опережением", а регуляторы отдыхают, компенсируя только то, что не учла математическая модель планировщика движения.

      Но всё это можно сделать только если вы знаете что-то априори об объекте управления или о траектории движения. Если информации нет, то приходится работать голой системе подчиненного регулирования. Например, никакая математика не спасет от «падающей синей изоленты». Траектория движения известна заранее — нужно держать фиксированное положение, тут предсказывать нечего. А вот в какой момент изолента ударит по валу — неизвестно. Когда это происходит (внезапное возмущающее воздействие), лучше трехконтурной системы мало что сможет отработать. Какая-то другая структура может отработать только сравнимо, отличаясь в деталях.


      1. DenverElrond
        12.04.2016 08:54

        :) в Ваших словах чувствуется школа Электропривода!
        Но с точки зрения Электромеханики: почему вы такое большое внимание уделяете: «электрическому току»? Без контура управления по току — говорите у вас плохое качество переходных процессов. Сам по себе ток не позволяет вам судить о том какую механическую(!) мощность развивает двигатель, поэтому приходится еще учитывать пространственную координату ротора (контур управления по которой тоже необходим). А когда управление идет по двум (электрический ток и координата ротора) параметрам — из разных технических подсистем (электрической и механической) — появляются дополнительные погрешности*.
        Почему нельзя снизить количество контуров управления: выделив некоторый критерий/показатель однозначно показывающий величину механической(!) мощности развиваемой двигателем — и решать одно уравнение вместо двух**?
        Я тоже рад за успехи электропривода, но мне думается, если подправить теорию электромеханического преобразования энергии (упростить системы решаемых уравнений) — можно сделать очередной шаг вперед и в теории/практике электропривода.
        ____
        * обусловленные, например, тем что необходимо отдельно настраивать контуры управления для механической подсистемы (по координате) и по электрической (по току): у них разные коэффициенты ПИД — и поиск оптимальных соотношений между ними — является (мне так думается): относительно сложной задачей.
        ** ведь сейчас электропривод описывают двумя уравнениями: 1) законом Кирхгофа для электрической цепи (u=iR+dW/dt, W — потокосцепление) 2) законом Ньютона для механической подсистемы (mdV/dt=Fелектромагнитная-Fсопротивления). А между тем: поток преобразования энергии в двигателе один(!): электрическая энергия -> магнитная энергия -> механическая энергия.


        1. BelerafonL
          12.04.2016 10:01

          Току мы уделяем внимание лишь потому, что ток=K*момент. Посмотрите на рисунок 1 со структурой. Там «электричество» закончилось ровно в том месте, где началось. В ДПТ ток якоря пропорционален моменту. Ток регулируется не «ради тока», а ради как раз вполне понятного механического параметра двигателя — его момента. Тоже самое и в векторной структуре управления — регулируя ток по оси q, мы регулируем момент. И вся трехконтурная система управления — это по сути управление как раз механикой.

          Мощность — это произведение скорости на момент. Зачем мне для регулирования этот сложный энергетический показатель? Я по отдельности регулирую момент, скорость. Что мне даст их произведение? Можно, если захотеть, еще домножить на время и получить работу. Только она, как и мощность, для контура регулирования бесполезна.

          Момент и скорость связаны интегралом. Как и скорость с положением. Мы как раз и регулируем на двигателе ток (а не напряжение, поле или что-то там ещё) чтобы наиболее быстро и прямо перейти к понятной механической величине — моменту. И далее регулировать механику через неё.

          Решать уравнений в системе управления придется столько, сколько у нас есть обратных связей или сколько постоянных времени мы хотим компенсировать. Сделать это в виде трех отдельных контуров или собрать всё в один регулятор (модальное управление и другие подходы) — уже выбор инженера. Три контура — просто и понятно, а математически дает примерно тоже самое, что и все другие способы.


          1. DenverElrond
            12.04.2016 10:30

            Знаете, сейчас для меня эти вопросы действительно важны: спасибо за ваши ответы!
            «Момент и скорость связаны интегралом.» — это только если решать уравнение механики (закон Ньютона) с какой либо начальной точки (накапливая/компенсируя погрешность, используя датчик координаты/скорости). А если бы вы в то же мгновение времени как определили ток, можете определить механическую мощность: тогда скорость определится как их отношение:

            V=Pмеханическая/(K*момент)

            без всяких интегралов и решения уравнений. Нужно только иметь еще один датчик: датчик напряжения (подаваемого на фазную обмотку). Ведь функции тока и напряжения — однозначно определяют процесс электромеханического преобразования в двигателе.*
            В общем мое мнение: на основании мгновенных(!) текущих значений фазных тока и напряжения электромеханического преобразователя можно определить приращение тока и координаты на некоторый отрезок времени (линеаризации) вперед. И после этого уже можно включать ваши 500 МГц и более чтобы управлять двигателем зная что его ждет впереди (и отрабатывая отклонение не между текущими значениями координаты/скорости/усилия — а между некоторым будущим их значением). То есть нужно не себе под ноги смотреть, а хотя бы на шаг (а может и не один) линеаризации вперед. Я ведь правильно понимаю, что в Вашей статье вы не рассматривали управление с предварительным расчетом отклонения от заданной величины?
            ___
            *Пытаюсь раскусить математику без-датчикового управления двигателями — но они все вращательного действия, их математика заточена под Фурье-анализ и разные комплексные переменные — то есть частные/ограниченные решения.


            1. BelerafonL
              12.04.2016 10:56

              Как раз законы механики (интегралы) и «решают» регуляторы скорости и положения. Если синтезировать эти регуляторы по канонам ТАУ, то тип этих регуляторов и их коэффициенты как раз закладываются исходя из известных параметров механики.

              Мощность, прикладываемую к двигателю, можно посчитать и без датчика напряжения. Система управления сама задает уровень напряжения на инверторе при помощи регулирования скважности ШИМ. Отличие реального напряжения от заданного очень невелико. Поэтому можно смело перемножать измеренный ток на заданное напряжение, получать мощность и… вот дальше я не понял, что вы предлагаете с ней делать. Как вы предлагаете решать задачу позиционирования зная/управляя мощностью?

              Посчитать по ней текущую скорость по той формуле, что вы написали? Ну так там будет погрешность из-за неучтенных потерь в обмотке и в стали, тем более если у нас есть датчик положения (мы же регулируем положение) то и скорость этим же датчиком определяется «бесплатно».

              Про лианеризацию и предсказание «вперед» тоже непонятно. Все процессы в двигателе известны и предсказуемы, и, собственно, вся «модель» двигателя в виде инерционного звена с постоянной времени статорной цепи уже и так «сидит» в ПИ-регуляторе тока (именно ПИ-регулятор получается при синтезе в терминах ТАУ для двигателя). Ну и плюс в регулятор тока могут добавляться всякие коррекции по противо-ЭДС и перекрестных связей (в векторном управлении).

              Так что система с ПИ-регуляторами как раз и занимается «предсказанием». То, как поведет себя тот контур, который регулятор охватывает, сам регулятор как раз и «знает». Так как в терминах ТАУ регулятор — это обратная передаточная функция к объекту управления. Т.е. регулятор «инвертирует» поведение объекта управления и компенсирует его передаточную функцию.


              1. DenverElrond
                15.04.2016 09:22

                «Мощность, прикладываемую к двигателю, можно посчитать и без датчика напряжения.» — но это речь о потребляемой электрической мощности! У меня есть чувство (и несколько статей) которое мне подсказывает, что: можно/нужно определить именно механическую мощность (не обращая внимание на мощности идущие на изменение магнитного поля, потери в обмотках, гистерезис и вихревые токи). Ведь управлять нужно именно механической мощностью развиваемой двигателем: момент и скорость — вторичные (следствия) процесса преобразования энергии в двигателе. Для меня главное поток энергии: механической энергии, характеризуемый некоторой мощностью. Например, это все равно что если бы мы поставили реальный датчик в цепь нагрузки Т-образной схемы замещения асинхронного двигателя (нагрузка — сопротивление с величиной обратной скольжению 1/s).* Это позволит:
                1. решать методами ТАУ «одно» уравнение, описывающее взаимосвязь между электрическими и механическими параметрами, исключив при этом необходимость расчета производной от индуктивности фазной обмотки. Противо-ЭДС двигателя** раскладывается на две составляющие: а) учитывающую поток энергии преобразования магнитного поля; б) учитывающую поток механической энергии — преобразуемой при движении вала двигателя. Это позволяет упростить математическую модель расчета динамики изменение тока в цепи двигателя. Не будучи особо специалистом в ТАУ я все же предполагаю что это упрощает процесс управления двигателем.
                2. зная механическую мощность — можно как раз учесть «погрешность из-за неучтенных потерь в обмотке и в стали»! Конечно если есть датчик координаты/скорости — ее расчет «бесплатен». Но если вести речь о том какая скорость БУДЕТ через некоторое время (шаг линеаризации)? Датчик не даст вам этих сведений о «будущем». Ведь изменение скорости можно знать только зная механическую мощность развиваемую электромеханическим преобразователем (двигателем)!
                «Все процессы в двигателе известны и предсказуемы» — ну не согласен: учитывая, например, что до сих пор профессора спорят о порядке расчета электромагнитного усилия, например: учитывать предысторию намагничивания магнитопровода двигателя (нелинейность стали магнитопровода) или нет? По сути мы не знаем как считать электромагнитное усилие. А при расчетах динамики электромеханического преобразования так возникает еще больше вопросов. Конечно их можно «решить» 500-стами МГц системы управления, но это, думается, тупиковый путь: развития он не дает.***

                Надеюсь, что произойдет упрощение математического описания электромеханических преобразователей энергии (двигателей, генераторов) — которое послужит совершенствованию алгоритмов электропривода.
                __
                *Сейчас нам приходится мощность, развиваемую двигателем, обеспечивать за счет контроля скорости вращения его ротора и величины тока в первичной цепи Т-образной схемы замещения (по датчикам скорости и тока в фазных обмотках двигателя).
                ** Сейчас известно разложение противо-ЭДС на две составляющие: а) «трансформаторная»= L*(di/dt); б) «ЭДС-движения»=i*(dL/dt) — вот расчетэтой производной от фазной индуктивности вносит максимальную погрешность (отношение малых величин приходится считать), при этом нужно обеспечить точность функции L=f(координата, ток).
                ***Электромеханикам здесь остается только с завистью смотреть на успехи Электроприводчиков :)


                1. BelerafonL
                  15.04.2016 10:30

                  1) Если установить датчики напряжения на выходе преобразователя, то мощность можно будет узнать снова только прикладываемую к двигателю, но не на валу. Так что ваш и мой вариант расчета мощности (по датчикам или заданному напряжению) не дадут знания мощности на валу все равно.

                  2) Потери в стали, обмотке, трение, погрешности измерения — это всё не то, что нужно и можно закладывать в виде компенсируемых параметров в модель управления электроприводом. Потому что мы не знаем, как точно посчитать эти параметры, они меняются от времени, температуры и так далее. Их иногда пробуют учесть для какой-то конкретной задачи, но в общем случае это всё бесполезно. Система управления должна быть робастной и не зависящей от высоких материй.

                  3) Чтобы предсказать, какая скорость БУДЕТ через один шаг линеаризации, мне не нужно знать мощность. Мне нужно знать момент на двигателе, момент инерции и момент нагрузки. Всё — вычитаю одно из другого, умножаю на шаг дискретизации, делю на момент инерции и готово. Именно этим, по сути, и занимается регулятор скорости. Глядя на рассогласование задания и текущей скорости он «предсказывает», какой момент нужно приложить к двигателю, чтобы оптимальным образом достичь задания. При этом в коэффициентах регулятора как раз и «сидят» параметры момента инерции и шага дискретизации. Но нагрузку он не знает — это неизвестная величина. Тем не менее, регулятор достаточно хорошо её компенсирует.

                  4) Учитывать или не учитывать гистерезис стали, потери на вихревые токи и прочие погрешности, как я уже сказал, это не тот вопрос, которым стоит задаваться. Принимая то, что нагрузку на валу мы все равно не знаем (считаем, что это случайная и непредсказуемая величина), учет единиц процента в улучшении расчета момента на валу ничего не даст в повышении качества регулирования. Не рассматриваю частный случай, когда нагрузки на валу или нет, или мы занимаемся приведением во вращение какого-то прецизионного маховика или чего-то такого, параметры чего априори все известны и предсказуемы.

                  Вывод: знание мощности в контексте данной дискуссии не нужно. Достаточно знания и управления моментом на валу, чтобы делать все «предсказания» изменения скорости двигателя и внесения корректив в это изменение скорости. Чем, собственно, и занимается система подчиненного регулирования контуром тока и скорости. Потому что тот ток, который регулирует система управления, это наиболее близкий к «моменту на валу» параметр. Лучше рассчитать момент никак нельзя, кроме как через этот ток. Нет никаких других датчиков и формул, из которых его можно было бы достать точнее (если не поставить напрямую на вал датчик момента, конечно).


                  1. DenverElrond
                    15.04.2016 23:06

                    1) мощность на валу двигателя (механическую — Pмех.) можно определить зная: а) мгновенное значение тока — i; б) скорость изменения тока di/dt; в) мгновенную величину фазной индуктивности — L; г) напряжение на обмотке двигателя — u; д) активное сопротивление обмотки — R, согласно выражения:

                    Рмех=i*L*((u-i*R)*L-di/dt)/2

                    это верно для ненасыщенного магнитопровода двигателя — обладающего неизменной магнитной проницаемостью.
                    Здесь проблема как определить L*, но зато ее производную определять нет необходимости. Думается, это важно при создании систем управления электрическими двигателями в которых необходимо однозначно определить связь между током и развиваемой механической мощностью, например в вентильных двигателях, линейных электромагнитных двигателях — и иных двигателях в которых процесс преобразования имеет переходной (а не установившийся, как в двигателях вращательного движения с неявно выраженными пазами статора) вид.
                    То есть, если задана функция механической мощности, которую должен развить двигатель, можно обойтись без датчика координаты двигателя. Встает вопрос зачем это все нужно? :)))
                    Ну например:
                    1) при вибрационных испытаниях когда на испытуемый образец нужно подавать определенную механическую мощность (а не обеспечить лишь траекторию движения);
                    2) когда имеются ограничения на механическую прочность перемещаемых изделий — имеются ограничения по интенсивности (мощности) оказываемого на них воздействия;
                    3) когда двигатель — лишь переходное звено для преобразования энергии снова в электрический (или иной) вид (например когда он приводит во вращение электрический генератор).

                    То есть: зная только ток (и его производную) потребляемый двигателем можно управлять развиваемой двигателем механической мощностью — при этом обеспечивается единственный контур управления: по току.

                    По вашим пунктам 2- 4 согласен.
                    ___
                    * ну допустим посредством датчика магнитного поля выдающим потокосцепление обмотки — W, откуда L=W/i — речь идет о мгновенной индуктивности. А в принципе, потокосцепление можно и рассчитать проинтегрировав величину противо-ЭДС на обмотке двигателя и учтя величину магнитной энергии запасенной в двигателе — тогда вообще остается только один датчик тока!


  1. rooi-oog
    12.04.2016 10:04

    Большое спасибо за статью. А не могли бы вы привести график реакции системы на «ступеньку», размером, скажем, полный оборот двигателя.


    1. BelerafonL
      15.04.2016 12:49

      Вот, дошли руки снять. Сделал график для одного оборота и для двух. Настроил регуляторы на апериодический переходный процесс (тут где-то выше говорили, что с ПИД регулятором такого нельзя).
      Для рассогласования в один механический оборот:

      Для двух оборотов:

      В клетке по времени 20мс. Фиолетовым, синим — задание тока и текущей ток (3А/кл), красное — угол электрический (4 пары полюсов, напоминаю, 1000 град/Кл), красным — частота вращения (в клетке 1000 об/мин).

      Особо отмечу, что система управления работает в насыщениях — сразу же упирается в ограничение тока, потом по дороге в ограничение скорости (1500 об/мин я поставил, так как выше не хватает напряжения источника питания). Поэтому время переходного процесса, конечно же, несравнимо с теоретическим, рассчитываемым без достижения ограничений. Даже при очень малом отклонении система уже утыкается в ограничение тока:

      (в клетке 4мс)
      поэтому реакцию на ступеньку по контуру положения для настройки регулятора нужно снимать при отклонениях буквально на пару меток энкодера. Но тогда процесс дискретный из-за дискретности этих самых меток.


      1. rooi-oog
        15.04.2016 16:43

        Спасибо, я думал вы меня проигнорировали. Но у меня появились новые вопросы:

        >Фиолетовым, синим — задание тока и текущей ток (3А/кл), красное — угол электрический (4 пары полюсов, напоминаю, 1000 град/Кл),
        >красным — частота вращения (в клетке 1000 об/мин).
        Я вижу розовый, синий, красный и голубой.

        Голубой, как я понял, положение вала двигателя от времени, так? А почему профиль S-образный, явно видно ускорение и торможение. Это ваш ПИД так работает или вы шагами подводите двигатель к точке назначения, плавно изменяя частоту шагов? Если второе, тогда это не совсем то, что я просил. Если первое, то я снимаю перед вами шляпу и бегу изучать ТАУ.


        1. BelerafonL
          15.04.2016 17:18

          Ну… фиолетовый это розовый, да. Пурпурный.

          Голубой это положение вала от времени. Профилирования движения _нет_. Выглядит так, что как будто есть, но это работа трехконтурной системы без планировщика. Так её настроить — это, на самом деле, эквилибристика. Тут работают некоторые надстройки, обеспечивающие корректную работу регуляторов в зоне насыщений: списывание интегральной составляющий в зависимости от уровня насыщения, например. Такой блок включен и тщательно настроен в регуляторе скорости и в регуляторе положения, посмотреть как устроен можно, например, в тексасовском даташите (коэффициент Kc). Без корректной настройки этого блока переходной процесс не такой красивый.

          Но правильно такое движение делать, конечно, с планировщиком движения — задавать на регулятор положения профилированное S-образное задание изменения угла, а заодно также подмешивать в задание контура скорости рассчитанную планировщиком скорость. Тогда регуляторы будут лишь компенсировать ошибку, вызванную нагрузкой, а «работать» будет планировщик. Но данные осциллограммы демонстрируют, что при желании неплохой переходной процесс можно получить и естественным путем.


  1. alsvr
    12.04.2016 10:04

    Спасибо за статью, очень познавательно! Расскажите пожалуйста как измеряете ток с шунтовых резисторов? Просто интегрируете на периоде ШИМ? Рассчитываете RMS? Или каким-то другим способом считаете?


    1. BelerafonL
      12.04.2016 10:18

      Ток с шунтовых резисторов, которые установлены в нижних ключах инвертора, мы измеряем также, как и с любых других датчиков тока. Только изменять надо в тот момент, когда открыт нижний ключ — именно тогда ток протекает через него и, собственно, через шунт. Поэтому мы синхронизируем запуск АЦП в микроконтроллере с моментом, когда таймер ШИМ открывает нижние ключи. Это при симметричной центрированной ШИМ (пила вверх-вниз) происходит в тот момент, когда таймер доезжает до верха. Там он дает команду на запуск АЦП (аппаратно, так позволяет микроконтроллер), который тут же считывает значение тока. И все, мы измеряем ток (или все токи) в фазе.
      Нужны лишь быстрые аналоговые цепи, которые на периоде ШИМ будут успевать на вход АЦП подать адекватное значение тока через шунт, когда включился нижний ключ. Поэтому на частоте ШИМ 10-20кГц это ещё получается, а на больших частотах уже превращается в аналоговую эквилибристику.

      Интеграл от тока на периоде ШИМ физического смысла не имеет. Может быть, вы имели ввиду усреднение тока на периоде ШИМ? Это сделать бы хотелось, но нет, мы имеет возможность в такой схеме измерить ток лишь один раз, когда включен нижний ключ.

      RMS — это действующее значение тока. Обычно действующее значение тока рассчитывают для переменного тока на периоде основной гармоники, чтобы показать его эквивалент по постоянному току с точки зрения нагрева. Эта величина к быстродействующим контурам регулирования системы управления никакого отношения не имеет.


      1. alsvr
        14.04.2016 17:46
        +1

        Спасибо! Бегло полистал книгу Анучина, хорошо написана. Теперь разобрался в физике процесса. Почему-то изначально была аналогия про измерение тока на активной нагрузке с низкочастотной ШИМ. Из-за этого и упомянул про RMS. Конечно, в таком варианте от интеграла на периоде смысла нет.