◆ 制御対象は、サブサーキットを利用しています。リストの XPRC がサブサーキットの呼び出しです。サブサーキット自体は、ここにはありません。ライブラリ(コラム 2-2-1 参照)に入っています。
サブサーキット は、コンピュータ・プログラムのサブルーチン (図 2-2-6)
に相当するものです。
◆ コンピュータのサブルーチンは、複数のメインプログラムが呼び出して共同使用します。SPICEのサブサーキットも同様に、複数の親回路が、共用することができます。
サブサーキットは、親回路の回路ファイル内に置くこともできますが、ライブラリに入れておくのが便利です。
ただし、オンオフ制御は、汎用性がありませんので、サブサーキットには、してありません。
[注] ライブラリには、サブサーキットのほかに .MODELコマンドも収容できます。
◆ 制御対象のサブサーキットを、リスト 2-2-2 に示します。
◆ このサブサーキットは、パラメータ値(2.2.3.(1-C)参照)を変えることによって、広く各種の特性のものを作ることができます。パラメータ値のデフォルトは、標準 N です。標準 K も、このサブサーキットで、パラメータ値を変えたものです。
ここでは、サブサーキットの、書式について説明します。サブサーキットの内容は、(2) で解説します。
サブサーキットのプログラムは、サブサーキットの始まりを示す .SUBCKT コマンドと、終わりを示す .ENDS コマンドとの間に記述します。.SUBCKT コマンドの書式は、
.SUBCKT<名称.>[ノード]* [PARAMS:<<名前>=<値>>*]
( < > は、必須 [ ] は、省略可能 *は、繰り返し可能)
です。
名称は、親回路から、このサブサーキットを、呼び出すときに、使用する名称です。
ノードは、親回路との間で、信号のやり取りを行なうノードを、リストアップしたものです。
[注] ここで指定されるノードは、コンピュータにおける、引数に相当します。
この制御対象サブサーキットの、ノードは、
PV ; 制御変数
CNOT ; 操作変数
DST ; 外乱
の3つです。
◆ PARAMS: は、サブサーキット内で使用している、パラメータの値を、指定します。
パラメータとは、回路ファイルの中で、数値の代わりに、名前 (文字記号) を使用することです。名前には、英文字から始まる、名前を使用することができます。
サブサーキット内で使用している、パラメータの、具体的な数値を、この PARAMS: のところで定義します。
この制御対象サブサーキット PRCS で使用している、パラメータを、下記に示します。
名称 | 意味 | 使用個所 |
KD : | 外乱に対するゲイン(入出力間の倍率) | EPV |
TDL : | 外乱の低周波部の時定数 | E1 |
TDH : | 外乱の高周波部の時定数 | E1 |
KC : | 操作変数に対するゲイン(入出力間の倍率) | EPV |
TCL : | 操作の低周波部の時定数 | R1 |
TCH : | 操作の高周波部の時定数 | E2 |
◆ この PARAMS: のところで、そのパラメータの値を、たとえば TDL=1 のように指定しています。
このリストのPARAMS:は、標準Nのものです。標準Kは、このパラメータ値を変更することによって、作ります。また、このパラメータ値を、さらに別の値に変更することによって、任意の特性を持つ制御対象として、使用することができます。
この、パラメータ値の変更は、サブサーキットの PARAMS: を書き換えることなく、親回路で実行することができます(2.2.3.(3-C)参照)。
[注] 親回路の中でも、パラメータを使用することができます。ただし、親回路の中で使用するパラメータは、その定義方法が異なります(2.2.4.(1-E)参照)。
[コラム 2-2-1] ライブラリ cont.lib の構成
★ ライブラリ は、汎用性のあるサブサーキットとデバイス・モデルを集めたものです。
ライブラリには、シミュレータに付属した、ライブラリと、ユーザが作成する、ユーザ・ライブラリとがあります。
★ シミュレータに付属のライブラリは、アナログ回路用のものです。この講座では、使用しません。制御用に作成した、ユーザ・ライブラリ cont.lib だけを使用します。
cont.lib に含まれているサブサーキットや、各種デバイスの .MODEL (以下、両方を合わせて、単にサブサーキットと呼びます) の数は、かなりあります。
★ サブサーキットは、頻繁に使用するものばかりではありません。目的とするサブサーキットが、ライブラリに含まれているかどうか、また、その内容や使い方を確認したいことがあります。
★ ライブラリにある多数のサブサーキットの中から、目的のものを、速やかに、検索できるようになっていることが、望まれます。この cont.lib は、そのことを考慮した、構成になっています。
●ライブラリの最初に、目次があります。ライブラリは内容によって、分類されています。
目次は、「$ HLD」のように、頭に $ をつけた分類名で分類した、サブサーキット名称が入っています。サブサーキット名称にも、頭に $ が付いています。
テキスト・エディタの、検索機能を利用して、この分類名またはサブサーキット名(たとえば、$ SAH)で、検索を行います。これによって、その分類の先頭、またはサブサーキットに、ジャンプします。
●各分類の先頭には、分類内の目次が、並んでいます。
●サブサーキットには、内容や使い方がよく分かるように、十分にコメントを入れてあります(リスト 2-2-2 の程度に入っています)。
●ライブラリ cont.lib に、最初に、またはライブラリを書き換えた後に、アクセスすると、インデックスファイル cont.ind が作成または更新されます。cont.ind は、cont.lib と同じフォルダに作成されます。インデックスファイルは、検索を高速で行うために、設けられているファイルです。
◆ 外乱入力に対する制御対象です。3 次のローパス・フィルタです。
ここでは、2.1.6. のテスト回路-2 とは別の表記法で、フィルタを表しています。ここで使っている表記法は、n 次のフィルタを、1 つのデバイスで、表わすことができます。しかも見やすいという、特徴があります。
デバイス名は E ですが、2.1.6.(1-E)に示したものとは、書式が異なります。アナログ・ビヘイビア・モデル、と呼ばれている書式です。その書式は、
E<名称><+ノード><-ノード>LAPLACE {<式>} = {<変換式>}
( < > は、必須)
です。LAPLACE で、この表記法であることを指定しています。
LAPACE は、数学でラプラス変換と呼ばれている、そのLAPLACE です。このデバイスは、ラプラス変換の演算を行なうデバイスです。
ラプラス変換については、3.1.1.(4) で説明します。また、ラプラス変換を利用した、フィルタの表記法については、3.1.1.(5-A)で解説しています。ここでは、単に、フィルタの表記法の 1 種と思ってください。
◆ まず {式} に記入された式を実行します。この式を計算した結果の値が、ラプラス変換の入力になります。この入力を、{変換式} にしたがってラプラス変換して、それを、出力します。
ラプラス変換においては、1 次フィルタが、1 / (1 + T * S) の形で表されます。T は、1 次フィルタの時定数です。
この 1 次フィルタを、リストに示したように乗算すると、2.1.6 のテスト回路-2、回路(5)におけるバッファ入りと同じように、相互の影響がないカスケード接続になります。
[注] 数式は、コンピュータのプログラムと同様に、乗算を「*」、除算を「/」で表します。また、式中の S はラプラス変換子と呼ばれる変数です。
この回路は、テスト回路-2 の回路(5) と同じ特性で、時定数が 1000倍になっています。したがって図 2-1-19 の周波数軸を 1/1000 に読み替えれば、この制御対象の周波数特性になります。
◆ 操作変数入力に対する、制御対象です。これも 3 次フィルタです。したがって、外乱入力に対するものと全く同じ書式で、差支えありません。しかし、このモデルでは、SPICE の演算時間を、短くするために、細工してあります。
すなわち、3 つのフィルタのうち 1 つだけは RC フィルタを使用しています(R1、C1)。
PSPICE では、回路ファイル中の演算が、全てラプラス変換演算のときは、演算時間が著しく長く掛かります。
回路ファイルの中に、普通の回路を入れると、ラプラス変換の演算を含めて、全体の演算が速くなります。RC 回路を入れてあるのは、このためです。
この RC 回路の時定数は、可変にする必要があります。抵抗値などの数値は、定数の代わりに式を使用することができます。
抵抗 R1 の値を、パラメータ TCL から計算された、値にしてあります。ただし、式の場合は、リストに示したように、{ } 内に入れる必要があります。
[注]
その後の検討で、演算時間を短くするために、ラプラス変換演算に加える、普通の回路は、ラプラス変換演算とは独立な回路として、回路ファイルに、挿入しても、演算速度が速くなることが、分かりました。
使用したい回路を、ラプラス演算だけで組んだ方が、分かりやすい回路になります。
講座の回路ファイルは、修正しないでそのまま使っていますが、読者が、自分で組む時には、試みると良いでしょう。
◆ デバイス EPV は、アナログ・ビヘイビア・モデルの、別の形です。書式は、
E<名称><+ノード><-ノード> VALUE = {式}
( < > は、必須)
です。
LAPLACE がラプラス変換の演算を行なうの対して、この VALUE は {式} に示した 4 則演算を行ない、その結果を出力します。この例では、V(1) と V(2) を加算した結果が、出力されます。
VALUE は元々のデバイス E よりも自由度が高く、便利に使用できるデバイスです。
◆ ここで再び親回路の説明に戻ります。
デバイス X は、親回路が、サブサーキットを呼び出すのに、使用します。書式は、
X<名称>[ノード]*<サブサーキット名>[PARAMS:<<名称>=<値>>*]
( < > は、必須 [ ] は、省略可能 *は、繰り返し可能)
です。
◆ デバイス名は、X 単独でなく、X<名称> の形で使用します。ここの例では XPRC です。
1つの親回路が、複数のサブサーキットを使用するとき、この<名称>で、識別されます。同一のサブサーキットであっても、この名称を変えることによって、複数使用することができます。
◆ 親回路と、サブサーキットとは、ノードを介して、互いに、やり取りを行います。
ここの親回路のノード(この例では PV、CNOT、DST)と、.SUBCKT で指定しているノード(この例ではPV、CNOT、DST)とは、同じ数で、かつ同じ順序で、並んでいなければなりません。
この例では、ノード名は、親サーキットと、サブサーキットとで、同じですが、一般には、同じ名称にする必要はなく、親回路で、独自に名称を、定義することができます。
[注] 親回路と、サブサーキットとで、違う名前を使用できるので、同じ数、同じ順序が、必要なわけです。
◆ PARAMS: は、サブサーキット内のパラメータ値を、親回路が指定する場合に使用します。親回路の PARAMS: で、値を指定しないときは、サブサーキットの PARAMS: で指定した値が、デフォルトになります。
この例では、サブサーキットのデフォルト値を、そのまま親回路で使用するので、親回路は PARAMS を使用していません。
親回路で指定すれば、親回路の指定が優先します。
制御対象 PRCS では、制御対象を構成するフィルタの時定数を、指定できます。デフォルトは標準 N です。標準 K のときは、TDH=0.5、TCH=0.5 と指定します。
また、その他の値を指定して、任意の特性を持つ制御対象を作ることができます。
◆ .LIB コマンドは、ライブラリを呼び出すコマンドです。ライブラリを利用しているときは、そのライブラリ名を指定します。書式は、
.LIB<"ファイル名">
( < > は、必須)
です。ファイル名を " " で囲むことに注意してください。
ライブラリ・ファイルが、回路ファイルと、同じディレクトリにあるときは、ファイル名のところは、単に、ファイル名を書きます。
しかし、ライブラリ・ファイルが、別のディレクトリにあるときは、パスを指定する必要があります。パスの指定方法は、WINDOWS と同じです。
"C:\SPI\ANX.LIB" のように絶対パスで指定することもできます。相対パスでも差し支えありません。
◆ この講座の回路ファイル *.cir は、全て、自分の 1 段上に cont.lib があることを、前提として、相対パスで指定してあります。
◆ 実行と画面の表示は、とくに説明の必要はないと思います。
1.4.(1-B)に、制御対象が異なると、ハンチングの大きさが異なる、と書いてあります。シミュレーションに興味ある読者は、PARAMS: を活用して、制御対象の特性をいろいろ変えて、試してみると良いでしょう。
TDL と TCL を固定して、TDH と TCH を連動させて変えると、違いがよく分かります。