最近『図解入門 よーくわかる最新電子回路の基本としくみ』 isbn:479803858X という本を読んでるのですが、面白い事にこの本で紹介されている電子回路シミュレータがテキストベースの物なのです。私は未だに回路図がよく読めないので、回路図ベースのシミュレータには抵抗があったのですが、テキストベースならプログラミング言語と同じなので簡単なはずだ!と思って試してみました。
インストール
Mac の場合、homebrew で簡単インストール。ngspice のホームページには、ngspice-25.pkg というバイナリも用意されていますが、これは使わないほうが良いです。homebrew のほうが readline の設定もちゃんとしてるしアンインストールも簡単です。
$ brew install ngspice
サンプルを試す
サンプルとマニュアルは ngspice のソースコードに含まれています。homebrew のキャッシュから解凍して試してみます。
$ tar xzvf /Library/Caches/Homebrew/ngspice-25.tar.gz $ ngspice ngspice-25/examples/various/adder_mos.cir
おお、しばらく経つと、何やらかっこいいシミュレーションが始まります。
自分で回路を作ってみる。
サンプルは難しすぎて何をやってるか分かりにくいので、単純な回路を自分で作ってみます。
問題: 点 1 と 点 2 それぞれの電圧と電流を求めましょう。これを解くためのネットリストは以下の通り。register.cir という名前で保存します。
Simple register simulation V1 2 0 5 R1 2 1 400 R2 1 0 100 .op .end
最初の行のタイトルに続き、以下の要素を記述します。
- 電源 V1 は 2番と0番に繋がり、電圧は 5V
- 抵抗 R1 は 2番と1番に繋がり、抵抗は 400Ω
- 抵抗 R2 は 1番と0番に繋がり、抵抗は 100Ω
- .op によって動作点解析を行う。(電流と電圧を調べる事)
素子の種類は、最初の文字によって決まっています。電源なら V 抵抗なら R です。
あとは ngspice を立ち上げ、source でファイルを読み込み、run でシミュレーション、show で電流などを調べ、print で電圧を調べます。
ngspice 2 -> source ./register.cir ngspice 2 -> run Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 ngspice 2 -> show r1 r2 Resistor: Simple linear resistor device r2 r1 model R R resistance 100 400 ac 100 400 dtemp 0 0 noisy 1 1 i 0.01 0.01 p 0.01 0.04 ngspice 2 -> print v(1) v(2) v(1) = 1.000000e+00 v(2) = 5.000000e+00
という訳で、めでたく 1 は 1v、2 は 5v、そして電菱は 0.01A という事が分かりました。
run などのコマンドは、.control と .endc の間に挟めばネットリスト自体に入れ込む事も出来ます。
おまけ: ドキュメントのインストール
ngspice のソースには詳細なドキュメントが付属しています。詳しすぎて何やらよくわかりませんが、念のため info をインストールしておきます。
$ cd ngspice-25/doc/ $ makeinfo --force ngspice.texi $ mkdir -p /usr/local/share/info $ install-info ngspice.texi /usr/local/share/info/dir $ cp ngspice.info* /usr/local/share/info/ $ info ngspice