Автопилот с фиксированной структурой для пассажирского реактивного самолета

В этом примере показано, как использовать slTuner и systune настройка стандартного строения продольного автопилота. Мы благодарим профессора Д. Алазара из Institut Superieur de l'Aeronautique et de l'Espace за предоставление модели самолета и профессора Пьера Апкаряна из ONERA за разработку примера.

Модель самолета и строение автопилота

Продольный автопилот для сверхзвуковой пассажирской струи, летящей со скоростью 0,7 и 5000 футов, показан на фигура. Основной целью автопилота является выполнение команд вертикального ускорения$N_{zc}$, выданных пилотом. Структура обратной связи состоит из внутреннего цикла, управляющего скоростью тангажа$q$, и внешнего контура, управляющего вертикальным ускорением. $N_z$Автопилот также включает компонент с feedforward и образец модели, которая$G_{ref}(s)$ задает желаемый ответ на команду step. $N_{zc}$Наконец, фильтр свертывания второго порядка

$$ F_{ro}(s) = {\omega_n^2 \over s^2 + 2 \zeta \omega_n s + \omega_n^2} $$

используется для ослабления шума и ограничения полосы пропускания управления в качестве защиты от немоделированной динамики. Настраиваемые компоненты выделены оранжевым цветом.

Фигура 1: Продольное Строение автопилота.

Модель самолёта$G(s)$ является моделью 5 состояний, переменными состояний являются аэродинамическая скорость ($V$м/с), угол набора высоты ($\gamma$рад), угол атаки ($\alpha$рад), скорость тангажа ($q$рад/с) и высота (м).$H$ Отклонение лифта (рад)$\delta_m$ используется для управления вертикальным коэффициентом нагрузки. $N_z$Динамика разомкнутого контура включает$\alpha$ колебание с частотой и коэффициентом затухания = 1,7 ($\omega_n$рад/с) и = 0,33,$\zeta$ режим фугоида = 0,64 ($\omega_n$рад/с) и = 0,06, и$\zeta$ режим медленной высоты = -0,0026.$\lambda$

load ConcordeData G
bode(G,{1e-3,1e2}), grid
title('Aircraft Model')

Обратите внимание на нуль в источник в. $G(s)$Из-за этого нуля мы не можем достичь нулевой статической ошибки и должны вместо этого фокусироваться на переходном процессе на команды ускорения. Обратите внимание, что команды ускорения являются переходными по своей природе, поэтому установившееся поведение не является проблемой. Этот нуль в источник также исключает чистое интегральное действие, поэтому мы используем псевдоинтегратор$1/(s+\epsilon)$ с =$\epsilon$ 0,001.

Регулируемый параметр

Когда система управления моделируется в Simulink, можно использовать slTuner интерфейс для быстрой настройки задачи настройки. Откройте модель Simulink автопилота.

open_system('rct_concorde')

Сконфигурируйте slTuner интерфейс путем перечисления настроенных блоков в модели Simulink (выделен оранжевым цветом). Это автоматически выбирает все точки линейного анализа в модели как точки интереса для анализа и настройки.

ST0 = slTuner('rct_concorde',{'Ki','Kp','Kq','Kf','RollOff'});

Это также параметрирует каждый настроенный блок и инициализирует параметры блоков на основе их значений в модели Simulink. Обратите внимание, что четыре усиления Ki,Kp,Kq,Kf в этом примере инициализированы до нуля. По умолчанию фильтр отката$F_{ro}(s)$ параметризован как типовая передаточная функция второго порядка. Чтобы параметризовать его как

$$ F_{ro}(s) = {\omega_n^2 \over s^2 + 2 \zeta \omega_n s + \omega_n^2} , $$

создать действительные параметры, $\zeta, \omega_n$построить передаточную функцию, показанную выше, и связать ее со RollOff блок.

wn = realp('wn', 3);               % natural frequency
zeta = realp('zeta',0.8);          % damping
Fro = tf(wn^2,[1 2*zeta*wn wn^2]); % parametric transfer function

setBlockParam(ST0,'RollOff',Fro)   % use Fro to parameterize "RollOff" block

Требования к проектированию

Автопилот должен быть настроен, чтобы удовлетворить трем основным требованиям к проекту:

1. Отслеживание уставки: Ответ$N_z$ на команду$N_{zc}$ должен тесно совпадать с ответом образца модели:

$$ G_{ref}(s) = {1.7^2 \over s^2 + 2 \times 0.7 \times 1.7 s + 1.7^2} . $$

Этот образец модели задаёт хорошо демпфированный ответ со время урегулирования 2 секунды.

2. Высокочастотный откат: Реакция с обратной связью от шумовых сигналов должна$\delta_m$ сходить за 8 рад/с с наклоном не менее -40 дБ/десятилетие.

3. Запасы устойчивости: запасы устойчивости во входе объекта$\delta_m$ должны составить по крайней мере 7 дБ и 45 степеней.

