В этом примере показано, как спроектировать ПИ-контроллер с помощью частотной характеристики, оцененной из модели Simulink. Это - альтернативный рабочий процесс проекта ПИДа, когда линеаризовавшая модель объекта управления недопустима для проекта ПИДа (например, когда модель объекта управления имеет нулевое усиление).
Откройте модель управления двигателем и займите некоторое время, чтобы исследовать ее.
mdl = 'scdenginectrlpidblock';
open_system(mdl)

Цикл ПИДа включает ПИ-контроллер в параллельную форму, которая управляет углом дросселя, чтобы управлять скоростью вращения двигателя. ПИ-контроллер имеет усиления по умолчанию, который заставляет систему замкнутого цикла колебаться. Мы хотим спроектировать контроллер, использующий PID Tuner, который запускается от диалогового окна блока PID.
open_system([mdl '/Engine Speed (rpm)'])
sim(mdl)

Закройте осциллограф.
close_system([mdl '/Engine Speed (rpm)'])
В этом примере объект, замеченный блоком PID, от угла дросселя до скорости вращения двигателя. Точки ввода и вывода линеаризации уже заданы в блоке PID выход и измерение скорости вращения двигателя соответственно. Линеаризация в начальной рабочей точке дает модель объекта управления с нулевым усилением.
Чтобы проверить нулевую линеаризацию, сначала получите точки ввода и вывода линеаризации из модели.
io = getlinio(mdl);
Затем линеаризуйте объект в его начальной рабочей точке.
linsys = linearize(mdl,io)
linsys =
D =
Throttle Ang
EngineSpeed 0
Static gain.
Причина получения нулевого усиления состоит в том, что существует инициированная подсистема (Сжатие) в пути к линеаризации, и аналитическая линеаризация блока блоком не поддерживает основанные на событии подсистемы. Поскольку PID Tuner использует тот же подход, чтобы получить линейную модель объекта управления, *PID Tuner также получает модель объекта управления с нулевым усилением и отклоняет его во время процесса запуска.
Чтобы запустить PID Tuner, откройте диалоговое окно блока PID и нажмите Tune. Информационное диалоговое окно открывает и указывает, что модель объекта управления, линеаризовавшая в начальной рабочей точке, имеет нулевое усиление и не может использоваться, чтобы спроектировать ПИД-регулятор.

Альтернативный способ получить линейную модель объекта управления состоит в том, чтобы непосредственно оценить данные о частотной характеристике из модели Simulink, создать frd система в рабочем пространстве MATLAB и импорт это назад к PID Tuner, чтобы продолжить проект ПИДа.
sinestream входной сигнал является самым надежным входным сигналом для оценки точной частотной характеристики модели Simulink с помощью frestimate функция. Для получения дополнительной информации о том, как использовать frestimate, смотрите, что Оценка Частотной характеристики Использует Основанные на симуляции Методы.
В этом примере создайте поток синуса, который развертывает частоту от 0,1 до 10 рад/секунда с амплитудой 1e-3. Можно смотреть результаты оценки с помощью диаграммы Боде.
Создайте сигнал sinestream.
in = frest.Sinestream('Frequency',logspace(-1,1,50),'Amplitude',1e-3);
Оцените частотную характеристику. Этот процесс может занять несколько минут.
sys = frestimate(mdl,io,in);
Отобразите предполагаемую частотную характеристику.
bode(sys)

sys frd система, которая представляет частотную характеристику объекта в начальной рабочей точке. Чтобы использовать его в PID Tuner, мы должны импортировать его после того, как PID Tuner будет запущен. Нажмите Plant и выберите Import.


Нажмите систему Importing an LTI, и в списке, выберите sys. Затем нажмите "OK", чтобы импортировать frd система в PID Tuner. Автоматизированное проектирование возвращает стабилизировавшийся контроллер. Нажмите Add Plot и выберите Open-Loop Bode plot. График показывает разумный запас по амплитуде и фазе. Нажмите Show Parameters, чтобы видеть значения запаса по амплитуде и фазе. Графики отклика области времени не доступны для frd модели объекта управления.


Чтобы обновить блок P PID и я получаю, нажмите Update Block.
Симуляция в Simulink показывает, что новый ПИ-контроллер обеспечивает хорошую производительность при управлении нелинейной моделью.

Закройте модель.
bdclose(mdl)