見出し画像

Python-Control 制御工学 1次遅れステップ応答を matplotlib で出力

Python-Control を使った制御工学に取り組んでいます。最終的にはPID制御を用いたフィードバック制御系の設計に活用できればいいなと考えています。本記事では、1次遅れ要素のステップ応答波形を matplotlib で出力してみます。

環境

・windows 10(64bit)
・Visual Studio Code 1.45.1
・Python 3.8.2(32bit版)

1次遅れ系 ステップ応答

1次遅れ要素のステップ応答を導出します。s領域における1次遅れ要素の伝達関数は次式になります。この伝達関数モデルを Python で作成し、パラメータを与えてステップ応答の波形を matplotlib で出力します。

画像1

出力されるステップ応答波形について、上式のs領域における1次遅れ要素を逆ラプラス変換すると次式になります。時定数 T で K に向かって収束する波形になります。時定数は目標値の 63% に到達するまでの時間になります。つまり、ステップ信号が入力されてから 0.63K に達するまでの時間になります。

画像3

Python のソースコードは以下になります。

# 数値演算ライブラリ
import numpy as np
# 制御工学ライブラリ
from control import matlab
# グラフ描画
from matplotlib import pyplot as plt

# パラメータ
K = 10.0
T = 0.1

# 伝達関数モデル作成
num = [K]
den = [T, 1]
G1st = matlab.tf(num, den)

# 伝達関数モデル出力
print(G1st)

# ステップ応答波形
t = np.linspace(0, 1.0, 1000)
(output, t) = matlab.step(G1st, t)

# 出力パラメータ
plt.plot(t, output)
plt.axhline(K, ls=":", color="blue")

# グラフ表示設定
plt.rcParams['font.family'] = 'Times New Roman' # 全体のフォント
plt.title('1st order step', fontsize=10)        # グラフタイトル
plt.xlabel('time [sec]', fontsize=10)           # x軸ラベル
plt.ylabel('Output', fontsize=10)               # y軸ラベル
plt.xlim([0, 1.0])                              # x軸範囲
plt.ylim([0, 12.0])                             # y軸範囲
plt.tick_params(labelsize = 10)                 # 軸ラベルの目盛りサイズ
plt.tight_layout()                              # ラベルがきれいに収まるよう表示
plt.grid()                                      # グリッド表示
plt.show()                                      # グラフの表示

結果
K=10 としたので、ステップ応答波形は 10 に収束します。また、0.63K=6.3 に到達するまでの時間は T=0.1sec となっています。設定したパラメータ通りの波形を得られました。

    10
---------
0.1 s + 1

画像2

参考書(制御工学)

私は制御工学の参考書として「詳解 制御工学演習(共立出版)」を使っています。少し値段が高いですが、かなり良書だと思います。数式展開の過程や、ブロック線図、グラフがしっかり書かれているので分かりと思います。

参考 note (過去記事)

以上

何かお役に立てたら、サポートしていただけると嬉しいです!モチベーションを高めて、アウトプットしていきます!