Моделирование САУ
Линеаризация объекта управления
В предыдущем уроке мы начали изучать систему управления камерой смартфона. Узнали, как осуществляется изменение положения линзы при подаче разных управляющих сигналов.
Вы точно заметили выброс, который происходит при подаче команды. Перемещение линзы на короткое время значительно превышало целевое значение, потом возвращалось в нужную нам область (эффект перерегулирования). На такой переходный процесс, как правило, требовалось порядка 3 секунд, после чего выходной сигнал стабилизировался.
Для уменьшения перерегулирования и снижения длительности переходного процесса нужно будет подобрать другие настройки регулятора, осуществить его тюнинг.
Рис. 3.1. Взаимосвязь входного и выходного сигналов в системах: (а) линейная система; (б) нелинейная система
В классических методах управления инженеры используют довольно стандартный набор инструментов для анализа объекта управления и, соответственно, построения необходимого регулятора (или контроллера). Классические инструменты предназначены для линейных стационарных систем (ЛСС).
Стационарность системы означает, что при подаче одного и того же входного сигнала, выходной сигнал системы всегда меняется одинаковым образом, в какой бы момент входной сигнал не поступил.
Напомним одно свойство, отличающее линейные системы от нелинейных: в отличие от нелинейных систем (рис 3.1(б)), в линейных системах (рис. 3.1(а)) выходной сигнал имеет линейную связь со входным сигналом.
В примере с фокусировкой камеры смартфона, изменение положения линзы не пропорционально изменению силы тока, т.е. такая система считается нелинейной.
Этот факт не должен вас особо удивить, ведь все динамические системы в реальной жизни нелинейны. Но, все же, мы можем применять классический инструментарий построения систем управления не только для линейных, но и для нелинейных систем. Для этого нам будет нужна процедура линеаризации.
Пример нелинейной системы
Рис 3.2. Пример линеаризации нелинейной системы: (а) Исходная нелинейная система; (б) Линеаризация системы в точке работы
Давайте рассмотрим пример с нелинейной системой, показанной на рис. 3.2. Выходной сигнал объекта управления имеет квадратичную взаимосвязь со входным сигналом. То есть между подъемной силой самолета и скоростью полета (рис. 3.2(а)) действует нелинейное соотношение.
Часто инженеров интересует поведение самолета в некотором конкретном режиме, например, летящего с крейсерской скоростью. Если найти на графике точку, соответствующую крейсерской скорости и провести в ней касательную линию в графику, то мы получим уравнение ЛСС, которая в некоторой окрестности от выбранной точки ведет себя почти так же, как вела себя исходная нелинейная системы (рис. 3.2(б)).
Данная точка называется рабочей точкой, и в ней мы только что произвели линеаризацию системы.
Линеаризация объекта управления дает возможность выразить нашу систему в форме ЛСС, поведение которой будет довольно близко схожим к поведению исходной нелинейной системы, но только вблизи рабочей точки линеаризации. Это дает нам возможность применять набор классических инструментов анализа ЛСС для построения регуляторов для нелинейных систем.
Перед выполнением примера из задания запустите следующий скрипт, чтобы задать значения параметров модели:
Ts = 0.01;
K1 = 30;
K2 = 20000;
Kd = 2.8;
Kf = 6.3e-4;
Пример линеаризации
✏️Задание 3.1
Рассмотрим пример, где мы линеаризуем нелинейную систему.
- Откройте модель
Глава_3_задача_1.engee. - Запустите симуляцию модели и постройте график выходного сигнала.
- Значения входного и выходного сигналов будут сохранены в табличном виде в папке курса, в файлах формата
CSV(sysIn.csvиsysOut.csv). Просмотрите эти файлы.
Решение
Модель:
Результаты моделирования:
✏️Задание 3.2
- Запустите скрипт, который находится в следующей ячейке. В результате вы получите ЛСС в пространстве состояний.
using ControlSystemIdentification, ControlSystemsBase, CSV, DataFrames; # подключаем нужные библиотеки
dataIn = CSV.read("sysIn.csv", DataFrame); # считываем входные данные из файла и сохраняем в переменной dataIn
dataOut = CSV.read("sysOut.csv", DataFrame); # считываем выходные данные из файла и сохраняем в переменной dataOut
dataIn_t = dataIn[:,1]; # эти данные не используются в коде, можно удалить
dataIn_d = dataIn[:,2]; # в переменной dataIn_d храним данные входного сигнала
dataOut_t = dataOut[:,1]; # эти данные не используются в коде, можно удалить
dataOut_d = dataOut[:,2]; # в переменной dataIOut_d храним данные выходного сигнала
d = iddata(dataOut_d, dataIn_d, Ts); # создаем объект идентификации данных во временном пространстве
sys_d = subspaceid(d, :auto); # запускаем метод идентификации модели пространства состояний
A = sys_d.A; # находим матрицу A
B = sys_d.B; # находим матрицу B
C = sys_d.C; # находим матрицу C
D = sys_d.D; # находим матрицу D
- Чтобы изучить реакцию линеаризованной системы, откройте модель
Глава_3_задача_2.engee. В ней находится блок Дискретное пространство состояний, в качестве параметров подставляются значенияA,B,CиD. - Запустите симуляцию линеаризованной модели и постройте график выходного сигнала.
Решение
Модель:
Результаты моделирования:
✏️Задание 3.3
- В модели
Глава_3_задача_2.engeeзадайте значение параметра Конечное значение блока Ступенчатая функция равным10. - Запустите симуляцию модели и постройте график выходного сигнала.
Как изменился выходной сигнал?
Попробуйте запустить модель с другим значением входного сигнала.
Решение
Результаты моделирования:
Как видно из графика, при увеличении значения входного сигнала в 10 раз значение выходного сигнала также увеличилось в 10 раз.