LTspiceはANALOG DEVIDE社から無料で提供されているアナログ回路のシミュレータで、誰でも使うことができます。
普段は仕事で半導体設計ツールベンダが提供する有償のSPICEを使っていますが、家でもSPICEを実行する環境がほしくなり、ネットで情報を集めながら本環境を構築しました。
Macの情報やバッチモードの情報が少なく、まともに使えるようになるまで苦労しました。
同様の環境を構築したいと思っている方のお役に立てるよう本記事にまとめました。
LTspiceはGUIを使って回路を作成して結果をグラフ表示できるツールで、大変便利なのですが、大量にSPICEシミュレーションを流したり、回路特性の調整を自動化しようとするとどうしてもGUIではなく、テキストで操作する環境がほしくなります。
本記事では、LTspiceのバッチモードを利用し、結果ファイルをPythonの配列として取り出すといったテキストベースの実行方法について紹介します。
結果の波形情報を数値列として扱えるため、matplotlibでグラフ表示してJupyter Notebookに記録などができるようになります。
回路とトランジスタモデルは、京都大学大学院情報学研究科 通信情報システム専攻/小野寺研究室様が公開されている講義資料を利用させていただきました。
本記事の内容を以下の動画に収めていて、手順やできることのイメージができると思いますので合わせて参考にしてください。
動作環境
以下のバージョンを使用してLTspice実行環境を構築しました。
項目 | バージョン |
---|---|
Mac | macOS Catalina 10.15.7 |
LTspice | XVII |
Anaconda | Anaconda3-2020.11-MacOSX-x86_64 |
Python | 3.8.8 |
numpy | 1.19.2 |
matplotlib | 3.3.4 |
jupyter | 1.0.0 |
ltspice | 1.0.1 |
Anaconda環境構築
Python環境はAnacondaがおすすめなので、以下の記事に従いインストールします。
Pythonバージョンは初期状態の3.8でOKです。
仮想環境名はLTspiceとします。(任意の名称で構いません)
以降のコマンド入力は、作成した仮想環境LTspiceから立ち上げたターミナルでの作業になります。
モジュール追加
Numpy, Matplotlib, Jupyterをインストールします。
conda install numpy matplotlib jupyter
LTspice結果を読み込むPythonライブラリをインストールします。
pip install ltspice
LTspiceのインストール
こちらのサイトからMac用LTspiceをダウンロードしてインストールします。
ダウンロードしたファイルを開くと以下のように表示されるので、LTspiceをApplicationsフォルダにドラッグ&ドロップします。
これでインストール完了です。
回路シミュレーションに必要なファイルの準備
コマンドライン実行用Pythonプログラムのダウンロード
GitHubからLTspice実行と結果読み込みのためのPythonプログラムを任意の作業ディレクトリにダウンロードします。
git clone https://github.com/tak6uch1/LTspice
回路サンプルとSPICEモデルのダウンロード
京都大学大学院情報学研究科 通信情報システム専攻/小野寺研究室様が公開されている講義資料にある回路とSPICEモデルをダウンロードします。
以下のディレクトリ構造になるようにそれぞれのファイルを格納します。
nmosfet-iv.asc
, pmosfet-iv.asc
はダウンロード直後は拡張子が.asc.txt
になっていたのでリネームしています。
LTspice/ SPICE_param_0.5um_for_0529_class.txt inv/ inv_example.asc nmos_iv/ nmosfet-iv.asc pmos_iv/ pmosfet-iv.asc
※上記ディレクトリ構成はGitHubからダウンロードしたrun.py
やread_raw.py
などは省略しています。
LTspice実行(GUI使用)
アプリケーションフォルダにあるLTspiceを起動すると以下のように表示されます。
NMOSのDC解析
Open An Existing Schematicから、さきほどダウンロードしたnmosfet-iv.asc
を開くと以下のように表示されます。
画面下の方に.dc
とあるのがDC(静的)解析を表しており、V1, V2の振り幅の最小値、最大値、ステップを表しています。
上の方にある.include
のファイルをダウンロードしたSPICEモデルにしたいので、右クリックしてファイル名を../SPICE_param_0.5um_for_0529_class.txt
に書き換えます。
変更したらメニューのFile→Saveから保存しておきます。
これで1つ上のディレクトリにあるSPICEモデルファイルを使ってシミュレーションを実行してくれます。
左上にある人が走る絵がついているボタンを押すとシミュレーションが実行されます。
正常に実行できたら新たにウィンドウが立ち上がりますので、黒い画面上で右クリック→Add Tracesを押し、波形表示するアイテムを選択します。
I(V2)
を選択してOKを押します。
これで以下のようにNMOSのIV特性を表示できれば成功です。
PMOSのDC解析
画面上部のメニューFile→Openからpmosfet-iv.asc
を開き、.include
するSPICEモデルファイルを書き換えた状態が以下です。
これをこのまま実行すると以下の波形が表示されました。
想定していた波形と違っていたので、回路を以下のように書き換えてみました。(オリジナルの方はマイナスの電位を与えているので同じかとも思いましたが、こちらの方が普通と思ったため)
回路修正は画面上で右クリックからEdit→Move, DeleteやDraft→Wires, Componentなどを使って行います。
これだと以下のように通常のIVカーブが表示されました。
インバータの過渡解析
次は過渡解析です。
画面上部のメニューFile→Openからinv_example.asc
を開き、.lib
(前出の.include
と同等)のSPICEモデルファイルを書き換え、さらにMOSの名前をSPICEモデルに合わせてCMOSP05, CMOSN05に書き換えます。
.tran
の箇所はステップ時間、終了時間を指定して過渡解析をすることを表しています。
V1のPWLの部分は他の文字と重なっていてわかりづらいですが、時刻と電圧値の連続表記になっており、ここではインバータの入力として一度Riseしてその後Fallする波形を使うことを表しています。
.measure
は何らかの測定を表現するもので、ここではN003ネット(インバータの入力)がRiseする際に2.5Vとなる時刻から、N004ネットがFallする際に2.5Vとなる時刻までをdelayという名前を付けて計測します。
実行してV(N003)とV(N004)を表示すると以下のような波形になります。
電圧値を表示する場合は、黒い波形の画面が立ち上がった状態で回路ウィンドウのネットをクリックすることでも波形表示できます。
緑の入力波形に対し、出力は少しなめらかな波形になって入力と反転していて、インバータとして正しく動いていることがわかります。
inv_example.log
をFile→Openから開くと以下のようにdelayを測定した結果を見ることができます。
delay=1.09034e-10 FROM 2.025e-09 TO 2.13403e-09
実行時にエラーが発生した場合などもこのログファイルを見ることで、内容を確認できます。
LTspice実行(Pythonから)
SPICEネットリスト生成
LTspiceをGUIから実行するには.asc
ファイルを使用しましたが、バッチ実行するには.cir
を作っておく必要があります。
.asc
を開いているLTspiceの画面上で右クリックして、View→SPICE Netlistを押します。
以下のようにSPICEネットリストが開いたら、メニューのFile→Save Asから.cir
として保存します。
この作業を3つの.asc
に対し同様に実施し、nmosfet-iv.cir
, pmosfet-iv.cir
, inv_example.cir
を作成しておきます。
Terminalから実行
Anacondaで作成した仮想環境LTspiceのTerminalからnmos_iv, pmos_iv, invそれぞれのディレクトリで以下を実行します。
python run.py python read_raw.py
run.py
はLTspiceを実行し、ログファイルの文字コードを変換してLOGというファイルに保存します。
このLOGはcat
やvi
などのテキストエディタで見ることができます。
nmosfet-iv.cir
の実行結果は以下です。
VIカーブを表示する場合は電流を正に取るのが通常のため、表示の際に電流値にマイナスをかけています。
以下が波形ファイルnmosfet-iv.raw
を読み込むためのread_raw.py
の中身です。(PMOSの方も同様)
import ltspice import matplotlib.pyplot as plt import numpy as np import os file_path = 'nmosfet-iv.raw' l = ltspice.Ltspice(file_path) l.parse() for i in range(l.case_count): # Iteration in simulation cases V0 = l.get_data('V(N001)', i) I0 = l.get_data('I(V2)', i) plt.plot(V0, -I0) plt.show()
pmosfet-iv.cir
の実行結果は以下で、同様に電流の値を正にしています。
inv_example.cir
の実行結果は以下です。
以下が波形ファイルinv_example.raw
を読み込むためのread_raw.py
の中身です。
import ltspice import matplotlib.pyplot as plt import numpy as np import os file_path = 'inv_example.raw' l = ltspice.Ltspice(file_path) l.parse() time = l.get_time() V0 = l.get_data('V(N003)') V1 = l.get_data('V(N004)') plt.plot(time, V0) plt.plot(time, V1) plt.show()
これでコマンドラインから実行できることが確認できました。
SPICEネットリスト.cir
を手書きすれば、.asc
無しでも実行できるはずです。
大量にシミュレーションを実行したり、一部を書き換えながら実行する際にテキストベースの実行環境が役立つと思います。
波形データをPythonの配列として取得できるため、波形の時間微分を取るなども可能になり、解析の幅が広がります。
Jupyter Notebookから実行
matplotlibでグラフ表示した履歴をコマンドと一緒に記録するにはJupyter Notebookを使うと便利です。
Anacondaの仮想環境LTspiceのTerminalから以下のコマンドでJupyter Notebookを立ち上げます。
jupyter notebook
Anaconda NavigatorからOpen with Jupyter Notebookとしても良いです。
LTspiceディレクトリから上記を実行するとブラウザに以下のように表示されます。
新規→Python 3と押します。
Untitledとなっている名称をLTspiceなどに変更します。
Python3コマンド入力欄に以下のように入力し、nmos_iv, pmos_iv, inv以下でそれぞれrun.py
とread_raw.py
を実行します。
cd nmos_iv %run -i run.py %run -i read_raw.py
Jupyter Notebookでコマンドを実行するにはShift+Returnを押す必要があります。
これにより以下のようにコマンドとグラフをノートに記録するように見ることができます。
保存ボタンを押すことで、履歴を保存できます。
まとめ
Mac版LTspiceをインストールして、かんたんな回路サンプルのDC解析、過渡解析のシミュレーションを実行することができました。
GUIで実行する方法は他のサイトでもよく見かけますが、テキストベースでコマンドラインから実行する方法については情報が少なく苦労したので、同様の環境構築をしようとしている方のお役に立てるのではないかと思います。
書籍紹介
LTspiceをこれから使いはじめる方におすすめの本は以下で、LTspiceの基礎を丁寧に説明してくれています。
電子回路シミュレータ LTspice XVIIリファレンスブック (TOOL活用シリーズ)
ノードの初期値を与えるなど、一歩進んだ高度な設定方法やエラーの対策などについては以下の本が良いでしょう。
参考文献
- PyPi/ltspice 1.0.1(https://pypi.org/project/ltspice/)
- ANALOG DEVIDES/Circuit Design Tools & Calculators(https://www.analog.com/jp/design-center/design-tools-and-calculators/ltspice-simulator.html)
- 京都大学大学院情報学研究科 通信情報システム専攻/小野寺研究室(http://www-lab13.kuee.kyoto-u.ac.jp/modules/contents/lecture/spice.html)
- LTspice(Mac)を使ってみた(https://www.shangtian.tokyo/entry/2018/12/12/200236)
- Changing character encoding from Unicode to Ascii(https://apple.stackexchange.com/questions/408181/changing-character-encoding-from-unicode-to-ascii)