LTSpiceでサブサーキット/階層ブロックを作成する

前述したように、これからLTSpiceを使ったヒントをシリーズで紹介していきます。この記事は、既存のライブラリ部品をベースにして、利用できるサブサーキットや階層ブロックを作るための基本的な方法を紹介します。今回は、オーディオ用アンプであるAnalog Devicesの OP275GPZ (Digi-Key品番OP275GPZ-ND) というオペアンプの理想的なバージョンを作成してみます。実際のデバイスはより具体的なデータ値を持っているので、このバージョンはその品番と同じ仕様にはなりません。

最初のサブサーキット/ブロックの作成

ベースライン回路の回路図を新たに作成することから始めましょう。

  1. まず初めに、コンポーネントライブラリが含まれている「ANDゲートの記号」をクリックし、そこで「Univ」を検索します。
    UniversalOpAmp
    以前、初めてこの部品を作ろうとしたときに頭を悩ませたのは、ライブラリの基本的なオペアンプの中には、有効なSpiceライブラリ部品を作る際に使用できないモデルがあるからでした(これについては近日中に取り上げます)。UniversalOpamp2というデバイスを使うと、あらかじめサブサーキットが組み込まれているので便利です。UniversalOpamp2を回路図に配置し、キーボードのControl + Eを押してミラーリングし、もう1つを最初の回路の近くに配置します。
  2. 下の図のように、回路を配線します。

    先ほどの回路と同様に、配線の向きを自由に変えることで、好みの回路に仕上げることができます。唯一の注意点は、まだ何も接続されていない別のワイヤは何にも接続してはいけないということです。任意のグリッドの位置をクリックし、キーボードのエスケープキーを押して、任意の場所でワイヤを終了させます。これらは、上位の回路で使用する出力と入力のラベルとなります。各ノードには、覚えやすい固有の名前が必要です。私は、 OP275のデータシート にある「OUTA」から始めることにします。
  3. Label Netツールを使って、接続されていない出力/入力ノードに名前を配置します。
    A. Label Netツールをクリックするか、F4キーを押します。
    LabelNetTool
    OUTA
    ダイアログボックスが開くと、2つのグローバルなピン名「GND」と「COM」があり、その下にピンのカスタム名を入力する必要があります。また、ポートの種類を選ぶことも重要で、ここではOUTAが出力になります。入力なのか出力なのかわからない場合は双方向を選択するのが良いでしょう。
    B. ラベルネットを適切なワイヤエンド/アウトプットに配置する。

    「OK」ボタンをクリックしたら、U1の出力またはU1の出力用のワイヤの端に、長方形の青枠を配置します。これはOUTAに相当します。通常、私はデータシートに記載されているピン1-nの順番でノードを作成します。nはカスタムパーツのピン数に応じた任意の整数で、この品番の場合はn=8です。ピンを配置する際にこの順番に厳密に従う必要はありませんが、ネットリストの順番は、後にサブサーキットに対してのみですが重要になります。この時点では、Control + Cでノード出力をコピーし、コピーしたラベルをすべてのオープンになっている接続に配置してから、それぞれを編集して固有の名前にする方が早いかもしれません。完成したときの全体の回路図は次のとおりです。Label Netエディタで電圧入力とOp-Amp入力のピンタイプを 「input 」に編集してください。

    回路を開発するときはいつでも、ユニークな名前をつけて「Save As」で保存することをお勧めします。私は「OPZ」と名付けましたが、これは後で使うことになります。

    他の回路図で使用できる回路図を作成する方法は2つあります。「サブサーキット」と「階層ブロック」です。以下、それらを分けて説明します。
ライブラリ・ネットリスト・サブサーキット方式の具体的な設定方法

C. この回路のネットリストをコピーし、基本的なテキストエディタまたはNotepad++でいくつかの編集を行い、これを有効なサブサーキットにします。
   b. 「View」メニューをクリックし、「SPICE Netlist」オプションを選択し、次のウィンドウに表示されるテキストをすべてコピーし、NotepadまたはNotepad++を使って新しい空白のテキストにペーストします。


