Это - Часть 2 ряда в качестве примера на проекте и настройке системы управления полетом для автомобиля HL-20. Это расстается соглашения с закрытием внутренних циклов, управляющих телом угловые уровни.
Откройте модель HL 20 с ее системой управления полетом.
open_system('csthl20_control')
Эта модель 6-DOF адаптируется от Корпуса Несущего тела (Aerospace Blockset) NASA HL-20. Модель сконфигурирована, чтобы моделировать итоговый подход к посадочной площадке. "Система наведения" генерирует траекторию глиссады и соответствующий список, угол нападения (альфа) и угол заноса (бета) команды. Для "Системы Управления полетом" определяют задачу с корректировкой поверхностей управления, чтобы отследить эти команды. Блок "Controller" в "Системе Управления полетом" является различной подсистемой с различными настройками автопилота.
"Базовые" и "Классические" диспетчеры используют классическую архитектуру каскадного цикла с тремя внутренними циклами P-only, чтобы управлять угловыми уровнями p, q, r, и тремя внешними циклами PI, чтобы управлять угловыми положениями phi, альфой, бетой. Шесть пропорциональных усилений и три интегральных усиления все планируются как функция альфы и беты. "Базовый" вариант содержит базовый проект, показанный в Корпусе Несущего тела (Aerospace Blockset) NASA HL-20. Части 2 и 3 этого ряда используют "Классический" вариант, чтобы идти посредством настраивающего процесса. Активным вариантом управляет переменная CTYPE рабочей области. Установите его значение к 2, чтобы активировать "Классический" вариант контроллера.
% Select "Classical" variant of controller
CTYPE = 2;
Обратите внимание на то, что этот вариант использует соединение интерполяционных таблиц и блоков MATLAB function, чтобы запланировать усиления автопилота.
В части 1 этого ряда (Обрезка и Линеаризация Корпуса (Control System Toolbox) HL-20), мы получили линеаризовавшие модели "Корпуса HL20", и "Управляет Селекторными" блоками для 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.
Интерфейс slTuner
является удобным способом получить линеаризовавшие модели "csthl20_control", которые подходят для проекта системы управления и анализа. Через этот интерфейс можно определять сигналы и интересные места в модели и задать, какие блоки вы хотите настроить.
ST0 = slTuner('csthl20_control'); ST0.Ts = 0; % ask for continuous-time linearizations
Здесь интересные места включают угловые требования и требования уровня, соответствующие ответы, и отклонения da, de, доктора.
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", и "Управляет Селекторными" блоками как функцией (альфа, бета), самый простой способ линеаризовать целую модель "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, доктор) к угловым уровням (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, криптон для каждого (альфа, бета) значение с готовностью получено из частотной характеристики объекта на этих частотах, и графики фазы показывают, что Kp должен быть положительным (отрицательная обратная связь) и Kq, криптон должен быть отрицательным (позитивные отклики).
% 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 этого ряда (Управление ориентацией в автопилоте HL-20 - Проект SISO (Control System Toolbox)) показывает, как настроить классическую архитектуру SISO, и Часть 4 (Управление ориентацией в автопилоте HL-20 - Проект MIMO (Control System Toolbox)) изучает преимущества архитектуры MIMO.