0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

インダクタンスを計算しよう(理論式)

Last updated at Posted at 2025-04-20

はじめに

ランランリンリン 飛ばしてレンレン ロンロン戻してルーンルン1!半導体業界所属 まやかしの園児にゃあ【ここにあなたの名前を入れてください】です!もしよろしければ【ここにあなたの愛称を入れてください】ってよんでください!!

Screenshot 2025-04-20 154225.png

……というわけでね、はい、もう SystemVerilog とか UVM とか、そんなんばっかりやってると正気を失ってしまいますからね、はい、今日はガラッと気分を変えて、インダクタンスの計算でもしてみましょうか!!!!!!はい!!!!!(自然薯挿入2

(A) 円環状導線の自己インダクタンスの理論式

円環状導線の自己インダクタンスは、次の式で求めることができます3

$$L = R \left\{\mu_0\left(\log\frac{8R}{a}-2\right)+\frac{\mu}{2}\right\}$$

  • 円環状導線の半径 $R\ (\gg a)$
  • 導線の半径 $a$
  • 導線の透磁率 $\mu$

この計算は、Pythonを使って下記のように書くことができ、

from numpy import log
from scipy.constants import mu_0
R = 20e-3
a = 0.4e-3
mu = mu_0
L = R * (mu_0 * (log(8*R/a) - 2) + mu/2)
print(f"L = {L:.2e}")

例えば、以下のような自己インダクタンス値が得られます。
$$L = 11.3\ \mathrm{nH}$$

(B) 多角形近似 + 円筒状導線のインダクタンス

まず、円筒状導線の自己インダクタンスは、次の式で求めることができます3

$$M_{11} = L_1 = \frac{l}{2\pi} \left\{\frac{\mu_0}{4} + \mu_0\left(\log\frac{2l}{a}-1\right)\right\}
= 2 \times 10^{-7} \times l \left(\log\frac{2l}{a}-\frac{3}{4}\right) $$

  • 円筒状導線の長さ $l$
  • 導線の半径 $a$
static double calculateSelfInductanceOfSingleWire(double length, double radius)
{
  // mu0 = 4*pi*1e-7 [H/m], therefore, the coefficient is mu0/(2*pi) = (4*pi*1e-7)/(2*pi) = 2e-7 [H/m]
  return 2e-7 * length * (Math.Log(2 * length / radius) - 3.0/4);
}

続いて、二つの円筒状導線間の相互インダクタンスは、次の式で求めることができます4

$$M_{12} = \mu_0\iint\frac{\mathrm{d}\vec{l}_1 \cdot \mathrm{d}\vec{l}_2}{\vec{r}}
= \mu_0 \cos\theta \int _{0} ^{l_1} \int _{0} ^{l_2} \frac{\mathrm{d}l_1 \mathrm{d}l_2}{r}$$

  • 円筒状導線の長さ $l_1, l_2$
  • 二つの導線がなす角 $\theta$
  • 二つの導線間の距離 $r$
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.Integration;

static Matrix<double>? calculatePartialInductance(Matrix<double> path1, Matrix<double> path2, double radius)
{
  var partialInductanceTable = Matrix<double>.Build.Dense(path1.RowCount-1, path2.RowCount-1);
  for (int i = 0; i < partialInductanceTable.RowCount; i++)
  {
    Vector<double> a = path1.Row(i);
    Vector<double> b = path1.Row(i + 1);
    Vector<double> ab = b - a;
    if (ab.L2Norm() == 0)
    {
      var points = $"({string.Join(",", a.Select(x => $"{x:e2}"))}), ({string.Join(",", b.Select(x => $"{x:e2}"))})";
      Console.Error.WriteLine($"Wire length should be larger than 0: {points}");
      return null;
    }

    for (int j = 0; j < partialInductanceTable.ColumnCount; j++)
    {
      Vector<double> c = path2.Row(j);
      Vector<double> d = path2.Row(j + 1);
      Vector<double> cd = d - c;
      if (cd.L2Norm() == 0)
      {
        var points = $"({string.Join(",", c.Select(x => $"{x:e2}"))}), ({string.Join(",", d.Select(x => $"{x:e2}"))})";
        Console.Error.WriteLine($"Wire length should be larger than 0: {points}");
        return null;
      }

      Vector<double> ac = c - a;
      Vector<double> bc = c - b;
      Vector<double> ad = d - a;
      Vector<double> bd = d - b;

      if ((ac.L2Norm() == 0 && bd.L2Norm() == 0 ) || (ad.L2Norm() == 0 && bc.L2Norm() == 0 ))
      {
        double cosTheta = ab.DotProduct(cd) / (ab.L2Norm() * cd.L2Norm());
        partialInductanceTable[i, j] = cosTheta*calculateSelfInductanceOfSingleWire(ab.L2Norm(), radius);
        continue;
      }
      else
      {
        // mu0 = 4*pi*1e-7 [H/m]
        // Therefore, the coefficient is mu0/(4*pi) = (4*pi*1e-7)/(4*pi) = 1e-7 [H/m]
        double cosTheta = ab.DotProduct(cd) / (ab.L2Norm() * cd.L2Norm());
        partialInductanceTable[i, j] = GaussLegendreRule.Integrate(
          f: (x1, x2) =>  1e-7 * cosTheta / (ac + x2*cd.Normalize(2) - x1*ab.Normalize(2)).L2Norm(),
          invervalBeginA: 0,
          invervalEndA: ab.L2Norm(),
          invervalBeginB: 0,
          invervalEndB: cd.L2Norm(),
          order: 5);
        continue;
      }
    }
  }
  return partialInductanceTable;
}

最後に、$N$本の導線で構成されたコイルの自己インダクタンスは、次のように、各導線の相互インダクタンスの合計で求めることができるので、

$$L = \sum_{i,\ j}^N M_{ij}
= \left(
\sum_{i=1}^{N} L_{i} + \sum_{i=1}^N\sum_{\substack{j=1 \\ j \neq i}}^N M_{ij}
\right)
$$

using MathNet.Numerics.LinearAlgebra;

Matrix<double>? inductanceTable = calculatePartialInductance(path1, path2, radius);
Console.WriteLine(inductanceTable.RowSums().Sum());

これらの式を使い、(A)と同様の円環状導線の自己インダクタンスを計算すると、$N = 128$分割の場合、

Screenshot 2025-04-20 152312.png

以下のような自己インダクタンス値が得られます。
$$L = 10.4\ \mathrm{nH}$$

結果の比較

手法 自己インダクタンス (A)との差
(A) 円環状導線(理論式) 11.3 nH 0 %
(B) 多角形近似(相互インダクタンスの総和) 10.4 nH -8 %

おわりに

バタフライダンシング
反旗翻して
僕が歩けばシャンデリゼ5

  1. ちょまバンク ご利用いかがですか

  2. 自然な導入 - ニコニコ大百科

  3. 詳解 電磁気学演習 - 後藤憲一 2

  4. 電気磁気学(3版改訂)- 桂井誠

  5. 【オリジナルラップ】新天体【ルンルン / にじさんじ】

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?