Для отслеживания уставки мы требуем, чтобы коэффициент усиления передачи с обратной связью от команды$N_{zc}$ к ошибке отслеживания$e$ был маленьким в полосе частот [0.05,5] рад/с (напомним, что мы не можем привести установившуюся ошибку к нулю из-за нулевого объекта в s = 0). Используя несколько частотных точек, нарисуйте максимальную ошибку отслеживания как функцию от частоты и используйте ее, чтобы ограничить коэффициент усиления от$N_{zc}$ до.$e$

Freqs = [0.005 0.05 5 50];
Gains = [5 0.05 0.05 5];
Req1 = TuningGoal.Gain('Nzc','e',frd(Gains,Freqs));
Req1.Name = 'Maximum tracking error';

The TuningGoal.Gain конструктор автоматически превращает эскиз максимальной ошибки в функцию плавного взвешивания. Использование viewGoal для графической проверки требуемого профиля ошибки.

viewGoal(Req1)

Повторите тот же процесс, чтобы ограничить высокочастотный коэффициент усиления от шумовых входов$\delta_m$ и добиться наклона -40 дБ/десятилетие в полосе частот от 8 до 800 рад/с

Freqs = [0.8 8 800];
Gains = [10 1 1e-4];
Req2 = TuningGoal.Gain('n','delta_m',frd(Gains,Freqs));
Req2.Name = 'Roll-off requirement';

viewGoal(Req2)

Наконец, зарегистрируйте вход завода$\delta_m$ как сайт для разомкнутого контура анализа и использования TuningGoal.Margins для захвата требования по запасу устойчивости.

addPoint(ST0,'delta_m')

Req3 = TuningGoal.Margins('delta_m',7,45);

Настройка автопилота

Теперь мы готовы настроить параметры автопилота с помощью systune. Эта команда принимает неотключённое строение ST0 и три проекта и возвращают настроенную версию ST от ST0. Все требования выполняются, если окончательное значение меньше единицы.

[ST,fSoft] = systune(ST0,[Req1 Req2 Req3]);
Final: Soft = 0.965, Hard = -Inf, Iterations = 125

Использование showTunable для просмотра настроенных значений блоков.

showTunable(ST)
Block 1: rct_concorde/Ki =
 
  D = 
             u1
   y1  -0.02967
 
Name: Ki
Static gain.

-----------------------------------

Block 2: rct_concorde/Kp =
 
  D = 
              u1
   y1  -0.009841
 
Name: Kp
Static gain.

-----------------------------------

Block 3: rct_concorde/Kq =
 
  D = 
            u1
   y1  -0.2843
 
Name: Kq
Static gain.

-----------------------------------

Block 4: rct_concorde/Kf =
 
  D = 
            u1
   y1  -0.0223
 
Name: Kf
Static gain.

-----------------------------------

wn = 4.81
-----------------------------------
zeta = 0.507

Чтобы получить настроенное значение, $F_{ro}(s)$используйте getBlockValue для оценки Fro для настроенных значений параметров в ST:

Fro = getBlockValue(ST,'RollOff');
tf(Fro)
ans =
 
          23.14
  ---------------------
  s^2 + 4.881 s + 23.14
 
Continuous-time transfer function.

Наконец, используйте viewGoal графически проверить соответствие всем требованиям.

figure('Position',[100,100,550,710])
viewGoal([Req1 Req2 Req3],ST)

Симуляции замкнутой системы

Теперь мы проверяем, что настроенный автопилот удовлетворяет требованиям проекта. Сначала сравните шаг-ответ$N_z$ с шагом-ответом эталонной модели. $G_{ref}(s)$Снова используйте getIOTransfer для вычисления настроенной передачи с обратной связью из Nzc на Nz:

Gref = tf(1.7^2,[1 2*0.7*1.7 1.7^2]);    % reference model

T = getIOTransfer(ST,'Nzc','Nz');  % transfer Nzc -> Nz

figure, step(T,'b',Gref,'b--',6), grid,
ylabel('N_z'), legend('Actual response','Reference model')

Также постройте график отклонения$\delta_m$ и соответствующих вкладов путей с feedforward и обратной связью:

T = getIOTransfer(ST,'Nzc','delta_m');  % transfer Nzc -> delta_m
Kf = getBlockValue(ST,'Kf');            % tuned value of Kf
Tff = Fro*Kf;         % feedforward contribution to delta_m

step(T,'b',Tff,'g--',T-Tff,'r-.',6), grid
ylabel('\delta_m'), legend('Total','Feedforward','Feedback')

Наконец, проверьте требования к запасам при срабатывании и устойчивости путем вычисления отклика при разомкнутом контуре.$\delta_m$

OL = getLoopTransfer(ST,'delta_m',-1); % negative-feedback loop transfer
margin(OL);
grid;
xlim([1e-3,1e2]);

Диаграмма Боде подтверждает падение -40 дБ/десятилетие за 8 рад/с и указывает на запасы по усилению и фазе, превышающие 10 дБ и 70 степени.

См. также

| | (Simulink Control Design) | (Simulink Control Design)

Похожие темы