記事内に広告が含まれています

【ワレコの電子回路】KiCadのngspiceを使う【KiCadネットリストをLTspiceでシミュレーションする方法も解説】

この記事は約15分で読めます。
スポンサーリンク
ワレコ
ワレコ

ジャネーの法則

ジャネの法則(ジャネのほうそく)は、19世紀のフランスの哲学者・ポール・ジャネが発案し、甥の心理学者・ピエール・ジャネの著書[1]において紹介された[注 1]法則。主観的に記憶される年月の長さは年少者にはより長く、年長者にはより短く評価されるという現象を心理学的に説明した。ジャネーの法則とも表記する[2]。

簡単に言えば、生涯のある時期における時間の心理的長さは年齢に反比例すると主張したものである。

例えば、50歳の人間にとって1年の長さは人生の50分の1ほどであるが、5歳の人間にとっては5分の1に相当する。よって、50歳の人間にとっての10年間は5歳の人間にとっての1年間に当たり、50歳の人間の10日が5歳の人間の1日に当たることになる。

引用元 Wikipedia

確かにワテも歳とともに時間が経つのが速く感じる。その理由を説明したのがジャネーの法則と言うらしい。

という事は、昔の事をすっかり忘れてしまえば時間が経つのが遅くなると言う事だ。

よし、過去は振り返らずに未来へ向かおう!

という事で、今日はKiCadに入っているngspiceを使ってみた。

LTspiceのデバイスモデル(2SC1815など)をngspiceで使う方法も判明した。

さらにngspiceで出力したネットリストをLTspiceに読み込んで実行することも出来た。

では本題に入ろう。

スポンサーリンク
スポンサーリンク

KiCadで回路図を描いてSPICEシミュレーションを実行する

下図のようにトランジスタ1石の回路図をKiCadのEeschemaで描いてみた。回路中の定数は適当だ。

図 KiCadで描いたトランジスタ1石の電流帰還バイアス回路

電流帰還バイアス回路というやつか?

自称電子回路初心者のワテなので詳しいことは分からない。

さて、上図にはVSIMやV2などの信号源が追加されている。

この回路図からプリント基板を設計する際には、これらの信号源は必ずしも必要ないので回路図に追加する必要は無い。

今回はKiCadに標準装備されているngspiceを使いたいので、上図のように適当に信号源や電源を追加したのだ。

そのやり方を解説しよう。

KiCadの回路図に信号源など追加する方法

下図のように「シンボルを選択アイコン」をクリックする。

図 「シンボルを選択アイコン」をクリックする

下図の「シンボルを選択」画面が開くので上部のフィルター欄に「spice」と入力すると下図のようになる。

図 「シンボルを選択」画面の上部のフィルター欄に「spice」と入力する

上図のようにVDCを選んで回路図に追加した。

VDCのプロパティを開いてDC10Vに設定した。その出力に「+10V」と言うグローバルラベルを付けておいた。

同様にして下図のようにVSINを選んで回路図に追加した。

図 VSINを選んで回路図に追加した

上図のようにVSINはデフォルトでは

dc=0 ampl=1 f=1k ac=1

の初期値になっている。

この意味はたぶん、

dcオフセットは0V
ampl(振幅)は1V
周波数は1kHz
ac解析をする場合の振幅は1V

という事かな。

なので、今回行う予定のtransient解析では振幅1Vの1kHzのサイン波になる。

図 VSINのパラメータを変更した

今回はVSIN信号源は以下の設定にした。

dc=0 ampl=0.1 f=1k ac=0.1

つまり入力信号は振幅 0.1V、周波数1kHz のサイン波だ。

transient解析のパラメータ設定

SPICEシミュレーターの解析機能にはAC解析、DC解析、transient解析(=トランジェント解析、過渡解析)などあるが今回はtransient解析をやってみる。

transient解析とはワテの理解では、回路に幾つかの信号源を与えておいて、各ノードの電圧や電流の変化を指定した期間に渡って波形として出力する機能だ。

さてKiCadの場合には下図のようにテキストとしてSPICEコマンドを書き込んでおけば良いようだ。

図 KiCadはSPICEコマンドを文字列として書き込んでおけば良いようだ

実際、下図のようにこの文字列をダブルクリックすると「テキストのプロパティ」と表示されている。

図 transient解析のプロパティを文字列(テキスト)で指定した

今回は以下のように設定した。

.tran 10u 500m 490m

この一行はワテの理解では以下の通り。

時間ステップは10μ秒

データの取得開始は 490ミリ秒から開始して、取得終了が500ミリ秒

なので、490ミリ秒から500ミリ秒までの10ミリ秒間のデータが得られる。

