シミュレーションの演習

GS17:ヒステリシスのある共振回路

電気回路モデル

左図は減衰振動電気回路モデルです。記号は次のとおりです。

ここでインダクタンスが空心コイルではなく、磁心コイルの場合どうなるでしょうか。磁心コイルでは磁気ヒステリシスを生じますから、ボンドグラフは図のようになります。ここでHYSはヒステリシスを生じる関数です。
簡単のため、磁気回路断面積は一定で面積Sとします。となります。インダクタンスLは磁束と電流との鎖交数と定義されます。磁界の強さHは電流に比例しますが、磁束密度Bとの間には次の関係があります。 Hに対し、Bは飽和曲線であり、かつ、ヒステリシス曲線となります。モデルとしては左図のようになります。

定式化

ボンドグラフから式に書き下すと次のようになります。あわせてブロック線図も示します。

強磁性体のB-H曲線のシミュレーションブロック図

代数ループ

はHが増加するときと、減少するときで異なる2値関数です。すなわちの符号によりFUNCは切り替えられます。切替時に2つのFUNCが同値であれば問題はありませんが、実際は異なりますから区間において上に示したブロック線図は上右図の代数ループと等価となります。明らかにこの計算は発散し、計算不可となります。関数切替が代数ループとなるからです。代数ループの回避をしなければこのシミュレーションはできないことになります。BGSPでは計算ができませんので20-Simを使用します。20-Simにおいて代数ループを回避するには方法が2つあります。以下のシミュレーションにおいて説明します。

シミュレーション:方法その1

20-Simには代数ループを見つけ、回避する機能が備わっています。この場合の20-Simのボンドグラフを左図に示します。コードをBGS17に示します。文献[1]と比較するとTUTSIMの場合のコードとはかなり違います。
要素Iについて以下のように直接的にフローに関数を当てはめています。この方法では代数ループを積極的に回避していませんので、20-Simの機能を利用して代数ループ回避の演算を実施しています。

I
parameters
real i=1;
 string f1='c:\usr\data1.txt';
 string f2='c:\usr\data2.txt';
equations
 state=int(p.e);
 if p.e > 0 then
  p.f=table(f2,state)/i;
 else
  p.f=table(f1,state)/i;
 end;

下図は方法1による場合の20-SimにおけるRUN設定画面です。"Algebraic Relation Solver"という設定コーナーが見えます。ここをクリックしますと、刻みの設定ができます。刻みを細かくすると代数ループ回避の可能性が高くなります。ここではにしました。

20-SimにおけるRUN設定画面

方法1によるシミュレーション結果

シミュレーションの結果を下に示します。[1]p274の図10.19と一致しています

H-B特性を次図に示します。これも[1]p274の図10.19と一致しています

方法2によるシミュレーション

方法2ではdelay関数を利用して代数ループを回避します。下に20-Simのボンドグラフ設定図を示します。このボンドグラフではSwitch、Tableも利用し、さらに要素Iについてはインタフェースの編集を行い、新たなport入力を設けます。切替には要素Iの前にゼロジャンクションを設け、"エフォート+Delay"により切り替えます。Tableブロックの入力はでなくてはなりませんが、これはI要素のインタフェースにstate出力がありますのでこれを利用します。switchブロックの出力をport信号として利用します。

設定画面を次に示します。これは"RUN Property"の設定画面ですが、方法1と異なり、"Algebraic Loop"の設定がありません。ボンドグラフにおいて"Delay"ブロックを利用したため、代数ループが生じなくなったからです。

要素Iのコードは次のようになります。コードをBGS17に示します。方法2の関数表は方法1と同じです。

I
parameters
real i=1;
equations
  state=int(p.e);
  p.f=port1 /i;

シミュレーション結果は方法1と同じですので省略します。方法2は文献[1]と同じ考え方に立っていますが、ボンドグラフはかなり違います。TUTSIMについての文献がないので理由はわかりません。