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

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

Фигура 1: Структура управления
В структуре управления Фигуры 1 есть два настраиваемых элемента: ПИ-контроллер и lowpass
Используйте tunablePID класс, чтобы параметризовать блок PI и задать фильтр как передаточная функция в зависимости от настраиваемого реального параметра .
C0 = tunablePID('C','pi'); % tunable PI a = realp('a',1); % filter coefficient F0 = tf(a,[1 a]); % filter parameterized by a
Формирование цикла является методом частотного диапазона для обеспечения требований к скорости отклика, пропускной способности управления, свертыванию и установившейся ошибке. Идея состоит в том, чтобы задать целевой профиль усиления или «форму цикла» для отклика без разомкнутого контура . Разумная форма цикла для этой заявки должна иметь интегральное действие и частоту среза приблизительно 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')

Обратите внимание, что мы выбрали bi-собственно, bi-стабильную реализацию, чтобы избежать технических трудностей с незначительно стабильными полюсами и неподходящими оборотами. В порядок для настройки и с hinfstruct, мы должны превратить эту форму целевого цикла в ограничения на коэффициент усиления замкнутого контура. Систематическим способом решения этой проблемы является инструментализация цикла обратной связи следующим образом:
Добавьте сигнал шума измерения n
Используйте форму целевого цикла LS и его обратное для фильтрации сигнала ошибки e и источник белого шума nw.

Фигура 2: Формулировка замкнутой системы
Если обозначает передаточную функцию с обратной связью от (r,nw) на (y,ew), ограничение усиления
обеспечивает следующие желательные свойства:
На низкой частоте (w < wc) коэффициент усиления без разомкнутого контура остается выше коэффициента усиления, заданного формой целевого цикла LS
На высокой частоте (w > wc) коэффициент усиления без разомкнутого контура остается ниже коэффициента усиления, заданного как LS
Система с обратной связью имеет адекватные запасы устойчивости
У переходной характеристики с обратной связью небольшой перерегулирование.
Поэтому мы можем сосредоточиться на настройке и провести в жизнь .
В MATLAB можно использовать connect команда к модели путем соединения неподвижного и настраиваемого компонентов согласно блоку на фигуре 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, где настраиваемые компоненты отделяются от фиксированной динамики.

Фигура 3: Стандартная форма для формирования цикла диска
Теперь мы готовы использовать hinfstruct чтобы настроить ПИ-контроллер и фильтрация для архитектуры управления, представленной на фиг.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, поэтому ограничение почти удовлетворен. The hinfstruct команда возвращает настроенную передачу с обратной связью . Использование showTunable чтобы увидеть настроенные значения и коэффициент фильтра :
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 чтобы получить настроенное значение и использовать getValue для оценки фильтра для настроенного значения :
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')

0dB частоты среза и общая форма цикла соответствуют ожидаемым. Можно считать запасы устойчивости с графика, щелкнув правой кнопкой мыши и выбрав меню Характеристики (Characteristics). Этот проект имеет 24dB запас по амплитуде и 81 степени запаса по фазе. Постройте график переходной характеристики с обратной связью из ссылки r в позиционную y:
step(feedback(G*C,F)), grid, title('Closed-loop response')
Хотя реакция не имеет перерегулирования, существует некоторое остаточное колебание из-за первого резонансного peaks в G. Можно рассмотреть добавление узкополосного фильтра в прямом пути, чтобы удалить влияние этих режимов.
Предположим, что вы использовали эту модель Simulink, чтобы представлять структуру управления. Если у вас установлен Simulink Control Design, можно настроить усиления контроллера из этой модели Simulink следующим образом. Сначала отметьте сигналы r,e,y,n как точки Линейного анализа в модели Simulink.

Затем создайте образец slTuner интерфейс и отметьте блоки Simulink C и F как настраиваемый:
ST0 = slTuner('rct_diskdrive',{'C','F'});
Начиная с фильтра имеет специальную структуру, явным образом задайте, как параметризовать F блок:
a = realp('a',1); % filter coefficient setBlockParam(ST0,'F',tf(a,[1 a]));
Наконец, используйте getIOTransfer для вывода настраиваемой модели передаточной функции с обратной связью (см. фигуру 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