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

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

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

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

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

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

Рисунок 1: продольная настройка автопилота.

Модель самолета$G(s)$ является моделью с 5 состояниями, переменные состояния, являющиеся аэродинамической скоростью$V$ (m/s), угол подъема$\gamma$ (рад), угол нападения$\alpha$ (рад), уровень подачи$q$ (rad/s) и высота$H$ (m). Отклонение лифта$\delta_m$ (рад) используется, чтобы управлять вертикальным коэффициентом загрузки$N_z$. Движущие силы разомкнутого контура включают$\alpha$ колебание с частотой и коэффициентом затухания$\omega_n$ = 1.7 (rad/s) и$\zeta$ = 0.33, фугоидный режим$\omega_n$ = 0.64 (rad/s) и$\zeta$ = 0.06 и медленный высотный режим$\lambda$ =-0.0026.

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] rad/s (вспомните, что мы не можем управлять установившейся ошибкой обнулить из-за нуля объекта в 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';

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 = 74

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

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

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

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

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

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

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

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

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

wn = 4.82
-----------------------------------
zeta = 0.514

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

Fro = getBlockValue(ST,'RollOff');
tf(Fro)
ans =
 
          23.21
  ---------------------
  s^2 + 4.949 s + 23.21
 
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]);

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

Смотрите также

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

Похожие темы