言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

ngspice で遊ぶ http://ngspice.sourceforge.net/

最近『図解入門 よーくわかる最新電子回路の基本としくみ』 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

おお、しばらく経つと、何やらかっこいいシミュレーションが始まります。

ngspice

自分で回路を作ってみる。

サンプルは難しすぎて何をやってるか分かりにくいので、単純な回路を自分で作ってみます。

P1060105

問題: 点 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