ПИД-регулирование. Общие вопросы.
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
У меня, Hunter и NightV ситуация с ПИД одинаковая. У всех нас поддержанием и заданной скорости, и заданного момента занимается серва.
У нас два контура ПИД должны быть для управления одной осью, а точнее три.
Два из них упакованы в сервопривод - поддержание заданной скорости (задает ЕМС) и поддержание заданного момента (задает производитель привода).
Третий контур это положение. ПИД цикл в нашем случае должен знать следующее:
1) как скоро двигатель сможет вывести стол станка или каретку на заданную скорость.
2) как скоро двигатель сможет остановить движущийся узел
Т.е. ЧПУ должна следить за координатами и с учетом этих факторов менять Uзадания привода.
Т.е. режим PID в ЕМС2 у нас будет скорость-положение. Верно?
У нас два контура ПИД должны быть для управления одной осью, а точнее три.
Два из них упакованы в сервопривод - поддержание заданной скорости (задает ЕМС) и поддержание заданного момента (задает производитель привода).
Третий контур это положение. ПИД цикл в нашем случае должен знать следующее:
1) как скоро двигатель сможет вывести стол станка или каретку на заданную скорость.
2) как скоро двигатель сможет остановить движущийся узел
Т.е. ЧПУ должна следить за координатами и с учетом этих факторов менять Uзадания привода.
Т.е. режим PID в ЕМС2 у нас будет скорость-положение. Верно?
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Кстати отключить ПИД в ЕМС2 мне сейчас кажется не такой уж и плохой идеей.FF0 = 0 ( HAL ) Коэффициент прямой передачи нулевого порядка. На это число умножается задание (pid.N.command), а результат добавляется к напряжению задания привода. Единица измерения коэффициента FF0 - Вольт на единицу измерения станка, т.е. В/Ед. Обычно FF0 используется в pid регуляторах управляющих скоростью. FF0 позволяет компенсировать силы трения и обратную ЭДС двигателя.
FF1 = 0 ( HAL ) прямой передачи первого порядка. На это число умножается изменение задания (pid.N.command) за секунду. Результат добавляется к напряжению задания привода. Единица измерения коэффициента FF1 - вольт на единицу измерения станка за секунду, т.е. В/(Ед*с). При управлении положением то же, что и FF0 для скорости, при управлении скоростью позволяет компенсировать силы инерции.
Что-то мне говорит. что всё значительно проще. Может быть нам настраивать нужно не P, не I и не D коэффициенты, а
FF0 и FF1, и установить P=I=D=0?
За координатами ЕМС в любом случае следит, зачем возлагать работу по поддержанию скорости и момента на комп, пусть этим занимается сервопривод. Он в конце концов сделан для этого.
Теория подтверждается http://cnc-club.ru/forum/viewtopic.php? ... =40#p13851
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Мне кажется, что у NightV P I D не равны 0. Да, FF1 помогает на остановках, чтобы компенсировать инерцию но и остальные параметры обязательны.
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Не обязательны. Я посмотрел исходник PID. Установив P, I, D в нули мы оставим только коэффициенты, описывающие механику станка, а все моменты и скорости будет разруливать сервопривод.
У NightV P I D не нули. но он без них и не пробовал.
У NightV P I D не нули. но он без них и не пробовал.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Хотя да, если мы в EMC2 управляем скоростью, то можно сделать FF0 = 1 и тогда как будто нет PID, чтобы компенсировать инерцию можно добавить FF1, но вообще все это может сделать сама серва. Т.е. PID вообще не нужен, можно на серву выдать задание по скорости, получить с нее feedback и на этом остановиться. Тогда никакого PID не надо.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Ну через энкодер, или что там у нее есть?
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
у приводов тахогенераторы.
На кооржинатах подач еще стоят датчики по положению.Просто получается нестыковочка.
Если мы даем сигнал на скорость, то и фидбэк должна быть скоростью, если только ЕМС сама зрасчитает её из дельты положения
На кооржинатах подач еще стоят датчики по положению.Просто получается нестыковочка.
Если мы даем сигнал на скорость, то и фидбэк должна быть скоростью, если только ЕМС сама зрасчитает её из дельты положения
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
А это не важно, внутри emc2 можно преобразовать скорость в положение и обратно. Но лучше, чтобы с сервы в качетсве обратной связи шло положение, а не скорость, чтобы накопленная ошибка не росла.
Фидбэк нужен для планировщика траекторий и слежения за траекторией.
Фидбэк нужен для планировщика траекторий и слежения за траекторией.
- NightV
- Почётный участник

- Сообщения: 6610
- Зарегистрирован: 30 дек 2011, 09:14
- Репутация: 2279
- Настоящее имя: Владимир Айрапетян
- Откуда: Israel
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
чет у меня при ПИД по нулям полная фигня получилась 
от FF1 стало зависеть "сколько" переместиться
тоесть инпут_скэйл ему стал до лампочки кажись
да и при значении FF1 0.1 рванул с места как подорваный см на 10-15 хотя я сказал 10мм 
от FF1 стало зависеть "сколько" переместиться
Всё просто! если знаешь КАК!
- NightV
- Почётный участник

