前回の相互誘導の回路の送信側の電流波形を見てみたところ、送信側の電流を突然遮断していたので、いまいちな波形になっていた。
遮断した抵抗の両端にとんでもない高電圧が発生していたはず。で、ちょっと修正。
こんな感じに。
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() V_src=5 R1_val=100e0 L1_val=600e-6 C1_val=200e-12 R2_val=100e3 L2_val=3e-3 C2_val=40e-12 Rg_val=10e6 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.00074) mycircuit.add_model("sw", "mysw", {'name':"mysw", 'VT':0.5, 'VH':0.2, 'RON':1e-6, 'ROFF':10e6}) mycircuit.add_switch("S1",n1="n1",n2="n2",sn1="n10",sn2=gnd,ic=False,model_label="mysw") mycircuit.add_switch("S2",n1="n2",n2=gnd,sn1="n20",sn2=gnd,ic=True,model_label="mysw") mycircuit.add_switch("S3",n1="n1",n2=gnd,sn1="n20",sn2=gnd,ic=True,model_label="mysw") voltage_carrier = time_functions.sin(vo=0,va=V_src,freq=459441) mycircuit.add_vsource("V1", n1="n1", n2=gnd, dc_value=0, ac_value=0, function=voltage_carrier) voltage_step2 = time_functions.pulse(v1=1, v2=0, 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_step2) voltage_step3 = 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("V3", n1="n20", n2=gnd, dc_value=0, ac_value=0, function=voltage_step3) print(mycircuit) print ('Resonance frequency=',end='') print(1/(2*np.pi*np.sqrt(C1_val*L1_val))) print ('Calculated Q=',end='') print((1/R1_val)*np.sqrt(L1_val/C1_val)) print ('Resonance frequency=',end='') print(1/(2*np.pi*np.sqrt(C2_val*L2_val))) print ('Calculated Q=',end='') print(R2_val*np.sqrt(C2_val/L2_val)) op_analysis = ahkab.new_op() tran_analysis = ahkab.new_tran(tstart=0, tstop=0.7e-3, tstep=0.5e-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'] tI_R1=(r2['tran']['Vn4']-r2['tran']['Vn3'])/R1_val matplotlib.use('TkAgg') fig = plt.figure() ax1=plt.subplot(2,1,2) ax1.grid(True) ax1.plot(t, np.real(tV_R2), '-') ax1.set_ylabel('(Vn5-Vn4) [V]') #ax1.set_xlabel('time [s]') ax2=plt.subplot(2,1,1) ax2.grid(True) ax2.plot(t, np.real(tI_R1), '-') ax2.set_ylabel('(Vn4-Vn3)/R1 [A]') ax2.set_xlabel('time [s]') fig.tight_layout() plt.show()
スイッチの構成を変えたときに、H/Lのフェーズも変えてしまった。すまソ。
で、よくなった。が、実は細かく見るとまだいけてない。
スイッチのタイミングもうまい事やらんといかんのだろうけど。まぁ受信側はくずれてないので、今回はそこまで攻めない。
今更だけど、普通にngspiceとかでやればいいじゃん、、、って思ったりもする。まぁpythonでやるのがいいんです。spiceの回路記述を今更やりたいって人はあまりいないと思う。pythonでできるからやってみたいって思えるんだと思う。定数変えながらの繰り返し計算とかpythonだと簡単だし、結果表示の柔軟性もあるし。
コメントをお書きください