Этот пример использует systune
для разработки и настройки контроллера MIMO для дизельного двигателя. Контроллер настраивается в дискретном времени для одного рабочего условия.
Современные дизельные двигатели используют турбонагнетатель переменной геометрии (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')
Существуют две основные цели управления:
Реагируйте на изменения в давлении наддува и массовом потоке EGR примерно за 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. Также задайте амплитуды сигнала, чтобы правильно отражать относительный вклад каждого нарушения порядка.
% 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» -пространственные контроллеры различных порядков. Модель объекта управления имеет четыре состояния, поэтому попробуйте контроллер порядка четырех или менее. Здесь мы настраиваем контроллер второго порядка, так как блок «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: Результаты симуляции с упрощенным контроллером.
slTuner
| systune (slTuner)
| TuningGoal.Margins
| TuningGoal.MaxLoopGain
| TuningGoal.StepRejection
| TuningGoal.Tracking