В этом примере показано, как смоделировать вычислительную задержку и эффект выборки с помощью Simulink Control Design.
Вычислительные задержки и эффекты выборки могут критически произвести производительность системы управления. Как правило, ответы с обратной связью системы становятся колебательными и нестабильными, если эти факторы не учтены. Поэтому при моделировании системы управления, необходимо включать вычислительные задержки и эффекты выборки точно спроектировать и симулировать систему с обратной связью.
Существует два подхода для разработки компенсаторов с эффектами вычислительной задержки и выборки. Первый подход должен спроектировать контроллер в дискретной области, чтобы получить эффекты выборки путем дискретизации объекта. Второй подход должен спроектировать контроллер в непрерывной области. Этот подход иногда более удобен, но в этом случае необходимо объяснить эффекты вычислительной задержки и выборки. В этом примере вы применяете оба подхода, чтобы перепроектировать систему управления с помощью Simulink Control Design.
В следующей модели в качестве примера начальный компенсатор имеет следующие усиления от компенсатора в примере "Один Проект Обратной связи/Предварительного фильтра Цикла":
P = 0.0018222
I = 0.0052662
Первая модель имеет дискретную реализацию системы управления.
mdl = 'scdspeed_compdelay';
open_system(mdl);
В этой модели, блоке scdspeed_compdelay/Computational Delay
моделирует эффекты вычислительной задержки. Задержка равна шагу расчета контроллера, который является худшим случаем. Нулевой порядок содержит блок scdspeed_compdelay/Zero-Order Hold
моделирует эффект выборки на ответе системы. Наконец, контроллер скорости (реализованный с блоком PID Controller) дискретизируется с помощью метода выборки Форварда Эйлера.
Вы видите эффект выборки путем симуляции ответа системы.
Во-первых, дискретизируйте контроллер в Ts = 0.1:
Ts = 0.1; sim(mdl); T2 = simout.time; Y2 = simout.signals.values;
Затем дискретизируйте контроллер в увеличенном шаге расчета Ts = 0,25 секунды:
Ts = 0.25; sim(mdl); T3 = simout.time; Y3 = simout.signals.values;
Вторая модель является непрерывной моделью.
mdl_continuous = 'scdspeed_contcomp';
open_system(mdl_continuous);
Симулируйте ответ непрерывной модели:
sim(mdl_continuous); T1 = simout.time; Y1 = simout.signals.values;
Постройте симуляцию и дискретных и непрерывных моделей. Обратите внимание на то, что ответ становится более колебательным, когда шаг расчета увеличен.
plot(T1,Y1,'k',T2,Y2,'r',T3,Y3,'g') xlabel('Time (sec.)') ylabel('Engine Speed Response'); legend('Continuous Controller','Ts = 0.1','Ts = 0.25'); grid
Чтобы удалить колебательные эффекты системы с обратной связью с самым медленным шагом расчета Ts = 0.25, необходимо перепроектировать компенсатор. Во-первых, модернизация с помощью дискретизированной версии объекта. Можно перепроектировать компенсатор способом, похожим на пример, названный "Один Проект Обратной связи/Предварительного фильтра Цикла". Настроенный компенсатор имеет следующие усиления:
P = 0.00066155
I = 0.0019118795
set_param('scdspeed_compdelay/PID Controller','P','0.00066155'); set_param('scdspeed_compdelay/PID Controller','I','0.0019118795');
Симулируйте получившуюся систему с обратной связью с шагом расчета Ts = 0.25. Вы исследуете эти результаты позже в этом примере.
Ts = 0.25; sim(mdl); Td = simout.time; Yd = simout.signals.values;
Как второй подход, перепроектируйте контроллер с непрерывными эквивалентами единичной задержки и обнулите порядок, содержат.
Установите нулевой порядок, содержат динамику
на блоке scdspeed_compdelay/Zero-Order Hold
путем щелчка правой кнопкой по блоку и выбирают Linear Analysis-> Specify Linearization. Следующее диалоговое окно блока открывается, чтобы указать, что нулевой порядок содержит динамику.
Кроме того, задайте линеаризацию, когда нулевой порядок содержит scdspeed_compdelay/Zero-Order Hold
с непрерывным представлением. Следующий код эквивалентен вводу этих спецификаций в диалоговое окно спецификации.
zohblk = 'scdspeed_compdelay/Zero-Order Hold'; set_param(zohblk,'SCDEnableBlockLinearizationSpecification','on'); rep = struct('Specification','(1-ss(1,''InputDelay'',Ts))*ss(0,1,1,0)/Ts',... 'Type','Expression',... 'ParameterNames','',... 'ParameterValues',''); set_param(zohblk,'SCDBlockLinearizationSpecification',rep);
Задайте линеаризацию блока scdspeed_compdelay/Computational Delay
задержки с непрерывной транспортной задержкой.
Используйте эти команды, чтобы задать линеаризацию блока:
delayblk = 'scdspeed_compdelay/Computational Delay'; set_param(delayblk,'SCDEnableBlockLinearizationSpecification','on'); rep = struct('Specification','ss(1,''InputDelay'',Ts)',... 'Type','Expression',... 'ParameterNames','',... 'ParameterValues',''); set_param(delayblk,'SCDBlockLinearizationSpecification',rep);
Анализ проектирования контроллера затем остается в непрерывной области. Теперь линеаризуйте модель с задержками Ts = 0.1 и 0.25. Во-первых, установите точки ввода-вывода линеаризации:
io(1) = linio('scdspeed_compdelay/PID Controller',1,'input'); io(2) = linio('scdspeed_compdelay/Zero-Order Hold',1,'openoutput');
Линеаризуйте модель в Ts = 0.1:
Ts = 0.1; sys2 = linearize(mdl,io);
Линеаризуйте модель в Ts = 0.25:
Ts = 0.25; sys3 = linearize(mdl,io);
Наконец, линеаризуйте модель без эффектов выборки и вычислительной задержки:
io(1) = linio('scdspeed_contcomp/PID Controller',1,'input'); io(2) = linio('scdspeed_contcomp/rad//s to rpm',1,'openoutput'); sys1 = linearize(mdl_continuous,io);
Можно использовать линейные модели механизма, чтобы исследовать эффекты вычислительной задержки на частотной характеристике. В этом случае фазовый отклик системы значительно уменьшается из-за задержки, введенной путем выборки.
p = bodeoptions('cstprefs'); p.Grid = 'on'; p.PhaseMatching = 'on'; bodeplot(sys1,'k',sys2,'r',sys3,'g', {1e-2,1e2},p); legend('Continuous Model','Ts = 0.1','Ts = 0.25','Location','SouthWest');
Используя модель с самым медленным шагом расчета, перепроектируйте компенсатор с помощью методов в примере "Один Проект Обратной связи/Предварительного фильтра Цикла". Это дает следующие Усиления PI:
set_param('scdspeed_compdelay/PID Controller','P','0.00065912'); set_param('scdspeed_compdelay/PID Controller','I','0.001898342');
Симулируйте получившуюся систему замкнутого цикла с шагом расчета Ts = 0.25:
sim(mdl); Tc = simout.time; Yc = simout.signals.values;
Постройте ответы проекта. Модернизация системы управления с помощью обоих подходов дает к подобным контроллерам. Этот пример показывает эффекты вычислительной задержки и дискретизации. Эти эффекты уменьшают запасы устойчивости системы, но когда вы правильно моделируете систему управления, можно достигнуть желаемого поведения с обратной связью.
plot(T1,Y1,'k',T3,Y3,'b',Td,Yd,'m',Tc,Yc,'r') xlabel('Time (sec.)') ylabel('Engine Speed Response'); h = legend('cont. compensator (orig)','disc. compensator (orig)', ... 'disc. compensator (disc. redesign)',... 'disc. compensator (cont. redesign)',... 'Location','SouthEast'); grid bdclose('scdspeed_contcomp') bdclose('scdspeed_compdelay')