はじめに
ベクトル線図(ナイキスト線図)は制御対象が安定かどうかを判定するのに使用される。具体的には、角速度ωを変化させたときにおいて、周波数伝達関数の実部を横軸に、虚部を縦軸にしたものである。一方でフィードバック制御とは出力の信号を入力に反映させることにより対象物を制御するという方法である。今回は、電験3種令和4年度機械問15の問題をPythonを用いて解くことにより、フィードバック制御とベクトル線図の理解を深めることを目的とする。
問題設定
K=5,T=0.1として以下のような系のループを考える。
プログラム
この場合のベクトル線図を描写するプログラムは以下のように表すことができる。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
omega = np.arange(0.0, 10000.0, 0.001)
K=5
T=0.5
#伝達関数から周波数伝達関数への変換
s=1j*omega
#制御対象
G1=1/(s*T)
#伝達関数G(s)→G(jω)
#フィードバック制御
G=(K*G1)/(1+K*G1)
x=G.real
y=G.imag
plt.title("一次遅れ系のベクトル線図")
plt.xlabel('実軸')
plt.ylabel('虚軸')
plt.plot(x, y, 'b-')
plt.show()
これを実行した場合、以下のようなグラフが表示される。
このように、一次遅れ系のベクトル線図は半円状になる。これは導出も含めて押さえておいた方がいいだろう。
手計算による解析
この半円について手計算で伝達関数から導出してみよう。
まずは、負のフィードバックより周波数伝達関数は以下のように表すことができる。
G(j\omega)=\frac{K\frac{1}{j\omega T}}{1+1\cdot K\cdot \frac{1}{j\omega T}}=\frac{K}{K+j\omega T}
これを有理化する。
G(j\omega)=\frac{K}{K+j\omega T}=\frac{K(K-j\omega T)}{(K+j\omega T)(K-j\omega T)}=\frac{K^2}{K^2+(\omega T)^2}-j\frac{\omega TK}{K^2+(\omega T)^2}
ここで、
\begin{equation}
\left\{ \,
\begin{aligned}
& X = \frac{K^2}{K^2+(\omega T)^2} (>0)\\
& Y = -\frac{K\omega T}{K^2+(\omega T)^2}(<0)\\
\end{aligned}
\right.
\end{equation}
ここで、Y/Xを求めると以下のようになる。
\frac{Y}{X}=-\frac{\omega K}{K}
ゆえに、
(\omega T) =-\frac{Y}{X}K
この式をXの式に代入すると以下のようになる。
X=\frac{K^2}{K^2+(\frac{Y}{X})^2 K^2}=\frac{1}{1+(\frac{Y}{X})^2}
これを整理すると以下のようになる。
(X-\frac{1}{2}^2)+Y^2=(\frac{1}{2})^2
ゆえにこれは、半円を表すが、TとKの値に依存しないところが興味深いところである。
まとめ
一次遅れ系の伝達関数のベクトル線図についてプログラミングを用いて描写することができるか今回は試みた。結果として、Pythonの複素数機能を用いれば上手く描写することができるということが分かった。なので、今回はある制御対象を負のフィードバックにした場合の特性を調べるために、ベクトル線図を用いた。このように、ベクトル線図は安定性や周波数特性を調べることができるので、電験を受ける方はぜひとも押さえておきたいところである。
参考文献