В этом примере показано, как смоделировать вычислительную задержку и эффекты выборки с помощью программного обеспечения Simulink® Control Design™.
Вычислительные задержки и эффекты выборки могут критически произвести эффективность системы управления. Как правило, ответы с обратной связью системы становятся колебательными и нестабильными, если эти факторы не учтены. Поэтому при моделировании системы управления, необходимо включать вычислительные задержки и эффекты выборки точно спроектировать и симулировать систему с обратной связью.
Существует два подхода для разработки компенсаторов с эффектами вычислительной задержки и выборки. Первый подход должен спроектировать контроллер в дискретной области, чтобы получить эффекты выборки путем дискретизации объекта. Второй подход должен спроектировать контроллер в непрерывной области. Этот подход иногда более удобен, но в этом случае необходимо объяснить эффекты вычислительной задержки и выборки. В этом примере вы применяете оба подхода, чтобы перепроектировать систему управления с помощью программного обеспечения Simulink Control Design.
В следующей модели в качестве примера начальный компенсатор имеет следующие усиления от компенсатора в примере Один Проект Компенсатора Обратной связи/Предварительного фильтра Цикла.
P = 0.0018222 I = 0.0052662
Первая модель имеет дискретную реализацию системы управления.
mdl = 'scdspeed_compdelay';
open_system(mdl)
В этой модели блок Computational Delay моделирует эффекты вычислительной задержки. Задержка равна шагу расчета контроллера, который является худшим случаем. Блок 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;
Как второй подход, перепроектируйте контроллер с непрерывными эквивалентами единичной задержки, и нулевой порядок содержат.
В данном примере используйте следующий нулевой порядок, содержат динамику.
Чтобы задать эти движущие силы в модели, щелкните правой кнопкой по блоку Zero-Order Hold и выберите Linear Analysis> Specify Selected Block Linearization. В диалоговом окне Block Linearization укажите, что выражение для нулевого порядка содержит динамику.
Эквивалентно, можно задать линеаризацию блока с помощью следующего кода.
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)
Задайте линеаризацию Вычислительной Задержки с помощью непрерывной транспортной задержки.
Задайте линеаризацию для блока задержки с помощью следующего кода.
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.
P = 0.00065912 I = 0.001898342
Установите эти усиления в контроллере.
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') legend('Continuous compensator (original)','Discrete compensator (original)', ... 'Discrete compensator (discrete redesign)',... 'Discrete compensator (continuous redesign)',... 'Location','southeast') grid
bdclose('scdspeed_contcomp') bdclose('scdspeed_compdelay')