· 

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

相互誘導の回路でトランジェントしてみる。こんなん。(手書きー)

送信側をASK変調するのにいい方法が思いつかなくて、抵抗でダンプした状態をスイッチでバイパスするかどうかで出力を制御してASK変調波形にしています。(後でスイッチの記述方法が分かり、Raはなくても表現できることが分かったのですがそのままやりきります)

ahkabでスイッチの定義の仕方がいまいちわからなかったけど、ここにあった例を見て解決。

ahkabのドキュメントー。そもそも、こんな表現でわかるわけないやん。

気を取り直して、こんな感じで。

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

import ahkab
from ahkab import circuit, time_functions
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*1.0

Rg_val=100e6

Ra_val=1000e6

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

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

mycircuit.add_resistor("Rg", n1="n6", n2=gnd, value=Rg_val)

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

mycircuit.add_resistor("Ra", n1="n1", n2="n2", value=Ra_val)
mycircuit.add_model("sw", "mysw", {'name':"mysw", 'VT':0.5, 'VH':0.2, 'RON':0.1, 'ROFF':None})
mycircuit.add_switch("S1",n1="n1",n2="n2",sn1="n10",sn2=gnd,ic=False,model_label="mysw")

voltage_carrier = time_functions.sin(vo=0,va=5,freq=459441)
mycircuit.add_vsource("V1", n1="n1", n2=gnd, dc_value=0, ac_value=0, function=voltage_carrier)

voltage_step = time_functions.pulse(v1=0, v2=1, td=0, tr=1e-6, pw=0.1e-3, tf=1e-6, per=0.2e-3)
mycircuit.add_vsource("V2", n1="n10", n2=gnd, dc_value=0, ac_value=0, function=voltage_step)

print(mycircuit)

op_analysis = ahkab.new_op()
tran_analysis = ahkab.new_tran(tstart=0, tstop=0.5e-3, tstep=1e-6, x0=None)

r2 = ahkab.run(mycircuit, an_list=[op_analysis, tran_analysis])

t=r2['tran']['T']
tV_R2=r2['tran']['Vn6']-r2['tran']['Vn5']

matplotlib.use('TkAgg') 

fig = plt.figure()

ax1=plt.subplot(1,1,1)
ax1.grid(True)
ax1.plot(t, np.real(tV_R2), '-')
ax1.set_ylabel('(Vn5-Vn4) [V]')
ax1.set_xlabel('time [s]')

fig.tight_layout()
plt.show()

で、こうなる。

今回は、5Vp(time_functions.sinはva*sin(ωt)らしいのでvaの単位はVp)で約0.15Vpとなっている。

 

で、前回の回路と同じ構成にして送信側の電圧を5Vrmsでac解析してみる。

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

import ahkab
from ahkab import circuit, time_functions
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*1.0

Rg_val=100e6

Ra_val=1e-6

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

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

mycircuit.add_resistor("Rg", n1="n6", n2=gnd, value=Rg_val)

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

mycircuit.add_resistor("Ra", n1="n1", n2="n2", value=Ra_val)

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

print(mycircuit)

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

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

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

V_R2_abs=np.abs(V_R2)
V_R2_max=np.max(V_R2_abs)
f_band=f[V_R2_abs>=(V_R2_max/np.sqrt(2))]
q_sim=(f[V_R2_abs==V_R2_max]/(f_band[-1]-f_band[0]))[0]
print ('Q from waveform=',end='')
print(q_sim)



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) [A]')
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(Vn6-Vn5) [V]')
fig.tight_layout()
plt.show()

となるので、0.157Vrms。

 

すなわち、トランジェントでも振幅もちゃんと計算できている。が、3パルス目に何か、、、なんだろう。とりあえず動くようにするだけで力尽きた。

しっかし、甲子園中継の音声、、、カラスすごくね?

<参考文献>

WQC 株式会社

https://www.green-house.co.jp/shared/contents/iot-wireless/casestudy2/iot-casestudy-wireless-WQC.pdf

 

、、、参考にしたわけじゃないけど、興味深いので記録のため載せておく。