ПИД-регулирование. Общие вопросы.

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ПИД-регулирование. Общие вопросы.

Сообщение Serg »

ex71 писал(а):Теперь точу детали с точностью в +/-1 сотку.
FF0 при позиционировании должно быть равно 0.
FF1=0.2 - это многовато. Это в некотором роде допустимая ошибка позиционирования.
BIAS и DEADBAND нужны в сильно специфичных случаях, в данном случае возможно такая точность из-за их использования.
Такое ощущение, что все эти параметры менялись просто методом тыка... :)

В халскопе параметр f-error стоит смотреть на макс. усилении - именно форма этой кривой таит в себе большинство ответов о поведении привода, собственно только на неё и стоит смотреть при настройке. И уж точно не стоит смотреть на цифры координат осей в LinuxCNC, ибо перед настройкой PID вы сами разрешили им не доезжать +/- трамвайную остановку. :)
И вообще переда настройкой PID рекомендуется втупить теорию хотя-бы в общих чертах, чтобы понимать что происходит, ну и внимательно почитать описание параметров настройки PID в LinuxCNC, чтобы иметь представление в каких случаях что крутить. Ну или пользовать автонастройщик at_pid, но помнить, что любой автомат более-менее нормально подберёт параметры только в простых случаях.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
ex71
Мастер
Сообщения: 759
Зарегистрирован: 18 май 2019, 13:23
Репутация: 109
Настоящее имя: Андрей
Контактная информация:

Re: ПИД-регулирование. Общие вопросы.

Сообщение ex71 »

Да методом тыка и подбирал. Потому что детального описания какой параметр что именно меняет - не нашел. Ну кроме как-бы общего объяснения, скорее даже "перевода названия на русский".
при ff0 =0 при разгоне и торможении резко возрастает ошибка.
Если я уменьшу ff1 - тогда кривая ошибки будет повторять кривую управления. В данном случае усеченной пирамидой.
Снимок экрана_2019-10-25_10-14-08.png (2584 просмотра) <a class='original' href='./download/file.php?id=171498&mode=view' target=_blank>Загрузить оригинал (164.3 КБ)</a>
Это как раз увеличение итогового графика. Что-то в таком варианте уже ничего не сделаешь, уж очень малы значения милилметров.
Еще пара скринов в процессе подстройки.
Вложения
Снимок экрана_2019-10-24_15-02-34.png (2584 просмотра) <a class='original' href='./download/file.php?id=171499&mode=view' target=_blank>Загрузить оригинал (177.84 КБ)</a>
Снимок экрана_2019-10-25_10-12-05.png (2584 просмотра) <a class='original' href='./download/file.php?id=171500&mode=view' target=_blank>Загрузить оригинал (167.01 КБ)</a>
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ПИД-регулирование. Общие вопросы.

Сообщение Serg »

ex71 писал(а):Это как раз увеличение итогового графика.
Теперь хорошо видно, что в конце остаётся ненулевое значение ошибки, т.е. PID не пытается её устранить - это влияние BIAS и/или DEADBAND.
Не пытайтесь крутить сразу все параметры, прежде чем переходить к очередному параметру старайтесь добиться наилучшего результата уже задействованными. Последовательность задействования параметров есть в множестве методик настройки ПИД.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
ex71
Мастер
Сообщения: 759
Зарегистрирован: 18 май 2019, 13:23
Репутация: 109
Настоящее имя: Андрей
Контактная информация:

Re: ПИД-регулирование. Общие вопросы.

Сообщение ex71 »

На скринах нет мышки, но если посмотрите на график - там стоит точка как раз на ненулевом значении ошибки. И ее значение отображается внизу окна =>
1 тысячная миллиметра? да потому я и поставил deadband - иначе остается постоянное не нулевое управление. Потому что энкодер то на 1000им/об. При шаге 4мм по Х, вывести 0.001мм не возможно. А в итоге получается, что драйвер выдает на мотор управление и мотор гудит пытаясь дергаться в обе стороны. И тут либо я уменьшая "ref gain" на драйвере получаю неадекватное управление мотором, либо я добавляю deadband и ЧПУ успокаивается.
В моем случае bias позволил вывести значение ошибки на нуль. Он же просто добавляет константу к выходному напряжению?

Повторюсь: у меня не заводская серва. А именно связка советского щеточного мотора и уже далеко не последней модели AMC драйвера. Все настройки делал с нуля, выворачивая все крутилки в нули, и производя подстройку драйвера в нулевое управление при отсутствии управления. Есть скрин, где я убавил ток на драйвере.
Снимок экрана_2019-10-24_14-42-20_low_current.png (2568 просмотров) <a class='original' href='./download/file.php?id=171501&mode=view' target=_blank>Загрузить оригинал (185.96 КБ)</a>
Еще хотел спросить:
по этому скрину, можно судить что я достиг максимальной физической скорости перемещения?
Снимок экрана_2019-10-24_15-24-27.png (2568 просмотров) <a class='original' href='./download/file.php?id=171502&mode=view' target=_blank>Загрузить оригинал (185.29 КБ)</a>
Что именно происходит на этих скринах? Это происходит примерно в одном месте, может разъем тахогенератора цепляет - пока не знаю. Но не всегда, и по графику все же похоже что сначала падает кривая управления, а за ней уже и ошибка.
Вложения
Снимок экрана_2019-10-25_09-51-01.png (2568 просмотров) <a class='original' href='./download/file.php?id=171503&mode=view' target=_blank>Загрузить оригинал (176.78 КБ)</a>
Снимок экрана_2019-10-25_09-56-54.png (2568 просмотров) <a class='original' href='./download/file.php?id=171504&mode=view' target=_blank>Загрузить оригинал (173.5 КБ)</a>
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ПИД-регулирование. Общие вопросы.

