Увеличение линеаризации блока

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

  1. Откройте Simulink® модель.

    mdl = 'scdFcnCall';
    open_system(mdl)

    Эта модель включает в себя объект непрерывного времени, Plantи контроллер в дискретном времени, Controller. The D/A блок дискретизирует выход объекта управления со временем дискретизации 0,1 с. External Scheduler блок инициирует выполнение контроллера с тем же периодом, 0,1 с. Однако триггер имеет смещение 0,05 с относительно дискретизированной выхода объекта управления. По этой причине контроллер не обрабатывает изменение опорного сигнала до 0,05 с после изменения. Это смещение вводит временную задержку 0,05 с в модель.

  2. (Необязательно) Линеаризация модели с обратной связью в рабочей точке модели, не задавая линеаризацию для Controller блок.

    io = getlinio(mdl);
    sys_nd = linearize(mdl,io);
    

    getlinio функция возвращает входные и выходные точки линеаризации, которые уже определены в модели.

  3. (Необязательно) Проверьте результат линеаризации путем оценки частотной характеристики.

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

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

  4. Напишите функцию, чтобы задать линеаризацию 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 с).

  5. Задайте функцию строения scdAddDelayFcn как линеаризация для Controller блок.

    1. Щелкните правой кнопкой мыши по Controller Блоком и выберите Linear Analysis > Specify Selected Block Linearization.

    2. Установите флажок Specify block linearization using one of the following. Затем выберите Configuration Function из выпадающего списка.

    3. Введите имя функции scdAddDelayFcn в текстовом поле. scdAddDelayFcn не имеет параметров, поэтому оставьте таблицу параметров пустой.

    4. Нажмите OK.

  6. Линеаризируйте модель с помощью заданного блока линеаризации.

    sys_d = linearize(mdl,io);
    

    Линейная модель sys_d является линеаризацией модели с обратной связью, которая учитывает временную задержку.

  7. (Необязательно) Сравните линеаризацию, которая включает задержку с оценочной частотной характеристикой.

    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.

См. также

|