SelectAllCopytoBlankTxt
   c. すべてのコードが、下のコードブロックに示されているように編集されていることを確認してください。ここからコピーペーストして、「C:」行以下をすべて置き換えることができます。あなたの表示では違って見えていると思います。

//do not copy this line, remember OPZ8DIP may have a different name for you and you can name the inputs on your diagram whatever you want
.subckt OPZ8DIP OUTA -INA +INA V- +INB -INB OUTB V+
XU1 +INA -INA V+ V- OUTA level.2 Avol=1Meg GBW=10Meg Slew=10Meg ilimit=25m rail=0 Vos=0 phimargin=45 en=0 enk=0 in=0 ink=0 Rin=500Meg
XU2 +INB -INB V+ V- OUTB level.2 Avol=1Meg GBW=10Meg Slew=10Meg ilimit=25m rail=0 Vos=0 phimargin=45 en=0 enk=0 in=0 ink=0 Rin=500Meg
.lib UniversalOpamps2.sub
.backanno
.ends OPZ8DIP
.end

2行目と最後から2行目が 本当に重要です .subckt SPICEコマンドは、OUTA、-INA、+INA、V+、+INB, -INB、OUTB、V+という順番のピン名を持つOPZ8DIPという新しいサブサーキットを作ります。この場合、ピンの順番は絶対に覚えておかなければなりません。技術的には、ピン名の順番を変
えることができますが、その場合は異なるネットリスト番号になります。誤ったネットリスト番号を
参照してシンボルを作成すると、解析で予想外の結果が出たり、動作しなくなったりします。ネット
リストの順番は、サブサーキットの名前の後に、1番目のピン名(OUTA)から始まり、最後の8番目のピン名(V+)で終わります。ピン名は、ノードに付けられた名前と 同じ名前でなければなりません 。SPICEファイルでは、各ピン名はスペースで区切られています。.endsコマンドは、OPZ8DIPという
サブサーキットを終了させます。
   d. この新しいファイルを、.libまたは.subのいずれかの拡張子を持つ任意の名前で保存します。保存名は、サブサーキットの名前と同じである必要はありませんが、その方が簡単なので、私は通常そう
しています。

saveAsLib

  1. サブサーキット/階層ブロックを表す新しいシンボルを作成します。
    A. 上部にあるHierarchyメニューをクリックし、「Open this Sheet’s Symbol 」または「Create a New Symbol」を選択して下さい。
    IMG_0175
    私は「Create a New Symbol」の方が好きです。なぜなら、自動的に図面を作成するように求めるダイアログボックスが出てくるからです。自動生成された図面は、あまり見栄えが良くないことが多く、ピンの順番も完全に間違っていることもよくあります。階層ブロックとサブサーキットの手順にはいくつかの違いがあるので、サブサーキットには具体的な手順を用い、サブサーキットセクションの下方でその違いについて説明します。

サブサーキットの属性設定

  1. 同じ名前の.libファイルと同じピン名順でピンを配置します。シンボル描画モードには、描画をするためのいろいろなショートカットが用意されています。
    PinSymbEdit
    キーボードの「P 」を押すとピンが表示されますが、常にネットリストオーダー1から始まるので、.libファイルのピンの順番を覚えておくことが重要です。前述のデータシートと同じようにレイアウトされた同じ順序でピンを追加していきます。行揃えは、ピンが置かれている側によって異なります。OUTA~V-は左詰め、その他のピンは右詰めになります。これは完全なカスタムメイドですので、好きなようにデザインしてください。文字や配線とぶつからないようにピン名をこのように描いています。

    キーボードの 「R 」キーを押して、ピンの中央と交差する外囲いの長方形を描きます。これは対角線上の2点で決まる長方形です。このグリッドでの描画は、マウスの動きに非常に敏感で、十字線が表示されます。十字線がグリッドのドットから少しずれていると、そのまま描画されます。
  2. シンボルを回路図と同じ名前で保存します。
    これは回路図の「Save As for」での保存と同じですが、ファイルタイプが.asyと異なります。
       a. Control + Aを押して、シンボルの属性を表示します。
       SymbAttribs
       b. Prefixの値を「X」に、Valueの値を「ライブラリ・ネットリスト・サブサーキット方式のセットアップ方法」で述べたサブサーキットに与えられた名前と同じにします。シンボルタイプがCellであることを確認して「OK」をクリックします。
       EditSymAtt
       c. シンボルをもう一度保存します。

