Этот пример использует 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] рад/с в несколько раз. Измените коэффициент усиления ПИДа для значений.
% 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
Сравните отклики с командой step 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 ПИД-регуляторы способно быстро подавление помех без значительного увеличения перерегулирования в отслеживании уставки.
Фигура 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
сравнение настроенных коэффициентов усиления в 1-DOF и 2-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.