В этом примере показано, как использовать slTuner
и systune
для настройки мультицикла для винтокрылой машины.
Этот пример использует модель вертолета с 8 состояниями при условии зависания отделки. Вектор состояния x = [u,w,q,theta,v,p,phi,r]
состоит из
Продольная скорость u
(м/с)
Поперечная скорость v
(м/с)
Нормальная скорость w
(м/с)
Тангаж theta
(град)
Крен угла phi
(град)
Скорость крена p
(град/с)
Тангаж скорости q (град/с)
Скорость рыскания r
(град/с).
Контроллер генерирует команды ds,dc,dT
в степенях для коллектива продольных циклических, боковых циклических и хвостовых роторов с использованием измерений theta
, phi
, p
, q
, и r
.
Следующая модель Simulink изображает архитектуру управления:
open_system('rct_helico')
Система управления состоит из двух циклов обратной связи. Внутренний цикл (статическая выходная обратная связь) обеспечивает увеличение устойчивости и развязку. Внешний контур ( ПИ-контроллеры) обеспечивает требуемую эффективность отслеживания уставки. Основные цели управления заключаются в следующем:
Отслеживайте изменения уставки в theta
, phi
, и r
при нулевой установившейся ошибке, временах нарастания около 2 секунд, минимальном перерегулировании и минимальном перекрестном соединении
Ограничьте полосу пропускания управления, чтобы защитить от запущенной динамики высокочастотного ротора и шума измерения
Обеспечьте сильный многопараметрический коэффициент усиления и запасов по фазе (робастность к одновременным изменениям коэффициента усиления/фазы на входах и выходах объекта управления, см diskmargin
для получения дополнительной информации).
Мы используем lowpass с отсечкой 40 рад/с, чтобы частично применить вторую цель.
Можно совместно настроить внутренний и внешние контуры с systune
команда. Эта команда требует только моделей объекта управления и контроллера наряду с желаемой пропускной способностью (которая является функцией требуемого времени отклика). Когда система управления моделируется в Simulink, можно использовать slTuner
интерфейс для быстрой настройки задачи настройки. Создайте образец этого интерфейса со списком блоков, которые будут настроены.
ST0 = slTuner('rct_helico',{'PI1','PI2','PI3','SOF'});
Каждый настраиваемый блок автоматически параметризован в соответствии с его типом и инициализирован со своим значением в модели Simulink (для ПИ-контроллеров и нуля для статического коэффициента усиления с обратной связью). Симуляция модели показывает, что система управления нестабильна для этих начальных значений:
Отметьте сигналы ввода-вывода, представляющие интерес для отслеживания уставки, и идентифицируйте входы и выходы объекта (сигналы управления и измерения), где измеряется запас устойчивости.
addPoint(ST0,{'theta-ref','phi-ref','r-ref'}) % setpoint commands addPoint(ST0,{'theta','phi','r'}) % corresponding outputs addPoint(ST0,{'u','y'});
Наконец, соберите требования к проекту, используя TuningGoal
объекты. Мы используем следующие требования для этого примера:
Требование отслеживания: Реакция theta
, phi
, r
к шаговым командам theta_ref
, phi_ref
, r_ref
должен напоминать развязанный ответ первого порядка с одной второй временной константой
Пределы устойчивости: Многомерный коэффициент усиления и запасов по фазе на входах объекта u и выходы объекта
y
должно быть не менее 5 дБ и 40 степени
Быстрая динамика: Величина полюсов с обратной связью не должна превышать 25, чтобы предотвратить быструю динамику и рывковые переходные процессы
% Less than 20% mismatch with reference model 1/(s+1) TrackReq = TuningGoal.StepTracking({'theta-ref','phi-ref','r-ref'},{'theta','phi','r'},1); TrackReq.RelGap = 0.2; % Gain and phase margins at plant inputs and outputs MarginReq1 = TuningGoal.Margins('u',5,40); MarginReq2 = TuningGoal.Margins('y',5,40); % Limit on fast dynamics MaxFrequency = 25; PoleReq = TuningGoal.Poles(0,0,MaxFrequency);
Теперь можно использовать systune
для совместной настройки всех параметров контроллера. Это возвращает настроенную версию ST1
системы управления ST0
.
AllReqs = [TrackReq,MarginReq1,MarginReq2,PoleReq]; ST1 = systune(ST0,AllReqs);
Final: Soft = 1.12, Hard = -Inf, Iterations = 75
Окончательное значение близко к 1, поэтому требования почти выполняются. Постройте графики настроек на пошаговые команды в theta, phi, r:
T1 = getIOTransfer(ST1,{'theta-ref','phi-ref','r-ref'},{'theta','phi','r'}); step(T1,5)
Время нарастания составляет около двух секунд без перерегулирования и небольшого сцепления. Можно использовать viewGoal
для получения более подробной валидации каждого требования, включая визуальную оценку многопараметрических запасов устойчивости (см. diskmargin
для получения дополнительной информации):
figure('Position',[100,100,900,474])
viewGoal(AllReqs,ST1)
Осмотрите настроенные значения ПИ-контроллеров и статического коэффициента усиления с обратной связью.
showTunable(ST1)
Block 1: rct_helico/PI1 = 1 Kp + Ki * --- s with Kp = 1.03, Ki = 2.14 Name: PI1 Continuous-time PI controller in parallel form. ----------------------------------- Block 2: rct_helico/PI2 = 1 Kp + Ki * --- s with Kp = -0.098, Ki = -1.33 Name: PI2 Continuous-time PI controller in parallel form. ----------------------------------- Block 3: rct_helico/PI3 = 1 Kp + Ki * --- s with Kp = 0.141, Ki = -2.22 Name: PI3 Continuous-time PI controller in parallel form. ----------------------------------- Block 4: rct_helico/SOF = D = u1 u2 u3 u4 u5 y1 2.276 -0.3148 -0.00348 0.7863 -0.01576 y2 -0.1846 -1.251 0.01889 -0.07602 -0.1178 y3 -0.03125 -0.01057 -1.897 -0.008094 0.06802 Name: SOF Static gain.
Вы можете задаться вопросом, необходима ли статическая выходная обратная связь и недостаточно ли ПИД-регуляторов для управления вертолетом. На этот вопрос легко ответить, перестроив контроллер с разомкнутым внутренним циклом. Сначала сломайте внутренний цикл, добавив открытие цикла после SOF
блок:
addOpening(ST0,'SOF')
Затем удалите SOF
блокируйте из настраиваемого списка блоков и повторно параметризовайте блоки PI как полномасштабные ПИДы с правильными знаками цикла (как было выведено из первого проекта).
PID = pid(0,0.001,0.001,.01); % initial guess for PID controllers removeBlock(ST0,'SOF'); setBlockParam(ST0,... 'PI1',tunablePID('C1',PID),... 'PI2',tunablePID('C2',-PID),... 'PI3',tunablePID('C3',-PID));
Перестроите три ПИД-регуляторов и постройте график переходных характеристик с обратной связью.
ST2 = systune(ST0,AllReqs);
Final: Soft = 4.94, Hard = -Inf, Iterations = 67
T2 = getIOTransfer(ST2,{'theta-ref','phi-ref','r-ref'},{'theta','phi','r'}); figure, step(T2,5)
Окончательное значение больше не близко к 1, и переходные характеристики подтверждают более плохую эффективность в отношении времени нарастания, перерегулирования и развязки. Это предполагает, что внутренний цикл имеет важный стабилизирующий эффект, который должен быть сохранен.
slTuner
| systune (slTuner)
| TuningGoal.Margins
| TuningGoal.Poles
| TuningGoal.StepTracking