Синтез H-бесконечности фиксированной структуры с hinfstruct

Этот пример использует hinfstruct команда, чтобы настроить контроллер с фиксированной структурой, удовлетворяющий H ограничения.

Введение

The hinfstruct команда расширяет классический H синтез (см. hinfsyn) к системам управления с фиксированной структурой. Эта команда предназначена для пользователей, уже комфортных с hinfsyn рабочий процесс. Если вы незнакомы с H синтез или найти дополненные объекты и весовые функции, запугивающие, использовать systune и looptune вместо этого. Смотрите Настройки Систем Управления с SYSTUNE для systune аналог этого примера.

Модель объекта управления

Этот пример использует модель 9-го порядка сборки головного диска (HDA) в жестком диске. Эта модель захватывает первые несколько гибких режимов в HDA.

load hinfstruct_demo G
bode(G), grid

Figure contains 2 axes. Axes 1 with title From: u To: y contains an object of type line. This object represents G. Axes 2 contains an object of type line. This object represents G.

Мы используем цикл обратной связи, показанный ниже, чтобы расположить голову на правильной дорожке. Эта структура управления состоит из ПИ-контроллера и lowpass фильтра в пути возврата. Положение головы y следует отследить изменение шага r со временем отклика около одной миллисекунды, мало или нет перерегулирования и без статической ошибки.

Фигура 1: Структура управления

Настраиваемые элементы

В структуре управления Фигуры 1 есть два настраиваемых элемента: ПИ-контроллер C(s) и lowpass

F(s)=as+a.

Используйте tunablePID класс, чтобы параметризовать блок PI и задать фильтр F(s) как передаточная функция в зависимости от настраиваемого реального параметра a.

C0 = tunablePID('C','pi');  % tunable PI

a = realp('a',1);    % filter coefficient
F0 = tf(a,[1 a]);    % filter parameterized by a

Цикл формирования Проекта

Формирование цикла является методом частотного диапазона для обеспечения требований к скорости отклика, пропускной способности управления, свертыванию и установившейся ошибке. Идея состоит в том, чтобы задать целевой профиль усиления или «форму цикла» для отклика без разомкнутого контура L(s)=F(s)G(s)C(s). Разумная форма цикла для этой заявки должна иметь интегральное действие и частоту среза приблизительно 1000 рад/с (обратное требуемое время отклика 0,001 с). Это предполагает следующую форму цикла:

wc = 1000;  % target crossover
s = tf('s');
LS = (1+0.001*s/wc)/(0.001+s/wc);
bodemag(LS,{1e1,1e5}), grid, title('Target loop shape')

Figure contains an axes. The axes contains an object of type line. This object represents LS.

Обратите внимание, что мы выбрали bi-собственно, bi-стабильную реализацию, чтобы избежать технических трудностей с незначительно стабильными полюсами и неподходящими оборотами. В порядок для настройки C(s) и F(s) с hinfstruct, мы должны превратить эту форму целевого цикла в ограничения на коэффициент усиления замкнутого контура. Систематическим способом решения этой проблемы является инструментализация цикла обратной связи следующим образом:

  • Добавьте сигнал шума измерения n

  • Используйте форму целевого цикла LS и его обратное для фильтрации сигнала ошибки e и источник белого шума nw.

Фигура 2: Формулировка замкнутой системы

Если T(s) обозначает передаточную функцию с обратной связью от (r,nw) на (y,ew), ограничение усиления

T<1

обеспечивает следующие желательные свойства:

  • На низкой частоте (w < wc) коэффициент усиления без разомкнутого контура остается выше коэффициента усиления, заданного формой целевого цикла LS

  • На высокой частоте (w > wc) коэффициент усиления без разомкнутого контура остается ниже коэффициента усиления, заданного как LS

  • Система с обратной связью имеет адекватные запасы устойчивости

  • У переходной характеристики с обратной связью небольшой перерегулирование.

Поэтому мы можем сосредоточиться на настройке C(s) и F(s) провести в жизнь T<1.

Определение структуры управления в MATLAB

В MATLAB можно использовать connect команда к модели T(s) путем соединения неподвижного и настраиваемого компонентов согласно блоку на фигуре 2:

% Label the block I/Os
Wn = 1/LS;  Wn.u = 'nw';  Wn.y = 'n';
We = LS;    We.u = 'e';   We.y = 'ew';
C0.u = 'e';   C0.y = 'u';
F0.u = 'yn';  F0.y = 'yf';

% Specify summing junctions
Sum1 = sumblk('e = r - yf');
Sum2 = sumblk('yn = y + n');

% Connect the blocks together
T0 = connect(G,Wn,We,C0,F0,Sum1,Sum2,{'r','nw'},{'y','ew'});

Эти команды создают обобщенную модель пространства состояний T0 из T(s). Эта модель зависит от настраиваемых блоков C и a:

T0.Blocks
ans = struct with fields:
    C: [1x1 tunablePID]
    a: [1x1 realp]

