Pull to refresh

Comments 63

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

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

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

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

Можно, возможно глупый, вопрос:
Если я правильно понял, для манипулятора домашнего станка, с точностью >=0,01 лучше использовать именно подчиненное регулирование, или же, шаговики смогут обеспечить данную точность?
Все что мне удалось найти в сети, как-то стремно смотрится в сравнении с вашими статьями.
Манипулятор — это обычно такая роботизированная рука. А «домашний» станок — это три винт-гайки по трем осям. Вы о чем именно спрашиваете?
Точность чего 0.01 и в каком месте? Единицы измерения хотя бы неплохо…
Мое упущение.
Манипулятор — именно робо-рука, а «домашний» станок — небольшой токарный.
Если делать манипулятор к такому станку, чтобы он стал с несколькими степенями свободы для изготовления сложных деталей, путем меньших телодвижений. Что-то вроде поточного производства чего-либо.
Точность, имелось ввиду в миллиметрах, как на подаче резца.
Суть, чтобы можно было установить фрезу или резец в манипулятор. Все как у «больших» станков.
На домашнем станке в первую очередь проявятся проблемы жесткости которые не дадут точности 0.01 мм, а если под манипулятором понимать робо-руку с вылетом хотя бы 500 мм то там 0.1 мм будет уже счастье.
А если проблему с жесткостью удастся решить, то станок уже выйдет из класса «домашних» и наберет пару тонн веса.

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

Справочно: «KUKA KR 6 R900»
Вылет 900мм
Полезная нагрузка 6кг
Масса самой руки 52 кг
Точность позиционирования: ±0,03мм
Посмотрел видео про Kuka. С точностью в 0,01мм, я сильно загнул. Вероятней всего 1мм можно добиться. Нужно пробовать, чтобы узнать наверняка. А вот с полезной нагрузкой, надо что-то отдельно думать, меньше 6 кг, наверно нет смысла делать, ведь «дрель» будет тяжолой, а ей еще елозить.

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

Спасибо за разъяснения.
Наткнулся вот на это видео недавно https://youtu.be/iRKDfknqtbc, а сегодня на вашу статью. Поэтому и подумал, что «лучше» использовать подчиненное регулирование.
Нужно будет самому попровать разные методы.
При анализе «Заметили ли вы, насколько меньше отклонился вал ротора на видео в трехконтурной системе управления?» необходимо учитывать, что в показанном опыте используется двигатель не ориентированный для шагового управления, 4 пары полюсов «маловато будет», Имхо: еще не совсем оптимальна и система управления для «шага», если сравнивать комплекты за равные деньги в данном опыте, то шаговый движок наверно покажет лучший результат.
А за статью Спасибо!
Да, конечно, вы правы. Если взять настоящий ШД, схожий по требуемому моменту, то он будет держать положение в некоторых опытах даже лучше, чем приведенная система подчиненного регулирования. Более того, стоить он вместе с драйвером будет на порядок дешевле, чем минимально-работающая система подчиненного регулирования. Но при этом шаговик не сможет показать такой динамики, как в первом видео, не сможет ничего сделать с моментом больше максимального (он пропустит шаги, а подчиненное регулирование «отступит» назад, а потом вернется) и не сможет дать той точности, которую даст подчиненное регулирование при установке хорошего датчика положения.

Поэтому для простых применений без высокой динамики — однозначно оптимальнее шаговики, без вопросов. А вот для высокоскоростных и одновременно точных перемещений, нужны «высокие материи». Также подчиненное регулирование выиграет по габаритам двигателя, так как оно поддает в двигатель ток только когда это требуется, а в шаговик нужно подавать ток постоянно. Поэтому по теплу с трехконтурной системой двигатель будет лучше себя чувствовать, а значит может быть меньших габаритов.
немного не в тему но, «Червячная передача + ШД = наше все» :). (Конструктор)
Сдается, что такое сочетание еще в большей степени не сможет тягаться с подчиненным регулированием по параметру динамики и скорости.
Согласен с вами. В этом случае надо было к шаговому двигателю векторное управление прикрутить
Большое спасибо за статью и особенно за иллюстрации с графиками! Весьма познавательно.

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

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

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

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

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

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

