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?

磁石が浮くのはなぜ?—「磁気浮上安定性解析」で解き明かす仕組み

0
Posted at

「え、磁石で浮かせるだけなら簡単じゃないの?」

そう思ったあなた。実は磁気浮上は、何もしなければ絶対に安定しないんです。電磁石で鉄球を空中に浮かべようとしても、普通にやれば一瞬で吸い付くか、ポトッと落ちます。これ、物理の宿命なんですよね。

でも大丈夫。PID制御という仕組みを正しく設計すれば、物体は空中でピタリと静止します。しかも、その「なぜ安定するのか」を数式とコードで完全に理解できるツールがあるんです。

今回使うのはこちら▼
磁気浮上安定性解析シミュレーター

ブラウザだけで動くので、インストール不要。スライダーを動かしながら「なぜ振動するのか」「なぜ落ちるのか」をリアルタイムで体感できます。


ざっくり本質 — 「自転車に乗る」と同じ理屈

磁気浮上の安定化って、自転車に乗るのとまったく同じなんです。

自転車は止まっていると倒れる(=本質的に不安定)。でも、ペダルをこぎながらハンドルを微調整すれば、ピタッと直立して走れる。磁気浮上も同じで、常にセンサーで位置を監視し、電流をリアルタイムで調整することで、初めて安定が成り立つんです。

「静的な磁力だけでは釣り合わない。動的な制御こそが鍵である」

これが今回の核心です。


数式で理解する — 吸引力の正体

まず、電磁石が鉄球を引っ張る力 $F_{em}$ は、次の式で決まります。

F_{em} = \frac{\mu_0 N^2 A i^2}{2 x^2}

ここで:

  • $\mu_0$:真空の透磁率($4\pi \times 10^{-7}$ H/m)
  • $N$:コイルの巻数
  • $A$:磁極の断面積(m²)
  • $i$:コイルに流れる電流(A)
  • $x$:電磁石と浮上体のギャップ(m)

ポイントは $x^2$ で割っているところ。ギャップが小さくなると、力が急激に増大します。これが「吸い付き」の原因です。

一方、重力は $mg$ で一定。釣り合い位置 $x_0$ では次の関係が成り立ちます。

\frac{\mu_0 N^2 A i_0^2}{2 x_0^2} = mg

ここから「目標ギャップを保つには、どのくらいの電流が必要か」が計算できます。

そして、この釣り合いの周りで微小な変動が起きたときの線形化モデルが、制御設計の出発点になります。これがPID制御で補償する対象です。


コードで実装する ★最重要★

では、実際にシミュレーターのコアロジックをJavaScriptで再現してみましょう。ブラウザのコンソールでも動きます。

// 磁気浮上シミュレーター(1自由度・PID制御)
// 物理パラメータ(シミュレーターの初期値に対応)
const params = {
  mu0: 4 * Math.PI * 1e-7, // 真空透磁率 [H/m]
  N: 200,                   // コイル巻数
  A: 0.001,                 // 極面積 [m²]
  m: 0.05,                  // 浮上体質量 [kg]
  g: 9.81,                  // 重力加速度 [m/s²]
  x0: 0.01,                 // 目標ギャップ [m](10mm)
  i0: 0.5                   // 平衡電流 [A](初期値)
};

// PIDゲイン(スライダーで調整する値)
let Kp = 500;   // 比例ゲイン
let Ki = 1;     // 積分ゲイン
let Kd = 50;    // 微分ゲイン

// 状態変数
let x = 0.012;  // 現在のギャップ [m](初期は目標より少し下)
let dx = 0;     // 速度 [m/s]
let integral = 0; // 積分項

// 吸引力計算
function calcForce(i, x) {
  return (params.mu0 * params.N ** 2 * params.A * i ** 2) / (2 * x ** 2);
}

// 1タイムステップ更新(Δt = 0.001秒)
function step(dt = 0.001) {
  // 1. 偏差を計算
  const error = params.x0 - x;
  
  // 2. PID制御で電流指令値を計算
  const P = Kp * error;
  integral += error * dt;
  const I = Ki * integral;
  const D = Kd * (-dx); // 速度の符号に注意(位置の微分)
  
  const i = params.i0 + P + I + D;
  
  // 3. 吸引力を計算
  const Fem = calcForce(i, x);
  
  // 4. 運動方程式(ニュートンの第二法則)
  const acceleration = (Fem - params.m * params.g) / params.m;
  
  // 5. 状態更新(半陰的オイラー法)
  dx += acceleration * dt;
  x += dx * dt;
  
  return { x, dx, Fem, i };
}

// シミュレーション実行(1000ステップ = 1秒)
function simulate(duration = 1.0) {
  const dt = 0.001;
  const steps = Math.floor(duration / dt);
  const results = [];
  
  for (let t = 0; t < steps; t++) {
    const state = step(dt);
    results.push({
      time: t * dt,
      gap: state.x * 1000, // mmに変換
      velocity: state.dx,
      force: state.Fem,
      current: state.i
    });
  }
  return results;
}

// 使ってみる
const data = simulate(1.0);
console.log('最終ギャップ:', data[data.length-1].gap.toFixed(3), 'mm');
console.log('最終速度:', data[data.length-1].velocity.toFixed(5), 'm/s');

このコードがやっていることは、たったの5ステップ:

  1. 偏差を測る:目標ギャップと現在のギャップの差
  2. PIDで電流を決める:P(比例)で引き戻し、I(積分)で定常偏差を消し、D(微分)でブレーキ
  3. 吸引力を計算する:上記の数式そのまま
  4. 加速度を求める:吸引力 − 重力
  5. 位置と速度を更新する:物理の運動方程式

