はじめに
コンデンサに電荷を蓄え、それを抵抗負荷で消費する場合、抵抗に流れる電流指数関数的に減少していく。これは、1次の線形微分方程式により確かめることができる。しかし、リアクトルを直列に接続した場合、リアクトルは常に同じ電流を流そうとする性質を持つので、コンデンサを逆電圧に充電してしまう場合がある。したがって、回路に流れる電流は、ある条件を満たした場合は振動を繰り返す。そこで、今回は計算機を用いて、微分方程式を数値計算により解析して振動する場合とそうでない場合においてどのような挙動をコンデンサの電圧や電流がとるのかを調査する。参考として振動する場合についての電圧と電流の挙動を以下に示す。
振動するコンデンサ電圧
振動する回路電流
回路設定
以下のような回路を考える。あらかじめ、コンデンサには電荷$Q$を充電しておく。
ただし、解析には以下の記事のプログラムを用いる。
今回の回路には電源電圧$E=0$として代用する。
微分方程式とプログラム
導入
参考記事において電源電圧を0とした場合の微分方程式を考える。
L \frac{d^2 Q}{dt^2}+R\frac{dQ}{dt}+\frac{Q}{C}=0
この微分方程式の解を$Q(t)=A e^{\alpha t}$と仮定する。
微分方程式に代入して整理すると以下のようになる。
L \alpha^2+R\alpha+\frac{1}{C}=0
この二次方程式の解は以下に示すように3パターンに場合分けすることが可能である。
2つの異なる実数解をもつ場合
R^2-\frac{4L}{C}>0
つまり、
L<\frac{CR^2}{4}
この場合、解釈としてリアクトルが小さいためコンデンサに逆電圧を充電させるほどの能力はない
プログラム
電圧
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
# 微分方程式:V =R Q'*L Q''+Q/C
#パラメータ
R = 5 # 抵抗値
C = 10e-4 # 静電容量
L = 0.8*(C*R**2)/4 # インダクタンス
#初期条件 (電荷と電荷の微分量つまり電流について)
x=np.array([10e-6,0])
#初期時間
t=0
#時間と状態量(ここでは電荷と電荷の微分量)
time_ary=[]
X=[]
#微小時間の時間間隔(小さくするほど精度は上がるが計算時間が比例して増大する)
delta_t=0.00001
while(t<0.1):
#E=np.sin(2*math.pi*50*t)
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]/C)
#時間の更新
t=t+delta_t
plt.xlabel("応答時間[s]")
plt.ylabel("コンデンサ電圧[V]")
plt.plot(time_ary,X)
#グラフを保存する
plt.savefig("RLC_状態方程式_コンデンサ電圧_1.png")
#グラフの表示
plt.show()
電流
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
# 微分方程式:V =R Q'*L Q''+Q/C
#パラメータ
R = 5 # 抵抗値
C = 10e-4 # 静電容量
L = 0.8*(C*R**2)/4 # インダクタンス
#初期条件 (電荷と電荷の微分量つまり電流について)
x=np.array([10e-6,0])
#初期時間
t=0
#時間と状態量(ここでは電荷と電荷の微分量)
time_ary=[]
X=[]
#微小時間の時間間隔(小さくするほど精度は上がるが計算時間が比例して増大する)
delta_t=0.00001
while(t<0.1):
#E=np.sin(2*math.pi*50*t)
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[1])
#時間の更新
t=t+delta_t
plt.xlabel("応答時間[s]")
plt.ylabel("回路に流れる電流[A]")
plt.plot(time_ary,X)
#グラフを保存する
plt.savefig("RLC_状態方程式_電流_1.png")
#グラフの表示
plt.show()
1つの重解(実数)をもつ場合
R^2-\frac{4L}{C}=0
つまり、
L=\frac{CR^2}{4}
プログラム
電圧
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
# 微分方程式:V =R Q'*L Q''+Q/C
#パラメータ
R = 5 # 抵抗値
C = 10e-4 # 静電容量
L = 1*(C*R**2)/4 # インダクタンス
#初期条件 (電荷と電荷の微分量つまり電流について)
x=np.array([10e-6,0])
#初期時間
t=0
#時間と状態量(ここでは電荷と電荷の微分量)
time_ary=[]
X=[]
#微小時間の時間間隔(小さくするほど精度は上がるが計算時間が比例して増大する)
delta_t=0.00001
while(t<0.1):
#E=np.sin(2*math.pi*50*t)
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]/C)
#時間の更新
t=t+delta_t
plt.xlabel("応答時間[s]")
plt.ylabel("コンデンサ電圧[V]")
plt.plot(time_ary,X)
#グラフを保存する
plt.savefig("RLC_状態方程式_コンデンサ電圧_2.png")
#グラフの表示
plt.show()
電流
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
# 微分方程式:V =R Q'*L Q''+Q/C
#パラメータ
R = 5 # 抵抗値
C = 10e-4 # 静電容量
L = 1*(C*R**2)/4 # インダクタンス
#初期条件 (電荷と電荷の微分量つまり電流について)
x=np.array([10e-6,0])
#初期時間
t=0
#時間と状態量(ここでは電荷と電荷の微分量)
time_ary=[]
X=[]
#微小時間の時間間隔(小さくするほど精度は上がるが計算時間が比例して増大する)
delta_t=0.00001
while(t<0.1):
#E=np.sin(2*math.pi*50*t)
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[1])
#時間の更新
t=t+delta_t
plt.xlabel("応答時間[s]")
plt.ylabel("回路に流れる電流[A]")
plt.plot(time_ary,X)
#グラフを保存する
plt.savefig("RLC_状態方程式_電流_2.png")
#グラフの表示
plt.show()
電流の場合は、一瞬だけ高くなりすぐに減衰する。
2つの異なる虚数解をもつ場合
R^2-\frac{4L}{C}<0
つまり、
L>\frac{CR^2}{4}
プログラム
電圧
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
# 微分方程式:V =R Q'*L Q''+Q/C
#パラメータ
R = 5 # 抵抗値
C = 10e-6 # 静電容量
L = 100*(C*R**2)/4 # インダクタンス
#初期条件 (電荷と電荷の微分量つまり電流について)
x=np.array([10e-6,0])
#初期時間
t=0
#時間と状態量(ここでは電荷と電荷の微分量)
time_ary=[]
X=[]
#微小時間の時間間隔(小さくするほど精度は上がるが計算時間が比例して増大する)
delta_t=0.00001
while(t<0.1):
#E=np.sin(2*math.pi*50*t)
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]/C)
#時間の更新
t=t+delta_t
plt.xlabel("応答時間[s]")
plt.ylabel("コンデンサ電圧[V]")
plt.plot(time_ary,X)
#グラフを保存する
plt.savefig("RLC_状態方程式_コンデンサ電圧_3.png")
#グラフの表示
plt.show()
電流
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
# 微分方程式:V =R Q'*L Q''+Q/C
#パラメータ
R = 5 # 抵抗値
C = 10e-6 # 静電容量
L = 100*(C*R**2)/4 # インダクタンス
#初期条件 (電荷と電荷の微分量つまり電流について)
x=np.array([10e-6,0])
#初期時間
t=0
#時間と状態量(ここでは電荷と電荷の微分量)
time_ary=[]
X=[]
#微小時間の時間間隔(小さくするほど精度は上がるが計算時間が比例して増大する)
delta_t=0.00001
while(t<0.1):
#E=np.sin(2*math.pi*50*t)
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[1])
#時間の更新
t=t+delta_t
plt.xlabel("応答時間[s]")
plt.ylabel("回路に流れる電流[A]")
plt.plot(time_ary,X)
#グラフを保存する
plt.savefig("RLC_状態方程式_電流_3.png")
#グラフの表示
plt.show()
まとめ
今回はRLC回路においてパラメータを上手く設定することができれば、電圧や電流を振動させることができた。これは、特定の周波数の電波を選択的に受信する受信機の同調回路の基本的な原理である。ただし、ここで勘違いしないでほしいのだが、RCL回路ならば全て共振するということは今回の議論によりありえないということである。