Документация Engee
Notebook

Исследование частотных характеристик САУ

В данном примере рассмотрим возможности среды Engee для исследования частотных характеристик САУ.

Структурные преобразования

Модель САУ представляет собой структурную схему, которая включает блоки типовых динамических звеньев. Передаточную функцию САУ находят, оперируя передаточными функциями этих звеньев.

При последовательном соединении передаточная функция цепочки звеньев равна произведению их передаточных функций:

$$ W(p)=\prod_{i=1}^n W_i(p) $$

Передаточная функция группы параллельно соединенных звеньев равна сумме их передаточных функций:

$$ W(p)=\sum_{i=1}^n W_i(p) $$

Если звено с передаточной функцией $W_1(p)$ охвачено обратной связью, в которой присутствует звено $W_{ос}(p)$, то передаточная функция замкнутого контура $W(p)$ определяется по формуле:

$$ W(p)=\frac{W_1(p)}{1 \pm W_1(p)W_{oc}(p)} $$ Знак плюс или минус в знаменателе соответствует отрицательной и положительной обратной связи, соответственно.

Рассмотрим функции библиотеки ControlSystems.jl, которые позволяют делать структурные преобразования схемы.

In [ ]:
#Подключим библиотеку для работы с САУ
using ControlSystems

#Зададим передаточные функции
W1 = tf([1],[0.5, 1]);
W2 = tf([1],[1, 1]);

Для последовательного перемножения передаточных функций существует функция ControlSystemsBase.series.

In [ ]:
#Последовательное перемножение систем
series(W1,W2)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
        1.0
-------------------
0.5s^2 + 1.5s + 1.0

Continuous-time transfer function model

Передаточную функцию группы параллельных звеньев можно определить с помощью функции ControlSystemsBase.parallel.

In [ ]:
#Параллельное соединение звеньев
parallel(W1,W2)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
    1.5s + 2.0
-------------------
0.5s^2 + 1.5s + 1.0

Continuous-time transfer function model

Для определения передаточной функции контура состоящего из звена охваченного обратной связью существует функция ControlSystemsBase.feedback.

In [ ]:
#Если звено охвачено единичной обратной связью, вторым аргументом указывается 1
W3 = feedback(W1,1)

#Если обратная связь проходит через звено W2
W4 = feedback(W1,W2)

display([W3,W4])
2-element Vector{TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}}:
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
   1.0
----------
0.5s + 2.0

Continuous-time transfer function model
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
    1.0s + 1.0
-------------------
0.5s^2 + 1.5s + 2.0

Continuous-time transfer function model

По умолчанию при использовании функции ControlSystemsBase.feedback образуется соединение с отрицательной обратной связью. Однако, можно указать, что связь должна быть положительной, передав в качестве второго аргумента -1.

In [ ]:
#Звено охвачено единичной положительной обратной связью
feedback(W1, -1)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
1.0
----
0.5s

Continuous-time transfer function model

Получение и исследование частотных характеристик САУ

Зададим передаточную функцию САУ, показанную на картинке ниже.

image.png

In [ ]:
#Зададим параметры САУ
Ku = 10;
Tu = 0.001;
Km = 3;
Tm = 0.1;
Te = 0.02;
Kp = 0.01;
In [ ]:
#Задаем передаточные функции звеньев САУ
W_1 = Ku*tf([1],[Tu, 1]);
W_2 = Km*tf([1],[Tm*Te, 1, 1]);
W_3 = Kp*tf([1],[1, 0]);

display([W_1, W_2, W_3])
3-element Vector{TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}}:
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
    10.0
------------
0.001s + 1.0

Continuous-time transfer function model
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
         3.0
---------------------
0.002s^2 + 1.0s + 1.0

Continuous-time transfer function model
 TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
0.01
----
1.0s

Continuous-time transfer function model

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

In [ ]:
#Получаем передаточную функцию разомкнутой системы
W = series(W_1, W_2)
W = series(W, W_3)
Out[0]:
TransferFunction{Continuous, ControlSystemsBase.SisoRational{Float64}}
                 0.3
--------------------------------------
2.0e-6s^4 + 0.003s^3 + 1.001s^2 + 1.0s

Continuous-time transfer function model

Построим графики АФЧХ и ЛАФЧХ.

In [ ]:
#Получение АФЧХ
w = -100:0.1:100
nyquistplot(W,w,title="АФЧХ",label="W")
Out[0]:

Также построим ЛАФЧХ разомкнутой системы с отображением запасов устойчивости по амплитуде и по фазе. Для этого используем функцию ControlSystemsBase.marginplot.

In [ ]:
#Определим запасы устойчивости по амплитуде и по фазе
marginplot(W,label="W")
Out[0]:

Запасы устойчивости отображаются в названии графиков. Запас по амплитуде 1111.76 дБ, запас по фазе 73.89 градусов. ЛФЧХ пересекает 180 градусов на частоте 18.26 рад/с, а частота среза равна 0.29 рад/с. Также можно навести на график курсор и посмотреть значения амплитуды, фазы и частоты в любой выбранной точке.

Вывод

В данном примере мы познакомились с функционалом Engee для исследования частотных характеристик САУ. Также изучили, как преобразовать структурную схему с помощью функций библиотеки ContolSystems.jl. Узнать больше о построении графиков частотных характеристик можно в разделе Функции построения графиков.