たったこれだけで、磁気浮上のダイナミクスが再現できるんです。


数値例で確かめる

実際に数値を入れて計算してみましょう。

条件

  • $N = 200$, $A = 0.001$ m², $m = 0.05$ kg
  • 目標ギャップ $x_0 = 10$ mm(0.01 m)
  • 平衡電流 $i_0 = 0.5$ A
  • PIDゲイン:$K_p = 500$, $K_i = 1$, $K_d = 50$

ステップ1:平衡状態の確認

吸引力を計算します。

F_{em} = \frac{4\pi \times 10^{-7} \times 200^2 \times 0.001 \times 0.5^2}{2 \times 0.01^2}

計算すると:

F_{em} = \frac{4\pi \times 10^{-7} \times 40000 \times 0.001 \times 0.25}{2 \times 0.0001}
F_{em} = \frac{1.2566 \times 10^{-5}}{2 \times 0.0001} = \frac{1.2566 \times 10^{-5}}{2 \times 10^{-4}} = 0.06283 \text{ N}

重力は $mg = 0.05 \times 9.81 = 0.4905$ N。あれ?吸引力が小さすぎる?
そうです。これがミソです。 平衡電流 $i_0$ は、重力と釣り合う値に設定しなければなりません。

正しい平衡電流を計算し直します:

i_0 = \sqrt{\frac{2mg x_0^2}{\mu_0 N^2 A}} = \sqrt{\frac{2 \times 0.4905 \times 0.0001}{1.2566 \times 10^{-5}}} = \sqrt{7.807} \approx 2.79 \text{ A}

この値が、シミュレーターの「平衡電流」として内部で自動計算されているんです。だから、質量やギャップを変えると平衡電流も変わるんですね。

ステップ2:制御が効いている場合の応答

上のコードでシミュレーションすると、初期ギャップ12mmからスタートして、約0.3秒で目標の10mmに収束します。最終速度もほぼゼロ。ちゃんと安定しています。

ステップ3:微分ゲインをゼロにした場合

Kd = 0 にしてみましょう。すると、物体は目標位置を行き過ぎては戻り、を行き過ぎては戻り…を繰り返し、発振します。これが「Kd(ブレーキ)が無いと安定しない」理由です。


シミュレーターで遊ぶ — 3つの実験

実際にシミュレーターを開いて試してみましょう。

実験1:Kdをゼロにして「振動地獄」を体験

  • 操作:微分ゲインKdを0にする
  • 結果:グラフがサイン波のように振動し続ける。物体がカタカタと音を立てて暴れるイメージ
  • 理由:比例ゲインKpだけで引き戻そうとすると、目標を通り過ぎて反対側に振られ、また強く引き戻される…のループ。減衰(ダンパー)が無いから止まれない

実験2:質量を2倍にして「落ちる」を体験

  • 操作:質量を0.05kg → 0.10kgに変更
  • 結果:物体が落ちる(ギャップが急増して発散)
  • 理由:質量が増えたのに、吸引力(コイル巻数・極面積)を変えていない。重力に勝てずに落下する
  • 対策:コイル巻数Nを200→300に増やすと、再び浮上する

実験3:「理想的なゲイン」を探す

  • 操作:Kp=800, Kd=100, Ki=5 に設定
  • 結果:立ち上がりが速く、オーバーシュートも少なく、定常偏差もゼロに収束
  • ポイント:Kpは大きいほど応答が速いが、発振しやすくなる。Kdでその発振を抑える。Kiは最終的な「ズレ」を消すための微調整

現場でハマるポイント — シミュレーターと実機のギャップ

このシミュレーターは優秀ですが、実機設計にそのまま使えるわけではありません。以下の3点が大きな落とし穴です。

1. 実機は「3次元」で動く

シミュレーターは1自由度(上下のみ)。でも実際の浮上体は回転(ピッチ・ロール) もします。リニアモーターカーでは、左右の電磁石のバランスが崩れると車体が傾く。これを補正するには、複数のセンサーとアクチュエーターが必要です。

2. センサーにはノイズがある

シミュレーターのギャップ値は完璧。でも実機のセンサー(渦電流式や光学式)には必ずノイズが乗ります。このノイズが微分項Kdを増幅して、かえって不安定になることがあります。実機ではKdを控えめに設定するのが鉄則です。

3. アンプの応答速度

シミュレーターでは電流が瞬間的に変化します。でも実際のパワーアンプには応答遅れがあり、指令通りの電流をすぐに出せません。この遅れが位相をずらし、高ゲインで発振の原因になります。

現場の教訓
シミュレーターで完璧なゲインを見つけたら、実機ではその半分からスタートして、少しずつ上げていく。これがプロのやり方です。


まとめ — 3つの要点

  1. 磁気浮上は「本質的に不安定」 — 静的な磁力だけでは釣り合わない。PID制御による動的な補償が必須
  2. 吸引力はギャップの2乗に反比例 — 近づくと急激に強くなる非線形性が、制御を難しくしている
  3. Kp(剛性)とKd(減衰)のバランスが全て — 強すぎると発振、弱すぎると応答が遅い。理想を探すのがエンジニアの腕の見せどころ

そして、この理解を実際に手を動かして確かめられるのが、今回のシミュレーターの最大の価値です。

磁気浮上安定性解析シミュレーター — ブラウザで即動作、登録不要

「理論はわかったけど、実際に動かすとどうなるの?」という疑問に、リアルタイムで答えてくれます。パラメータをガチャガチャ動かして、「なぜ落ちるのか」「なぜ振動するのか」を体感してください。

NovaSolverでは700以上の工学シミュレーターを無料公開中 👉 一覧はこちら

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?