Сообщение Serg »

ex71 писал(а):В моем случае bias позволил вывести значение ошибки на нуль. Он же просто добавляет константу к выходному напряжению?
DEADBAND разрешает игнорить и положительную и отрицательную ошибки, а BIAS "работает" только в какую-то одну сторону, т.е. при движении в одну сторону о будет "компенсировать" ошибку, а при движении в другую - удваивать.
ex71 писал(а):по этому скрину, можно судить что я достиг максимальной физической скорости перемещения?
Скорее всего да. При настройке ПИД лучше смотреть не на PWM, а на feedback - лучше видно возможности привода. Если совсем всё плохо, то стоит попробовать уменьшить скорость/ускорение. ПИД настраивается на макс. скорости рабочей подачи, на макс. скорости холостых перемещений точно следовать траектории не требуется.
ex71 писал(а):Что именно происходит на этих скринах? Это происходит примерно в одном месте, может разъем тахогенератора цепляет - пока не знаю.
Весьма похоже на механическую проблему - что-то "закусывает" или ненадёжно контачащий разъём шевелят...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: ПИД-регулирование. Общие вопросы.

Сообщение Duhas »

UAVpilot писал(а): FF0 при позиционировании должно быть равно 0.
Почему, если не секрет?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: ПИД-регулирование. Общие вопросы.

Сообщение Serg »

Duhas писал(а):Почему, если не секрет?
Это значение (задание * FF0) просто будет добавлено к заданию. В данном случае при поступлении задания "передвинутся в позицию NNN" ПИД будет упорно пытаться ехать в позицию NNN+(NNN*FF0).
Этот параметр имеет смысл разве что при управлении скоростью, например шпинделя.
Для осознания влияния разных параметров на поведение ПИД рекомендую пользовать "шпаргалку" из исходников компонента pid.comp, ну и собственно теорию ПИД. :)

Код: Выделить всё

    The three most important pins are 'command', 'feedback', and
    'output'.  For a position loop, 'command' and 'feedback' are
    in position units.  For a linear axis, this could be inches,
    mm, metres, or whatever is relavent.  Likewise, for a angular
    axis, it could be degrees, radians, etc.  The units of the
    'output' pin represent the change needed to make the feedback
    match the command.  As such, for a position loop 'Output' is
    a velocity, in inches/sec, mm/sec, degrees/sec, etc.

    Each loop has several other pins as well.  'error' is equal to
    'command' minus 'feedback'.  'enable' is a bit that enables
    the loop.  If 'enable' is false, all integrators are reset,
    and the output is forced to zero.  If 'enable' is true, the
    loop operates normally.

    The PID gains, limits, and other 'tunable' features of the
    loop are implemented as parameters.  These are as follows:

    Pgain	Proportional gain
    Igain	Integral gain
    Dgain	Derivative gain
    bias	Constant offset on output
    FF0		Zeroth order Feedforward gain
    FF1		First order Feedforward gain
    FF2		Second order Feedforward gain
    deadband	Amount of error that will be ignored
    maxerror	Limit on error
    maxerrorI	Limit on error integrator
    maxerrorD	Limit on error differentiator
    maxcmdD	Limit on command differentiator
    maxcmdDD	Limit on command 2nd derivative
    maxoutput	Limit on output value

    All of the limits (max____) are implemented such that if the
    parameter value is zero, there is no limit.

    A number of internal values which may be useful for testing
    and tuning are also available as parameters.  To avoid cluttering
    the parameter list, these are only exported if "debug=1" is
    specified on the insmod command line.

    errorI	Integral of error
    errorD	Derivative of error
    commandD	Derivative of the command
    commandDD	2nd derivative of the command

    The PID loop calculations are as follows (see the code for
    all the nitty gritty details):

    error = command - feedback
    if ( abs(error) < deadband ) then error = 0
    limit error to +/- maxerror
    errorI += error * period
    limit errorI to +/- maxerrorI
    errorD = (error - previouserror) / period
    limit errorD to +/- maxerrorD
    commandD = (command - previouscommand) / period
    limit commandD to +/- maxcmdD
    commandDD = (commandD - previouscommandD) / period
    limit commandDD to +/- maxcmdDD
    output = bias + error * Pgain + errorI * Igain +
             errorD * Dgain + command * FF0 + commandD * FF1 +
             commandDD * FF2
    limit output to +/- maxoutput
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: ПИД-регулирование. Общие вопросы.

Сообщение Duhas »

UAVpilot писал(а):
Duhas писал(а):Почему, если не секрет?
Это значение (задание * FF0) просто будет добавлено к заданию.
Спасибо, согласен, то о чем я думал для LCNC будет FF1
Ответить

Вернуться в «Электроника»