ПИД, настраивающийся для отслеживания заданного значения по сравнению с подавлением помех

Этот пример использует systune исследовать компромиссы между отслеживанием заданного значения и подавлением помех при настройке ПИД-регуляторов.

Настраивающие компромиссы ПИДа

При настройке ПИД-регуляторов 1-DOF часто невозможно достигнуть хорошего отслеживания и быстрого подавления помех одновременно. Принятие пропускной способности управления фиксируется, более быстрое подавление помех требует большего количества усиления в пропускной способности, которая может только быть достигнута путем увеличения наклона около частоты среза. Поскольку больший наклон означает меньший запас по фазе, это обычно прибывает за счет большего количества перерегулирования в ответ на изменения заданного значения.

Рисунок 1: компромисс в настройке ПИДа 1-DOF.

Этот пример использует systune исследовать этот компромисс и найти правильный компромисс для вашего приложения. См. также pidtool для более прямого способа сделать такой компромисс (см. "Особое внимание Проекта" под Параметрами контроллера).

Настройка Setup

Рассмотрите цикл ПИДа рисунка 2 с воздействием загрузки во входе объекта.

Рисунок 2: цикл управления ПИДа.

Для этого примера мы используем модель объекта управления

$$ G(s) = { 10 (s+5) \over (s+1) (s+2) (s+10) } . $$

Целевая пропускная способность управления составляет 10 рад/с. Создайте настраиваемый ПИД-регулятор и зафиксируйте его производную постоянную времени фильтра к$T_f=0.01$ (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';

Усиление ответа разомкнутого цикла$L = GC$ является ключевым показателем поведения обратной связи. Коэффициент усиления разомкнутого контура должен быть высоким (больше, чем один) в пропускной способности управления, чтобы гарантировать хорошее подавление помех и должен быть низким (меньше чем один) внешняя сторона пропускная способность управления, чтобы быть нечувствительным к измерению шумовая и несмоделированная динамика объекта. Соответственно, используйте три требования, чтобы выразить цели управления:

  • "Отслеживание" требования, чтобы задать время отклика приблизительно в 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];

Настройка ПИД-регулятора 1-DOF

Используйте systune настроить коэффициенты ПИД, чтобы удовлетворить эти требования. Обработайте пропускную способность и цели подавления помех как трудные ограничения и оптимизируйте отслеживание, удовлетворяющее этим ограничениям.

T1 = systune(T0,R1,[R2 R3]);
Final: Soft = 1.12, Hard = 0.99985, Iterations = 140

Проверьте, что все три требования почти удовлетворяются. Синие кривые являются достигнутыми значениями, и желтые закрашенные фигуры подсвечивают области, где требования нарушены.

figure('Position',[100,100,560,580])
viewGoal([R1 R2 R3],T1)

Отслеживание по сравнению с отклонением

Чтобы получить сведения о компромиссе между отслеживанием и подавлением помех, увеличьте минимальное усиление цикла в диапазоне частот [0 0.1] rad/s фактором$\alpha$. Повторно настройте коэффициенты ПИД для значений$\alpha=2,4$.

% 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.99982, Iterations = 140
% 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-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 для самого большого усиления цикла попробовал ранее ($\alpha = 4$).

% 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.87879, Iterations = 73

Сравните отслеживание заданного значения и свойства подавления помех 1-DOF и проектов 2-DOF для$\alpha = 4$.

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 = 6.07, Ki = 20.4, Kd = 0.855, Tf = 0.01, b = 0.708, c = 1.27
 
Name: C
Continuous-time 2-DOF PIDF controller in parallel form.

Смотрите также

Похожие темы