Обратите внимание, что T0 захватывает следующую «Стандартную формублока на фигуре 2, где настраиваемые компоненты C,F отделяются от фиксированной динамики.

Фигура 3: Стандартная форма для формирования цикла диска

Настройка коэффициентов усиления контроллера

Теперь мы готовы использовать hinfstruct чтобы настроить ПИ-контроллер C и фильтрация F для архитектуры управления, представленной на фиг.1. Чтобы уменьшить риск локальных минимумов, запустите три оптимизации, две из которых начинаются с рандомизированных начальных значений для C0 и F0:

rng('default')
opt = hinfstructOptions('Display','final','RandomStart',5);
T = hinfstruct(T0,opt);
Final: Peak gain = 3.88, Iterations = 67
Final: Peak gain = 597, Iterations = 191
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Peak gain = 108, Iterations = 49
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Peak gain = 1.91, Iterations = 91
Final: Peak gain = 1.56, Iterations = 97
Final: Peak gain = 1.56, Iterations = 94

Лучший коэффициент усиления в системе с обратной связью - 1,56, поэтому ограничение T<1 почти удовлетворен. The hinfstruct команда возвращает настроенную передачу с обратной связью T(s). Использование showTunable чтобы увидеть настроенные значения C и коэффициент фильтра a:

showTunable(T)
C =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 0.000846, Ki = 0.0103
 
Name: C
Continuous-time PI controller in parallel form.
-----------------------------------
a = 5.49e+03

Использование getBlockValue чтобы получить настроенное значение C(s) и использовать getValue для оценки фильтра F(s) для настроенного значения a:

C = getBlockValue(T,'C');
F = getValue(F0,T.Blocks);  % propagate tuned parameters from T to F

tf(F)
ans =
 
  From input "yn" to output "yf":
    5486
  --------
  s + 5486
 
Continuous-time transfer function.

Чтобы подтвердить проект, постройте график отклика без разомкнутого контура L=F*G*C и сравните с формой целевого цикла LS:

bode(LS,'r--',G*C*F,'b',{1e1,1e6}), grid, 
title('Open-loop response'), legend('Target','Actual')

Figure contains 2 axes. Axes 1 with title From: yn To: y contains 2 objects of type line. These objects represent Target, Actual. Axes 2 contains 2 objects of type line. These objects represent Target, Actual.

0dB частоты среза и общая форма цикла соответствуют ожидаемым. Можно считать запасы устойчивости с графика, щелкнув правой кнопкой мыши и выбрав меню Характеристики (Characteristics). Этот проект имеет 24dB запас по амплитуде и 81 степени запаса по фазе. Постройте график переходной характеристики с обратной связью из ссылки r в позиционную y:

step(feedback(G*C,F)), grid, title('Closed-loop response')

Figure contains an axes. The axes with title From: In(1) To: y contains an object of type line. This object represents untitled1.

Хотя реакция не имеет перерегулирования, существует некоторое остаточное колебание из-за первого резонансного peaks в G. Можно рассмотреть добавление узкополосного фильтра в прямом пути, чтобы удалить влияние этих режимов.

Настройка коэффициентов усиления контроллера из Simulink

Предположим, что вы использовали эту модель Simulink, чтобы представлять структуру управления. Если у вас установлен Simulink Control Design, можно настроить усиления контроллера из этой модели Simulink следующим образом. Сначала отметьте сигналы r,e,y,n как точки Линейного анализа в модели Simulink.

Затем создайте образец slTuner интерфейс и отметьте блоки Simulink C и F как настраиваемый:

ST0 = slTuner('rct_diskdrive',{'C','F'});

Начиная с фильтра F(s) имеет специальную структуру, явным образом задайте, как параметризовать F блок:

a = realp('a',1);    % filter coefficient
setBlockParam(ST0,'F',tf(a,[1 a]));

Наконец, используйте getIOTransfer для вывода настраиваемой модели передаточной функции с обратной связью T(s) (см. фигуру 2)

% Compute tunable model of closed-loop transfer (r,n) -> (y,e)
T0 = getIOTransfer(ST0,{'r','n'},{'y','e'});

% Add weighting functions in n and e channels
T0 = blkdiag(1,LS) * T0 * blkdiag(1,1/LS);

Теперь вы готовы настроить коэффициент усиления контроллера с помощью hinfstruct:

rng(0)
opt = hinfstructOptions('Display','final','RandomStart',5);
T = hinfstruct(T0,opt);
Final: Peak gain = 3.88, Iterations = 67
Final: Peak gain = 597, Iterations = 189
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Peak gain = 596, Iterations = 170
       Some closed-loop poles are marginally stable (decay rate near 1e-07)
Final: Peak gain = 3.88, Iterations = 69
Final: Peak gain = 1.56, Iterations = 102
Final: Peak gain = 1.56, Iterations = 108

Проверьте, что вы получаете те же настроенные значения, что и при подходе MATLAB:

showTunable(T)
C =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 0.000846, Ki = 0.0103
 
Name: C
Continuous-time PI controller in parallel form.
-----------------------------------
a = 5.49e+03

См. также

Похожие темы