exponenta event banner

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

В этом примере используется hinfstruct для настройки контроллера фиксированной структуры с учетом H∞ ограничений.

Введение

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

Модель установки

В этом примере используется модель 9го порядка сборки head-disk (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.

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

Рис. 1: Структура управления

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

В структуре управления, показанной на фиг.1, имеется два настраиваемых элемента: PI-контроллер C (ы) и фильтр нижних частот.

F (s) = как + 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.

Обратите внимание на то, что для избежания технических трудностей, связанных с малостабильными полюсами и неправильными инверсиями, мы выбрали двойную реализацию. Для настройки 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 (ов) и F (ов) для обеспечения 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 Т (ов). Эта модель зависит от настраиваемых блоковC и a:

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

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

Рис. 3: Стандартная форма для формирования контура диска

Настройка усиления контроллера

Теперь мы готовы к использованию hinfstruct для настройки PI контроллера 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 почти удовлетворено. hinfstruct возвращает настроенные T (ы) передачи по замкнутому циклу. Использовать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 (ы) для настроенного значения 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.

В то время как реакция не имеет превышения, есть некоторое остаточное колебание из-за первых резонансных пиков в G. Для устранения влияния этих режимов можно добавить фильтр вырубки в прямой путь.

Настройка усиления контроллера с помощью Simulink

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

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

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

Поскольку фильтр F (ы) имеет специальную структуру, явно укажите способ параметризации 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

См. также

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