7713863 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

thunderbolt!

thunderbolt!

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

PR

カレンダー

バックナンバー

キーワードサーチ

▼キーワード検索

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


昨日書いた汎用ビオサバール計算コードをもとに、コイル磁場計算(円環電流)に特化したものにしました。
コイル中心が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 CurrConst As Double = (2 * PI * coilR) / ThetaDivide​​

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

End Function​



分割数は180にしてありますが、30分割以上はほとんど差がないです。求める精度にも寄りますが、多分時間の無駄です。
軸からずれているのコイルとか、回転しているコイルとかを計算したいんなら、コイル線材の位置と電流の向きベクトルを正しくcx,xy,cz,Ix,Iy,Izで指定すればいいですが、一旦軸上コイルで磁場を計算して、それをあとから座標変換するほうがきっと楽でしょう。


さて、休憩しますか

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



明日に続く。



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





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

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


■コメント

お名前
タイトル
メッセージ
画像認証
別の画像を表示
上の画像で表示されている数字を入力して下さい。


利用規約に同意してコメントを
※コメントに関するよくある質問は、こちらをご確認ください。


コメント新着

aki@ Re:マウス蛍光ペンのon/off(01/12) この様な書込大変失礼致します。日本も当…
aki@ Re:空飛ぶクルマの空港にしたら良いのに(01/09) この様な書込大変失礼致します。日本も当…
Ocean3@ Re:BZT600復活への道 その6 新HDDを増量して完了(01/20) quanta511さん,こんにちは! 初めまして…

お気に入りブログ

りきりき元気です! りきとママ922さん

フリーページ

カテゴリ


© Rakuten Group, Inc.