· 

ahkab(python)で回路シミュレーション(4)

相互誘導やってみる。こんなん。

早速だけど、こうする。

ソース側は電流を1Aにする。そのため電源電圧を100Vにする。

受信側を完全にGNDから浮かすと(たぶん)怒られるのでRg(=10MΩ)でソース側と接続する。

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

import ahkab
from ahkab import circuit
mycircuit = circuit.Circuit(title="mutual coupling circuit")

gnd = mycircuit.get_ground_node()

R1_val=100e0
L1_val=600e-6
C1_val=200e-12

R2_val=100e3
L2_val=3e-3
C2_val=40e-12

mycircuit.add_capacitor("C1", n1="n1", n2="n2", value=C1_val)
mycircuit.add_resistor("R1", n1="n2", n2="n3", value=R1_val)
mycircuit.add_inductor("L1", n1="n3", n2=gnd, value=L1_val)

mycircuit.add_resistor("R2", n1="n4", n2="n5", value=R2_val)
mycircuit.add_inductor("L2", n1="n4", n2="n5", value=L2_val)
mycircuit.add_capacitor("C2", n1="n4", n2="n5", value=C2_val)

mycircuit.add_resistor("Rg", n1="n5", n2=gnd, value=10e6)

mycircuit.add_inductor_coupling("M1","L1","L2",0.00007)

mycircuit.add_vsource("V1", n1="n1", n2=gnd, dc_value=0, ac_value=-100)

print(mycircuit)

op_analysis = ahkab.new_op()
ac_analysis = ahkab.new_ac(start=300e3, stop=600e3, points=1001)

r = ahkab.run(mycircuit, an_list=[op_analysis, ac_analysis])

f=r['ac']['f']
I_R1=(r['ac']['Vn3']-r['ac']['Vn2'])/R1_val
V_R2=(r['ac']['Vn5']-r['ac']['Vn4'])

matplotlib.use('TkAgg') 

fig = plt.figure()
ax1=plt.subplot(2,1,1)
ax1.grid(True)
ax1.plot(f, np.abs(I_R1), '-')
ax1.set_yscale('log')
ax1.set_ylabel('abs(I@R1) [I]')
ax1.set_title(mycircuit.title + " - AC Simulation")
ax2=plt.subplot(2,1,2)
ax2.grid(True)
ax2.plot(f, np.abs(V_R2), '-')
ax2.set_xlabel('frequency [Hz]')
ax2.set_ylabel('abs(Vn5-Vn4) [rad]')
fig.tight_layout()
plt.show()

ソース側が1Aも流れているので結合係数k=0.00007で受信側に3Vが得られる。

ちなみにkを大きくしていくと、相互インダクタンスにより定数が変わってしまうし、共振の経路が複数できることになる、で、共振周波数が変わるわ割れるわってなります。

 

ちなみに、Q値。

ソース側のQ値は計算値で17.3。受信側のQ値は計算値で11.5。系全体で28.8になってほしい(そうなると思ってた)んだけど、結果の波形から算出すると、22.5。なんでそうなるのか、、、結合によって微妙に共振がずれたり割れたりするので、バンド幅が広くなってQが低くなるんだろうけど、kを小さくしていっても22.6くらいにしかならない、、、まぁ世の中わからんことだらけですよ。