コイルを考えてみる。まずはインダクタンスを測定する方法。
こうする。検出抵抗は本当は大きいほうが高インピーダンスを正確に測定できると思う。DUTが50Ωに対してかなり大きい場合、CH2の電圧が小さくなりすぎて正確に測定できないから。まぁ、とりあえずこのままでいってみる。
import matplotlib.pyplot as plt import numpy as np from scipy import signal sig1=sig1-np.mean(sig1) sig2=sig2-np.mean(sig2) sig1_hil=signal.hilbert(sig1) sig2_hil=signal.hilbert(sig2) Z=50*(sig1_hil/sig2_hil-1) nop=np.size(t) analysis_start=int(nop*0.2) analysis_stop=int(nop*0.8) t=t[analysis_start:analysis_stop] sig1=sig1[analysis_start:analysis_stop] sig2=sig2[analysis_start:analysis_stop] sig1_hil=sig1_hil[analysis_start:analysis_stop] sig2_hil=sig2_hil[analysis_start:analysis_stop] Z=Z[analysis_start:analysis_stop] Z_re=np.mean(np.real(Z)) Z_im=np.mean(np.imag(Z)) print('Z=',end='\t') print(Z_re,end='\t') print(Z_im) fig=plt.figure() fig.add_subplot(3,1,1) plt.plot(t,sig1,t,abs(sig1_hil)) fig.add_subplot(3,1,2) plt.plot(t,sig2,t,abs(sig2_hil)) ax1=fig.add_subplot(3,1,3) ax2=ax1.twinx() ax1.plot(t,np.abs(Z),'C0') ax2.plot(t,np.angle(Z),'C1') plt.show()
計算にあたって$V_1$と$V_2$は複素数じゃないといけないので、測定データをヒルベルト変換しています。またそのためにオシロのオフセットずれを補正しています。
ブレッドボードに刺さっている緑色のものが4.7mHのコイル(まぁただのリード付き固定インダクタ)です。
これで、FGの周波数を変えながらじゃんじゃん測定していきます。
L | |||||
0.0047 | |||||
meas | Ideal | ||||
Freq | Z_re | Z_im | |Z| | angle(Z) | X |
Hz | Ω | Ω | Ω | degree | Ω |
1000 | 27.094 | 31.005 | 41.175 | 48.852 | 29.531 |
10000 | 28.703 | 299.011 | 300.385 | 84.517 | 295.310 |
20000 | 29.686 | 583.651 | 584.405 | 87.088 | 590.619 |
30000 | 30.229 | 868.108 | 868.634 | 88.006 | 885.929 |
50000 | 36.998 | 1426.486 | 1426.966 | 88.514 | 1476.549 |
70000 | 44.065 | 1995.790 | 1996.276 | 88.735 | 2067.168 |
100000 | 65.708 | 2845.696 | 2846.454 | 88.677 | 2953.097 |
200000 | 161.381 | 5993.912 | 5996.084 | 88.458 | 5906.194 |
300000 | 285.996 | 10023.551 | 10027.630 | 88.366 | 8859.291 |
400000 | 1091.753 | 15599.345 | 15637.502 | 85.997 | 11812.388 |
500000 | 2148.145 | 24127.666 | 24223.104 | 84.912 | 14765.485 |
600000 | 5080.702 | 24158.475 | 24686.949 | 78.123 | 17718.583 |
700000 | 9788.134 | 1574.062 | 9913.891 | 9.136 | 20671.680 |
750000 | 10024.830 | -4249.908 | 10888.477 | -22.974 | 22148.228 |
800000 | 12231.597 | -17298.350 | 21185.960 | -54.736 | 23624.777 |
900000 | 4425.030 | -31061.942 | 31375.550 | -81.892 | 26577.874 |
1000000 | 4188.150 | -29492.355 | 29788.246 | -81.918 | 29530.971 |
2000000 | 320.729 | -8455.934 | 8462.014 | -87.828 | 59061.942 |
3000000 | 144.641 | -5455.654 | 5457.571 | -88.481 | 88592.913 |
5000000 | 68.754 | -3093.022 | 3093.786 | -88.727 | 147654.855 |
7000000 | 57.006 | -2225.953 | 2226.683 | -88.533 | 206716.797 |
10000000 | 81.943 | -1546.003 | 1548.173 | -86.966 | 295309.709 |
20000000 | 86.325 | -825.207 | 829.710 | -84.028 | 590619.419 |
30000000 | 45.107 | -599.558 | 601.252 | -85.697 | 885929.128 |
こうなる。一番右の列は、部品の公称値からリアクタンスを計算した値。
まずは、実測結果のインピーダンスの大きさと位相をプロット。青がインピーダンスの大きさ。燈がインピーダンスの位相。自己共振周波数付近がきちんと測定できていないかもしれないが、まぁまぁそれらしい。
こちらはリアクタンスの実測と理論値のプロット。青が実測。燈が部品定数からの理論値。自己共振周波数より十分低い周波数ではほぼ一致している。
つまりインダクタンスを測定するには、自己共振周波数より十分低い周波数で
とすればいい。
、、、当たり前?
ところで、コイルに自己共振周波数があるのは線間容量で並列共振回路になっているからで、そのほかにもコイルには寄生成分があるので、これを模擬した等価回路ってのがあります。使用周波数によっていくつかの回路があるのですが、比較的広範囲で使えそうな4素子回路
で、考えてみる。
CpはLと並列共振を作るので、共振周波数から推定。Rpは共振周波数でのインピーダンスの上限を与えるもので、インピーダンスの上限から推定。Rsは線材による抵抗なので、低周波でのレジスタンスから推定。
という感じで、ざっくり求められる。
今回は自己共振周波数付近で波形が逝かれたのでシミュレーションとの一致を見ながら推定する。
シミュレーションはこうする。定数はざっくり推定したものがすでに入っている。
import matplotlib import matplotlib.pyplot as plt import numpy as np import ahkab from ahkab import circuit Cp=10e-12 Ls=4.7e-3 Rs=27 Rp=50e3 mycircuit = circuit.Circuit(title="Inductor Equivalent circuit") gnd = mycircuit.get_ground_node() mycircuit.add_capacitor("Cp", n1="n1", n2="n3", value=Cp) mycircuit.add_inductor("Ls", n1="n1", n2="n2", value=Ls) mycircuit.add_resistor("Rs", n1="n2", n2="n3", value=Rs) mycircuit.add_resistor("Rp", n1="n1", n2="n3", value=Rp) mycircuit.add_resistor("R0", n1="n3", n2=gnd, value=50) mycircuit.add_vsource("V1", n1="n1", n2=gnd, dc_value=0, ac_value=1,) print(mycircuit) op_analysis = ahkab.new_op() ac_analysis = ahkab.new_ac(start=1e3, stop=30e6, points=1001,sweep_type='LOG') r = ahkab.run(mycircuit, an_list=[op_analysis, ac_analysis]) matplotlib.use('TkAgg') f=r['ac']['f'] V1=r['ac']['Vn1'] V2=r['ac']['Vn3'] Z=50*(V1/V2-1) fig = plt.figure() ax1=plt.subplot(1,1,1) ax2=ax1.twinx() ax1.semilogx(f,np.abs(Z),'C0') ax2.semilogx(f,np.angle(Z)*180/np.pi,'C1') plt.show() for i in range(np.size(f)): print(f[i],end=(',')) print(np.real(Z[i]),end=(',')) print(np.imag(Z[i]))
まぁこんな感じ。青が実測。燈がシミュレーション。上が大きさ。下が位相。あってそうであってない。まぁこんなもんなんだろう。
オシロのスイッチの一つが逝かれてきた。結構頻繁に使っているのに今日気づいた。接触が悪いだけのようだけど自力で修理するとなるとしんどそう。このスペック(1GS/s, 70MHz)で買い替えとなるとまぁまぁの金額。しばらくはだましだまし使う。
コメントをお書きください