データ点数は10ミリ秒÷10μ秒なので1000点かな。

KiCadのシミュレーターを起動する

シミュレーションの準備が出来たので下図のようにシミュレーターを起動する。

検査 ー> シミュレーター

を実行すれば良い。

図 「検査 ー> シミュレーター」を実行してシミュレーターを起動

下図のようにSpiceシミュレーター画面が起動した。

図 KiCadのSpiceシミュレーター画面が起動した

シミュレーションを実行する

さて、ワテも初めて見る画面なのでKiCadのSPICEシミュレーターの使い方は知らない。

でもまあ勘でやってみる。

たぶん「▶実行/停止」アイコンをクリックすればシミュレーションが開始するはずなのでクリックしてみた。

その結果、下図のように下部にズラズラと何かメッセージが表示された。

図 「▶実行/停止」アイコンをクリックしてシミュレーションを実行した

上図では「Error」などのメッセージも出ていないので、上手く行ったようだぞ。

データ点数は1001なので計算通りだ。

そこで再びワテの鋭い勘で下図左のプローブアイコンをクリックした。

図 プローブアイコンをクリックして回路図上のノードに置く

そのプローブアイコンを上図右の回路図上持って行き、電圧を計測したいノード(配線上)に置く。

この例では「in」のノードにプローブを置いた。

その結果、下図のように入力波形が観察出来たぞ!

図 入力波形「in」が観察出来た

上図のようにノードinに与えたVSIN信号源の波形(振幅100mV、周波数1kHz 正弦波)が赤色で描画された。

上図に於いて、横軸の時間軸は .tran コマンドで与えた通り、490ミリ秒から500ミリ秒までの10ミリ秒間のデータが表示されている。すばらしい。

同様にプローブアイコンを出力「out」に置くと下図のように水色で出力波形が得られた。

図 KiCadのngspiceで電流帰還バイアス回路の入出力波形をシミュレート成功

下図は出力波形を拡大したものだ。

図 出力波形を拡大

上図を見ると、振幅は 4.10V~4.74V くらいの範囲なので、4.42Vを中心に±0.32V の振幅の正弦波になっている。

入力が 0V ±0.1V だから、ゲインは約3倍くらいかな。

transient解析の時間範囲について

さて、上記の例ではトランジェント解析のパラメータ設定は以下のようになっている。

.tran 10u 500m 490m

ちなみにLTspiceなら以下のように記述すると最小ステップは省略して、計算終了時刻のみ指定した事になる。

.tran 10m

LTspiceならこれで時刻0から時刻10msまでの波形が得られるのだが、KiCadのngspiceではこの形式だとエラーが出た。理由は不明だ。

まあSPICE電子回路シミュレーターはカリフォルニア大学バークレー校で1970年代に開発が始まったが、その途中からオープンソースになり色んなSPICEが派生した。

なので、命令の記述形式に方言があるのだろう。

KiCadのngspiceの場合なら、ワテが試行錯誤した結果、以下のように記述すればタイムステップ 10μ秒で時刻0から時刻10msまでの波形が得られるようだ。

.tran 10u 10m

この設定でシミュレーションを実行して波形を表示すると以下のようになった。

図 KiCadのngspiceだと時刻0直後の挙動がLTspiceと異なるようだ

上図のように時刻0直後の出力波形はダラーと右下がりになっている。

一方、この回路をLTspiceでも描いて実行してみたが、出力波形は上図のような挙動にはならずに一つ前のグラフ(時刻490から500ミリ秒)と同じ様に水平になった。

理由は調査中だ。

LTspiceの中の2SC1815モデルをKiCadのngspiceで使う

さて、今までの例ではトランジスタは特定の型番ではなくてKiCadが持っている「NPNトランジスタ」を使った。

でも一般的には2SC1815などの特定の型番のトランジスタを使ってSPICEシミュレーションをやりたいと言う人のほうが多いだろう。

ワテの場合は電子回路シミュレーションはLTspiceを長年使っている。LTspiceで使える市販トランジスタのデバイスモデルはネットを探すと沢山見つかる。ワテもどこかで入手したデバイスモデルファイルをインクルードして使っている。

そのファイルには日本製のトランジスタ、JFET、MOSFET、ダイオードなどの多数のメーカーの多数の型番のデバイスモデルが含まれているので非常に便利だ。

そのファイルの中には東芝の超有名な2SC1815トランジスタのデバイスモデルもある。

KiCadのngspiceで2SC1815トランジスタを使ってシミュレーションを実行する方法は、ワテの試行錯誤で見つけることが出来た。

以下、その手順を説明しよう。

回路図は以下の通り。今までの回路図と殆ど同じでトランジスタの型番が今までのNPNではなくて、2SC1815に変わっている。

