Моделирование вычислительных эффектов задержки и дискретизации

Этот пример показывает, как смоделировать вычислительную задержку и эффект дискретизации с помощью Simulink Control Design.

Введение

Вычислительные задержки и эффекты дискретизации могут критически повлиять на эффективность системы управления. Обычно отклики системы с обратной связью становятся колебательными и нестабильными, если эти факторы не учитываются. Поэтому при моделировании системы управления необходимо включать вычислительные задержки и эффекты дискретизации для точной разработки и моделирования системы с обратной связью.

Существует два подхода к разработке компенсаторов с эффектами вычислительной задержки и дискретизации. Первый подход состоит в том, чтобы спроектировать контроллер в дискретной области, чтобы захватить эффекты выборки путем дискретизации объекта. Второй подход заключается в разработке контроллера в непрерывной области. Этот подход иногда более удобен, но в этом случае необходимо учитывать эффекты вычислительной задержки и дискретизации. В этом примере вы применяете оба подхода к перепроектированию системы управления с помощью Simulink Control Design.

Симуляция с использованием дискретных и непрерывных контроллеров

В следующей модели примера начальный компенсатор имеет следующие усиления от компенсатора в примере Single Loop Feedback/Prefilter Compensator Design.

         P = 0.0018222
         I = 0.0052662

Первая модель имеет дискретную реализацию системы управления.

mdl = 'scdspeed_compdelay';
open_system(mdl)

В этой модели блок scdspeed_compdelay/Computational Delay моделирует эффекты вычислительной задержки. Задержка равна шагу расчета контроллера, что является худшим случаем. Блок удержания нулевого порядка scdspeed_compdelay/Zero-Order Hold моделирует эффект дискретизации на ответ системы. Наконец, контроллер скорости (реализованный с блоком ПИД-регулятор, дискретизируется с помощью метода дискретизации Forward Euler.

Эффект дискретизации можно увидеть путем симуляции отклика системы.

Сначала дискретизируйте контроллер при 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, необходимо перепроектировать компенсатор. Во-первых, перепроектирование с использованием дискретизированной версии объекта. Вы можете перепроектировать компенсатор способом, подобным Single Loop Feedback/Prefilter Compensator Design. Настроенный компенсатор имеет следующие усиления:

         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;

Учет задержек и дискретизация непрерывного временного интервала

В качестве второго подхода перепроектируйте контроллер с непрерывными эквивалентами задержки модуля и удержания нуля порядка.

Установите динамику удержания нулевого порядка

$$ZOH(s) = \frac{1-e^{-sT_s}}{sT_s}$$

на блоке scdspeed_compdelay/Zero-Order Hold щелкните правой кнопкой мыши на блоке и выберите «Линейный анализ» - > «Задать линеаризацию». Откроется следующее диалоговое окно блоков, в котором будет задана динамика удержания нулевого порядка.

Кроме того, задайте линеаризацию как удержание нулевого порядка 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 с непрерывной задержкой транспортировки.

$$DELAY(s) = e^{-sT_s}$$

Используйте эти команды, чтобы задать линеаризацию блоков.

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

Используя модель с самым медленным шагом расчета, перепроектируйте компенсатор с помощью методов в Single Loop Feedback/Prefilter Compensator Design. Это дает следующие коэффициенты усиления ПИ:

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

  Legend (cont. compensator (orig), disc. compensator (o…) with properties:

         String: {1x4 cell}
       Location: 'southeast'
    Orientation: 'vertical'
       FontSize: 9
       Position: [0.5222 0.1294 0.3683 0.1274]
          Units: 'normalized'

  Use GET to show all properties