Python-Control の基礎的な使い方

以前 取り上げた Python-Control の基礎的な使い方についてメモ。
以下のような単純なフィードバック制御系を例に、制御系の特性を求めてみます。

150715.png

まず制御器、制御対象の伝達関数を定義し、feedback 関数でそれらをフィードバック接続します。
ここで、制御器は PID 制御器、制御対象は DC モータをモデルとしています。

# coding: utf-8
import numpy as np
from control import matlab
from matplotlib import pylab as plt

# PID 制御器
Kp = 0.5
Ki = 0.01
Kd = 0.01
num = [Kd, Kp, Ki]
den = [1, 0]
K = matlab.tf(num, den)

# 制御対象
Kt = 1
J = 0.01
C = 0.1
num = [Kt]
den = [J, C, 0]
G = matlab.tf(num, den)

# フィードバックループ
sys = matlab.feedback(K*G, 1)

以上を定義すれば、後は各種関数で簡単に制御系の特性を求めることができます。

ステップ応答

t = np.linspace(0, 3, 1000)
yout, T = matlab.step(sys, t)
plt.plot(T, yout)
plt.axhline(1, color="b", linestyle="--")
plt.xlim(0, 3)

15071501.png

インパルス応答

yout, T = matlab.impulse(sys, t)
plt.plot(T, yout)
plt.axhline(0, color="b", linestyle="--")
plt.xlim(0, 3)

15071502.png

ナイキスト線図

matlab.nyquist(sys)

15071503.png

ボード線図

matlab.bode(sys)

15071504.png

根軌跡

matlab.rlocus(sys)

15071505.png


matlab.pole(sys)
array([-5.48995569+4.43168312j, -5.48995569-4.43168312j, -0.02008862+0.j        ])

ゲイン余裕・位相余裕

matlab.margin(sys)
(None, 168.7334239273508, 0.97696015788942137, None)

コメント

Comments powered by Disqus
書籍更新情報
2016-10-21
Pythonによる科学技術計算 基礎編
PDF版の販売を開始しました。
販売ページはこちら

2016-09-09
Pythonによる科学技術計算 基礎編
1.2版への更新が可能になりました。
サポートページはこちら
電子書籍
Pythonによる科学技術計算 基礎編
Kindle ストア、Leanpubで販売中です
Pythonによる科学技術計算 基礎編
PDF版の販売はこちら
同人誌
技術書典(2016/6/25)
Emacs/org-modeのPDF作成術
電子版をBOOTHで販売中です
Emacs/org-modeのPDF作成術
Share