図 トランジスタ1石の電流帰還バイアス回路(2SC1815版)

上図に於いて、2SC1815のプロパティを表示すると以下の通り。

図 2SC1815トランジスタのプロパティでLTspiceのモデルファイルとモデル名を与える

上図では以下のようにLTspiceのバイポーラトランジスタのデバイスモデルファイルを指定して、そのファイルの中にある2SC1815トランジスタのデバイス名Q2SC1815を与えた。

Sim.Library E:/MyDocuments/LTspiceXVII/mylib/jbipolar.lib
Sim.Name Q2SC1815

これで準備完了かと思ったが、未だやることがある。

不要なモデルはシミュレーションから除外する

それは、上図では信号源には先程と同じく振幅100mVで周波数1kHzの正弦波を与えている。

その下側にはVPULSEと言う信号源もあるが、現在は未使用だ。

さらにMountingHoleのシンボルも描かれている。

「MountingHole」は文字通り基板に開ける穴に使うシンボルだ。

上図では一つだけ描いているが、例えば四つのMountingHoleを回路図に描いておいて、そのフットプリントにもMountingHoleを与えれば、基板の四隅にネジ穴を開けることが可能だ。

穴のサイズは各種あるが、ワテの場合はM3用の穴(Φ3.2)のやつを使うことが多い。

さて、VPULSE信号源やMountingHoleは今はSPICEシミュレーションには使わない。

なので、下図のようにMountingHoleのプロパティで「シミュレーションから除外」にチェックを入れる。

図 MountingHoleのプロパティで「シミュレーションから除外」にチェックを入れる

同様に下図のように使わない信号源VPULSEのプロパティでも同じく「シミュレーションから除外」にチェックを入れておく。

図 使わない信号源VPULSEも同様に「シミュレーションから除外」にチェックを入れる

これで準備完了だ。

ちなみにMountingHoleをシミュレーションから除外せずにシミュレーターを実行すると下図のようにエラー中断した。

図 MountingHoleをシミュレーションから除外せずにシミュレーター実行するとエラー中断

KiCadのngspiceでLTspiceの2SC1815モデルを使ってシミュレーションを実行

さて、下図のように「▶実行/停止」をクリックしてシミュレーターを実行した。

図 「▶実行/停止」をクリックしてシミュレーターを実行成功

その結果、上図のようにプローブアイコンを使ってinノードやoutノードの電圧波形を観察することが出来た。いい感じだ。

もし電流波形を見たい場合には、プローブアイコンをトランジスタや抵抗などのデバイス足付近に持って行くと、プローブアイコンの形状が変化して電流プローブに変わるので、電流プローブアイコンを置けばその場所の電流波形を表示出来る。

という事でKiCadのngspiceに於いて、LTspiceの2SC1815モデルを呼び出してシミュレーションすることに成功したぞ。

KiCadのngspiceで作成したネットリストをLTspiceに掛ける

KiCad 7.0.5 のngspiceはバグが多いみたいで、重い計算をさせると途中で無反応になり異常終了することも多い。

なので、安定性の良いLTspiceを使いたいのだが、KiCadで回路図を描いて基板設計するとしても、LTspiceでシミュレーションするために、LTspiceにも同じ回路図を手作業で入力するのは面倒だ。

それは二度手間なので、出来ればKiCadで作成した回路図をLTspiceでシミュレーション出来れば望ましい。

そのやり方もワテの試行錯誤で一応は出来たので以下その手順を紹介しておこう。

KiCadのngspiceでネットリストを表示する

図 シミュレーション ー> SPICEネットリストを表示

上図のように

 シミュレーション ー> SPICEネットリスト

を実行すると下図のように「SPICEネットリスト」と言うウインドウが開く。

図 「SPICEネットリスト」と言うウインドウが開いた

上図をテキストで記述すると以下の通り。

.title KiCad schematic
.include "E:/MyDocuments/LTspiceXVII/mylib/jbipolar.lib"
.save all
.probe alli
.tran 10u 500m 490m
R5 +50V Net-_Q2-B_ 36k
R6 Net-_Q2-B_ GND 12k
R1 Net-_Q2-E_ GND 3k
Q2 Net-_Q2-C_ Net-_Q2-B_ Net-_Q2-E_ Q2sc1815
R2 +50V Net-_Q2-C_ 10k
C1 Net-_Q2-C_ out 10u
C2 in Net-_Q2-B_ 10u
V4 in GND DC 0 SIN( 0 0.1 1k 0 0 0 1 ) AC 1
R3 in GND 56k
V3 -50V GND DC -50
V2 +50V GND DC 50
.end