Прежде чем я отвечу, можно уточняющий вопрос — а какова структура управления? Там есть контур положения и контур скорости? Что обозначает «Но на малых оборотах (< 2 об/сек) двигателя плавности хода заметно не хватает.»? Если требуется поддерживать небольшую частоту вращения, то обычно не пользуются контуром скорости напрямую. Ставят поверх него контур положения, а уже контуру положения разворачивают заданный угол с той скоростью, которая нужна. Контур положения работает с точностью до одной метки датчика энкодера (обычно), точнее физически не может. Поэтому движение с низкой скоростью превращается в такой структуре в движение секундной стрелки часов. Двигатель тикает по одной метке энкодера, совсем как шаговый двигатель. У вас такая структура? Если да, то исключить скачки при переходе положения с метки на метку энкодера нельзя по понятным причинам. Но скорость в такой структуре можно вот так вот, «ступенчато» обеспечить любую, хоть самую низкую.
Вот, например, одно видео, не попавшее в «общий выпуск».
https://youtu.be/JQHuWUYKYOI
Здесь та же трехконтурная система, но задание положения изменяется медленно, с требуемой скоростью. Слышно, как «щелкают» перебираемые метки энкодера. У меня, конечно, 1000 меток на оборот, но и скорость я задаю гораздо меньшую, чем 1-2 оборота в секунду. У меня здесь это примерно 0.5 об/мин, что примерно равно количеству перебираемых меток за секунду для вашего случая. Но если оставить только контур скорости и уже на него задать эту скорость (0.5 об/мин), то вообще ничего не поедет и будет дергаться. Какую структуру используете вы? И в чем именно заключается нестабильность?
Для идеального задания скорости на медленных оборотах можно поставьть гироскопический датчик, благо они недорогие, но придется придумать скользаящее кольцо (slipring) для механической развязки. Ещё для измерения малых скоростей можно применять адаптивную НЧ-фильтрацию. Основная проблема с цифровыми энкодерами в том, то что для регулятора нужно получить скорость на каждом сэмпле, но события смены рисок энкодера приходят реже. В итоге скорость очень дискретна: 0, то N, N*2, N*3 и т.д. в статье наглядно показано как шум. Решение: накапливайте сэмплы в кольцевом буфере, перебирайте их назад от текущего сэмпла, как только дельта-угол превысит заданный порог, делите на время (оно увеличивается пропорционально глубине «заглядвания назад» в буфер). В итоге получается нечто похожее на НЧ-фильтр, но адаптивное: как только скорость превысит порог, фильтр польностью отключается, и скорость определится по двум последним сэмплам. Когда скорость падает — число сэмплов растет, как и задержка, зато точность определения скорости повышается.
Из исходной задачи — перемещение каретки по заданной траектории по G-кодам (только X,Y без Z) требуется контролировать скорость 2-х моторов + координату (да еще с преобразованием из декартовых в полярные).
Собственно, расчет траектории по G-коду один из стандартных и самых простых. Разбиение каждой команды G0/G1 на участки (для данного варианта шаг 400ms) с постоянной скоростью и координатами начала/конца с предпросмотром на следующую команду G кода (нужно ли торможение и пр. исходя из ограничения по максимальному ускорению).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Фактически у меня те же два контура. Значение желаемой скорости используется просто как верхний ограничитель 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мм/сек не получить на интервале измерения.

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

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

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

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


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

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

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

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

Если получится, сегодня-завтра вечером попробую. Или в выходные…
Уменьшил период расчета для контура положения — линии стали практически прямыми! В общем практический результат вполне устраивает и при отсутствии контура по току.

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

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

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

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

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

