Это часть 4 серии примеров по проекту и настройке системы управления рейсом для HL-20 транспортного средства. В этой части показано, как настроить архитектуру MIMO PI для управления креном, тангажом и рысканием транспортного средства.
Этот пример использует модель HL-20, адаптированную из планера НАСА HL-20 грузоподъемного тела (Aerospace Blockset), см. Часть 1 серии (Обрезка и линеаризация HL-20 планера) для получения дополнительной информации. В частях 2 и 3 мы показали, как закрыть внутренние циклы и настроить внешние контуры классической архитектуры SISO для HL-20 автопилота, смотрите Управление Угловой Скоростью в HL-20 Autopilot и Управление Отношением в HL-20 Autopilot - SISO Design для получения дополнительной информации. В этом примере мы исследуем преимущества перехода на архитектуру MIMO для внешних контуров.
В этой архитектуре три циклов PI для тангажа, альфа, беты заменяются на 3-входное 3-выходное ПИ-контроллер, которая смешивает тангаж, альфа и бета- измерения для вычисления уставок внутреннего цикла p_demand, q_demand, r_demand. Интуитивно эта архитектура должна быть более успешной при уменьшении поперечных связей между осями. Обратите внимание, что усиления P и I являются матрицами 3 на 3, запланированными как функция альфа и бета.
Чтобы начать, загрузите модель, установите CTYPE
для 3 выбора варианта MIMO блока Контроллера и повторного применения шагов Part 2 для закрытия внутренних циклов (эта часть проекта не изменена). Обратите внимание, что это создает и конфигурирует slTuner
интерфейс ST0
для взаимодействия с моделью Simulink.
load_system('csthl20_control') CTYPE = 3; % MIMO architecture HL20recapPart2 ST0
slTuner tuning interface for "csthl20_control": No tuned blocks. Use the addBlock command to add new blocks. 9 Analysis points: -------------------------- Point 1: Signal "da;de;dr", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller Point 2: Signal "pqr", located at 'Output Port 2' of csthl20_control/HL20 Airframe Point 3: 'Output Port 1' of csthl20_control/Flight Control System/Alpha_deg Point 4: 'Output Port 1' of csthl20_control/Flight Control System/Beta_deg Point 5: 'Output Port 1' of csthl20_control/Flight Control System/Phi_deg Point 6: 'Output Port 1' of csthl20_control/Flight Control System/Controller/MIMO/Demands Point 7: Signal "p_demand", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller/MIMO/Roll-off1 Point 8: Signal "q_demand", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller/MIMO/Roll-off2 Point 9: Signal "r_demand", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller/MIMO/Roll-off3 No permanent openings. Use the addOpening command to add new permanent openings. Properties with dot notation get/set access: Parameters : [] OperatingPoints : [] (model initial condition will be used.) BlockSubstitutions : [3x1 struct] Options : [1x1 linearize.SlTunerOptions] Ts : 0
Как и в проекте SISO (Attitude Control в HL-20 Autopilot - SISO Design), первым шагом является получение линеаризированной модели «объекта», наблюдаемой внешними контурами при каждом (альфа, бета) условии. Чтобы учесть тот факт, что внутренний цикл приобретает Kp, Kq, Kr варьируется с (альфа, бета), замените блок «MIMO/Product» на его линейный эквивалент, который является диагональной матрицей усиления
Blk = 'csthl20_control/Flight Control System/Controller/MIMO/Product'; Subs = [zeros(3) append(ss(Kp),ss(Kq),ss(Kr))]; BlockSub4 = struct('Name',Blk,'Value',Subs); ST0.BlockSubstitutions = [ST0.BlockSubstitutions ; BlockSub4];
Графики усиления «P» и «I» инициализируются в матрицы постоянной диагонали diag([0.05, 0.05, -0.05])
. Постройте график угловых характеристик для этих начальных настроек.
T0 = getIOTransfer(ST0,'Demand',{'Phi_deg','Alpha_deg','Beta_deg'}); step(T0,6)
Чтобы настроить графики усиления MIMO, мы используем следующие три цели настройки:
Цель «Чувствительность» задать желаемую полосу пропускания (время отклика) и максимизировать развязку на низкой частоте.
s = tf('s'); R1 = TuningGoal.Sensitivity({'Phi_deg','Alpha_deg','Beta_deg'},s); R1.Focus = [1e-2 1]; R1.LoopScaling = 'off'; viewGoal(R1)
Ограничение «Gain» на переносе с обратной связью от угловых требований к угловым откликам. Профиль усиления выбран для обеспечения адекватного отката и предела перерегулирования (что связано с горбом около кроссовера).
MaxGain = 1.2 * (10/(s+10))^2; % max gain profile R2 = TuningGoal.Gain('Demands',{'Phi_deg','Alpha_deg','Beta_deg'},MaxGain); viewGoal(R2)
Цель «Argins», требующая запасов по амплитуде не менее 7 дБ и запасов по фазе не менее 45 степени (в смысле полей диска).
R3 = TuningGoal.Margins('da;de;dr',7,45);
Графики усиления для контроллера MIMO PI заданы блоками «P» и «I» в архитектуре MIMO. Напомним, что эти блоки выводят матрицы 3 на 3 и реализуют передаточную функцию MIMO:
Ради рисунка мы используем блок MATLAB Function для реализации пропорциональной составляющей расписания и блок Matrix Interpolation для реализации интегральной составляющей расписания. Блок Matrix Interpolation живет в библиотеке «Simulink Extras» и представляет собой интерполяционную таблицу, где каждая запись таблицы является матрицей.
Чтобы настроить P и I расписания усиления, отметьте соответствующие блоки как настраиваемые в slTuner
интерфейс.
TunedBlocks = {'MIMO/P' , 'MIMO/I'}; ST0.addBlock(TunedBlocks)
Параметризируйте каждое настроенное расписание усиления как полиномиальную поверхность в альфа и бете. Снова мы используем квадратичную поверхность для пропорциональной составляющей и мультилинейную поверхность для интегральной составляющей.
% Grid of (alpha,beta) design points alpha_vec = -10:5:25; % Alpha Range beta_vec = -10:5:10; % Beta Range [alpha,beta] = ndgrid(alpha_vec,beta_vec); SG = struct('alpha',alpha,'beta',beta); % Proportional gain matrix alphabetaBasis = polyBasis('canonical',2,2); P0 = diag([0.05 0.05 -0.05]); % initial (constant) value PS = tunableSurface('P', P0, SG, alphabetaBasis); ST0.setBlockParam('P',PS); % Integral gain matrix alphaBasis = @(alpha) alpha; betaBasis = @(beta) abs(beta); alphabetaBasis = ndBasis(alphaBasis,betaBasis); I0 = diag([0.05 0.05 -0.05]); IS = tunableSurface('I', I0, SG, alphabetaBasis); ST0.setBlockParam('I',IS);
Наконец, используйте systune
чтобы настроить 6 поверхностей усиления против трех целей настройки.
ST = systune(ST0,[R1 R2 R3]);
Final: Soft = 1.13, Hard = -Inf, Iterations = 105
Окончательное значение целевой функции указывает, что цели настройки почти достигнуты (цель настройки удовлетворяется, когда ее «значение» меньше единицы). Постройте график угловых характеристик замкнутой системы и сравните с проектом базовой линии.
T = getIOTransfer(ST,'Demand',{'Phi_deg','Alpha_deg','Beta_deg'}); step(T0,T,6) legend('Baseline','Tuned','Location','SouthEast')
Эти ответы показывают значительное снижение перерегулирования и поперечного сцепления по сравнению с проектом SISO.
Чтобы дополнительно подтвердить этот проект, передвиньте настроенные поверхности усиления к модели Simulink.
writeBlockValue(ST)
Для блока Matrix Interpolation «I» это дискретизирует поверхность усиления в точках останова таблицы и обновляет данные таблицы в рабочем пространстве модели. Для блока MATLAB Function «P» это генерирует код MATLAB для уравнений поверхности усиления. Вы можете увидеть этот код, дважды кликнув по блоку.
Как только вы толкаете усиления к Simulink, настройка архитектуры MIMO завершена, и можно симулировать его поведение во время захода на посадку.
Эти ответы не сильно отличаются от проекта SISO (Attitude Control в HL-20 Autopilot - SISO Design) из-за мягких требований на протяжении всего маневра. Преимущества проекта MIMO были бы более заметны при более сложном маневре.