このテキストを全選択してコピーして、下図のように適当な名前のテキストファイルに貼り付けて保存する。

図 Windowsのメモ帳にSPICEネットリストを貼り付けてファイル保存する

ネットリストファイル名は特に決まりはないので何でも良い。ワテの場合は以下のようにした。

新しいテキスト ドキュメント.txt

 

ネットリストをLTspiceで開いてシミュレーションを実行する

このネットリストファイルをLTspiceで開いた(下図)。

図 KiCadで出力したネットリストファイルをLTspiceで開いた

そして下図のようにLTspiceの人が走る🏃アイコンをクリックしてシミュレーターを起動する。

図 LTspiceの人が走る🏃アイコンをクリックしてシミュレーション開始

無事に成功したら、波形を表示させるために

Plot Settings ー> Visible Traces

を実行する。

図 「Plot Settings ー> Visible Traces」を実行する

そして下図のように表示出来る波形の一覧が表示されるので、ここではV(in)をクリックした。

図 表示出来る波形の一覧が表示されるのでV(in)をクリック

その結果、下図のようにV(in)の波形が描画されたが、なぜか 0mV で水平だ。

図 V(in)の波形が描画されたがなぜか 0mV で水平

波形はなぜか0mVで水平だが、LTspiceのシミュレーションには成功しているので、あと一息だ。

解決策は必ずある。

KiCadのngspice生成のネットリストを手で修正する

ワテの経験から推測するなら、ネットリストの記述形式も世の中に沢山ある派生版SPICEごとに微妙に異なるのだと思う。

で、今回はトランジェント解析なので .tran の記述行をワテの勘で以下のように修正してみた。

.tran 0 10m 0
LTspiceの場合には、transient解析のパラメータの意味は以下の通り。

図 LTspiceのtransient解析のパラメータの意味

従って .tran 0 10m 0 と記述した場合には、最小ステップは指定なし(0)で、時刻10ミリ秒で停止。開始は0からという意味かな。

この設定で再度LTspiceを実行した。

その実行結果は以下の通り。

図 トランジェント解析の .tran記述行をワテの勘で修正してシミュレーション実行

上図のように一周期しか表示されていないが、兎に角波形を表示させることが出来た。

上図を見るとinとoutの波形は、KiCadのシミュレーション結果によく似ている。

これでKiCadのngspiceで生成したネットリストをテキストファイル形式でLTspiceに読み込んでシミュレーションを実行する目処が立った。

素晴らしい。

まとめ

ワレコ
ワレコ

KiCad付属のngspiceには以前から興味は有ったのだが、LTspiceが有れば十分なのでngspiceに付いて調査することをサボっていた。

でもやってみたら案外簡単に出来たのだ。

当記事ではKiCad付属のngspiceを使って電子回路シミュレーションを実行する手順を紹介した。

ワテの試行錯誤でやり方を見つけたので、正式な教科書に載っている手法かどうかは分からない。

でもまあワテの場合はLTspiceを始めとして、電子回路シミュレーションや電磁場解析などのシミュレーションはかなり使い込んだ経験があるので、この記事で紹介した手順はそんなに間違ったやり方だとは思わない。

最初はKiCadに標準付属のNPNトランジスタのデバイスモデルを使った電流帰還バイアス回路のシミュレーション手順を紹介した。

次に、LTspiceのデバイスモデルファイルの中にある東芝製2SC1815トランジスタのデバイスモデルをKiCadのngspiceに読み込んでシミュレーションする方法を紹介した。

その次に、KiCadのngspiceでネットリストを出力して、テキストファイルに保存。LTspiceでそのネットリストファイルを読み込んでシミュレーションの実行に成功した。

ただしトランジェント解析(.tran)のパラメータ指定方法がKiCadのngspiceとLTspiceとでは異なるようなので手作業による修正を行った。

その結果、一周期だけではあるが、シミュレーション結果を得ることが出来た。

今後の予定としては、KiCadのngspiceとLTspiceのネットリストの違いを調査したい。

さらに、KiCadのngspiceとLTspiceとでそれ以外の部分の違いに付いても調査したい。

必要ならKiCadのngspiceのネットリストをLTspice用に自動変換するプログラムなど作成する事にも興味あるが、今の時代、わざわざワテがそんな小細工プログラムを作らなくても、誰かが既に作っているはずだ。

なので、ネット検索して KiCad2LTspice.exe 的なプログラムを探してみたい。

(続く)

スポンサーリンク
コメント募集

この記事に関して何か質問とか補足など有りましたら、このページ下部にあるコメント欄からお知らせ下さい。

KiCadSpiceシミュレーション解説記事
スポンサーリンク
シェアする
warekoをフォローする
スポンサーリンク

コメント