thunderbolt!

thunderbolt!

PR

カレンダー

キーワードサーチ

▼キーワード検索

2021.09.29
XML
テーマ: 私のPC生活(7460)
カテゴリ: その他いろいろ
​​​​​​​​​​​​コイル軸上に無い(オフアクシスの)任意の点の磁場は?
ヘルムホルツコイルを作って磁場を発生させたとき、径方向にどれぐらいの成分が出るのか、つまりどれぐらいの領域なら平行磁場と言っていいのか、を簡単に知りたい。
解析解はない、ということで、ビオサバールの式を数値的に積分して磁場計算するコードを作りました。


昨日書いた汎用ビオサバール計算コードをもとに、コイル磁場計算(円環電流)に特化したものにしました。
コイル中心がZ軸上に置かれていていると限定したジオメトリで、任意の位置の磁場を計算できます。

微小電流要素の座標変化を一体化し、一行で呼べるようにしました。




​'コイル特化型ビオサバールBScoilCalc コイルは中心がZ軸上に置かれていていると限定​
​Private sub​ BScoilCalcTest()
  '引数は、求めたい点Pの座標(Px, Py, Pz)[m]、コイルの半径coilR[m]、コイル中心のZ座標coilZ[m]、電流coilI[A] 戻り値は磁場[テスラ]
  Dim resultBScoil() As Double  = BScoilCalc(Px, Py, Pz, CoilR, CoilZ, CoilI)​​

'計算された磁場の各成分が配列に順番に入っている
  Bx=resultBScoil(0)
  By=resultBScoil(1)
  Bz=resultBScoil(2)

​End Sub​




呼ばれる方で、コイル円環をトレースするよう座標を振るようにします。



'z軸上コイル特化型ビオ・サバールBScoilCalc
'半径R、位置Z、電流Iのコイル付近の作る磁場を、任意の位置Px,Py,Pzで計算する 
​Private sub​ BScoilCalcTest()

  'コイル線材のある部分の磁場を求めると、rベクトルがゼロになってしまいエラーになるので、ゼロを返す​
​​​​    If Px ^ 2 + Py ^ 2 = coilR And Pz = coilZ Then Return New Double () {0, 0, 0}​​​

  '微小要素の座標と電流の向きベクトル Z軸に垂直なのでz成分は無し、​

​​    Dim Cx, Cy, Ix, Iy As Double ​​

​   'コイルの円周上の回転角   xy成分を180分割した円周に分解​
​​   Dim theta As Double ​'回転角ラジアン​ ​​
​​   Dim ThetaDivide As Integer = 180 ​'コイル円周を180分割​ ​​
​​   Dim ThetaStep As Double = 2 * PI / ThetaDivide​​

​   'ビオサバールの定数部分​
​​   Dim AAA As Double ​​

​ '計算された磁場​
​​      Dim Bx As Double = 0​​
​​   Dim By As Double = 0​​
​​   Dim Bz As Double = 0​​

​   '180分割した微小要素の和を求める 精度を上げるなら分割数を増やす​
​​​   For theta = 0 To 2 * PI - ThetaStep Step ThetaStep​​​

     'コイル上の微小要素の座標と電流の向きベクトル
    求めたい位置のxyz座標(微小要素のxyz座標) コイル要素のz座標は常にcoilZ 電流の向きベクトルは接線方向 左回りがプラス電流
    Cx = coilR * Cos(theta)
    Cy = coilR * Sin(theta)
    Ix = -1 * coilI * Sin(theta)
    Iy = coilI * Cos(theta)

     'ビオサバールの定数部分  1/4π/R^3  Rは微小要素から求めたい点の間に張るベクトル
    '本当は4πで割るが、どうせ磁場を求めるときに透磁率μ(=4πx1e7)を掛けるので、もう最初からかけたことにして4πは省略
    AAA = 1 / ((Px - Cx) ^ 2 + (Py - Cy) ^ 2 + (Pz - coilZ) ^ 2) ^ 1.5 * 0.0000001

    'ビオサバールの外積部分を足していく 電流の向きベクトルdHと、ベクトルRの外積
    'コイルがz軸上にあって常にIz=0、Cz=0なのでもう省いてある

    Bx = Bx + AAA * (Iy * (Pz - coilZ))
    By = By + AAA * (-Ix * (Pz - coilZ))
    Bz = Bz + AAA * (Ix * (Py - Cy) - Iy * (Px - Cx))

  Next theta​

  '電流の定数部分 分割した数ThetaDivide倍化されているので割る
  'コイル全体の微小要素の長さは2π×coilRの円周 寄与としてはそれだけ大きくなるので円周分かけないといけない 微小要素の寄与トータルが必要
​​   Dim As Double = (2 * PI * coilR) / ThetaDivide​​

​   '配列にまとめて戻す​
   Return New Double () {Bx * CurrConst, By * CurrConst, Bz * CurrConst}​

End Function​



分割数は180にしてありますが、30分割以上はほとんど差がないです。求める精度にも寄りますが、多分時間の無駄です。



さて、休憩しますか

【ふるさと納税】彩とりどりのHome Party Cake Set! 計24個



明日に続く。



​​​​​​​​​​​​





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2021.10.17 23:00:01
コメント(0) | コメントを書く
[その他いろいろ] カテゴリの最新記事


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X

Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: