Engine MIMO

Этот пример использует systune для разработки и настройки контроллера MIMO для дизельного двигателя. Контроллер настраивается в дискретном времени для одного рабочего условия.

Модель дизельного Engine

Современные дизельные двигатели используют турбонагнетатель переменной геометрии (VGT) и рециркуляцию выхлопных газов (EGR) для уменьшения выбросов. Жесткое управление давлением нарастания VGT и массовым потоком EGR необходимо для достижения строгих целевых показателей выбросов. Этот пример показывает, как спроектировать и настроить контроллер MIMO, который регулирует эти две переменные, когда двигатель работает со скоростью 2100 об/мин с массой топлива 12 мг на инъекционный цилиндр.

open_system('rct_diesel')

Система управления VGT/EGR моделируется в Simulink. Контроллер настраивает положения EGRLIFT и VGTPOS клапанов EGR и VGT. Он имеет доступ к задачам и измеренным значениям давления наддува и массового потока ЭГР, а также к измерениям массы топлива и скорости вращения двигателя. Оба клапана имеют скорость и насыщение пределов. Модель объекта управления дискретизируется каждые 0,1 секунды, и сигналы управления EGRLIFT и VGTPOS обновляются каждые 0,2 секунды. Этот пример рассматривает изменения шага + 10 кПа в давлении наддува и + 3 г/с в массовом потоке EGR и нарушений порядка + 5 мг в массе топлива и -200 об/мин в скорости.

Для рабочего условия под фактор мы использовали Систему идентификации, чтобы вывести линейную модель двигателя из экспериментальных данных. Частотная характеристика от манипулируемых переменных EGRLIFT и VGTPOS к управляемым переменным BOOST и EGR MF появится ниже. При этом объект плохо обусловлена на низкой частоте, что затрудняет независимое управление давлением наддува и массовым потоком ЭГР.

sigma(Plant(:,1:2)), grid
title('Frequency response of the linearized engine dynamics')

Цели управления

Существуют две основные цели управления:

  1. Реагируйте на изменения в давлении наддува и массовом потоке EGR примерно за 5 секунд с минимальной поперечной муфтой

  2. Будьте нечувствительны к (малым) изменениям скорости и массы топлива.

Используйте требование отслеживания для первой цели. Задайте амплитуды изменений шага, чтобы убедиться, что поперечные связи малы относительно этих изменений.

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

% 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, это требование гарантирует стабильность для изменений усиления или фазы в каждом канале обратной связи. Коэффициент усиления или фаза могут изменяться в обоих каналах одновременно и на разную величину в каждом канале. Смотрите Запасы устойчивости в Настройке Системы Управления и 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';

Настройка контроллера Blackbox MIMO

Не имея априорных знаний о подходящей структуре управления, сначала попробуйте «blackbox» -пространственные контроллеры различных порядков. Модель объекта управления имеет четыре состояния, поэтому попробуйте контроллер порядка четырех или менее. Здесь мы настраиваем контроллер второго порядка, так как блок «SS2» в модели Simulink имеет два состояния.

Фигура 1: blackbox второго порядка контроллера.

Используйте 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.06, Hard = 0.92146, Iterations = 306
Final: Soft = 1.05, Hard = 0.94287, Iterations = 403
Final: Soft = 1.05, Hard = 0.94653, Iterations = 435

Все требования почти выполняются (требование удовлетворяется, когда его нормализованное значение меньше 1). Проверьте это графически.

figure('Position',[10,10,1071,714])
viewGoal([TR DR RO M1 M2],ST1)

Постройте график отслеживания уставки и подавления помех характеристик. Шкала по амплитудам сигнала, чтобы показать нормализованные эффекты (изменение давления наддува на + 10 кПа, массовый поток EGR на + 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 PI с feedforward нарушения порядка первого порядка.

Фигура 2: Упрощенная структура управления.

Используя исполнительные подсистемы, можно реализовать обе структуры управления в одной модели Simulink и использовать переменную, чтобы переключаться между ними. Настройка здесь MODE=2 выбирает структуру MIMO PI. Как и прежде, используйте 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.9993, Iterations = 178

Снова все требования почти выполнены. Постройте график откликов с обратной связью и сравните с проектом пространства состояний.

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')

Блэкбокс и упрощенные структуры управления обеспечивают аналогичную эффективность. Проверьте настроенные значения коэффициента усиления ПИ и коэффициента усиления с прямой связью.

showTunable(ST2)
Block 1: rct_diesel/CONTROLLER/MIMO PID/Kp =
 
  D = 
               u1          u2
   y1   -0.007985  -0.0007788
   y2    -0.02045      0.0146
 
Name: Kp
Static gain.

-----------------------------------

Block 2: rct_diesel/CONTROLLER/MIMO PID/Ki =
 
  D = 
             u1        u2
   y1  -0.01055  -0.01432
   y2  -0.03002   0.04681
 
Name: Ki
Static gain.

-----------------------------------

Block 3: rct_diesel/CONTROLLER/MIMO PID/Kff =
 
  D = 
               u1          u2
   y1     0.01366  -9.399e-05
   y2     0.03403   -0.001471
 
Name: Kff
Static gain.

Нелинейная валидация

Чтобы подтвердить ПИ-контроллер MIMO в модели Simulink, нажмите настроенные параметры контроллера на Simulink и запустите симуляцию.

writeBlockValue(ST2)

Результаты симуляции показаны ниже и подтверждают, что контроллер адекватно отслеживает изменения уставки в давлении наддува и массовом потоке EGR и быстро отклоняет изменения массы топлива (при t = 90) и скорости (при t = 110).

Фигура 3: Результаты симуляции с упрощенным контроллером.

См. также

| | | | |

Похожие темы