はじめに
RLC直列回路は、典型的な二次遅れ系の回路設定モデルであるといえる。そこで、その応答性を評価するために正の時間に一定のパルス電圧を入力するステップ応答の評価を行うことは意義があるといえる。しかし、古典制御ではその応答性を評価する場合、微分方程式をラプラス変換を用いて伝達関数に変換して評価してあげる必要性がある。ところが、微分方程式を状態方程式に変換して行列演算を行う現代制御では、ラプラス変換が不要になる場合がある。今回は、入力電圧にステップパルスを用いてコンデンサに蓄えられる電荷の応答性を調査することで、ステップ応答がどの様になるのかを調査する。また、RLCの各パラメーターと減衰係数、固有角速度$\zeta,\omega_n$との関係性も調査する。
導入
アルゴリズム
RLC回路の微分方程式を解くアルゴリズムやプログラム等の情報は以下の記事を参考にした。
相違点
異なる点について2つ程あるので述べる。
(1)入力電圧はステップパルスを使用した。つまり、
$t\ge0$のとき
E(t) = E
ただし$E$は定数とする。
$t<0 $のとき
E(t) = 0
で表される電圧入力を使用した。
(2)$RLC$回路の素子のパラメータと減衰係数、固有角速度$\zeta,\omega_n$の関係式を導出する。
より、
\zeta=\frac{R\sqrt{C}}{2\sqrt{L}},\omega_n=\sqrt{\frac{1}{LC}}
となる。これより、
C=\frac{\zeta}{R \omega_n}
L=(\frac{1}{\omega_n \sqrt{C}})^2
と、減衰係数、固有角速度$\zeta,\omega_n$を用いて$L,C$を$R$の式で表すことができる。
プログラム
したがって以下の様なプログラムを作成した。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
# 微分方程式:V =R Q'*L Q''+Q/C
#パラメータ
jita= 0.2 # 減衰係数
omega_n=4 # 固有角周波数
R = 10 # 抵抗値
C = (jita)**0.5/(R*omega_n) # 静電容量
L = (1/(omega_n*(C**0.5)))**2 # インダクタンス
e=100 # 入力電圧
#初期条件 (電荷と電荷の微分量つまり電流について)
x=np.array([0,0])
#初期時間
t=-0.01
#時間と状態量(ここでは電荷と電荷の微分量)
time_ary=[]
X=[]
#微小時間の時間間隔(小さくするほど精度は上がるが計算時間が比例して増大する)
delta_t=0.001
while(t<10):
#入力電圧
#E=np.sin(2*math.pi*50*t)
if t>=0:
E=e
else:
E=0
v=np.array([[0, 1], [-1/(L*C),-R/L]])@x+np.array([0,1/L])*E
#位置の微小変化
x=x+v*delta_t
#print(v)
#演算結果を記録
time_ary.append(t)
X.append(x[0])
#時間の更新
t=t+delta_t
plt.xlabel("応答時間[s]")
plt.ylabel("電荷[C]")
plt.title("Cに蓄まる電荷のステップ応答")
plt.plot(time_ary,X)
#グラフを保存する
plt.savefig("RLC_状態方程式_電流_ステップ応答電圧.png")
#グラフの表示
plt.show()
これを実行すると以下のようになる。
このように、入力電圧であるステップパルスに対して追従するようにコンデンサの電荷量が変化する。
また、$\zeta=0.2$程度では、応答波形は振動しながら減衰した。
まとめ
今回は、差分法を用いた二次遅れ系のステップ応答についてシミュレーションを行った。実際に、ラプラス変換をプログラムで再現しようとすると複雑かつ積分の計算時間が膨大になる恐れがあることから、微分方程式を行列計算に変換する方法(現代制御による状態方程式)を行った。二次遅れ系では減衰係数が0から1の間では振動しながら減衰することが知られていたので、その検証もシミュレーション結果よりすることができた。