exponenta event banner

Настройка многолучевых систем управления

В этом примере показано, как совместно настраивать внутренний и внешний контуры каскадной архитектуры с помощью systune команда.

Каскадные петли PID

Каскадное управление часто используется для достижения плавного отслеживания с быстрым отбраковыванием возмущений. Простейшая каскадная архитектура включает в себя два контура управления (внутренний и внешний), как показано на блок-схеме ниже. Внутренний контур обычно быстрее, чем внешний контур, чтобы отбраковать возмущения, прежде чем они распространятся на внешний контур. (Simulink ® не поддерживается в MATLAB ® Online.)

open_system('rct_cascade')

Модели завода и требования к пропускной способности

В этом примере установка внутреннего контура G2 является

$$ G_2(s) = \frac{3}{s+2} $$

и установка с внешним контуром G1 является

$$ G_1(s) = \frac{10}{(s+1)^3} $$

G2 = zpk([],-2,3);
G1 = zpk([],[-1 -1 -1],10);

Мы используем PI-контроллер во внутреннем контуре и PID-контроллер во внешнем контуре. Внешний контур должен иметь ширину полосы пропускания не менее 0,2 рад/с, а ширина полосы пропускания внутреннего контура должна быть в десять раз больше для адекватного отклонения возмущений.

Настройка контроллеров PID с помощью SYSTUNE

При моделировании системы управления в Simulink используйте slTuner интерфейс в Design™ Simulink Control для настройки задачи настройки. Перечислите настраиваемые блоки, отметьте сигналы r и d2 в качестве интересующих входов и маркировать сигналы y1 и y2 в качестве местоположения для измерения перемещений с разомкнутым контуром и указания форм контуров.

ST0 = slTuner('rct_cascade',{'C1','C2'});
addPoint(ST0,{'r','d2','y1','y2'})

Можно запросить текущие значения C1 и C2 в модели Simulink с использованием showTunable. Система управления нестабильна для этих исходных значений, что подтверждается моделированием модели Simulink.

showTunable(ST0)
Block 1: rct_cascade/C1 =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 0.1, Ki = 0.1
 
Name: C1
Continuous-time PI controller in parallel form.

-----------------------------------

Block 2: rct_cascade/C2 =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 0.1, Ki = 0.1
 
Name: C2
Continuous-time PI controller in parallel form.

Далее используйте требования «LoopShape», чтобы указать требуемые полосы пропускания для внутреннего и внешнего контуров. Используйте$0.2/s$ в качестве целевой формы контура для внешнего контура для обеспечения интегрального действия с частотой пересечения коэффициента усиления 0,2 рад/с:

% Outer loop bandwidth = 0.2
s = tf('s');
Req1 = TuningGoal.LoopShape('y1',0.2/s); % loop transfer measured at y1
Req1.Name = 'Outer Loop';

Используйте$2/s$ для внутреннего цикла, чтобы сделать его в десять раз быстрее (с большей пропускной способностью), чем внешний цикл. Чтобы ограничить перенос внутреннего контура, обязательно откройте внешний контур, указав y1 как отверстие контура:

% Inner loop bandwidth = 2
Req2 = TuningGoal.LoopShape('y2',2/s); % loop transfer measured at y2
Req2.Openings = 'y1';                  % with outer loop opened at y1
Req2.Name = 'Inner Loop';

Теперь можно настроить прирост PID в C1 и C2 с systune:

ST = systune(ST0,[Req1,Req2]);
Final: Soft = 0.86, Hard = -Inf, Iterations = 66

Использовать showTunable для просмотра настроенного усиления PID.

showTunable(ST)
Block 1: rct_cascade/C1 =
 
             1            s    
  Kp + Ki * --- + Kd * --------
             s          Tf*s+1 

  with Kp = 0.0521, Ki = 0.0186, Kd = 0.0472, Tf = 0.00728
 
Name: C1
Continuous-time PIDF controller in parallel form.

-----------------------------------

Block 2: rct_cascade/C2 =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 0.719, Ki = 1.23
 
Name: C2
Continuous-time PI controller in parallel form.

Проверка проекта

Конечное значение меньше 1, что означает, что systune успешно соответствует обоим требованиям к форме цикла. Подтвердите это, осмотрев настроенную систему управления ST с viewGoal

viewGoal([Req1,Req2],ST)

Следует отметить, что внутренняя и внешняя петли имеют желаемые частоты пересечения усиления. Для дальнейшей проверки конструкции постройте график настроенных ответов на команду шага r и нарушение шага d2:

% Response to a step command
H = getIOTransfer(ST,'r','y1');
clf, step(H,30), title('Step command')

% Response to a step disturbance
H = getIOTransfer(ST,'d2','y1');
step(H,30), title('Step disturbance')

Как только результаты линейного анализа будут удовлетворены, используйте writeBlockValue для записи настроенных значений PID обратно в блоки Simulink. Затем можно провести более тщательную проверку в Simulink.

writeBlockValue(ST)

Эквивалентный поток операций в MATLAB

Если у вас нет модели Simulink системы управления, можно выполнить те же действия, используя модели LTI блоков проектирования установки и Control Design для моделирования перестраиваемых элементов.

Рис. 1: Каскадная архитектура

Сначала создайте параметрические модели настраиваемых контроллеров PI и PID.

C1 = tunablePID('C1','pid');
C2 = tunablePID('C2','pi');

Затем используйте блоки «точки анализа», чтобы отметить места открытия контура y1 и y2.

LS1 = AnalysisPoint('y1');
LS2 = AnalysisPoint('y2');

Наконец, создайте модель с замкнутым контуром T0 общей системы управления путем замыкания каждого контура обратной связи. Результатом является обобщенная модель состояния-пространства в зависимости от настраиваемых элементов C1 и C2.

InnerCL = feedback(LS2*G2*C2,1);
T0 = feedback(G1*InnerCL*C1,LS1);
T0.InputName = 'r';
T0.OutputName = 'y1';

Теперь можно настроить прирост PID в C1 и C2 с systune.

T = systune(T0,[Req1,Req2]);
Final: Soft = 0.859, Hard = -Inf, Iterations = 121

Как и прежде, используйте getIOTransfer для вычисления и построения графика настроенных ответов на пошаговую команду r и пошаговое возмущение, вводимые в местоположении y2:

% Response to a step command
H = getIOTransfer(T,'r','y1');
clf, step(H,30), title('Step command')

% Response to a step disturbance
H = getIOTransfer(T,'y2','y1');
step(H,30), title('Step disturbance')

Для проверки требований к полосе пропускания можно также построить график усиления с разомкнутым контуром для внутреннего и внешнего контуров. Обратите внимание на знак -1 для вычисления передачи с разомкнутым контуром с отрицательной обратной связью:

L1 = getLoopTransfer(T,'y1',-1);       % crossover should be at .2
L2 = getLoopTransfer(T,'y2',-1,'y1');  % crossover should be at 2
bodemag(L2,L1,{1e-2,1e2}), grid
legend('Inner Loop','Outer Loop')

См. также

(Simulink Control Design) | (Проект управления Simulink)

Связанные темы