Страница 3 из 11

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

Добавлено: 18 янв 2012, 19:41
Lexxa
У меня, Hunter и NightV ситуация с ПИД одинаковая. У всех нас поддержанием и заданной скорости, и заданного момента занимается серва.
У нас два контура ПИД должны быть для управления одной осью, а точнее три.
Два из них упакованы в сервопривод - поддержание заданной скорости (задает ЕМС) и поддержание заданного момента (задает производитель привода).
Третий контур это положение. ПИД цикл в нашем случае должен знать следующее:
1) как скоро двигатель сможет вывести стол станка или каретку на заданную скорость.
2) как скоро двигатель сможет остановить движущийся узел
Т.е. ЧПУ должна следить за координатами и с учетом этих факторов менять Uзадания привода.
Т.е. режим PID в ЕМС2 у нас будет скорость-положение. Верно?

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

Добавлено: 18 янв 2012, 20:06
Lexxa
FF0 = 0 ( HAL ) Коэффициент прямой передачи нулевого порядка. На это число умножается задание (pid.N.command), а результат добавляется к напряжению задания привода. Единица измерения коэффициента FF0 - Вольт на единицу измерения станка, т.е. В/Ед. Обычно FF0 используется в pid регуляторах управляющих скоростью. FF0 позволяет компенсировать силы трения и обратную ЭДС двигателя.

FF1 = 0 ( HAL ) прямой передачи первого порядка. На это число умножается изменение задания (pid.N.command) за секунду. Результат добавляется к напряжению задания привода. Единица измерения коэффициента FF1 - вольт на единицу измерения станка за секунду, т.е. В/(Ед*с). При управлении положением то же, что и FF0 для скорости, при управлении скоростью позволяет компенсировать силы инерции.
Кстати отключить ПИД в ЕМС2 мне сейчас кажется не такой уж и плохой идеей.
Что-то мне говорит. что всё значительно проще. Может быть нам настраивать нужно не P, не I и не D коэффициенты, а
FF0 и FF1, и установить P=I=D=0?
За координатами ЕМС в любом случае следит, зачем возлагать работу по поддержанию скорости и момента на комп, пусть этим занимается сервопривод. Он в конце концов сделан для этого.

Теория подтверждается http://cnc-club.ru/forum/viewtopic.php? ... =40#p13851

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

Добавлено: 18 янв 2012, 20:53
Nick
Мне кажется, что у NightV P I D не равны 0. Да, FF1 помогает на остановках, чтобы компенсировать инерцию но и остальные параметры обязательны.

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

Добавлено: 18 янв 2012, 21:14
Lexxa
Не обязательны. Я посмотрел исходник PID. Установив P, I, D в нули мы оставим только коэффициенты, описывающие механику станка, а все моменты и скорости будет разруливать сервопривод.
У NightV P I D не нули. но он без них и не пробовал.

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

Добавлено: 18 янв 2012, 21:21
Nick
Хотя да, если мы в EMC2 управляем скоростью, то можно сделать FF0 = 1 и тогда как будто нет PID, чтобы компенсировать инерцию можно добавить FF1, но вообще все это может сделать сама серва. Т.е. PID вообще не нужен, можно на серву выдать задание по скорости, получить с нее feedback и на этом остановиться. Тогда никакого PID не надо.

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

Добавлено: 18 янв 2012, 21:27
Lexxa
feedback где взять с неё?

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

Добавлено: 18 янв 2012, 21:28
Nick
Ну через энкодер, или что там у нее есть?

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

Добавлено: 18 янв 2012, 21:41
Lexxa
у приводов тахогенераторы.
На кооржинатах подач еще стоят датчики по положению.Просто получается нестыковочка.
Если мы даем сигнал на скорость, то и фидбэк должна быть скоростью, если только ЕМС сама зрасчитает её из дельты положения

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

Добавлено: 18 янв 2012, 21:56
Nick
А это не важно, внутри emc2 можно преобразовать скорость в положение и обратно. Но лучше, чтобы с сервы в качетсве обратной связи шло положение, а не скорость, чтобы накопленная ошибка не росла.
Фидбэк нужен для планировщика траекторий и слежения за траекторией.

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

Добавлено: 18 янв 2012, 22:05
NightV
чет у меня при ПИД по нулям полная фигня получилась :)
от FF1 стало зависеть "сколько" переместиться :shock: тоесть инпут_скэйл ему стал до лампочки кажись :D да и при значении FF1 0.1 рванул с места как подорваный см на 10-15 хотя я сказал 10мм :hehehe:

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

Добавлено: 18 янв 2012, 22:07
NightV
кстате и ferror стал постоянным... почти не реагирует на перемещения... зато со сначением -53.ххх :hehehe:

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

Добавлено: 18 янв 2012, 22:07
Lexxa
Короче вполне реализуемая задача.
Так, у меня мелкий вопрос. Под сервоприводом мы понимаем привод, двигатель с тахогенератором и энкодер?

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

Добавлено: 18 янв 2012, 22:08
Lexxa
интересно
а FF0 тоже нулем оставил?

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

Добавлено: 18 янв 2012, 22:10
NightV
короче нужно эксперементировать

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

Добавлено: 18 янв 2012, 22:10
Lexxa
ща формулу скину из исходника, пару минут.

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

Добавлено: 18 янв 2012, 22:22
Impartial
Nick писал(а):Фидбэк нужен для планировщика траекторий и слежения за траекторией.
Нет, там он не нужен. Если сервопривод содержит регулятор, то ЕМС нужно только сообщить о ошибке привода (уход с заданной точки регулирования)
В этом случае происходит остановка ЕМС с ошибкой HardFault. И больше ничего. Привод обязан обработать входной параметр скорости. Если он этого не делает по каким либо причинам это фатальная ошибка.

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

Добавлено: 18 янв 2012, 22:29
Lexxa

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

    
   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;
    }

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

Добавлено: 18 янв 2012, 22:32
Lexxa
tmp1 += command * *(pid->ff0gain) + *(pid->cmd_d) * *(pid->ff1gain) + *(pid->cmd_dd) * *(pid->ff2gain);
Надо бы разобрать их влияние на физику перемещений

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

Добавлено: 19 янв 2012, 01:05
Lexxa
NightV, поэкспериментируй, вот что говорит wiki http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?PiD
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.
По-русски: FF0 позволит вам запрограммировать коэффициент Скорость/напряжение. Тогда прапорциональный, интегральный и дифференциальный компоненты будут мало влиять на него так, что усиление станет меньше, а стабильность регулирования выше.
Только значения мелкие поставь, 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

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

Добавлено: 31 янв 2012, 21:17
Lexxa
кстати, тот кто писал мануал по серве накосячил с размерностями.
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.
И, вообще говоря, все же ПИДом с сервоприводом со встроенным ПИДом регулируем мы скорость, а не положение. Поскольку привод выполняет функцию Скорость от напряжения задания.