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