Это часть 2 серии примеров по проекту и настройке системы управления рейсом для HL-20 транспортного средства. Эта часть посвящена закрытию внутренних циклов, управляющих угловыми скоростями тела.
Откройте модель HL-20 с ее системой управления рейсом.
open_system('csthl20_control')
Эта 6-DOF модель адаптирована из планера НАСА HL-20 грузоподъемного тела (Aerospace Blockset). Модель сконфигурирована, чтобы симулировать окончательный заход на посадочную площадку. «Система руководства» генерирует траекторию глиссады и соответствующие команды крена, угла атаки (альфа) и угла боковой оси (бета). Перед «Системой управления рейсом» поставлена задача настроить поверхности управления для отслеживания этих команд. Блок «Controller» внутри «Flight Control System» является альтернативной подсистемой с различными строениями автопилота.
Контроллеры «Baseline» и «Classical» используют классическую архитектуру каскадного цикла с тремя внутренними циклами только P для управления угловыми скоростями p, q, r и тремя внешними циклами PI для управления угловыми положениями phi, альфа, бета. Все шесть пропорциональных составляющих и три интегральных составляющих запланированы как функция альфа и бета. Вариант «Baseline» содержит базовый проект, представленный в планере HL-20 Lifting Body (Aerospace Blockset) НАСА. Части 2 и 3 этой серии используют вариант «Classical», чтобы пройти процесс настройки. Активным вариантом управляет переменная рабочей области CTYPE. Установите его значение 2, чтобы активировать «Классический» вариант контроллера.
% Select "Classical" variant of controller CTYPE = 2; % call model update to make sure only active variant signals are analyzed during linearization set_param('csthl20_control', 'SimulationCommand', 'update');
Обратите внимание, что этот вариант использует смесь интерполяционных таблиц и блоков MATLAB function, чтобы запланировать коэффициент усиления автопилота.
В Части 1 этой серии (Обрезка и Линеаризация HL-20 Airframe) мы получили линеаризированные модели блоков «HL20 Airframe» и «Controls Selector» для 40 различных ориентаций самолета (40 различных пар (альфа, бета) значений). Загрузите эти массивы линеаризированных моделей.
load csthl20_TrimData G7 CS size(G7)
8x5 array of state-space models. Each model has 34 outputs, 9 inputs, and 7 states.
size(CS)
8x5 array of state-space models. Each model has 6 outputs, 5 inputs, and 0 states.
The slTuner
интерфейс является удобным способом получения линеаризированных моделей «csthl20_control», которые подходят для управления разработки системы и анализа. Через этот интерфейс можно обозначить сигналы и точки интереса в модели и определить, какие блоки вы хотите настроить.
ST0 = slTuner('csthl20_control'); ST0.Ts = 0; % ask for continuous-time linearizations
Здесь точки интереса включают требования к углу и скорости, соответствующие отклики и отклонения da, de, dr.
AP = {'da;de;dr' 'HL20 Airframe/pqr' 'Alpha_deg' 'Beta_deg' 'Phi_deg' 'Controller/Classical/Demands' % angular demands 'p_demand' 'q_demand' 'r_demand'}; ST0.addPoint(AP)
Поскольку мы уже получили линейные модели блоков «HL20 Airframe» и «Controls Selector» как функцию (альфа, бета), самый простой способ линеаризации всей модели «csthl20_control» - это замена каждого нелинейного компонента семейством линейных моделей. Это называется «подстановкой блоков» и часто является наиболее эффективным способом линеаризации сложных моделей при нескольких рабочих условиях.
% Replace "HL20 Airframe" block by 8-by-5 array of linearized models G7 BlockSub1 = struct('Name','csthl20_control/HL20 Airframe','Value',G7); % Replace "Controls Selector" by CS BlockSub2 = struct('Name','csthl20_control/Flight Control System/Controls Selector','Value',CS); % Replace "Actuators" by direct feedthrough (ignore saturations and second-order actuator dynamics) BlockSub3 = struct('Name','csthl20_control/Actuators','Value',eye(6)); ST0.BlockSubstitutions = [BlockSub1 ; BlockSub2 ; BlockSub3];
Теперь вы готовы к системе управления части.
Начнем с трёх внутренних циклов, управляющих угловыми скоростями p, q, r. Чтобы стать ориентированным, постройте график передаточной функции без разомкнутого контура от отклонений (da, de, dr) к угловым скоростям (p, q, r). С slTuner
интерфейс, можно запросить модель для любой передаточной функции, представляющей интерес.
% NOTE: The second 'da;de;dr' opens all feedback loops at the plant input Gpqr = getIOTransfer(ST0,'da;de;dr','pqr','da;de;dr'); bode(Gpqr(1,1),Gpqr(2,2),Gpqr(3,3),{1e-1,1e3}), grid legend('da to p','de to q','dr to r')
Эта диаграмма Боде предполагает, что диагональные условия ведут себя как интеграторы (вплоть до знака) за пределами 5 рад/с. Это оправдывает использование управления только пропорциональным. В соответствии с проектом базовой линии, установите целевую пропускную способность для циклов p, q, r равной 30, 22,5 и 37,5 рад/с, соответственно. Усиления Kp, Kq, Kr для каждого значения (альфа, бета) легко получаются из частотной характеристики объекта на этих частотах, и фазовые графики указывают, что Kp должен быть положительным (отрицательная обратная связь) и Kq, Kr должен быть отрицательным (положительная обратная связь).
% Compute Kp,Kq,Kr for each (alpha,beta) condition. Resulting arrays % have size [1 1 8 5] Kp = 1./abs(evalfr(Gpqr(1,1),30i)); Kq = -1./abs(evalfr(Gpqr(2,2),22.5i)); Kr = -1./abs(evalfr(Gpqr(3,3),37.5i)); bode(Gpqr(1,1)*Kp,Gpqr(2,2)*Kq,Gpqr(3,3)*Kr,{1e-1,1e3}), grid legend('da to p','de to q','dr to r')
Чтобы завершить проект внутреннего контура, нажмите эти значения усиления в соответствующие интерполяционные таблицы в модели Simulink и обновите slTuner
объект.
MWS = get_param('csthl20_control','ModelWorkspace'); MWS.assignin('Kp',squeeze(Kp)) MWS.assignin('Kq',squeeze(Kq)) MWS.assignin('Kr',squeeze(Kr)) refresh(ST0)
Далее вам нужно настроить внешние контуры, управляющие креном, углом атаки и углом боковой оси. Часть 3 этой серии (Attitude Control в HL-20 Autopilot - SISO Design) показывает, как настроить классическую архитектуру SISO, а часть 4 (Attitude Control в HL-20 Autopilot - MIMO Design) рассматривает преимущества архитектуры MIMO.