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

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

Рис. 1. Конфигурация продольного автопилота.
Модель самолёта
- 5-статная модель, переменными состояния являются аэродинамическая скорость (
м/с), угол набора высоты (
рад), угол атаки (
рад), скорость тангажа (
рад/с), высота (м).
Отклонение лифта (рад)
используется для управления коэффициентом вертикальной нагрузки.
Динамика разомкнутого контура включает
колебание с коэффициентом частоты и демпфирования = 1,7 (
рад/с) и = 0,33,
фугоидную моду = 0,64 (
рад/с) и = 0,06, и
медленную высотную моду = -0,0026.
load ConcordeData G bode(G,{1e-3,1e2}), grid title('Aircraft Model')

Обратите внимание на ноль в начале координат в.
Из-за этого нуля мы не можем достичь нулевой стационарной ошибки и вместо этого должны сосредоточиться на переходной реакции на команды ускорения. Обратите внимание, что команды ускорения являются переходными по своему характеру, поэтому стационарное поведение не является проблемой. Этот ноль в начале координат также исключает чисто интегральное действие, поэтому мы используем псевдоинтегратор
с =
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 в этом примере инициализированы как нулевые. По умолчанию фильтр свертки
параметризуется как универсальная функция переноса второго порядка. Параметризация его как

создать реальные параметры,
построить передаточную функцию, показанную выше, и связать ее с 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. Отслеживание уставки: Ответ
на команду
должен точно соответствовать ответу эталонной модели:

Эта эталонная модель определяет хорошо затухающий отклик с 2-секундным временем отстаивания.
2. Высокочастотное скатывание: Отклик по замкнутому контуру от шумовых сигналов к
должен скатываться за 8 рад/с с наклоном не менее -40 дБ/декада.
3. Края стабильности: края стабильности во входе завода
должны составить по крайней мере 7 дБ и 45 градусов.
Для отслеживания уставки мы требуем, чтобы коэффициент усиления передачи по замкнутому контуру от команды
к ошибке отслеживания
был небольшим в полосе частот [0.05,5] рад/с (напомним, что мы не можем привести ошибку установившегося состояния к нулю из-за нуля установки при s = 0). Используя несколько частотных точек, нарисуйте максимальную ошибку отслеживания как функцию частоты и используйте ее для ограничения коэффициента усиления от
до.
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)

Повторите тот же процесс, чтобы ограничить высокочастотный коэффициент усиления от входов шума
и усилить наклон -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)

Наконец, зарегистрируйте исходные данные завода
в качестве площадки для анализа и использования с разомкнутым контуром. 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
Чтобы получить настроенное значение,
используйте 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)

Теперь мы проверим, что настроенный автопилот удовлетворяет проектным требованиям. Сначала сравнивают отклик шага
с откликом шага эталонной модели.
Снова использовать 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')

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

Наконец, проверьте требования к скатыванию и пределу устойчивости, рассчитав отклик с разомкнутым контуром на шаге.
OL = getLoopTransfer(ST,'delta_m',-1); % negative-feedback loop transfer margin(OL); grid; xlim([1e-3,1e2]);

График Боде подтверждает скатывание -40 дБ/декада за последние 8 рад/с и показывает усиление и поля фазы, превышающие 10 дБ и 70 градусов.
TuningGoal.Gain | TuningGoal.Margins | slTuner (Simulink Control Design) | systune (slTuner)(Проект управления Simulink)