Этот пример использует systune
исследовать компромиссы между отслеживанием заданного значения и подавлением помех при настройке ПИД-регуляторов.
При настройке ПИД-регуляторов 1-DOF часто невозможно достигнуть хорошего отслеживания и быстрого подавления помех одновременно. Принятие пропускной способности управления фиксируется, более быстрое подавление помех требует большего количества усиления в пропускной способности, которая может только быть достигнута путем увеличения наклона около частоты среза. Поскольку больший наклон означает меньший запас по фазе, это обычно прибывает за счет большего количества перерегулирования в ответ на изменения заданного значения.
Рисунок 1: компромисс в настройке ПИДа 1-DOF.
Этот пример использует systune
исследовать этот компромисс и найти правильный компромисс для вашего приложения. См. также pidtool
для более прямого способа сделать такой компромисс (см. "Особое внимание Проекта" под Параметрами контроллера).
Рассмотрите цикл ПИДа рисунка 2 с воздействием загрузки во входе объекта.
Рисунок 2: цикл управления ПИДа.
Для этого примера мы используем модель объекта управления
Целевая пропускная способность управления составляет 10 рад/с. Создайте настраиваемый ПИД-регулятор и зафиксируйте его производную постоянную времени фильтра к (10 раз пропускная способность) так, чтобы было только три усиления, чтобы настроиться (пропорциональный, интеграл и производные усиления).
G = zpk(-5,[-1 -2 -10],10); C = tunablePID('C','pid'); C.Tf.Value = 0.01; C.Tf.Free = false; % fix Tf=0.01
Создайте настраиваемую модель T0
из передачи с обратной связью от r
к y
. Используйте "аналитический блок" точки, чтобы отметить местоположение u
где воздействие входит.
LS = AnalysisPoint('u'); T0 = feedback(G*LS*C,1); T0.u = 'r'; T0.y = 'y';
Усиление ответа разомкнутого контура является ключевым показателем поведения обратной связи. Коэффициент усиления разомкнутого контура должен быть высоким (больше, чем один) в пропускной способности управления, чтобы гарантировать хорошее подавление помех и должен быть низким (меньше чем один) внешняя сторона пропускная способность управления, чтобы быть нечувствительным к измерению шумовая и несмоделированная динамика объекта. Соответственно, используйте три требования, чтобы описать цели управления:
"Отслеживание" требования, чтобы задать время отклика приблизительно в 0,2 секунды к ступенчатым изменениям в r
Требование "MaxLoopGain", чтобы обеспечить спад-20 дБ/десятилетие мимо частоты среза 10 рад/с
Требование "MinLoopGain", чтобы настроить интегральную составляющую на частотах ниже 0,1 рад/с.
s = tf('s'); wc = 10; % target crossover frequency % Tracking R1 = TuningGoal.Tracking('r','y',2/wc); % Bandwidth and roll-off R2 = TuningGoal.MaxLoopGain('u',wc/s); % Disturbance rejection R3 = TuningGoal.MinLoopGain('u',wc/s); R3.Focus = [0 0.1];
Используйте systune
настроить коэффициенты ПИД, чтобы удовлетворить эти требования. Обработайте пропускную способность и цели подавления помех как трудные ограничения и оптимизируйте отслеживание, удовлетворяющее этим ограничениям.
T1 = systune(T0,R1,[R2 R3]);
Final: Soft = 1.12, Hard = 0.9998, Iterations = 158
Проверьте, что все три требования почти удовлетворяются. Синие кривые являются достигнутыми значениями, и желтые закрашенные фигуры подсвечивают области, где требования нарушены.
figure('Position',[100,100,560,580])
viewGoal([R1 R2 R3],T1)
Чтобы получить сведения о компромиссе между отслеживанием и подавлением помех, увеличьте минимальное усиление цикла в диапазоне частот [0 0.1] rad/s фактором. Повторно настройте коэффициенты ПИД для значений.
% Increase loop gain by factor 2
alpha = 2;
R3.MinGain = alpha*wc/s;
T2 = systune(T0,R1,[R2 R3]);
Final: Soft = 1.17, Hard = 0.99954, Iterations = 115
% Increase loop gain by factor 4
alpha = 4;
R3.MinGain = alpha*wc/s;
T3 = systune(T0,R1,[R2 R3]);
Final: Soft = 1.25, Hard = 0.99994, Iterations = 166
Сравните ответы на команду шага r
и к воздействию шага d
ввод во входе u
объекта.
figure, step(T1,T2,T3,3) title('Setpoint tracking') legend('\alpha = 1','\alpha = 2','\alpha = 4')
% Compute closed-loop transfer from u to y D1 = getIOTransfer(T1,'u','y'); D2 = getIOTransfer(T2,'u','y'); D3 = getIOTransfer(T3,'u','y'); step(D1,D2,D3,10) title('Disturbance rejection') legend('\alpha = 1','\alpha = 2','\alpha = 4')
Отметьте, как подавление помех улучшается как alpha
увеличения, но за счет увеличенного перерегулирования в отслеживании заданного значения. Постройте ответы разомкнутого контура для трех проектов и отметьте, как наклон перед перекрестным соединением (0dB) увеличивается с alpha
.
L1 = getLoopTransfer(T1,'u'); L2 = getLoopTransfer(T2,'u'); L3 = getLoopTransfer(T3,'u'); bodemag(L1,L2,L3,{1e-2,1e2}), grid title('Open-loop response') legend('\alpha = 1','\alpha = 2','\alpha = 4')
То, какой проект наиболее подходит, зависит от основной цели обратной связи, которую вы настраиваете.
Если вы не можете поставить под угрозу отслеживание, чтобы улучшить подавление помех, рассмотрите использование архитектуры 2-DOF вместо этого. ПИД-регулятор с 2 степенями свободы способен к быстрому подавлению помех без значительного увеличения перерегулирования в отслеживании заданного значения.
Рисунок 3: цикл управления ПИДа 2-DOF.
Используйте tunablePID2
объект параметрировать ПИД-регулятор 2-DOF и создать настраиваемую модель T0
из системы с обратной связью в рисунке 3.
C = tunablePID2('C','pid'); C.Tf.Value = 0.01; C.Tf.Free = false; % fix Tf=0.01 T0 = feedback(G*LS*C,1,2,1,+1); T0 = T0(:,1); T0.u = 'r'; T0.y = 'y';
Затем настройтесь, ПИ-контроллер 2-DOF для самого большого усиления цикла попробовал ранее ().
% Minimum loop gain inside bandwidth (for disturbance rejection) alpha = 4; R3.MinGain = alpha*wc/s; % Tune 2-DOF PI controller T4 = systune(T0,R1,[R2 R3]);
Final: Soft = 1.09, Hard = 0.8214, Iterations = 77
Сравните отслеживание заданного значения и свойства подавления помех 1-DOF и проектов 2-DOF для.
clf, step(T3,'b',T4,'g--',4) title('Setpoint tracking') legend('1-DOF','2-DOF')
D4 = getIOTransfer(T4,'u','y'); step(D3,'b',D4,'g--',4) title('Disturbance rejection') legend('1-DOF','2-DOF')
Ответы на воздействие шага подобны, но контроллер 2-DOF устраняет перерегулирование в ответ на изменение заданного значения. Можно использовать showTunable
сравнить настроенные усиления в контроллерах 2-DOF и 1-DOF.
showTunable(T3) % 1-DOF PI
C = 1 s Kp + Ki * --- + Kd * -------- s Tf*s+1 with Kp = 9.51, Ki = 14.9, Kd = 0.89, Tf = 0.01 Name: C Continuous-time PIDF controller in parallel form.
showTunable(T4) % 2-DOF PI
C = 1 s u = Kp (b*r-y) + Ki --- (r-y) + Kd -------- (c*r-y) s Tf*s+1 with Kp = 5.46, Ki = 21.2, Kd = 0.806, Tf = 0.01, b = 0.651, c = 1.37 Name: C Continuous-time 2-DOF PIDF controller in parallel form.