Этот пример использует 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.09, Hard = 0.89181, Iterations = 485 Final: Soft = 1.05, Hard = 0.99623, Iterations = 422 Final: Soft = 1.05, Hard = 0.99891, Iterations = 557
Все требования почти удовлетворяются (требованию удовлетворяют, когда его нормированное значение меньше 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')
Первый график предполагает, что контроллер по существу ведет себя как ПИ-контроллер, действующий на REF - Y (различие между целевыми и фактическими значениями управляемых переменных). Второй график предполагает, что передача от измеренного воздействия до переменных, которыми управляют, могла быть заменена усилением последовательно с сетью задержки. В целом это предлагает следующую упрощенную управляющую структуру, состоящую из ПИ-контроллера 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.94249, Iterations = 164
Снова все требования почти удовлетворяются. Постройте ответы с обратной связью и сравните с проектом пространства состояний.
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.00804 -0.0004319 y2 -0.02068 0.01563 Name: Kp Static gain. ----------------------------------- Block 2: rct_diesel/CONTROLLER/MIMO PID/Ki = D = u1 u2 y1 -0.01056 -0.01241 y2 -0.0304 0.04968 Name: Ki Static gain. ----------------------------------- Block 3: rct_diesel/CONTROLLER/MIMO PID/Kff = D = u1 u2 y1 0.01341 -9.759e-05 y2 0.03112 -0.00143 Name: Kff Static gain.
Чтобы подтвердить ПИ-контроллер MIMO в модели Simulink, продвиньте настроенные параметры контроллера к Simulink и запустите симуляцию.
writeBlockValue(ST2)
Результаты симуляции показывают ниже и подтверждают, что контроллер соответственно отслеживает изменения заданного значения в давлении наддува и EGR massflow и быстро отклоняет изменения в топливной массе (в t=90) и в скорости (в t=110).
Рисунок 3: Результаты симуляции с упрощенным контроллером.
TuningGoal.Margins
| TuningGoal.MaxLoopGain
| TuningGoal.StepRejection
| TuningGoal.Tracking
| slTuner
| systune (slTuner)