Настройка PID
- odekolon
- Мастер
- Сообщения: 1105
- Зарегистрирован: 05 ноя 2014, 14:53
- Репутация: 360
- Настоящее имя: Борис
- Контактная информация:
Настройка PID
Всем добрый вечер.
для будущего лазера, прикрутил голову к обычному фрезеру и настраиваю систему поддержания высоты.
структурная схема выглядит так: как бы вчерне, уже работает
выглядит так:https://youtu.be/sj6lW6AMhsk
это режим наладки: хал-генератор меняет уставку, а голова отрабатывает.
импульсы - это выходной сигнал ПИД-регулятора
при большой разнице в уставках, система "идет вразнос"
явно надо чего-то ограничить.
у пид-регулятора, да и у интегратора, есть ограничители, как думаете -где лучше ограничить?
еще у пид-регулятора есть куча доп настроек. Кто-нибудь их крутил вдумчиво?
для будущего лазера, прикрутил голову к обычному фрезеру и настраиваю систему поддержания высоты.
структурная схема выглядит так: как бы вчерне, уже работает
выглядит так:https://youtu.be/sj6lW6AMhsk
это режим наладки: хал-генератор меняет уставку, а голова отрабатывает.
импульсы - это выходной сигнал ПИД-регулятора
при большой разнице в уставках, система "идет вразнос"
явно надо чего-то ограничить.
у пид-регулятора, да и у интегратора, есть ограничители, как думаете -где лучше ограничить?
еще у пид-регулятора есть куча доп настроек. Кто-нибудь их крутил вдумчиво?
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Re: Настройка PID
odekolon писал(а):выглядит так:
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- odekolon
- Мастер
- Сообщения: 1105
- Зарегистрирован: 05 ноя 2014, 14:53
- Репутация: 360
- Настоящее имя: Борис
- Контактная информация:
Re: Настройка PID
вроде открыл
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка PID
Тут ПИД регулятор используется неправильно: на входах ПИД (задание и фидбэк) должно быть то, что нужно получить, т.е. позиция. А вот на выходе будет не позиция, а воздействие на исполнительное устройство, т.е. не позиция, а скорость в данном случае. Т.е. pid.output нужно подавать на stepgen.2.velocity−cmd (и ctrl_type=v соотв.)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- odekolon
- Мастер
- Сообщения: 1105
- Зарегистрирован: 05 ноя 2014, 14:53
- Репутация: 360
- Настоящее имя: Борис
- Контактная информация:
Re: Настройка PID
ну, на самом деле, после регулятора стоит интегратор, а расстояние есть интеграл от скорости... так что схема рабочая.UAVpilot писал(а):ут ПИД регулятор используется неправильно: на входах ПИД (задание и фидбэк) должно быть то, что нужно получить, т.е. позиция.
это давно мной откатано на плазме, с THC по напряжению дуги. токо там, в больших скоростях особой нужды нет. Вполне хватило PD
кстати , наверное на ограничители интегратора есть смысл подать границы хода по оси (Z). тогда при "разносе" не будет о лимиты стукаться
а есть "живая" конфигурация с такими настройками stepgen ? (интересно, что с чем соединяется?)UAVpilot писал(а):pid.output нужно подавать на stepgen.2.velocity−cmd (и ctrl_type=v соотв.)
все-таки ключевой вопрос был
odekolon писал(а):еще у пид-регулятора есть куча доп настроек. Кто-нибудь их крутил вдумчиво?
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
- odekolon
- Мастер
- Сообщения: 1105
- Зарегистрирован: 05 ноя 2014, 14:53
- Репутация: 360
- Настоящее имя: Борис
- Контактная информация:
Re: Настройка PID
ну что-ж !
первая же подкрученная доп. настройка привела к желаемому результату
это настройка pid.n.maxoutput - это ограничитель максимального выходного сигнала ПИД. При этом, ушли все проявления "разноса" .
теперь на голова пикирует на установленную высоту максимально быстро и без "разноса"
на приведенном видео, генерятся переходы с 4мм на 0.5 мм
осциллограмма - выходной сигнал ПИД (скорость)
плоская вершина - ограничение
ступеньки на спаде - похоже на период получения инфы по ком-порту от датчика
https://youtu.be/_Zrh2gxeFeo
первая же подкрученная доп. настройка привела к желаемому результату
это настройка pid.n.maxoutput - это ограничитель максимального выходного сигнала ПИД. При этом, ушли все проявления "разноса" .
теперь на голова пикирует на установленную высоту максимально быстро и без "разноса"
на приведенном видео, генерятся переходы с 4мм на 0.5 мм
осциллограмма - выходной сигнал ПИД (скорость)
плоская вершина - ограничение
ступеньки на спаде - похоже на период получения инфы по ком-порту от датчика
https://youtu.be/_Zrh2gxeFeo
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
-
- Зачётный участник
- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6192
- Откуда: Казахстан.
- Контактная информация:
Re: Настройка PID
Почему нет вида целиком станка? Жаждим видать весь станок
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- solo
- Мастер
- Сообщения: 1374
- Зарегистрирован: 20 окт 2011, 18:39
- Репутация: 272
- Настоящее имя: Юрий Соловьев
- Откуда: Украина Харьков
- Контактная информация:
Re: Настройка PID
вот с моего станкаodekolon писал(а):а есть "живая" конфигурация с такими настройками stepgen
- Вложения
-
- 676mm.hal
- (7.26 КБ) 397 скачиваний
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка PID
И интегратор вносит в сигнал лишнюю задержку минимум в один сервоцикл, а это только мешает PID'у правильно воспринимать "реальность бытия"...odekolon писал(а):ну, на самом деле, после регулятора стоит интегратор, а расстояние есть интеграл от скорости... так что схема рабочая.
Сейчас stepconf по дефолту создаёт такую конфигурацию для осей.odekolon писал(а):а есть "живая" конфигурация с такими настройками stepgen ? (интересно, что с чем соединяется?)
Можно было просто уменьшить макс. скорость у stepgen.odekolon писал(а):это настройка pid.n.maxoutput - это ограничитель максимального выходного сигнала ПИД. При этом, ушли все проявления "разноса" .
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- odekolon
- Мастер
- Сообщения: 1105
- Зарегистрирован: 05 ноя 2014, 14:53
- Репутация: 360
- Настоящее имя: Борис
- Контактная информация:
Re: Настройка PID
да хрен-ли на него смотреть - обычный китайский говнофрезерaftaev писал(а):Почему нет вида целиком станка? Жаждим видать весь станок
чисто для отладки конфигурации.
ага, спасибо, будем посмотретьsolo писал(а):вот с моего станка
Спасибо, это важное дополнение, учту на будущее.UAVpilot писал(а):И интегратор вносит в сигнал лишнюю задержку минимум в один сервоцикл, а это только мешает PID'у правильно воспринимать "реальность бытия"...
но пока, основной элемент задержки - период поступления информации от датчика (ну вы, в курсе )
кстати, я в свое время для себя принял, что множество хал-функций могут пропустить через себя сигналы даже за один цикл,
если их addf - строки находятся в "нужной" последовательности. Это так?
я не имею ввиду сложные функции типа интегратора, а всякие мультиплексоры/умножители/ограничители и др
но в этом случае, падает максимальная скорость у станка - а это не есть гуд - или я не прав?UAVpilot писал(а):Можно было просто уменьшить макс. скорость у stepgen.
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка PID
Прав. Но и pid.n.maxoutput делает ровно тоже самое.odekolon писал(а):но в этом случае, падает максимальная скорость у станка - а это не есть гуд - или я не прав?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- odekolon
- Мастер
- Сообщения: 1105
- Зарегистрирован: 05 ноя 2014, 14:53
- Репутация: 360
- Настоящее имя: Борис
- Контактная информация:
Re: Настройка PID
но в моем случае, pid.n.maxoutput режет "виртуальную" скорость, которая физически не существует.UAVpilot писал(а):Прав. Но и pid.n.maxoutput делает ровно тоже самое.odekolon писал(а):но в этом случае, падает максимальная скорость у станка - а это не есть гуд - или я не прав?
то есть быстрые перемещения станка (включая перемещения при стабилизации высоты), у меня идут с максимально возможной скоростью.
интегратор-то работает, и быстро-быстро двигает точку назначения, а ось едет к точке с максимальной скоростью
На глаз, оценка конечно еще та, но "на глаз" опускание с высоты 100 до высоты 0.5 идет со скоростью, близкой к максимальной скорости оси Z
и конечно перемещения по команде G0 будут идти с максимальной скоростью ( а не ограниченной "разносом" в ПИД )
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка PID
stepgen просто будет генерить шаги с частотой не выше, чем задано в stepgen.N.maxvel, какое-бы задание ему не дали.odekolon писал(а):но в моем случае, pid.n.maxoutput режет "виртуальную" скорость, которая физически не существует.
pid просто не выдаст задание более, чем указано в pid.N.maxoutput, как бы ему этого не хотелось.
pid.N.maxoutput и stepgen.N.maxvel в данном варианте - это как два последовательных краника на одной трубе.
Разве что на 25%, если в .ini вот такое не менял:odekolon писал(а):и конечно перемещения по команде G0 будут идти с максимальной скоростью ( а не ограниченной "разносом" в ПИД )
Код: Выделить всё
MAX_VELOCITY = 100.0
MAX_ACCELERATION = 100.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 125.00
STEPGEN_MAXACCEL = 125.00
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- odekolon
- Мастер
- Сообщения: 1105
- Зарегистрирован: 05 ноя 2014, 14:53
- Репутация: 360
- Настоящее имя: Борис
- Контактная информация:
Re: Настройка PID
мне кажется, в данном случае, вы не правыUAVpilot писал(а):tepgen просто будет генерить шаги с частотой не выше, чем задано в stepgen.N.maxvel, какое-бы задание ему не дали.
pid просто не выдаст задание более, чем указано в pid.N.maxoutput, как бы ему этого не хотелось.
pid.N.maxoutput и stepgen.N.maxvel в данном варианте - это как два последовательных краника на одной трубе.
рассмотрим схему еще раз во первых, я забыл нарисовать мультиплексор который подключает пид только при включенном лазере (поскольку для поднятой темы, это было не важно)
так что любые перемещения при выключенной LHC, идут мимо ПИД и соответственно могут идти на максимальной скорости.
Во вторых представим ситуацию, что PID ограничен, а фидбэк "залип" интегратор быстренько передвинет точку назначения, и голова поедет на полной скорости степгена, пока не упрется в ограничитель
В-третьих, для интегратора, в общем-то все равно, будет ли импульс на его входе, высоким, но коротким или пониже, но чуть пошире.
тем паче, что степген, сразу разогнаться не может, высокий импульс на выходе незажатого ПИД, остается на пике, пока степген не разгонится, соответсвенно точка назначения окажется дальше, чем нужно и должна будет корректироваться уже "в процессе движения" , что явно не добавляет стабильности.
Ограничитель в ПИД, при котором я получил стабильную работу ПИД, как мне кажется, как раз компенсирует время на разгон степгена от покоя до макимума.
Я так думаю...
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка PID
Так просто не будет нормально работать. А вот с stepgen.n.velocity−cmd хотя-бы пыталось работать.odekolon писал(а):во первых, я забыл нарисовать мультиплексор который подключает пид только при включенном лазере (поскольку для поднятой темы, это было не важно)
так что любые перемещения при выключенной LHC, идут мимо ПИД и соответственно могут идти на максимальной скорости.
Увы причина в непонимании работы stepgen в этом режиме: на входе stepgen.n.position−cmd всегда "абсолютная позиция". Допустим по G0 ты передвинул Z в позицию -100, далее ты активируешь "ВКЛ LHC" и от интегратора на stepgen.n.position приходит новое значение позиции, скажем +20, догадываешься что произойдёт?..
Нужно не mux2 использовать, а thc, или в крайнем случае 2хsum2.
odekolon писал(а):Во вторых
Ничего этого не случится - "following error" вырубит ЧПУ гораздо раньше...odekolon писал(а):В-третьих
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- odekolon
- Мастер
- Сообщения: 1105
- Зарегистрирован: 05 ноя 2014, 14:53
- Репутация: 360
- Настоящее имя: Борис
- Контактная информация:
Re: Настройка PID
following error на "чистом степдире", величина бессмысленная, поэтому он отключен нахрен.UAVpilot писал(а):Ничего этого не случится - "following error" вырубит ЧПУ гораздо раньше...
У меня три плазмы, по этой схеме, уже несколько лет работают
в общем-то я размышлял когда-то "не сделать ли корректной работу петли положения Z", но пришел к выводу, что абсолютно ни к чему.
В принципе, можно рассматривать станок, как двухкоординатный, с внешним блоком управления высотой.
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка PID
Зато спасает от потери шагов из-за того, что реальный (мгновенный) джиттер - величина непостоянная и у stepgen есть собственные ограничители.odekolon писал(а):following error на "чистом степдире", величина бессмысленная, поэтому он отключен нахрен.
проверяется элементарно:
Код: Выделить всё
$ cat tst.hal
loadrt trivkins
loadrt motmod servo_period_nsec=1000000 num_joints=3
addf motion-command-handler servo-thread
addf motion-controller servo-thread
start
$ halrun -I tst.hal
Note: Using POSIX realtime
halcmd: loadrt stepgen step_type=0
halcmd: addf stepgen.capture-position servo-thread
halcmd: addf stepgen.update-freq servo-thread
halcmd: addf stepgen.make-pulses servo-thread
halcmd: show pin stepgen
Component Pins:
Owner Type Dir Value Name
15 s32 OUT 0 stepgen.0.counts
15 bit OUT FALSE stepgen.0.dir
15 bit IN FALSE stepgen.0.enable
15 float IN 0 stepgen.0.position-cmd
15 float OUT 0 stepgen.0.position-fb
15 bit OUT FALSE stepgen.0.step
15 s32 OUT 418 stepgen.capture-position.time
15 s32 OUT 506 stepgen.make-pulses.time
15 s32 OUT 550 stepgen.update-freq.time
halcmd: setp stepgen.0.enable 1
halcmd: setp stepgen.0.position-cmd 1000
halcmd: show pin stepgen
Component Pins:
Owner Type Dir Value Name
15 s32 OUT 1000 stepgen.0.counts
15 bit OUT FALSE stepgen.0.dir
15 bit IN TRUE stepgen.0.enable
15 float IN 1000 stepgen.0.position-cmd
15 float OUT 999.9999 stepgen.0.position-fb
15 bit OUT FALSE stepgen.0.step
15 s32 OUT 297 stepgen.capture-position.time
15 s32 OUT 341 stepgen.make-pulses.time
15 s32 OUT 539 stepgen.update-freq.time
halcmd: setp stepgen.0.position-cmd -1000
halcmd: show pin stepgen
Component Pins:
Owner Type Dir Value Name
15 s32 OUT 12 stepgen.0.counts
15 bit OUT TRUE stepgen.0.dir
15 bit IN TRUE stepgen.0.enable
15 float IN -1000 stepgen.0.position-cmd
15 float OUT 12.49991 stepgen.0.position-fb
15 bit OUT FALSE stepgen.0.step
15 s32 OUT 286 stepgen.capture-position.time
15 s32 OUT 319 stepgen.make-pulses.time
15 s32 OUT 583 stepgen.update-freq.time
halcmd: setp stepgen.0.position-cmd -1000
halcmd: show pin stepgen
Component Pins:
Owner Type Dir Value Name
15 s32 OUT -1000 stepgen.0.counts
15 bit OUT TRUE stepgen.0.dir
15 bit IN TRUE stepgen.0.enable
15 float IN -1000 stepgen.0.position-cmd
15 float OUT -999.9999 stepgen.0.position-fb
15 bit OUT FALSE stepgen.0.step
15 s32 OUT 297 stepgen.capture-position.time
15 s32 OUT 330 stepgen.make-pulses.time
15 s32 OUT 583 stepgen.update-freq.time
halcmd:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- odekolon
- Мастер
- Сообщения: 1105
- Зарегистрирован: 05 ноя 2014, 14:53
- Репутация: 360
- Настоящее имя: Борис
- Контактная информация:
Re: Настройка PID
проверил. Есть такое дело.UAVpilot писал(а):ато спасает от потери шагов из-за того, что реальный (мгновенный) джиттер - величина непостоянная и у stepgen есть собственные ограничители.
проверяется элементарно:
поразмыслил
тут такая фигня...
"following error" у меня блочится установкой
MIN_FERROR = 300
то есть, я не рву связь полностью, просто запрещаю системе генерить ошибку в пределах хода оси Z,
так что связь stepgen.2.position-fb => axis.2.motor-pos-fb не рвется никогда
а после прекращения работы системы контроля высоты,
воосстанавливается связь axis.2.motor-pos-cmd => stepgen.2.position-cmd
в этот момент, ось z возвращается в исходную точку
мне кажется, при этом, потери шагов происходить не должно.
Во всяком случае, я этого не замечал, но хотелось бы проверить...
"Капиталистом стать можно лишь тогда, когда обогатишь свою память знанием всех тех богатств, которые выработало человечество"
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка PID
Т.е. по сути ты разрешаешь оси ошибаться в позиционировании на 300мм...odekolon писал(а):"following error" у меня блочится установкой
MIN_FERROR = 300
А зачем все эти "ухищрения", если уже давно существует компонент thc, созданный именно для подобных задач?.. Или сделать по старинке на двух sum2 - один добавляет поправку от THC в задание, а другой вычитает её из фидбэка.odekolon писал(а):то есть, я не рву связь полностью, просто запрещаю системе генерить ошибку в пределах хода оси Z,
так что связь stepgen.2.position-fb => axis.2.motor-pos-fb не рвется никогда
а после прекращения работы системы контроля высоты,
воосстанавливается связь axis.2.motor-pos-cmd => stepgen.2.position-cmd
в этот момент, ось z возвращается в исходную точку
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 937
- Зарегистрирован: 04 янв 2019, 15:19
- Репутация: 146
- Настоящее имя: Calabr
- Откуда: Киев
- Контактная информация:
Re: Настройка PID
Обычно ограничивают интегральную компоненту, а не все вместе, чтоб накопленная ошибка не мешала воспринимать реальность, и реакция на импульс оставалась быстрой, а выход должен быть нормирован в пределах рабочего диапазона привода.odekolon писал(а):Ограничитель в ПИД, при котором я получил стабильную работу ПИД, как мне кажется, как раз компенсирует время на разгон степгена от покоя до макимума.
Если выход меньше - потеря скорости, если больше, то интегратор на выходе нажрется лишним и при остановке будет перелет и колебания чтоб его компенсировать.