KiCad7のSpice機能で回路シミュレーションを行う

2023/02/12にKiCad7.0.0がリリースされました。
それに伴いspice機能も扱いやすくなっていますのでやり方などをメモがてら書こうと思います。

KiCad6でも同じことをやっていますので以下も参考にしてください。
gsmcustomeffects.hatenablog.com

回路図の準備

シミュレーションを行う回路図を準備します。
前回同様にNPNトランジスタの増幅回路を例題として扱います。KiCad7.0の回路エディタを開いて同じように回路を作成してください。

この時NPNトランジスタはSimulation_SPICE内のシンボルを使用します。

次に信号源と電源を配置していきます。
この時SPICEの基準となる0シンボルを置くのを忘れないでください。

一通り配置し終わるとこのような形になります。

次に信号源、電源のパラメーター設定をしていきます。

次にトランジスタのモデルを設定します。
今回は例としてRohmさんのBC847を使用させていただきます。ダウンロードしたモデルは解凍して今使用しているKiCadプロジェクト直下に置いておくと扱いやすいです。

モデルの設定はトランジスタのプロパティを開き、シミュレーションモデルから詳細画面を開きます。初期状態ではGummel-Poonモデルの初期パラメータが入っているので先ほどダウンロードしたモデルを読み込みます。

最後にピン割り当てタブに切り替えてKiCad上のシンボル並びとシミュレーションモデルのピン順番が正しいことを確認します。*1

ここまでで回路上の設定は終了になります。

シミュレーション

次にシミュレーションを行うための設定をします。まず上部アイコンよりシミュレータを起動します。コマンドアイコンをクリックし行いたいシミュレーションの設定をします。今回は過渡応答をやってみることにします。

設定が終了したらOKをクリックし実行します。実行後信号を追加し見たい波形を確認します。うまくシミュレーションできていれば以下のような波形が表示されるはずです。

以上がKiCad7でSPICEシミュレーションを行う方法になります。

Tipsなど

以下本文に書ききれなかったTipsなどをまとめましたので参考にしてもらえればと思います。

書籍、ドキュメントなど

解析手法やモデルなどを知りたい場合は以下の2冊がおすすめです。

コマンドなど詳しい話はngspiceやKiCadのドキュメントを参考にするとよいと思います。

2点間の電圧測定

記事ではGND基準のシングルエンド信号を観測する方法を紹介しましたが、2点間の電圧を見たい場合もあると思います。
KiCad7のspiceにはVOLTMETER_DIFFという測定エレメントがあり、差電圧を出力することができます。

使い方としては以下のように回路をつなぎます。

次に少し修正が必要になります。
2022/03/04時点のStable Release KiCad7.0.0ではこの操作をしないとエラーが出ました。nightly buildでは必要ないかもしれません

VOLTMETER_DIFFは内部的に${KICAD7_SYMBOL_DIR}/Simulation_SPICE.spを使用しているがKiCad7.0.0の${KICAD7_SYMBOL_DIR}にはそのファイルが入っていません。

KiCadのGitlabから最新の該当ファイルを持ってくる必要があります。
KiCad / KiCad Libraries / KiCad Symbols · GitLab

  • Simulation_SPICE.kicad_sym
  • Simulation_SPICE.sp

上記2つのファイルをダウンロードし${KICAD7_SYMBOL_DIR}内のファイルと置き換えてください。
あとは通常通りシミュレーションを行うと波形が表示されると思います。

トランスを扱う方法

トランスはLTspiceなどと同様にK1 L1 L2 coeffで書くことができます。(coeffは結合係数のことであり0~1.0)

インダクタを二つ配置してそれぞれにインダクタンス値をセットします。トランスとして扱う場合極性があるのでピン番号表示のチェックしておいた方が良いです。

次にテキストでSpiceコマンドを直打ちします。

シミュレーション画面を開きカスタムタブで回路図から指令をロードします。

あとの操作は同様で通常通り波形表示できます。

メーカーが提供しているsubcktモデルを読み込む方法もあります。(ピン対応に注意)

JFETモデルを読み込む際の注意点

JFETモデルを読み込む際にこのようなエラーが出ることがあります。

これはngspice内でJFETモデルが2つ用意されているためでlevel指定をする必要があります。OnsemiのJ201を例に示しますが、NJFの後にlevel = 1という文字を追記する必要があります。

.MODEL J201 NJF level =1(Beta=1.621m Betatce=-500m Rd=1 Rs=1 Lambda=2.236m Vto=-600m Vtotc=-2.5m Is=114.5f Isr=1.091p N=1 Nr=2 Xti=3 Alpha=506.8u Vk=251.7 Cgd=4.667p M=227.1m Pb=500m Fc=500m Cgs=2.992p Kf=0.6042f Af=1)

より詳しい話はngspiceドキュメントの9章JFETsを参照ください。

外部SPICEモデルの管理方法

外部SPICEモデルメーカーのHPに別々に配布されていますが一つにまとめることもできます。私はJFETならmy_jfet.libというようにデバイスごとにまとめています。

KiCad上ではこのようにプルダウンで選ぶことができます。

*1:KiCad6では代替ノードシーケンスと呼ばれていたものになります。