Линеаризация моделей с задержками

Этот пример показывает, как линеаризировать модель Simulink с задержками в ней.

Линеаризация моделей с непрерывными задержками

Можно линеаризировать модель Simulink с непрерывными блоками задержек времени, такими как Задержка Переноса, Переменная Задержка Переноса и Переменная Задержка Времени с помощью одной из следующих опций:

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

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

По умолчанию Simulink Control Design использует аппроксимации Паде блоков задержки в модели Simulink.

Чтобы открыть модель скорости вращения двигателя, используемую в этом примере, введите

model = 'scdspeed';
open_system(model);

Модель скорости вращения двигателя содержит блок Variable Transport Delay с именем dM/dt в подсистеме Induction to Степени Штриха Delay. Для удобства можно хранить путь к блоку в переменном MATLAB путем ввода

DelayBlock = 'scdspeed/Induction to  Power Stroke Delay/dM//dt delay';

Чтобы вычислить линеаризацию с помощью приближения первого порядка, используйте один из следующих методов, чтобы задать порядок аппроксимации Паде равным 1:

  • В диалоговое окно блока Переменная задержка переноса введите 1 в поле Pade Порядка (для линеаризации).

  • В командной строке введите следующую команду:

set_param(DelayBlock,'PadeOrder','1');

Затем задайте ввод-вывод линеаризации, чтобы дроссельный угол как вход и скорость вращения двигателя как выход при запуске:

io(1) = linio('scdspeed/throttle (degrees)',1,'input');
io(2) = linio('scdspeed/rad//s to rpm',1,'output');

Вычислите линеаризацию с помощью следующей команды linearize:

sys_1st_order_approx = linearize(model,io);

Можно вычислить линеаризацию с помощью приближения второго порядка путем установки порядка Pade равным 2:

set_param(DelayBlock,'PadeOrder','2');
sys_2nd_order_approx = linearize(model,io);

Чтобы вычислить линейную модель с точным представлением задержки, задайте значение свойства 'UseExactDelayModel' в объекте linoptions on:

opt = linearizeOptions;
opt.UseExactDelayModel = 'on';

Линеаризируйте модель с помощью следующей команды linearize:

sys_exact = linearize(model,io,opt);

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

p = bodeoptions('cstprefs');
p.Grid = 'on';
p.PhaseMatching = 'on';
p.XLimMode = {'Manual'};
p.XLim = {[0.1 1000]};
f = figure;
bode(sys_1st_order_approx,sys_2nd_order_approx,sys_exact,p);
h = legend('sys_1st_order_approx','sys_2nd_order_approx','sys_exact',...
            'Location','SouthWest');
h.Interpreter = 'none';

В случае приближения первого порядка фаза начинает различаться около 50 рад/с и расходится около 100 рад/с.

Закройте модель Simulink.

bdclose(model)

Линеаризация моделей с дискретными задержками

При линеаризации модели с дискретными блоками задержки, такими как (Целое число) Блоки Задержки и Unit Delay, используйте опцию точной задержки, чтобы учесть задержки, не добавляя состояния в динамику модели. Явный учет этих задержек улучшает эффективность симуляции для систем с многими дискретными задержками, потому что в вашей модели меньше состояний.

Чтобы открыть модель Simulink дискретной системы с блоком Delay с 20 состоянием задержки, используемым в этом примере, запустите следующее.

model = 'scdintegerdelay';
open_system(model)

По умолчанию линеаризация включает все состояния, сложенные в линейную модель. Установите I/Os линеаризации и линеаризируйте модель следующим образом:

io(1) = linio('scdintegerdelay/Step',1,'input');
io(2) = linio('scdintegerdelay/Discrete Filter',1,'output');
sys_default = linearize(model,io);

Интегрировать получившуюся модель, чтобы увидеть, что она имеет 21 состояние (1 - Дискретный Фильтр, 20 - Целочисленная Задержка).

size(sys_default)
State-space model with 1 outputs, 1 inputs, and 21 states.

Можно линеаризировать эту же модель с помощью свойства 'UseExactDelayModel' следующим образом:

opt = linearizeOptions;
opt.UseExactDelayModel = 'on';
sys_exact = linearize(model,io,opt);

Опрос новой получившейся модели показывает, что она имеет 1 состояние, и задержки учитываются внутренне в линеаризированной модели.

size(sys_exact)
State-space model with 1 outputs, 1 inputs, and 1 states.

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

step(sys_default,sys_exact);
h = legend('sys_default','sys_exact',...
            'Location','SouthEast');
h.Interpreter = 'none';

Закройте модель Simulink и очистите рисунки.

bdclose(model)
close(f)

Работа с линеаризированными моделями с задержками

Для получения дополнительной информации о манипулировании линеаризированными моделями с задержками, смотрите Определение временных задержек и Анализ систем управления с задержками.

См. также

|

Похожие темы