exponenta event banner

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

В этом примере показано, как использовать slTuner и systune для настройки стандартной конфигурации продольного автопилота. Мы благодарим профессора Д. Алазара из Суперинститутского института аэронавтики и космического пространства за предоставление модели самолета и профессора Пьера Апкаряна из ОНЕРА за разработку примера.

Модель самолета и конфигурация автопилота

Продольный автопилот для сверхзвукового пассажирского реактивного самолета, летящего на высоте 0,7 и 5000 футов, изображен на фиг.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$м/с), угол набора высоты ($\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';

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$ и соответствующих вкладов путей передачи и обратной связи:

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)

Связанные темы