KiCadでNgspiceを使ってみた

投稿者: | 2023/08/06

KiCadといえば、オープンソースのEDAとして有名です。KiCadは、シミュレーションソフトとして有名なSPICE系のNgspiceとも連携しています。おじさんは、「NG」というと「No Good」が最初に頭に浮かび良いイメージが無いのですが、Next Generationの頭文字のようです。若い人は違いますね。
そういえば、macos用のログソフトにもRUMLogNgというのがありますが、あちらのNgもNew Generationですね。

KiCadだけで、回路図を作成し、回路シミュレーションを行い、基板アートワークを行うという事ができるようになるのです。素晴らしいです。しかも、オープンソースでフリーで使えるとなると、趣味はもうこれでほとんどできるんじゃないのと思います。

無料で利用できる回路シミュレーターとしては、LTSpiceが有名で、情報の80%以上はLTSpiceなのではないでしょうか。次は、TIが提供しているPSpice for TI版ですね。Ngspiceの情報、特に日本語の情報はまだ少ない状況のようです。

今回は、KiCadからNgspiceを使う手順を簡単に紹介したいと思います。と、いっても私も使い始めたばかりで、まだまだ分からないことばかりです。しかも、単体のNgspice用のマニュアルがすべて、KiCad版のNgspiceに適用できるわけではないようです。

しかし、今後改良されていけば、かなり使いやすい回路シミュレータになるのではないかと期待しています。

回路図入力

回路図の入力についての情報は、詳しく解説された情報がたくさんあるので、それを参照してもらうとして、シミュレーション用に注意しないといけない項目を中心に説明します。以下のような回路を入力しました。

  • R,Cは通常の回路図入力と同じように値も同様に設定します。
  • OPアンプのシンボルは、シンボルを追加 → Simulation_Spice →OPAMPを選択した方がトラブルが少ないようです。
  • 電源は、シンボルを追加 → Simulation_Spice → VDCを選択します。
    • VDCに電圧を設定するのを忘れないようにしてください。電源シンボルに電圧が表示されていますが、シミュレーションには関係ありません。言い換えると、何Vと表示されていても、VDCで設定した電圧が適用されます。(ハマりました)
    • GNDは、シンボルを追加 → Simulation_Spice →0を選択します。(SPICEでは、ノード0が共通GNDになります)
  • シミュレーション結果を確認しやすいように、ラベルをつけておくことをおすすめします。
    (この例では、inとout)
  • OPアンプのモデルを指定します。
    • ここでは、アナログデバイセズのWebからSpice Modelを入手する方法を説明します。
      型名を検索し、SPICE Modelsのリンクをクリック、ダウンロードします。

      SPICE Modelsから該当ICのSPICE Macro Modelを入手します。(LICENSE AGREEMENTに同意が必要です) アナログデバイセズで提供されている全てのモデルがNgspiceで使えるわけではないようです。
    • ダウンロードしたファイルを適当なフォルダに移動します。
    • ダウンロードしたファイルの拡張子を.libまたは.subに変更します。
    • テキストエディタで開いて、ピンアサイン(割付)を確認します。

      この例では、7:(V+)+電源, 4:(V-)-電源, 6:(OUT)出力, 3:(+)非反転入力, 2:(-)反転入力 です。
    • OPアンプ U1のシンボルをを右クリックしてプロパティを開きます。(シンボルを選択→Eキーでも良い)

      シミュレーションモデル… を押します。
    • 「シミュレーションモデルエディター」で、「モデル」タブを選択します。
      • ファイルからSPICEモデルを読み込むを選択し、ダウンロードして拡張子を変更したSPICE Modelを選択します。
      • モデルからシミュレーションに使用するモデル名を選択します。
    • 「ピンの割り当て」タブを選択します。ここで、SPICEのピンとSPICE MODELのピンの整合をとります。

      • テキストエディタで開いて、ピンアサイン(割付)を確認します。

        この例では、7:(V+)+電源, 4:(V-)-電源, 6:(OUT)出力, 3:(+)非反転入力, 2:(-)反転入力 です。これが、モデルのピンになります。しかし、Ngspiceに設定するときは、.SUBCKTの順に1,2,3,4,5と割り当てられるのか、1(3):非反転入力, 2;反転入力, 3(7):+電源, 4:-電源, 5(6):出力 となるようです。
      • 「モデルのピン」で、シンボルのピンと、モデルのピンの機能が合うようにプルダウンで選んで設定します。
      • 設定したら「OK」で保存して、プロパティを閉じます。
  • 入力信号V3のパラメータを設定します。
    • V3 VSINのシンボルを右クリックしてプロパティを開きます。(シンボルを選択→Eキーでも良い)

      「シミュレーションモデル」を押します。
    • シミュレーションモデルエディタで、V3信号のパラメータを設定します。
    • 過渡応答のシミュレーションに使用する信号のパラメータは、上段で設定します。
      振幅は、Amplitude(ampl)で設定します。
      周波数は、Frequency(f)で設定します。
      この例では、振幅1mV、周波数1kHz、DCオフセットなし、ディレイなしに設定しています。
    • AC解析に使用する信号のパラメータは、下段の「AC」の項目で設定します。
      この例では、AC解析に使用する信号の振幅は1mVに設定しています。

