Этот пример использует systune
, чтобы разработать и настроить контроллер MIMO для Дизельного двигателя. Контроллер настраивается в дискретное время для одних условий работы.
Современные Дизельные двигатели используют турбокомпрессор изменяемой геометрии (VGT) и рециркуляцию выхлопного газа (EGR), чтобы сократить выбросы. Жесткий контроль давления наддува VGT и EGR massflow необходим, чтобы достигнуть строгих целей эмиссии. Этот пример показывает, как разработать и настроить контроллер MIMO, который регулирует эти две переменные, когда механизм действует на уровне 2 100 об/мин с топливной массой 12 мг на инжекционный цилиндр.
open_system('rct_diesel')
Система управления VGT/EGR моделируется в Simulink. Контроллер регулирует положения EGRLIFT
и VGTPOS
EGR и клапанов VGT. Это имеет доступ к давлению наддува и EGR massflow цели и измеренные значения, а также топливная масса и измерения скорости вращения двигателя. Оба клапана имеют пределы насыщения и уровень. Модель объекта управления выбирается каждую 0.1 секунды и управляющие сигналы, EGRLIFT
и VGTPOS
обновляются каждые 0.2 секунды. Этот пример рассматривает ступенчатые изменения +10 кПа в давлении наддува и +3 г/с в EGR massflow и воздействий +5 мг в топливной массе и-200 об/мин в скорости.
Для условий работы на рассмотрении, мы использовали System Identification, чтобы вывести линейную модель механизма от экспериментальных данных. Частотная характеристика от переменных EGRLIFT
и VGTPOS
, которыми управляют, до управляемых переменных BOOST
и EGR MF
появляется ниже. Обратите внимание на то, что объект плохо обусловливается в низкой частоте, которая делает независимое управление давления наддува и EGR massflow трудным.
sigma(Plant(:,1:2)), grid
title('Frequency response of the linearized engine dynamics')
Существует две основных цели управления:
Ответьте на ступенчатые изменения в давлении наддува и EGR massflow приблизительно за 5 секунд с минимальной перекрестной связью
Будьте нечувствительны к (маленьким) изменениям в топливной массе и скорости.
Используйте требование отслеживания для первой цели. Задайте амплитуды ступенчатых изменений, чтобы гарантировать, что перекрестные связи являются маленькими относительно этих изменений.
% 5-second response time, steady-state error less than 5% TR = TuningGoal.Tracking({'BOOST REF';'EGRMF REF'},{'BOOST';'EGRMF'},5,0.05); TR.Name = 'Setpoint tracking'; TR.InputScaling = [10 3];
Для второй цели обработайте скорость и топливные изменения массы как воздействия шага и задайте пиковую амплитуду и время установления получившихся изменений в давлении наддува и EGR massflow. Также задайте амплитуды сигнала, чтобы правильно отразить относительный вклад каждого воздействия.
% Peak<0.5, settling time<5 DR = TuningGoal.StepRejection({'FUELMASS';'SPEED'},{'BOOST';'EGRMF'},0.5,5); DR.Name = 'Disturbance rejection'; DR.InputScaling = [5 200]; DR.OutputScaling = [10 3];
Чтобы предоставить соответствующую робастность несмоделированной динамике и искажению, ограничьте пропускную способность управления и наложите достаточные запасы устойчивости в обоих вводы и выводы объекта. Поскольку мы имеем дело с MIMO 2 на 2 обратная связь, эти запасы устойчивости интерпретированы как дисковые поля (см. diskmargin
и TuningGoal.Margins
для деталей).
% Roll off of -20 dB/dec past 1 rad/s RO = TuningGoal.MaxLoopGain({'EGRLIFT','VGTPOS'},1,1); RO.LoopScaling = 'off'; RO.Name = 'Roll-off'; % 7 dB of gain margin and 45 degrees of phase margin M1 = TuningGoal.Margins({'EGRLIFT','VGTPOS'},7,45); M1.Name = 'Plant input'; M2 = TuningGoal.Margins('DIESEL ENGINE',7,45); M2.Name = 'Plant output';
Без априорного ведома подходящей управляющей структуры сначала судите контроллеры пространства состояний "черного ящика" различных порядков. Модель объекта управления имеет четыре состояния, так судите контроллер порядка четыре или меньше. Здесь мы настраиваем контроллер второго порядка, поскольку блок "SS2" в модели Simulink имеет два состояния.
Рисунок 1: контроллер черного ящика второго порядка.
Используйте интерфейс slTuner
, чтобы сконфигурировать модель Simulink для настройки. Отметьте блок "SS2" как настраиваемый, укажите местоположения, где оценить поля и формы цикла, и указать, что линеаризация и настройка должны быть выполнены в контроллере, выбирающем уровень.
ST0 = slTuner('rct_diesel','SS2'); ST0.Ts = 0.2; addPoint(ST0,{'EGRLIFT','VGTPOS','DIESEL ENGINE'})
Теперь используйте systune
, чтобы настроить контроллер пространства состояний, подвергающийся нашим целям управления. Обработайте запасы устойчивости и цель спада как трудные ограничения и попытайтесь лучше всего достигнуть остающихся целей (мягкие цели). Рандомизируйте отправную точку, чтобы уменьшать воздействие нежелательных локальных минимумов.
Opt = systuneOptions('RandomStart',2);
rng(0), ST1 = systune(ST0,[TR DR],[M1 M2 RO],Opt);
Final: Soft = 1.05, Hard = 0.95178, Iterations = 377 Final: Soft = 1.06, Hard = 0.90477, Iterations = 486 Final: Soft = 1.05, Hard = 0.97329, Iterations = 388
Все требования почти удовлетворяются (требование удовлетворено, когда его нормированное значение - меньше чем 1). Проверьте это графически.
figure('Position',[10,10,1071,714])
viewGoal([TR DR RO M1 M2],ST1)
Постройте отслеживание заданного значения и ответы подавления помех. Шкала амплитудами сигнала, чтобы показать нормированные эффекты (давление наддува изменяется на +10 кПа, EGR massflow на +3 г/с, топливная масса на +5 мг и скорость на-200 об/мин).
figure('Position',[100,100,560,500]) T1 = getIOTransfer(ST1,{'BOOST REF';'EGRMF REF'},{'BOOST','EGRMF','EGRLIFT','VGTPOS'}); T1 = diag([1/10 1/3 1 1]) * T1 * diag([10 3]); subplot(211), step(T1(1:2,:),15), title('Setpoint tracking') subplot(212), step(T1(3:4,:),15), title('Control effort')
D1 = getIOTransfer(ST1,{'FUELMASS';'SPEED'},{'BOOST','EGRMF','EGRLIFT','VGTPOS'}); D1 = diag([1/10 1/3 1 1]) * D1 * diag([5 -200]); subplot(211), step(D1(1:2,:),15), title('Disturbance rejection') subplot(212), step(D1(3:4,:),15), title('Control effort')
Контроллер отвечает меньше чем за 5 секунд минимальной перекрестной связью между переменными BOOST
и EGRMF
.
Контроллер пространства состояний мог быть реализован, как, но часто желательно свести его к более простой, более знакомой структуре. Для этого получите настроенный контроллер и осмотрите его частотную характеристику
C = getBlockValue(ST1,'SS2'); clf bode(C(:,1:2),C(:,3:4),{.02 20}), grid legend('REF to U','Y to U')
bodemag(C(:,5:6)), grid
title('Bode response from FUELMASS/SPEED to EGRLIFT/VGTPOS')
Первый график предполагает, что контроллер по существу ведет себя как контроллер PI, действующий на REF - Y (различие между целевыми и фактическими значениями управляемых переменных). Второй график предполагает, что передача от измеренного воздействия до переменных, которыми управляют, могла быть заменена усилением последовательно с сетью задержки. В целом это предлагает следующую упрощенную управляющую структуру, состоящую из контроллера PI MIMO с воздействием первого порядка feedforward.
Рисунок 2: Упрощенная управляющая структура.
Используя различные подсистемы, можно реализовать обе управляющих структуры в той же модели Simulink и использовать переменную, чтобы переключиться между ними. Установка Here MODE=2
выбирает структуру PI MIMO. Как прежде, используйте systune
, чтобы настроить три матрицы усиления 2 на 2 Kp
, Ki
, Kff
в упрощенной управляющей структуре.
% Select "MIMO PI" variant in "CONTROLLER" block MODE = 2; % Configure tuning interface ST0 = slTuner('rct_diesel',{'Kp','Ki','Kff'}); ST0.Ts = 0.2; addPoint(ST0,{'EGRLIFT','VGTPOS','DIESEL ENGINE'}) % Tune MIMO PI controller. ST2 = systune(ST0,[TR DR],[M1 M2 RO]);
Final: Soft = 1.09, Hard = 0.98847, Iterations = 251
Снова все требования почти удовлетворяются. Постройте ответы с обратной связью и сравните с проектом пространства состояний.
clf T2 = getIOTransfer(ST2,{'BOOST REF';'EGRMF REF'},{'BOOST','EGRMF','EGRLIFT','VGTPOS'}); T2 = diag([1/10 1/3 1 1]) * T2 * diag([10 3]); subplot(211), step(T1(1:2,:),T2(1:2,:),15), title('Setpoint tracking') legend('SS2','PI+FF') subplot(212), step(T1(3:4,:),T2(3:4,:),15), title('Control effort')
D2 = getIOTransfer(ST2,{'FUELMASS';'SPEED'},{'BOOST','EGRMF','EGRLIFT','VGTPOS'}); D2 = diag([1/10 1/3 1 1]) * D2 * diag([5 -200]); subplot(211), step(D1(1:2,:),D2(1:2,:),15), title('Disturbance rejection') legend('SS2','PI+FF') subplot(212), step(D1(3:4,:),D2(3:4,:),15), title('Control effort')
Черный ящик и упрощенные управляющие структуры поставляют подобную производительность. Осмотрите настроенные значения усилений feedforward и PI.
showTunable(ST2)
Block 1: rct_diesel/CONTROLLER/MIMO PID/Kp = D = u1 u2 y1 -0.007992 -0.0006097 y2 -0.02049 0.01443 Name: Kp Static gain. ----------------------------------- Block 2: rct_diesel/CONTROLLER/MIMO PID/Ki = D = u1 u2 y1 -0.0106 -0.01355 y2 -0.03028 0.04691 Name: Ki Static gain. ----------------------------------- Block 3: rct_diesel/CONTROLLER/MIMO PID/Kff = D = u1 u2 y1 0.01396 -9.781e-05 y2 0.03385 -0.001456 Name: Kff Static gain.
Чтобы подтвердить контроллер PI MIMO в модели Simulink, продвиньте настроенные параметры контроллера к Simulink и запустите симуляцию.
writeBlockValue(ST2)
Результаты симуляции показывают ниже и подтверждают, что контроллер соответственно отслеживает изменения заданного значения в давлении наддува и EGR massflow и быстро отклоняет изменения в топливной массе (в t=90) и в скорости (в t=110).
Рисунок 3: Результаты симуляции с упрощенным контроллером.
TuningGoal.Margins
| TuningGoal.MaxLoopGain
| TuningGoal.StepRejection
| TuningGoal.Tracking
| slTuner
| systune (slTuner)