когда то читал вашу статью о векторном управлении, так за пол часа чтения понял все то, чего не понял за несколько лекций в универе!
Спасибо за статью, скажите пожалуйста, на сколько проигрывают датчики положения ротора на базе сельсина (resolver, 2 катушки статора, 1 катушка на роторе) оптическим? Как тип датчика отразится на точности и скорости позиционирования?
Проигрывает не резольвер (синусно-косинусный трансформатор), проигрывает АЦП. Вся точность сельсина в точности АЦП, которым вы будете выделять его синусно-косинусный сигнал. Фотоэлектрические датчики положения тоже выдают (могут выдавать) синусно-косинусный сигнал, как и резольвер, но число синусно-косинусных периодов на оборот у такого датчика будет несравнимо выше, чем число периодов самого лучшего сельсина. Поэтому при том же самом АЦП точность фотоэлектрического (оптического) датчика будет выше. Другое дело надежность — сельсины часто ставят там, где нежные фотоэлектрические датчики могут сломаться.
На позиционировании точность датчика отражается самым что ни на есть прямым образом. Люди, которые занимаются сервоприводами, говорят так: не рассказывайте мне, какой у вас двигатель и преобразователь — это не важно. Скажите, какой у вас датчик. Самая главная характеристика датчика, собственно, точность. Какую точность дает датчик, соответствующую и дает контур положения.
у меня на паре старых советских сельсинов написано «класс точности 2%» Что это означает конкретно и в чём выражается не изучал вопрос
Хорошая статья, особенно ценно то, что приводится не только ткак делать «по учебнику», но и потенциальные подводные камни. В своем проекте я не использую контур регулирования тока для упрощения системы, но зато не пришлось решать связанные с ним проблемы. Почему вы так критично относитесь к отсутсвию контура тока? Ведь в контуре скорости даже с ним остается нелинейность, только уже другого типа. Разве что если бытсродействие контура тока на порядки выше контура скорости — тогда да, можно считать систему задания момента линейной.
Чем больше обратных связей, тем меньше бесконтрольных процессов. Без контура тока нельзя управлять моментом двигателя.
В любой замкнутой системе управления быстродействие внешнего контура зависит от быстродействия внутреннего контура. Отказаться от какого-то контура — все равно что вставить звено задержки в размер постоянной времени не охваченного обратной связью объекта управления. Создав контур тока мы компенсируем электрическую постоянную времени статорной/якорной обмотки двигателя (смотря каким двигателем мы управляем): для ДПТ это Тя=Lя/Rя.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вывод: знание мощности в контексте данной дискуссии не нужно. Достаточно знания и управления моментом на валу, чтобы делать все «предсказания» изменения скорости двигателя и внесения корректив в это изменение скорости. Чем, собственно, и занимается система подчиненного регулирования контуром тока и скорости. Потому что тот ток, который регулирует система управления, это наиболее близкий к «моменту на валу» параметр. Лучше рассчитать момент никак нельзя, кроме как через этот ток. Нет никаких других датчиков и формул, из которых его можно было бы достать точнее (если не поставить напрямую на вал датчик момента, конечно).
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 — речь идет о мгновенной индуктивности. А в принципе, потокосцепление можно и рассчитать проинтегрировав величину противо-ЭДС на обмотке двигателя и учтя величину магнитной энергии запасенной в двигателе — тогда вообще остается только один датчик тока!
Большое спасибо за статью. А не могли бы вы привести график реакции системы на «ступеньку», размером, скажем, полный оборот двигателя.
Вот, дошли руки снять. Сделал график для одного оборота и для двух. Настроил регуляторы на апериодический переходный процесс (тут где-то выше говорили, что с ПИД регулятором такого нельзя).
Для рассогласования в один механический оборот:

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

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

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

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

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

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

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

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

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

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

Sign up to leave a comment.