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」で保存して、プロパティを閉じます。
- テキストエディタで開いて、ピンアサイン(割付)を確認します。
- ここでは、アナログデバイセズのWebからSpice Modelを入手する方法を説明します。
- 入力信号V3のパラメータを設定します。
- V3 VSINのシンボルを右クリックしてプロパティを開きます。(シンボルを選択→Eキーでも良い)
「シミュレーションモデル」を押します。 - シミュレーションモデルエディタで、V3信号のパラメータを設定します。
- 過渡応答のシミュレーションに使用する信号のパラメータは、上段で設定します。
振幅は、Amplitude(ampl)で設定します。
周波数は、Frequency(f)で設定します。
この例では、振幅1mV、周波数1kHz、DCオフセットなし、ディレイなしに設定しています。
- AC解析に使用する信号のパラメータは、下段の「AC」の項目で設定します。
この例では、AC解析に使用する信号の振幅は1mVに設定しています。
- V3 VSINのシンボルを右クリックしてプロパティを開きます。(シンボルを選択→Eキーでも良い)
シミュレーション設定
- シミュレーションの設定(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等と同じようにプロットできるのかな?
これは、今後の改良に期待ですね。
- シミュレーション結果の表示(Probe)は、LTSpiceやPSpiceの方が使いやすいです。
- デバイスメーカーから提供されているSPICEモデルは、Ngspiceで使えるもの、使えないものがあります。複数のシミュレータ用のモデルが提供されている場合は、SPICE 3用が良さそうです。
RoHMから提供されているOPアンプのモデルは、暗号化されていて使えませんでした。 - 回路図入力は、好みもあるとは思いますが、私はKiCadが使いやすいです。PSpiceのOrCadも悪くはないですが、LTSpiceの回路図入力はちょっと使いにくいと感じます。
- KiCadで回路図入力して、LTSpiceでシミュレーションする方法もあります。この場合は、KiCadでネットリストを出力して、LTSpiceで読み込んでシミュレーションするという方法になります。