Этот пример показывает, как увеличить линеаризацию блока с дополнительной динамикой временной задержки, используя функцию спецификации линеаризации блоков.
Откройте Simulink® модель.
mdl = 'scdFcnCall';
open_system(mdl)
Эта модель включает в себя объект непрерывного времени, Plant
и контроллер в дискретном времени, Controller
. The D/A
блок дискретизирует выход объекта управления со временем дискретизации 0,1 с. External Scheduler
блок инициирует выполнение контроллера с тем же периодом, 0,1 с. Однако триггер имеет смещение 0,05 с относительно дискретизированной выхода объекта управления. По этой причине контроллер не обрабатывает изменение опорного сигнала до 0,05 с после изменения. Это смещение вводит временную задержку 0,05 с в модель.
(Необязательно) Линеаризация модели с обратной связью в рабочей точке модели, не задавая линеаризацию для Controller
блок.
io = getlinio(mdl); sys_nd = linearize(mdl,io);
getlinio
функция возвращает входные и выходные точки линеаризации, которые уже определены в модели.
(Необязательно) Проверьте результат линеаризации путем оценки частотной характеристики.
input = frest.Sinestream(sys_nd); sysest = frestimate(mdl,io,input); bode(sys_nd,'g',sysest,'r*',{input.Frequency(1),input.Frequency(end)}) legend('Linearization without delay',... 'Frequency Response Estimation','Location','SouthWest')
Точная линеаризация не учитывает задержку, введенную смещением выполнения контроллера. Существует расхождение в результатах между линеаризированной моделью и оцененной моделью, особенно на более высоких частотах.
Напишите функцию, чтобы задать линеаризацию Controller
блок, который включает в себя задержку по времени.
Следующая функция строения задает линейную систему, которая равняется линеаризации блоков по умолчанию, умноженной на временную задержку. Сохраните эту функцию строения в местоположении на MATLAB® путь. (В данном примере функция уже сохранена как scdAddDelayFcn.m
.)
function sys = scdAddDelayFcn(BlockData)
sys = BlockData.BlockLinearization*thiran(0.05,0.1);
Вход в функцию, BlockData
, является структурой, которую программное обеспечение автоматически создает каждый раз, когда оно линеаризирует блок. Когда вы задаете функцию строения линеаризации блоков, программное обеспечение автоматически передает BlockData
в функцию. Полевые BlockData.BlockLinearization
содержит текущую линеаризацию блока.
Эта функция строения аппроксимирует временную задержку как thiran
фильтр. Фильтр указывает дискретное приближение дробной временной задержки 0,5 периодов дискретизации. (Задержка 0,05 с имеет время дискретизации 0,1 с).
Задайте функцию строения scdAddDelayFcn
как линеаризация для Controller
блок.
Щелкните правой кнопкой мыши по Controller
Блоком и выберите Linear Analysis > Specify Selected Block Linearization.
Установите флажок Specify block linearization using one of the following. Затем выберите Configuration Function из выпадающего списка.
Введите имя функции scdAddDelayFcn
в текстовом поле. scdAddDelayFcn
не имеет параметров, поэтому оставьте таблицу параметров пустой.
Нажмите OK.
Линеаризируйте модель с помощью заданного блока линеаризации.
sys_d = linearize(mdl,io);
Линейная модель sys_d
является линеаризацией модели с обратной связью, которая учитывает временную задержку.
(Необязательно) Сравните линеаризацию, которая включает задержку с оценочной частотной характеристикой.
bode(sys_d,'b',sys_nd,'g',sysest,'r*',... {input.Frequency(1),input.Frequency(end)}) legend('Linearization with delay','Linearization without delay',... 'Frequency Response Estimation','Location','SouthWest')
Линейная модель, полученная с заданной блочной линеаризацией, теперь учитывает задержку по времени. Поэтому эта линейная модель является намного лучшим соответствием реальной частотной характеристике модели Simulink.