ジャネーの法則
ジャネの法則(ジャネのほうそく)は、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はデフォルトでは
の初期値になっている。
この意味はたぶん、
ampl(振幅)は1V
周波数は1kHz
ac解析をする場合の振幅は1V
という事かな。
なので、今回行う予定のtransient解析では振幅1Vの1kHzのサイン波になる。
図 VSINのパラメータを変更した
今回はVSIN信号源は以下の設定にした。
つまり入力信号は振幅 0.1V、周波数1kHz のサイン波だ。
transient解析のパラメータ設定
SPICEシミュレーターの解析機能にはAC解析、DC解析、transient解析(=トランジェント解析、過渡解析)などあるが今回はtransient解析をやってみる。
transient解析とはワテの理解では、回路に幾つかの信号源を与えておいて、各ノードの電圧や電流の変化を指定した期間に渡って波形として出力する機能だ。
さてKiCadの場合には下図のようにテキストとしてSPICEコマンドを書き込んでおけば良いようだ。
図 KiCadはSPICEコマンドを文字列として書き込んでおけば良いようだ
実際、下図のようにこの文字列をダブルクリックすると「テキストのプロパティ」と表示されている。
図 transient解析のプロパティを文字列(テキスト)で指定した
今回は以下のように設定した。
この一行はワテの理解では以下の通り。
時間ステップは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解析の時間範囲について
さて、上記の例ではトランジェント解析のパラメータ設定は以下のようになっている。
ちなみにLTspiceなら以下のように記述すると最小ステップは省略して、計算終了時刻のみ指定した事になる。
LTspiceならこれで時刻0から時刻10msまでの波形が得られるのだが、KiCadのngspiceではこの形式だとエラーが出た。理由は不明だ。
まあSPICE電子回路シミュレーターはカリフォルニア大学バークレー校で1970年代に開発が始まったが、その途中からオープンソースになり色んなSPICEが派生した。
なので、命令の記述形式に方言があるのだろう。
KiCadのngspiceの場合なら、ワテが試行錯誤した結果、以下のように記述すればタイムステップ 10μ秒で時刻0から時刻10msまでの波形が得られるようだ。
この設定でシミュレーションを実行して波形を表示すると以下のようになった。
図 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.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ネットリスト」と言うウインドウが開いた
上図をテキストで記述すると以下の通り。
.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ネットリストを貼り付けてファイル保存する
ネットリストファイル名は特に決まりはないので何でも良い。ワテの場合は以下のようにした。
ネットリストをLTspiceで開いてシミュレーションを実行する
このネットリストファイルをLTspiceで開いた(下図)。
図 KiCadで出力したネットリストファイルをLTspiceで開いた
そして下図のようにLTspiceの人が走る🏃アイコンをクリックしてシミュレーターを起動する。
図 LTspiceの人が走る🏃アイコンをクリックしてシミュレーション開始
無事に成功したら、波形を表示させるために
を実行する。
図 「Plot Settings ー> Visible Traces」を実行する
そして下図のように表示出来る波形の一覧が表示されるので、ここではV(in)をクリックした。
図 表示出来る波形の一覧が表示されるのでV(in)をクリック
その結果、下図のようにV(in)の波形が描画されたが、なぜか 0mV で水平だ。
図 V(in)の波形が描画されたがなぜか 0mV で水平
波形はなぜか0mVで水平だが、LTspiceのシミュレーションには成功しているので、あと一息だ。
解決策は必ずある。
KiCadのngspice生成のネットリストを手で修正する
ワテの経験から推測するなら、ネットリストの記述形式も世の中に沢山ある派生版SPICEごとに微妙に異なるのだと思う。
で、今回はトランジェント解析なので .tran の記述行をワテの勘で以下のように修正してみた。
図 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 的なプログラムを探してみたい。
(続く)
コメント