シミュレーション設定

  • シミュレーションの設定(SPICE Directive)を入力します。

    テキストで入力すればOKです。この例では、過渡応答解析 .tranとAC解析 .acを指定していますが、どうも最初のものしか反映されないようです。設定が読み込めない場合もあるようです。
    なお、これは実際にSPICEを実行する前にも設定できますので、必須ではありません。

過渡応答シミュレーションの実行

  • メニューバーの「Spiceで回路をシミュレート」アイコンを選択します。

    画面幅の関係で、メニューバーにアイコンが表示されていない場合は、メニューの「検査」→「シミュレーター…」を選択します。
  • Spiceシミュレーターの画面が表示されるので、「コマンド」 を選択します。
    • 「シミュレーションコマンド」で、シミュレーションのパラメータを設定します。
    • 「カスタム」で「回路図から指令をロード」を押すと、回路図に入力したシミュレーションの設定(SPICE Directive)が反映されます。しかし、ロードされないこともあるようです。何が関係しているのか分かりません。コマンドは、最初のものが有効になるようです。
    • 過渡応答シミュレーションの設定例です。
      • シミュレーションステップは、1usecにしています。短くすると精度は上がりますが、シミュレーション時間が長くなります。ただし、シミュレーションする回路や条件によっては、短くしないとエラーになる場合もあります。
      • 互換モードを選択します。何か選ばないとエラーになるので、とりあえず、PPSiceとLTSpiceを選択しておきます。
        例えば、LTSpiceを選択すれば、LTSpice用のモデルや、独自のパラメータやDirectiveも解釈してシミュレーションできるのかと思っていたらそうでもないようなので、よくわかりません。
  • 「実行/停止」を押して、シミュレーションを実行します。
  • 問題なくシミュレーションが完了したら、このような画面になります。

    もし、エラーになった場合は、回路図に誤りがないか等を確認します。
    エラーメッセージは、なかなか分かりづらいです。
    波形がクリップするような非線形回路では、往々にしてシミュレーションが収束せず途中で止まる場合があります。パラメータの見直しが必要になる場合があります。
  • 「信号を追加」で、シミュレーション結果を見たい信号を選択します。
    • 回路図でラベルをつけた端子は簡単に見つけられます。この例では、ラベル「out」の電圧を見るために、V(out)を選んでいます。
    • 「プローブ」を選んで、回路図から選択することもできます。
      回路図の見たい箇所をダブルクリックするだけです。ただし、ラベルをつけていないノードは、ネットリストのノード名になるので、分かりにくくなります。
    • 選んだ端子の波形が表示されます。
    • 「信号」エリアの V(out)を選んで右クリックすると、カーソルを表示することができます。
      「カーソル」エリアにカーソルの値が表示されます。

AC解析の実行

  • 過渡応答同様に「シミュレーションコマンド」で、「AC」タブを選択し、シミュレーションのパラメータを設定します。
    • この例では、周波数10Hzから100kHzまでの範囲、1ディケード(10倍までの周波数範囲)のデータ点数を100に設定しています。
  • シミュレーションの実行と波形の表示も同様です。
    • 「調整」を押して、回路図で値を変更したい抵抗、コンデンサ等をクリックして選ぶと「調整」のエリアで値を変更できるようになります。値を変更すると直ぐにシミュレーションが実行され、Probeの画面が更新されます。シミュレーションの時間中は待つことになりますので、回路規模にもよりますが、特に過渡応答はレスポンスが遅くなります。

その他

  • ちゃんとドキュメントを読めば書いてあるのかもしれませんが、
    • シミュレーション結果の表示(Probe)は、LTSpiceやPSpiceの方が使いやすいです。
      と、いうかKiCad+NgspiceのProbe表示はイマイチ使えないと思います。
      • 振幅が大きく違う波形を別々のグラフ(Plane)に表示できない
      • スケールを自由に設定できない
      • 対数、リニアを自分で設定できない
    • 多分、オリジナルのNgspiceであればLTSpice等と同じようにプロットできるのかな?
      これは、今後の改良に期待ですね。
  • デバイスメーカーから提供されているSPICEモデルは、Ngspiceで使えるもの、使えないものがあります。複数のシミュレータ用のモデルが提供されている場合は、SPICE 3用が良さそうです。
    RoHMから提供されているOPアンプのモデルは、暗号化されていて使えませんでした。
  • 回路図入力は、好みもあるとは思いますが、私はKiCadが使いやすいです。PSpiceのOrCadも悪くはないですが、LTSpiceの回路図入力はちょっと使いにくいと感じます。
  • KiCadで回路図入力して、LTSpiceでシミュレーションする方法もあります。この場合は、KiCadでネットリストを出力して、LTSpiceで読み込んでシミュレーションするという方法になります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください