磁気浮上制御
電磁石の吸引力を制御して鋼球を宙に浮かせます。
制御方式は位相進み補償またはPIDとします
線形近似でシミュレーションを行い、実運転では非線形補償を加えます。
ソースコードやプロジェクトファイルのダウンロードはこちら →magnet.zip
(1)シミュレーション用のプログラムです。 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
概念図 | ![]() | |||||||||||||||||||||||||||
ブロック図 | ![]() | |||||||||||||||||||||||||||
プログラム | var x=0.05; // 初期位置(初期空隙長=0.15) mass=0.1; // 質量 imax=2; // 電流制限 Km=1; // マグネット定数 proc { cp = leadlag( xc-x, T1, 8*T1 ); // 位相進み補償 ci = integral( xc-x, ci, T0, sup, 0 ); // 積分補償 ic = Kc * ( cp + ci ); // 駆動電流 if ic > imax { ic = imax; } // 電流制限 elsif ic < 0 { ic = 0; } // 以下はシミュレーションのための数学モデル F = Km * ic; // 発生力(線形) v = integral( F-9.8*mass, v, mass, 8, -8 ); // 速度 x = integral( v, x, 1, 0.15, 0.05 ); // 位置 } | |||||||||||||||||||||||||||
説明 |
変位のフィードバック信号に位相進み補償と積分補償を加えることにより、磁気浮上制御を行います。 位相進みには比例+微分の特性がありますので、積分と併せればPID制御と同じです。 以下の関数、信号、パラメータを使っています。
| |||||||||||||||||||||||||||
設定例 | ![]() | |||||||||||||||||||||||||||
記録例 | ![]() |
(2)実運転用のプログラム(ただし未確認)です。 | |||||||
---|---|---|---|---|---|---|---|
ブロック図 | ![]() | ||||||
プログラム 青字は変更点 |
g0=0.2; // 可動範囲 proc { x = Ain( 0, 0, 1 ); // 変位センサ入力 cp = leadlag( xc-x, T1, 8*T1 ); // 位相進み補償 ci = integral( xc-x, ci, T0, sup, 0 ); // 積分補償 u = Kp * ( cp + ci ); // 制御量 ic = ( g0 - x ) * sqrt( u ); // 非線形補償 if ic > imax { ic = imax; } // 電流制限 elsif ic < 0 { ic = 0; } Aout( 0, 0, 1, ic ); // アナログ出力 } | ||||||
説明 |
マグネットの発生力は、電流とギャップ長の非線形な関数になっていますので、 それを補償するために、図のような非線形補償器を使います。 なお、このプログラムは動作未確認です。 正しく制御するためには、以下の物理量を実物に合わせる必要があります。
以下の関数を追加しています。
|
(3)PID関数を使ったシミュレーションです。 | |
---|---|
ブロック図 | ![]() |
プログラム 青字は変更点 |
var x=0.05; // 初期位置(初期空隙長=0.15) mass=0.1; // 質量 imax=2; // 電流制限 Km=1; // マグネット定数 proc { ic = pid( xc-x, Kc, T1, 8*T1, T0, sup, 0 ); // PID制御 if ic > imax { ic = imax; } // 電流制限 elsif ic < 0 { ic = 0; } // 以下はシミュレーションのための数学モデル F = Km * ic; // 発生力(線形) v = integral( F-9.8*mass, v, mass, 8, -8 ); // 速度 x = integral( v, x, 1, 0.15, 0.05 ); // 位置 } |
説明 |
関数 pid を使うと、プログラムがやや簡潔になります。 |