Этот пример показывает, как разработать контроллер PI, использующий частотную характеристику, оцененную из модели Simulink. Это - альтернативный рабочий процесс проекта ПИДа, когда линеаризовавшая модель объекта управления недопустима для проекта ПИДа (например, когда модель объекта управления имеет нулевое усиление).
Откройте модель управления двигателем и займите некоторое время, чтобы исследовать ее.
mdl = 'scdenginectrlpidblock';
open_system(mdl)
Цикл ПИДа включает контроллер PI в параллельную форму, которая управляет углом дросселя, чтобы управлять скоростью вращения двигателя. У контроллера PI есть усиления по умолчанию, который заставляет систему замкнутого цикла колебаться. Мы хотим разработать контроллер, использующий 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 показывает, что новый контроллер PI обеспечивает хорошую производительность при управлении нелинейной моделью.
Закройте модель.
bdclose(mdl)