- Сообщения: 6610
- Зарегистрирован: 30 дек 2011, 09:14
- Репутация: 2279
- Настоящее имя: Владимир Айрапетян
- Откуда: Israel
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
кстате и ferror стал постоянным... почти не реагирует на перемещения... зато со сначением -53.ххх 
Всё просто! если знаешь КАК!
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Короче вполне реализуемая задача.
Так, у меня мелкий вопрос. Под сервоприводом мы понимаем привод, двигатель с тахогенератором и энкодер?
Так, у меня мелкий вопрос. Под сервоприводом мы понимаем привод, двигатель с тахогенератором и энкодер?
-
Impartial
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Нет, там он не нужен. Если сервопривод содержит регулятор, то ЕМС нужно только сообщить о ошибке привода (уход с заданной точки регулирования)Nick писал(а):Фидбэк нужен для планировщика траекторий и слежения за траекторией.
В этом случае происходит остановка ЕМС с ошибкой HardFault. И больше ничего. Привод обязан обработать входной параметр скорости. Если он этого не делает по каким либо причинам это фатальная ошибка.
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Код: Выделить всё
if (enable != 0) {
/* calculate the output value */
tmp1 =
*(pid->bias) + *(pid->pgain) * tmp1 + *(pid->igain) * *(pid->error_i) +
*(pid->dgain) * *(pid->error_d);
tmp1 += command * *(pid->ff0gain) + *(pid->cmd_d) * *(pid->ff1gain) +
*(pid->cmd_dd) * *(pid->ff2gain);
/* apply output limits */
if (*(pid->maxoutput) != 0.0) {
if (tmp1 > *(pid->maxoutput)) {
tmp1 = *(pid->maxoutput);
pid->limit_state = 1.0;
} else if (tmp1 < -*(pid->maxoutput)) {
tmp1 = -*(pid->maxoutput);
pid->limit_state = -1.0;
} else {
pid->limit_state = 0.0;
}
}
} else {
/* not enabled, force output to zero */
tmp1 = 0.0;
pid->limit_state = 0.0;
}- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
tmp1 += command * *(pid->ff0gain) + *(pid->cmd_d) * *(pid->ff1gain) + *(pid->cmd_dd) * *(pid->ff2gain);
Надо бы разобрать их влияние на физику перемещений
Надо бы разобрать их влияние на физику перемещений
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
NightV, поэкспериментируй, вот что говорит wiki http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?PiD
Только значения мелкие поставь, 0,01 или даже 0,001
Пином pid.N.output является Uзадания на привод. Привод обеспечивает и заданную скорость и заданный момент используя свою обратную связь, которую в общем случае мы использовать не можем. Поэтому мы используем энкодера. Вообще похоже, потому что
По-русски: FF0 позволит вам запрограммировать коэффициент Скорость/напряжение. Тогда прапорциональный, интегральный и дифференциальный компоненты будут мало влиять на него так, что усиление станет меньше, а стабильность регулирования выше.FF0 would let you pre-program the speed/voltage factor in, then the P, I and D terms be small modifiers to that, so the gains can be lower, and the loop stability higher.
Только значения мелкие поставь, 0,01 или даже 0,001
Пином pid.N.output является Uзадания на привод. Привод обеспечивает и заданную скорость и заданный момент используя свою обратную связь, которую в общем случае мы использовать не можем. Поэтому мы используем энкодера. Вообще похоже, потому что
Код: Выделить всё
net xpos-cmd axis.0.motor-pos-cmd => pid.x.command
net xpos-fb <= hm2_5i20.0.encoder.01.position
net xpos-fb => pid.x.feedback
net xpos-fb => axis.0.motor-pos-fb
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
кстати, тот кто писал мануал по серве накосячил с размерностями.
FF0 - В/ед.ст. - правильно, вольт за единцу станка. The units on the FF0 gain are volts per machine unit.
FF1 = В/(ед.ст*сек) - неправильно, должно быть - В/(ед.ст/сек). поскольку там написано Вольт за единицу станка за секунду . The units on the FF1 gain are volts per machine unit per second.
FF2 = В/(ед.ст*сек^2) - неправильно, должно быть - В/(ед.ст/сек^2). поскольку там написано Вольт за единицу станка за секунду за секунду. The units on the FF2 gain are volts per machine unit per second per second.
И, вообще говоря, все же ПИДом с сервоприводом со встроенным ПИДом регулируем мы скорость, а не положение. Поскольку привод выполняет функцию Скорость от напряжения задания.
FF0 - В/ед.ст. - правильно, вольт за единцу станка. The units on the FF0 gain are volts per machine unit.
FF1 = В/(ед.ст*сек) - неправильно, должно быть - В/(ед.ст/сек). поскольку там написано Вольт за единицу станка за секунду . The units on the FF1 gain are volts per machine unit per second.
FF2 = В/(ед.ст*сек^2) - неправильно, должно быть - В/(ед.ст/сек^2). поскольку там написано Вольт за единицу станка за секунду за секунду. The units on the FF2 gain are volts per machine unit per second per second.
И, вообще говоря, все же ПИДом с сервоприводом со встроенным ПИДом регулируем мы скорость, а не положение. Поскольку привод выполняет функцию Скорость от напряжения задания.
