Разберем пример.
Пусть станку необходимо переместить ось на 0.5 метра со скоростью 0.1 м/с.
Для определенности считать будем в системе СИ как в школе, единцу станка возьмем метр.
Руководствуемся схемой ПИД из мануала (стр.82).
Рассмотрим схему в упрощенном варианте, т.е. уберем всякие ограничения типа deadband, max-error, max-cmd и max-output.
Входные сигналы - command, feedback и enable, но он нас особо не интересует.
Выходные - error и output.
Вот я никак не могу связать эту схему с переменной скоростью.
Т.е. каким образом ЕМС заставит двигаться все эти полметра с постоянной не максимальной скоростью используя только комманд и фидбэк?
Я вижу только один способ - толчковый.
У кого настроен уже более менее ПИД, посмотрите, куда завязан пин pid.<loopnum>.error? Просто у меня нигде не используется.
Итак по схеме. Предположим, что command есть положение в метрах.
Важная формула:
Код: Выделить всё
output = bias + error * Pgain + errorI * Igain + errorD * Dgain + command * FF0 + commandD * FF1 + commandDD * FF2
, где
bias - смещение
Pgain - коэффициент P
Igain - коэффициент I
Dgain - коэффициент D
FF0 - коэффициент FF0
FF1 - коэффициент FF1
FF2 - коэффициент FF2
command - задание
commandD - производная задания
commandDD - вторая производная задания
Не могу понять, как регулируется скорость оси??
Мне думается, что используя в качестве command положение мы заставляем конфликтовать ПИД ЧПУ и ПИД привода.
За то понятно, что для правильной работы станка необходимо, чтобы command была скоростью, и чтобы EMC расчитывал скорость "наперед". Тогда ПИД ЧПУ (часть с P I D коэффициентами) будет выполнять дублирующую функцию и мало влиять на движение, зато коэффициенты FFn окажутся как нельзя кстати.
ПИД привода обеспечивает и заданную скорость и заданный момент без вмешательства извне. Поскольку на двигателе постоянный момент, то ускорение тоже постоянная величина.
У всех есть такое
Код: Выделить всё
net xpos-cmd axis.0.motor-pos-cmd => pid.x.command
?
Это значит что комманд это расстояние? Судя по схеме ПИД должен будет передвинуть согласно коэффициентам ось с максимально возможной скоростью.
Предположим, что комманд мы как-то сделали скоростью, например расчитав его из подачи.
Ник, можно это сделать?
Тогда коэффициеты P, I, D своего смыслового значения не теряют (не теряют?), а вот FF0, FF1 и FF2 получаются несколько иными, поскольку
FF0 есть множитель скорости, своего рода масштаб
FF1 - величина, характеризующая ускорения
FF2 - величина, характризующая ускорение ускорения.
Как и писалось в
http://wiki.linuxcnc.org/cgi-bin/wiki.pl?PiD
Nightv, ты говорил, что когда ты поставил P=I=D=0, то вместо нескольких сантиметров у тебя станок проехал на значительно большее расстояние? Так и должно быть. Какое перемещение ты при этом выставил и какое значение FFn было? Станок проехал и остановился? получилось что output = command * FF0 + commandD * FF1 + commandDD * FF2, т.е. выходной сигнал (скорость) была прапорционален перемещению.
Я хочу заставить ПИД ЕМС регулировать скорость, а не перемещение.