CASL87での回路表現
■村岡如竹
■村岡如竹
■回路素子の種類は4つだけで充分(Ver3.0からサンプリングやディレイを加えて6つに増加)
CASL87で扱える回路素子は以下の図に示す4つの素子だけである(Ver.3よりデジタル・フィルタ対応などのためにZ変換上の遅延素子Z-1と遅延素子Tを追加)。これだけでトランジスタやオペアンプの周波数特性を求める等価回路を表すことができる。左端から電流源を表す相互コンダクタンス(Mutual conductor)、「微分」を表すインダクター(Inductor)、「積分」を表すキャパシター(Capacitor)、そして抵抗器(Resistor)である。
バイポーラ・トランジスタやオペアンプははないのか?と思われる諸氏の声が聞こえてきそうだが、ご安心を。周波数特性やフィードバック制御上の安定性追求のための線形回路解析はこの4つの素子で充分なのである。
これら4つの素子で、トランジスタやオペアンプの内部を表現できるのである。
ところで、これらの素子の中で、インダクターやキャパシターは何をもって「微分」とか、「積分」なのであろうか。学生時代に習った教科書では、インダクターが「積分」、キャパシターが「微分」だったような.....と思われた諸氏も少なくないと思う。
ここでは、CASL87の使い方の詳細として、具体的な例を示して深く入り込んだ説明をしていこうと思う。
■すべては電流主体
ここでは、インダクター、キャパシターの中を流れる電流に対して、その素子の端子間に発生する電圧が、「微分」、「積分」の結果としている。高校生の物理学で「キルヒホッフの法則(第一法則)」というのを習ったのを憶えているだろうか。「ひとつのノードに集まる電流の和はゼロである」という法則である。
回路のネットワークにとって各ノードに集まる電流の和をゼロとする連立微分方程式をもって周波数特性などを計算することが基本であるが、まさしく「キルヒホッフの法則(第一法則)」を基軸として考えることが回路解析の要である。
ノードに集まる電流の和がゼロになることが前提なので、ノード間の「電圧源」の存在は不当である。なぜなら、ノード間の電圧源は交流的変化にはショートを意味しているからである。
そのため、CASL87では電圧コントロール型の「電流源」のみ許され、「電圧源」は許されない。でも安心してほしい。周知の「電圧源ー電流源」の等価変換(ノートンやテブナンの定理を基軸)によって、「電圧源」は「電流源」に変換できるのだ。例えば下の図に示すような変換だ。
電圧源の出力抵抗Routが、電圧源に絡む周りの抵抗に対して充分低い値(上図では0.001Ω)にすると、ここでは、Rload(1KΩ)に対して、100万分の1となり、(普段、使用する抵抗器の値の誤差が0.1~5%の現実では、この100万分の1の値ゼロに近い出力抵抗になり)計算上は、電流源とRoutの組が殆ど電圧源のみとみなされることが判るであろう。
また、上図は1.0倍の電圧コントロール型の電流源の例であるが、この電流源(電圧源等価)の倍率は自由に設定できる。
尚、「キルヒホッフの法則」の「第二法則」では、ノードで接続される素子の端子間の「電圧」の総和がセロになることが定義され、この場合は、むしろ「電圧源」が起用されるが、真空管の五極管やバイポーラ・トランジスタ、及び、FETなどの等価回路は、相互コンダクタンス(mutual conductance)としての電流源が基本なので、やはり、「キルヒホッフの法則」の「第一法則」の方が都合がよい。
■力学での応用
CASL87は本来、筆者によって電子回路用に開発したものではあるが、本質的に等価回路は「微分、積分」の世界なので、力学にも適用できる。筆者も電子回路が専門ではあるが、ここでは、いきなり、CASL87を「メカ」系の力学に適用した説明を行う。
もっとも、ロケットのサイドスラスターや飛行機、水中翼船のエルロンなどの制御の分野では、いわゆる「メカトロニクス」が主流であるので、メカの構造とその速度や加速度センサーを介しての電子回路との組み合わせは、現代の制御工学の要であり、「力学」での等価回路が重要であることは、もはや周知である。
■力学の等価回路表現-単一系
下の図に単純な「質量」、「バネ」、「制動」の組み合わせの単一系の振動システムとして標準的なモデルを示す。
上図の質量体(Mass1)に力(Force1)が加えられるが、この質量体(Mass1)はバネ(Spring1)と制動器(Damper1)が接続されている構造体とする。質量体(Mass1)はバネ(Spring1)と制動器(Damper1)によって床の固定台からは浮いた構造になっているものとし、空気による抵抗は無視できるものとする。
こういった構造体を考える場合、どうしても各部品の非線形性が気になってしまうものである。質量体は剛性の高いものを想定すればさほど、力との関係において非線形性は問題にはならないが、バネや制動器はそうはいかない。
バネの伸び縮みのストローク量が大きい場合と小さい場合はバネ定数の値に差異があり、非線形性が容易に想像される。制動器の場合も初動と動作途中での抵抗性に差があることは摩擦の問題を考慮すれば、やはり非線形性があるのは明白である。
ストロークの大きな場合に対応するには、質量体の各位置での入力としての力(Force1)が微小なサイン波として想定して、それぞれの各部品の定数を実機から実測で求めることで、より正確な状態の把握が可能になる。
【メカ系の等価回路化】
下の図は上図の構造体の等価回路である。ニュートン力学を取り扱う上で極めて合理的な等価回路を提示することに詳細な説明になってしまうが、しばらくお付き合い頂きたい。
入力としての力(Force1)は相互コンダクタンス(Gforce1(e>10*100-e))、つまり電流源として表す。電流源とはその端子間にかかる電圧に左右されない強固な電流の源を意味する。
この相互コンダクタンスの表記は、CASL87では次のように定義づけられている。
CASL87では、相互コンダクタンスの先頭文字は必ず、「G」や「g」でなくてはならない。”e>100”は電流方向で、この場合はグランドからノード10に向かうことを表している。”100-e”はコントロール電圧で、ノード100とグランド間の差電圧(ノード100が正方向)を表している。ここでの相互コンダクタンスGforce1は、入力の力(Force1)源で、速度(Velocity1)に左右されない「流れ」源(Current source)として位置づけられ、値は1.0、単位は「N」(Newton)である。
この電流源としての力(Force1)からそれぞれの構成部品に分流するのだが、そのひとつである質量体(Mass1)はキャパシタ(Cmass1)で表され、単位は「Kg」であり、「積分」素子となる。
キャパシタCmass1を流れる力Force_mass1(S)は、速度Velocity1(S)に対して、以下の式で表される。
S・Cmass1はアドミタンス(インピーダンスの逆数)である。
尚、Sはラプラス演算子で、S = σ+jωである。ラプラス変換については大学の応用数学で習ったと思うが、微分積分の座標系を複素数の平面座標系を基とする座標に座標変換して、微分積分の計算を代数幾何の計算で行えるというナポレオン時代の数学上の発明である。
「力=質量×加速度」であるが、加速度=S・速度(Velocity1)であり、Sは微分演算子である。上の式より、速度Velocity1(S)は以下のようにあらわされ、1/(S・Cmass1)は積分の式であり、Cmass1はその係数になる。
バネ(Spring1)は、バネ定数(Stiffness:硬さ)を持つが、ここではその逆数の「柔らかさ」であるコンプライアンス(Compliance)としてのインダクタ(Lcompliance1)で表され、単位は「m/N」。
インダクタ(Lcompliance1)がコンプライアンス量として定義づける理由は、分流されるバネの両端の力が、このインダクタ値とこのインダクタの端子間電圧が比例する関係を構築できるからである。
バネ(Spring1)の両端にかかる力(圧力)Force_spring1は以下のようになる。
前述の力Force_mass1は質量Cmass1を速度Velocity1を微分した加速度を掛け合わせたものだったが、このバネのコンプライアンスLcompliance1の逆数(バネ定数)に速度Velocity1を積分した位置(position)の値(バネの両端のスタティックな長さの変化量)を掛け合わせたものである。
速度Velocity1(S)はバネの端子間圧力(Force_spling1)に対する式は以下の様になる。ここで、Sは微分演算子であり、Lcompliamce1はその係数になる。
制動器(Damper1)は、速度に比例(速度と同次元)する反作用の力として定義し、コンダクタンス(Conductance:抵抗値の逆数=1/Rdamper1)として表す。単位は「N/(m/s)」=「N・s/m」である。
ただし、Casl87では、そのまま抵抗(Rdamper1)の値(コンダクタンスの逆数)を記述することに注意してほしい。
速度Velocity1(S)は以下のようになる。
つまり、速度Velocity1(S)は、分流された力Force_damper1とRdamper1との積で生じる速度、単位も「(m/s)/N」=「N・m/s」になる。
入力の力である相互コンダクタンス(Gforce1(e>10*100-e))、キャパシタ(Cmass1)、インダクタ(Lcompliance1)、制動抵抗(Rdamper1)の中に分流される力(Force current)は速度(Velocity1)のノードであるノード10に集結する。
上記の等価回路での力(流れ)のすべての和はゼロであることから、Velocity1(ノード10)に対して次の式が成り立つ。
右辺は4つの力の総和であり、「キルヒホッフの法則(第一法則)」より、ゼロとなる。
入力の力(Force1)に対する質量体(Mass1)としてのキャパシタ(Cmass1)の速度の周波数特性は、このノード10を出力とすれば求まることになる。
このノード10の速度を「微分」変換したのが、ノード20で検出される加速度(Acceleration1)、逆に「積分」変換したのが、ノード30で検出される位置(Position1)となる。
CASL87ではノード10、ノード20、ノード30の3つのノードを基に3行4列の複素マトリクスの解をもって周波数特性を導き出す。
尚、質量Cmass1とバネLcompliance1の共振周波数をf0 = 1.0Hzとすると、ω = 2π・f0として以下の式よりLcompliance1を求めることができ、Lcompliance1は、25.33e-3と求まる。。
質量Cmass1、バネのコンプライアンスLcompliance1、制動抵抗Rdamper1のそれぞれの値を以下の表に表示する。
CASL87、GR87を使って、上記の等価回路及び、上の表での素子の値を基に計算したのが、下の特性グラフである。
左から入力Force1に対する質量体Mass1の位置(移動量)Position1、速度Velocity1、加速度Acceleration1の特性である。それぞれ、制動素子であるRdamper1の値を変えた特性を表示している。
これらのGain(単位 : dB)は入力Inputに対する出力Outputの倍率であり、以下の式で定義する。
先に、CASL87、GR87の結果として、上に示す周波数特性の出力から提示したが、CASL87の入力の回路記述コードは以下のようになる。
【注釈】
注釈には、3種の文字が関与している。「/* */」、「{ }」で囲まれる範囲及び、1行のみを示す「//」を先頭とする注釈である。ユザーが自らの管理で使い分けできるようになっている。回路記述のソースコード(サフィックス=".CAS")は、ユーザー自身にとってはメンテナンスの重要性を重んじるならば、注釈やインデントの活用によってコンピューターではなく、人間が読みやすい「書き方」に徹することをCASL87では推奨する。
HTMLやXAMLなどのマークアップ言語と異なり、CASL87は、人間がコンピューターに理解させるよりも、メンテナンス性を重視した記述方式で構成した。そして、回路記述に関して、階層構造の判りやすさなど、できるだけエレガントな記述ができるように工夫した。この理由は過去の回路記述を流用、或いは改変するなどの保守、管理などのメンテナンス作業は、人間どうしで行うものであり、コンピュータが行うものではないからである。
【回路ブロック】
回路ブロックは、下図に示すように、「Circuit 回路名」~「End of 回路名」で挟まれた範囲であり、回路ブロックの中に子、孫の回路ブロックを含有する入れ子構造(最大512層)が可能である。
尚、回路ブロック名に限らず、CASL87では大文字、小文字を区別しない。例えば、「Circuit Name_Block」と「CIRCUIT NAME_BLOCK」は同じになることに注意してほしい。
【ノード間の部品】
回路ブロックの中のノード間の部品の表記は以下のようになる。
ノード指定(2つのノード番号)の行の下に、部品名とその値を複数、記述できる。ノード番号は、32ビット版Windowsでは1~6,999、64ビット版Windowsでは1~29,999で順不同に指定できる。グランドは’E'或いは’e’である。
ノード間の部品数は無制限で、複数行にわたって記述できる。
【カルキュレーション・ブロック】
カルキュレーション・ブロックでは計算の仕様を記述する。
カルキュレーション(Calculation)ブロック内の各項目は順不同でかまわない。「Input」、「Output」は入力と出力のノードを指定するが、下に示すように回路ブロック名とそのブロック内のノード番号を「.」を挟んで記述する。
Input = Resonance_Mechanics_Circuit_01.100 ;
回路ブロックが階層構造になっている場合は、
Input = Resonance_Mechanics_Circuit_01.Resonance_Mechanics_Circuit_02.100 ;
のように、階層順に並べて表記する。回路ブロック名とその下の階層ブロック名とは「.」を挟んで記述する。
計算する周波数の範囲と分割数は以下のように記述する。
Start = 0.1 ; Finish = 10.0 ; Division = 4000 ;
「Start」は計算する最初の周波数、「Finish」は最終の周波数、「Division」はその間の分割数である。分割は対数的に分割される。
「Phase Offset」は、上記の「Start」で指定する最初の周波数での計算での位相のオフセット値である。
Phase Offset = -360.0 ;
フィードバック回路のオープン・ループ回路の特性を求める場合などに、次のように位相反転した「-180 deg.」を基準とする場合に便利である。
Phase Offset = -180.0 ;
CASL87の位相計算は位相の4象限を超えても持続加算、或いは持続減算してくれる特徴をもっている。そのため、CASL87にとっては最初の計算時の位相は4象限内のどの位置であるかを判断する上で重要である。
「Phase Offset」の値が、0 deg、-0 deg(CASL87はその数値扱いに左右される)、360 deg、-360 deg、180 deg、-180 degなどの指定で最初の初期値の評価が変わってくるので、計算結果をもって「Phase Offset」を再設定して計算をやり直すなど工夫する必要がある。
■力学の等価回路表現-複合系
単一系の振動システムを上述で説明してきたが、さらに複合系の振動システムを解析してみよう。以下の図に複合型の振動システムを示す。これは、先の単一系の振動システムに2個の質量体(Mass2)をバネ(Spring2)と制動器(Damper2)で連結したものである。前述の質量体(Mass1)に2個の質量体(Mass2)をこの図のように付加した例で示すが、質量体(Mass1)の1/10の質量で前述の共振周波数での振動を抑制する効果がある例である。
もっとも、この抑制効果だけの機能としては、1個の質量体(Mass2)の付加だけで充分であるが、ここでは、CASL87のソース・コードの階層構造及び「Ex Include文」の記述を説明するために、2個を付加した例とする。
さて、この付加質量体による副共振システムは、地震に対するビルの免震や、今回のモデルを回転(モーメント)系に置き換えた場合、火力発電所の大型タービン発電機の軸ねじれ共振と長距離送電の効率を上げるために入れた送電網内の進相用直列キャパシタ(狭い国土の日本にはないが、米国などの消費地と発電所が長距離になってしまう場合に用いられる)によるSSR(Sub Synchronous Resonance)の回避のための解析にも応用できる。
上図の複合系の振動システムを等価回路に表したのが下の図である。この等価回路はメイン回路ブロックの中に2つの子回路ブロックを含んだ構造になっている。
CASL87では回路の階層化表現が可能であり、最大512階層の構造が許容されている。この機能を利用して回路図を階層化してCASL87のソースコードの中に以下の構成概要で表現できる。
子回路ブロック内のノード番号はローカル、つまり独立したものであり、メイン回路ブロック内のノード番号とは自動的に区別される。子回路ブロック内のさらなる階層構造の子(孫)回路ブロックでもその独立性が保証されている。
【回路ライブラリーの作成とEx Include文の使用】
上記の等価回路の中で、子回路ブロックMass_Block_01とMass_Block_02は全く同一の回路である。この子回路ブロックをCASL87では子回路としてのライブラリー化を薦める。
子回路ブロックとして、上記の等価回路から「Mass_Block_01」を抜き出して下図に示す。
この子回路ブロックのソースコードを以下に示す。
このファイルの置き場所は「Library」フォルダ内であり、これを「Ex Include文」で呼び出す場合のフォルダの位置関係が以下のような場合、
ソースコードの「Velocity_Multi_Mecanics_Resonance_01.CAS」に以下のような相対パスで書くことできる。
「Ex Include文」の詳細は以下に示すとおりである。
「Ex Include」の後にスペースやタブを置いて「子回路ブロックの名称」を記述し、さらにスペースやタブを置いて「ライブラリー・ファイルのパス名」を記述する。「子回路ブロックの名称」はライブラリー・ファイル内の子回路ブロックの名称とはまったく関係のない異なる名称を記述できる。これは、まったく同じ構造の子回路ブロックを親回路ブロック内に複数並べる場合に別々の名称とすべきであるからである。
「ライブラリー・ファイルのパス名」では、このように相対パスで指定することも、また、ドライブ名からの絶対パスで指定することもできる。尚、Windowsでは、フォルダーの区切り文字は日本語キーボードでは「¥」であるが、英語キーボードでは「\」(’/’ではない)になることに注意してほしい。
子回路ブロックのライブラリー・ファイルのサフィックスは「.LIB」でも、「.CAS」でも何でもよい。ユーザーの管理に任せる。
CASL87には外部の回路記述文をインクルードする機能として「Include文」と「Ex Include文」の2つがある。後者の「Ex Include文」は前者の「Include文」を機能的には内包できる。作者である筆者としては「Include文」はいずれ廃止しようと思っているので、後者の「Ex Include文」を使って欲しい。
この「Ex Include文」を使って上記の等価回路をCASL87のソースコード「Velocity_Multi_Mecanics_Resonance_01.CAS」として以下に表してみよう。
このソース・コードの中で「Link文」(青色の四角枠で囲まれた部分)が登場する。これにより、子回路ブロックとメイン回路ブロックのそれぞれのノード番号を結びつける。子回路ブロックはここでは「Ex Include文」で引き出したライブラリーである。
【Link文の仕様】
「Link文」では「Link ;」を宣言した行の下に以下のような記述で親回路ブロックのノード番号と子回路ブロックのノード番号を結びつける。
前述の速度特性用のソースコード「Velocity_Multi_Mecanics_Resonance_01.CAS」をCASL87及びGR87で計算処理し、単一系のソースコード「Velocity_Single_Mecanics_Resonance_01.CAS」の計算結果と共に表示すると下の図のようになる。
単一系では1Hzに共振点があったが、複合系では、この1Hzでのゲインを見事にノッチできている。メインのMass1の1/10の質量のMass2でもバネのコンプライアンス値で特定の共振周波数を回避することができる。このようにCASL87及びGR87の利用により、力学系も解析できることが判るであろう。
この例では、水平方向に振動する物体の運動であるが、現実的なものでは、モーメントに切り替えることも容易である。例えば、火力発電所の蒸気やガスのタービンと発電機の間の軸のトルクの回転方向の振動の解析にも使える。
日本ではあまり例がないが、大陸での長距離送電での効率改善のための直列キャパシタの挿入による送電ケーブルのインダクタ成分との電気的共振と、このタービンと発電機との共振が相互にマッチングした場合のSSR事故の対策のための設計(機械系統と電気系統を一体化したメカトロニクスとして)にも役立つであろう。
【お問い合わせ】
ご質問などは以下のメールにてお願いします。
メール: muraoka@lyde-global.com
<記: 村岡如竹>