hinfstruct
Этот пример использует hinfstruct
команда, чтобы настроить контроллер фиксированной структуры подвергает ограничения.
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
Формирование цикла является методом частотного диапазона для осуществления требований к скорости ответа, пропускной способности управления, спаду и установившейся ошибке. Идея состоит в том, чтобы задать целевой профиль усиления или "форму цикла" для ответа разомкнутого контура . Разумная форма цикла для этого приложения должна иметь интегральное действие и частоту среза приблизительно 1 000 рад/с (обратная величина желаемого времени отклика в 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-proper, бистабильная реализация, чтобы избежать технических трудностей с незначительно устойчивыми полюсами и неподходящими инверсиями. Для того, чтобы настроиться и с hinfstruct
, мы должны превратить эту целевую форму цикла в ограничения на усиления с обратной связью. Систематический способ пойти об этом состоит в том, чтобы оснастить обратную связь можно следующим образом:
Добавьте, что шум измерения сигнализирует о n
Используйте целевую форму цикла LS
и его обратная величина, чтобы отфильтровать сигнал ошибки e
и белый источник шума nw
.
Рисунок 2: формулировка с обратной связью
Если обозначает передаточную функцию с обратной связью от (r,nw)
к (y,ew)
, ограничение усиления
защищает следующие желательные свойства:
В низкой частоте (w <туалет), коэффициент усиления разомкнутого контура остается выше усиления, заданного целевой формой цикла LS
На высокой частоте (w> туалет), коэффициент усиления разомкнутого контура остается ниже усиления, заданного 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, таким образом, ограничение почти удовлетворен. 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. Этот проект имеет запас по амплитуде на 24 дБ и 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