今回はRL直列回路の過渡応答をPythonを使って計算してみました!
過渡応答は大学1年の時に勉強した内容で、微分方程式を見て懐かしい感じがしました(笑)
Pythonを使いこなすためにも、今回は手書きではなく、コード入力で解いていきます!
RL直列回路
RL回路を図に示します。抵抗とインダクタが直列に接続されているシンプルな回路ですよね。
この回路に、キルヒホッフの第二法則(電圧に関する式)を用いて、閉回路の電圧関係式を立てます。
$$E =R i{\left (t \right )} + L\frac{d}{d t} i{\left (t \right )}$$
これはi(t)についての一階微分方程式になります。
微分方程式を手計算で解くのってめんどくさいですよね。。(笑)初期値問題とかあるし。
めんどくさいと思っているそこのあなた、是非pythonで解いてみてください。
めちゃめちゃ楽に計算ができますよ!
今回使うモジュールはsympy、numpy、matplotlib です。左から順にざっくり説明すると、数式計算、配列計算、グラフ処理に関するものになります。
まずはモジュールのインポートから。
import sympy as sym
import numpy as np
import matplotlib.pyplot as plt
次に、使用する変数を定義します。ここで、iは微分方程式を解くにあたって関数として定義しています。
E,R,L,t,C1=sym.symbols('E R L t C1')
i=sym.Function('i')
ここで、先ほどの電圧に関する数式を書き、解きます。
eq1=sym.Eq(E,R*i(t)+L*sym.diff(i(t)))
eq2=sym.dsolve(eq1,i(t))
結果はこんな感じ。
$$i{\left (t \right )} = \frac{1}{R} \left(E + e^{\frac{R}{L} \left(C_{1} – t\right)}\right)$$
積分定数C1が出てきましたので、初期値を与えて解いていきます。
eq3=sym.Eq(0,eq2.rhs.subs(t,0))
C=sym.solve(eq3,C1)[0]
そうすると、C1の値が算出できます。(上記C)
初期値が求まったので、C1に先ほど算出したCを代入します。
eq4=eq2.subs(C1,C)
eq4=eq4.expand()
これにより、一般解は
$$i{\left (t \right )} = \frac{E}{R} \left (1- e^{- \frac{R t}{L}}\right )$$
i(t)が求まれば抵抗、インダクタ部にかかる電圧が分かります。
V_r=R*eq4.rhs
V_l=E-V_r
R, L, E, tに値を振っていきます。今回は始めの図に示したように適当な値としました。
para={E:sym.Piecewise((0,t<0),(100,t>=0)), R:100, L:100}
V_r=V_r.subs(para)
V_l=V_l.subs(para)
これらをtの関数にします。
F_V_r=sym.lambdify(t,V_r,'numpy')
F_V_l=sym.lambdify(t,V_l,'numpy')
s=np.linspace(0,10,20000)
最後にグラフ化します。
fig=plt.figure()
plt.plot(s,F_V_r(s),label='V_R')
plt.plot(s,F_V_l(s),label='V_L')
plt.axvline(x=1, color='black', linestyle='dashdot')
plt.xlabel("Time[t]")
plt.ylabel("Voltage[V]")
plt.legend()
plt.show
グラフはこんな形で出力されます。
グラフの縦線は、時定数τの位置になります。Rにかかる電圧はτ[s]経過で0.63Eとなります。3τ[s]で0.95Eとなるため、3τが過渡応答の区切り位置となります。
まとめ
今回は電気回路をpythonで解いたため、簡単な回路を扱いました。
次回は2階微分方程式を扱うRLC回路で解いていきたいと思います!
コメントを残す