階層ブロック

階層ブロックとサブサーキットの主な違いは、階層ブロックが回路図ベースであるのに対し、サブサーキットはSPICEライブラリのネットリストベースであることです(良い説明をこちらで見つけました)。このページに掲載されているのと同じ手順を使用して、違いを説明しています。この状況ではネットリストの順番は重要ではありませんが、ピン名は一致していなければならず、回路はサブサーキットのようにシンボルと同じ名前でなければなりません。回路は同じままで、シンボルの描画も同じです。変更点は、キーボードのControl + WをクリックしてInstNameをシンボルに追加することです(これは他のプロセスでもできます)。また、属性エディタは完全に空白のまま、シンボルタイプをブロックに変更します 。キーボードの Control + A でアトリビュートエディタが表示されます。
AttributeWindowAddName
attribEditBlock
注: 別のフォルダにある回路で階層部品を使用しようとすると、LTSpiceが階層部品を見つけられないことがあります。このエラーが出た場合は、テスト用の回路図を階層部品が入っているのと同じフォルダに移動して問題を解決してください。
MissingHierarchy

新たに作成されたサブサーキット/ブロックを使用する

最初に新しい回路図を作成して、新しい部品のANDシンボルをクリックします。前に作成したフォルダがすでにリンクされていれば、新しい部品を見つけるのは簡単です。

  1. 新しいコンポーネントのAND記号をもう一度クリックし、Top Directoryを正しい場所に切り替えます。
    locationSwitch
    注:LTSpiceを初めて使用する場合、2つのテストフォルダが表示されることがあります。LTSpiceは通常、保存に使用した最初のフォルダを検索用のセカンダリ・ディレクトリとして使用します。 新しい部品はここに表示されるはずです。.libファイルの作成手順に従った場合は、黄色で表示され、正しく機能させるためにはさらなる指示が必要となります。階層ブロックの場合、シンボルと回路の名前が同じであれば、デフォルトのフォルダでそれらがリンクされ、回路図に特別なSPICEコマンドを追加する必要はありません。フォルダ内の部品を検索すると、階層ブロックの場合は以下のように表示されます。
    HBLOCK
    HierarchyEditor
    部品を配置した後に右クリックすると、回路図ブロックエディタが開きます。

以下の写真は、ライブラリSPICEファイルを必要とするCell部品と右クリックしたときのエディタの表示です。


SymbAttribs
2. これが.libバージョンの部品である場合、以下のSPICEディレクティブを追加しないと回路を実行できません。
A. ツールバーの最後にある「.op」をクリックします。
DotOP
B. テキストエディタに.libと入力し、[OK]をクリックします。
DotLibEditTextOk
C. ディレクティブを回路図面のどこか適切な場所に持って行き、右クリックして配置します。これは後で自動的に編集されます。
libEdit
D. 「Browse」をクリックして、先ほど作成した.libファイルのパスを探し、「OK」を押します。

このコマンドを追加しなければならない理由は、フォルダがすでにリンクされているとしても、プログラムがサブサーキットのネットリストがどこにあるかわからないからです。このコマンドを追加せずに回路図を実行すると、このようなエラーが発生します。
unknownSub
このサブコンポーネント(.libバージョン)を使用して作成した回路の例を次に示します。

左側は反転増幅器で、右側は非反転増幅器です。オペアンプのこれらのモードがどのように異なるかを見るための最良の方法として、V1のDCスイープとV2のDCスイープを使用しました。これがV1の0~5ボルトまでのスイープ結果です。緑色が入力電圧で、青色が出力電圧です。
SweepV1
次に、V2の0~5ボルトのスイープ結果を示します。赤色が入力電圧で、緑色が出力電圧です。
SweepV2
どちらの図も、入力電圧は直線的に増加していますが、出力電圧は約500mVで最大の出力に達しています。電源電圧の制約のために出力電圧の増加は±5Vの範囲に抑えられているからです。また、反転アンプは非反転アンプとは極性が反対方向に増加していることが分かります。




オリジナル・ソース(英語)