はじめに
電線に高周波電流を流すと表面付近の電流密度が極端に大きくなってしまうという現象がある。これを表皮効果と呼ぶ。導線内部に生じる電流密度は、マクスウェル方程式を円筒座標系で解くことによって導出することができ、ベッセル関数で表すことができる。そこで、今回は解析解を用いて表皮効果によって生じる電流分布についてPythonで再現してみることを目的とする。
表皮効果の解析解
交流電流$I$を空間に存在する無限長の半径$a$の一本の導線に流した場合、電流密度は半径のみに依存して以下のような式になる。(これの導出は参考文献1を参照)
J(r)=\frac{k I}{2 \pi a} \frac{J_0(kr)}{J_1(ka)}
ただし、$k=\sqrt{-j \sigma \mu \omega }$であり、$\sigma,\mu$は導線の電気伝導率、透磁率であるものとする。また$\omega$は交流電流の角速度である。
図示
それでは、実際に上式を用いて導線断面における電流密度をコンター図を用いて図示するプログラムを作成しよう。
import matplotlib.pyplot as plt
#円周率の算出
import math
import numpy as np
#ベッセル関数の読み込み
from scipy.special import jv
#3dデータを上手く加工する
from scipy.interpolate import griddata
#円筒銅線の材料パラメーター
#電気伝導率σ
sigma = 1.0
#透磁率μ
mu = 1.0
#角周波数
omega = 10
#電流値
I=1.0
#銅線の半径
r_0=10
k= (-1j*omega*mu*sigma)**0.5
#プロット
NUM=10000 # サンプリング数
x=0 # 点のx値
y=0 # 点のy値
#zを求めるために使用
i=0
#a<r<b つまり -r_0<r<r_0の範囲で乱数を生成する
a=-1*r_0
b=r_0
x_a=[]
y_a=[]
z_a=[]
# ループカウンタ
while i<NUM: # NUM回ループ
x=(b - a) * np.random.rand() + a # ランダムな点の位置x a<x<bにおけるランダムな点を作成
y=(b - a) * np.random.rand() + a # ランダムな点の位置y
if x**2+y**2<r_0**2: # 円筒内部ならば
z= (k*I/(2*math.pi))*jv(0,k*(x**2+y**2)**0.5)/jv(1,k*r_0)
x_a.append(x)
y_a.append(y)
z_a.append(z)
else: # 円の外
#plt.scatter(x,y,color='blue')
z=0
i+=1 # ループカウンタ増
#データの整理
x_new, y_new = np.meshgrid(np.unique(x_a), np.unique(y_a))
z_new = griddata((x_a, y_a), z_a, (x_new, y_new))
#コンター図で表示する
plt.contourf(x_new, y_new, z_new)
#カラーバー
plt.colorbar()
#保存
plt.savefig("hixyouhi_entouzahixyou_con.png")
plt.show()
これを実行すると以下のような画像が出力される。
このように、表面付近の電流密度が高いのが分かるだろう。
このプログラムを使って、$\omega$を変化させた場合においてどの様に電流密度が変化するのかを調べたところ以下のような図になった。
このように、周波数を変化させることによって、同じ電流の大きさでも導線内部の電流密度分布を変化させることができるということが分かった。
まとめ
今回はPythonを用いて表皮効果を図示することを試みた。結果確かに、周波数を変化させることによって、導線表面付近の電流密度を変化させることができ、表面付近に電流が集中するということが分かった。したがって、高周波電流を扱う場合は小型化をする際にこのような現象も考慮しなければならないため、適切な周波数を選択することが重要となる。
参考文献
https://denki-no-shinzui.com/skin-effect/
https://qiita.com/kzm4269/items/8ea85f3d90caecef704b