制御工学_現代制御と古典制御とRLC回路の性質

制御工学_現代制御と古典制御とRLC回路の性質

古典制御では、微分方程式をラプラス変換することにより、伝達関数を求め議論したが、現代制御では、微分方程式を状態方程式と呼ばれる式に変形することによって、安定性などを議論する。

ここでは、RLC回路の伝達関数と状態方程式をそれぞれ導出した後に、状態方程式から伝達関数に変換するためには、どのようにすべきかについて考察する。

微分方程式

まず、回路の微分方程式は以下のようにあらわせる。

伝達関数

次に上記の微分方程式をラプラス変換する。この際に、変換公式を用いてする方法と、インピーダンンスのjωをsに置き換える方式がある。

今回は、時間短縮のため、インピーダンスから攻める。分圧の公式より、以下のようになる。

状態方程式

次に、状態方程式を微分方程式から導出する。

ここで、

とすることによって、

といった状態方程式を得ることが出来る。

状態方程式から伝達関数への変換(一般)

では、次に、以下のような一般的な状態方程式から伝達関数を求めるにはどのようにすればよいのかを考察する。

 

上式1番目の式をラプラス変換すると、

ここで、x(0)=0であると仮定して、

ゆえに、

ここで、

をラプラス変換した場合は、以下の様になる。

これに、X(s)を代入して伝達関数Gを求めると以下の様になる。

RLC回路の状態方程式から伝達関数への変換

さて、それでは最後にRLC回路の状態方程式が与えられた場合に、伝達関数に変換することが出来るかどうかを調べよう!!

これは、Aの逆行列を取り、計算していくが、ここで、最初に述べた伝達関数の式が導出できることを確認しよう。まず、A,b,c,dは以下の様になる。

ゆえに、一般における状態方程式から伝達関数を求める式を用いて計算すると以下の様になる。

これにより、題意は示された。

 

まとめ

制御工学はその性質上、回転機の過渡解析といった力学的な問題から、電気工学の過渡解析に至るまで様々なところで使用されている。なぜなら、自然界においては、どんな物体でも外乱のような外部刺激を受けて、出力が乱されるので、出力を一定に制御するというのは、安全面で非常に重要な課題だからである。

今回は、なじみのあるRLC回路モデルを用いて現代制御の状態方程式と古典制御の伝達関数が、本質的には同値であると見なせることを一般の変換公式をもとに確認した。

参考:Pythonによる検証

参考文献1にあるように、PythonでRLC回路のステップ応答をシミュレーションしてみる。

まずは、以下の下準備を行う。(今回は、ubuntuを使用した)

pip install slycot
pip install control
pip install japanize-matplotlib
pip install japanize-matplotlib

今回使用したコードは以下の通りである。ただし、入力によってR,L,Cの値を変更可能である。

# -*- coding: utf-8 -*-
import numpy as np
import control.matlab as ctrl
import matplotlib.pyplot as plt
import japanize_matplotlib


R = int(input("整数値を入力してください 抵抗値[Ω] "))       # 抵抗値
L = int(input("整数値を入力してください インダクタ[mL]"))*1e-3    # インダクタンス
C = int(input("整数値を入力してください 静電容量[uF]"))*10e-6   # 静電容量

#古典制御_伝達関数_インパルス応答
sys = ctrl.tf((1),(L*C,R*C,1))
print(sys)

t_range = (0,0.01)
y, t = ctrl.step(sys, T=np.linspace(*t_range, 400))

plt.figure(figsize=(7,4),dpi=120,facecolor='white')
plt.hlines(1,*t_range,colors='gray',ls=':')
plt.plot(t,y)
plt.xlim(*t_range)
plt.ylim(bottom=0)


#現代制御_状態方程式

A = [[0,1],[-1/(L*C), -R/L]]
B = [[0],[1/(L*C)]]
C = [[1,0],[0,C]]
D = 0

sys = ctrl.ss(A,B,C,D)
#print(sys)

t_range = (0,0.01)
y, t = ctrl.step(sys, T=np.linspace(*t_range, 400))

fig, ax = plt.subplots(nrows=2, figsize=(7,5),dpi=120,sharex='col')
fig.patch.set_facecolor('white') 
fig.subplots_adjust(hspace=0.1)  
for i,s in enumerate(['コンデンサ電圧','電流']) :
    ax[i].hlines(0,*t_range,colors='gray',ls=':')
    ax[i].plot(t,y[:,i])
    ax[i].set_ylabel(s)
    ax[i].set_xlim(*t_range)
plt.show()

ここでR=1[Ω],L=2[mL],C=10[uF]と置いた時のグラフは以下の様になる。

古典制御と伝達関数

現代制御と状態方程式

この様に、同一の問題を与えられていれば、古典制御だろうと現代制御だろうと同様の結果を示す。

参考文献

制御工学とPython



関連記事

コメント

  1. この記事へのコメントはありません。

コメントするためには、 ログイン してください。