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

Рисунок 1: компромисс в настройке PID с 1 финансовым департаментом.
В этом примере используется systune изучить этот компромисс и найти правильный компромисс для вашего приложения. См. также pidtool более прямой способ достижения такого компромисса (см. раздел «Фокус проектирования» в разделе «Варианты контроллера»).
Рассмотрим контур МТС на рисунке 2 с нарушением нагрузки на входе в установку.

Рис. 2. Контур управления PID.
В этом примере используется модель завода.

Целевая полоса пропускания управления составляет 10 рад/с. Создайте настраиваемый PID-контроллер и зафиксируйте его постоянную времени производного фильтра в
(в 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 для настройки усиления PID в соответствии с этими требованиями. Рассматривайте цели отклонения полосы пропускания и возмущений как жесткие ограничения и оптимизируйте отслеживание с учетом этих ограничений.
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] рад/с на коэффициент.
Повторно настройте коэффициенты усиления PID для значений.
% 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 архитектуру. Контроллер PID 2-DOF способен быстро устранять помехи без значительного увеличения превышения уставки.

Рис. 3: 2-DOF Контур управления PID.
Используйте tunablePID2 объект параметризовать диспетчера PID с 2 финансовыми департаментами и построить настраиваемую модель 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 финансовыми департаментами для самой большой выгоды петли попробовал ранее
().
% 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.