回路シミュレータは実際にどのように機能しますか?


31

私は最近、回路シミュレーターであるLiveWireいじる機会があり、各コンポーネントの電圧とワイヤーの各トラックを流れる電流をどのように正確に計算するのか疑問に思い始めました。

私はこれまでに基本的な回路解析スキル(メッシュ解析やノード解析など)を教えただけであり、それらが回路シミュレータ内で「すべてに合う」方法で実装するのに十分な汎用性があるかどうかは完全にはわかりません。

プログラマーとしてこれに興味をそそられ、このような回路シミュレータを構築する際に一般的に採用されている技術を知りたいと思います。

これがここに属さない場合はおhereび申し上げます。こことStackOverflowの間の選択であり、ソフトウェア開発志向の質問ですが、このサイトとユーザーベースにより当てはまる質問だと感じました。


主なトリックは、多くの小さなタイムスライスです。したがって、時間の複雑な関数は、小さなタイムスライスで多くの差分方程式を実行して処理されます。厄介な複雑さは、微分方程式として表現できる場合、通常は大幅に削減されます。微分方程式は、デジタルシミュレーションの差分方程式になります。
オリンラスロップ

回答:


14

Falstadシミュレーターのコードを詳細に調べました。抵抗、スイッチ、電圧源などの線形コンポーネントのみで構成される回路の場合(シミュレーションでは、論理ゲート出力のようなものは接地接続電圧源と見なされます)、シミュレータは各回路ノード、電圧源(2つのノードを接続)を考慮します、または(同様に)線形方程式と変数を定義するものとして、方程式の数と変数の数が常に等しくなるようにします。回路ノードの場合、変数はノードの電圧であり、方程式は、任意の電流源から注入された合計電流に等しいノードを流れる合計電流を計算します。電圧源またはワイヤ(電位差がゼロの電圧源として扱われているワイヤ)の場合、

電流源や抵抗のようなものは、抵抗や変数に関連付けられていません。代わりに、電流源は、1つの回路ノードに必要な合計電流を増加させ(各回路ノードには、流入および流出する合計電流を評価する式があることを思い出してください)、他のノードに対して減少させます。抵抗器は少し複雑です。各エンドポイントの方程式に対して、抵抗器は各エンドポイントのノード電圧の項を追加します。

たとえば、ノード1と2を接続する100Ωの抵抗は、ノード1での各ボルトの増加により、ノード1に流れる電流が0.01アンペア減少し、ノード2に流れる電流が同様に増加すると言います。同様に、ノード2での各ボルトの増加により、ノード1に流れる電流が0.01アンペア増加し、ノード2に流れる電流が同様の量だけ減少します。

ノード1と5を接続する10ボルトの電源と、ノード1と2、2と3、2と4、および3と4を接続する100オームの抵抗器を備えた回路を考えてみましょう。

neg ---+-1---R100---2---R100---3---100---4---pos
      gnd           |                    |
                    +---------100--------+

2つの「電圧源」があります:グランドリードと10ボルト電源(それぞれ式/変数5と6と見なされます)。したがって、方程式は次のようになります。

-X1*0.01                             +X5 -X6 = 0  Node 1
+X1*0.01 -X2*0.01          +X4*0.01          = 0  Node 2
         +X2*0.01 -X3*0.01 +X4*0.01          = 0  Node 3
         +X2*0.01          -X4*0.01      +X6 = 0  Node 4
-X1*1                                        = 0  Volts 5 (voltage between 1 and gnd)
-X1*1                      +X4*1             = 10 Volts 6 (voltage between 1 and 4)

この方程式系は、NxN行列とN個のアイテム配列として表されます。各方程式は行列の行で表され、各行の値は各変数の係数を表します。各方程式の右側は、個別の配列に格納されます。方程式を解く前に、各ノードに流れる正味電流(この場合はゼロ)と、電圧源によって接続されたノードのペア間の電圧差を知ることができます。方程式を解くと、各ノードの電圧と各電圧源を流れる電流が得られます。

回路にコンデンサが含まれている場合、それらはそれぞれ低値抵抗と直列の電圧源と見なされます。各シミュレーションステップの後に、電圧ソースは、流れる電流の量に従って調整されます。インダクタは、一方に電流を供給して他方から取り出す高抵抗の抵抗器と見なされます(抵抗の両端の電圧に応じて電流量が調整されます)。コンデンサとインダクタの両方について、抵抗値はシミュレーションステップで表される時間によって制御されます。

トランジスタなどのより複雑な回路要素は、電圧源、電流源、抵抗の組み合わせと見なされます。シミュレーションタイムステップごとにすべてを一度に処理できる単純な回路要素とは異なり、トランジスターなどの要素は、表示されている電圧と電流に基づいて実効抵抗などを計算し、結果の方程式をすべて評価し、それに基づいて抵抗を再評価します新しい電圧と電流、等式を再評価するなどして、トランジタが見ている電圧と電流に対して有効抵抗が存在するはずの平衡に達するよう努力します。

Falstadシミュレーターは、完全に「線形」要素で構成される中規模の回路に対してかなり高速です。変化する唯一のものが右側の係数である場合、連立方程式を繰り返し解く時間はかなり妥当です。システムが方程式を「リファクタリング」しなければならないため、左側が変化すると(たとえば、トランジスタの実効抵抗が上昇または下降するため)、時間が非常に遅くなります。シミュレーションステップごとに方程式を複数回リファクタリングしなければならない(トランジスタの場合に必要になる可能性がある)ので、物事はさらに遅くなります。

すべてに1つの大きなマトリックスを使用することは、大規模なシミュレーションには適していません。マトリックスはかなりまばらですが、ノードと電圧源の数の2乗に比例してスペースを占有します。各シミュレーションステップでマトリックスを解くのに必要な時間は、リファクタリングが不要な場合はマトリックスサイズの2乗に比例し、リファクタリングが必要な場合はマトリックスサイズの3乗に比例します。それにもかかわらず、回路と線形方程式系との関係を示すことになると、このアプローチにはある種の優雅さがあります。


ほとんどのSPICEタイプのシミュレーターもこのタイプのアルゴリズムを使用します。ここにspice ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
user6972の

1
参考までに、KLUは回路シミュレータで使用される一般的なアルゴリズムです。KLUはClark Kent LUの略です。これは、スーパーノードアルゴリズムであるSuperLUの前身である非スーパーノードアルゴリズムであるGilbert-Peierlsのアルゴリズムに基づいているためです。KLUは、ハイブリッド順序付けメカニズムと洗練された因数分解を採用し、アルゴリズムを解く、スパースな高性能線形ソルバーです。
-user6972

BSIMやEKVなど、いくつかのトランジスタモデルがあることに注意することが重要です。基本的に、これらのモデルは、単一トランジスタの動作に関与するすべての物理学とその電気的特性への影響を考慮に入れています。これには、電圧源、電流源、抵抗の組み合わせとして表すだけではありません。別のモデルを選択する場合は、LEVELパラメーターを使用できます。Jacob Bakerによるこのチュートリアルは、良いスタートです。それが役に立てば幸い。

11

LiveWireは、さまざまなレベルの機能を持つ多くの回路シミュレータの1つです。

たとえば、Falstad Circuit SimulatorはLiveWireと同様の機能レベルのようです-ソースコードはそのリンクで提供されます。それは良い出発点になります。

より洗練された回路シミュレーションのために、多くのツールはUC BerkleyによるSPICEにそのルーツを遡ります。SPICEソースコードは、BSDライセンスの下でUCBからのリクエストに応じて入手できます。

メーカー固有のSPICEエディションは通常、自社製品の非常に詳細な半導体シミュレーションモデルをシミュレータに統合します。たとえば、Linear TechnologiesのLTSpice IVまたはTexas InstrumentsのTINA-TIです。その下では、通常はすべてSPICEです。

SPICEに関するWikiPediaページからの引用:

SPICEとその派生物が最も顕著な回路シミュレーションプログラムは、回路要素(トランジスタ、抵抗、コンデンサなど)とその接続を説明するテキストネットリストを取得し、この説明を解決すべき方程式に変換します。生成される一般方程式は、陰的積分法、ニュートン法、およびスパース行列手法を使用して解かれる非線形微分代数方程式です。

より高度なレベルで、Proteus Design Suiteの一部であるProteus Virtual System Modelingなどのいくつかの商用製品は、混合モードSPICE回路シミュレーション用に独自の拡張機能を使用します-これらのツールは、アナログ回路の動作とデジタルマイクロコントローラーコードの両方をシミュレートできます。それらの間の相互作用は完全にモデル化されています。

より制限された制限レベルでは、このサイトに統合されたCircuit Labツールなどのいくつかの回路図エディタは、わずかな範囲のシミュレーション機能を提供します。これは実用的な非自明な電子設計ではそれほど有用ではないかもしれませんが、それらの機能と実装を研究することは、ソフトウェア開発者にユーザーにとってうまくいくものとそうでないものについての洞察を提供します。


5

SPICEに似た回路シミュレーターによって行われる3つの主要な分析があります。

  • DC動作点
  • AC解析
  • 過渡解析

線形回路(DCソース、線形抵抗器、線形制御ソースから形成)のDC動作点解析は、修正ノード解析(MNA)を使用して行われます。メッシュ解析も使用できますが、ノード解析の方程式を設定するのは非常に簡単です。

非線形回路(トランジスタなどのデバイスを含み、本質的に非線形制御ソースとしてモデル化できます)には、いくつかの追加のトリックを使用する必要があります。概念的に簡単な方法は、複数の方程式にニュートン法の拡張を使用することです。

ニュートンの方法では、解を推測し、推測された解の「近く」でのみ正確な回路の線形モデルを作成します。線形化された回路の解は、解についての新しい推測として使用され、非線形回路の(うまくいけば)正しい解で連続する反復が「収束」するまでプロセスが繰り返されます。現実の世界では、より複雑な非線形ソルバーを使用して、収束の失敗によるエラーを減らして、より迅速にソリューションを実行できます。

AC解析は最初の動作点を見つけるために、DC解析を行うことによって行われます。次に、操作点周辺の小さな摂動の影響を調べます。「小さい」とは、定義上、非線形効果が重要でないほど小さいことを意味します。つまり、回路要素は、動作点に応じて線形の等価要素に変換されます。次に、MNAを使用して(エネルギー保存要素のインピーダンスを表す複素数を使用)、回路内のAC電源によって引き起こされる摂動の影響を解決できます。

過渡解析は、オリンコメントで述べているように回路変数は時間の非常に小さなステップを超える進化どのように考慮することによって、行われます。繰り返しますが、各タイムステップで回路はその動作点を中心に線形化されるため、MNAを使用して方程式を設定できます。経時的な動作を解決する簡単な方法は、オイラーの方法です。ただし、実際には、より小さなエラーでより大きなタイムステップを使用できるように、より複雑な方法が使用されます。

これらのメソッドの一般的なスレッドは、回路の動作を線形近似し、非線形回路の動作の解決策が見つかるまでMNAでそれを解いていることがわかります。

これら3つの分析は、1970年代からSPICEのようなシミュレーターによって行われた主な分析です。新しいシミュレーターには、高調波バランス(非線形要素からのミキシング効果に対応するためのAC解析の拡張)や伝送線路効果をシミュレートする電磁シミュレーションなどの追加機能が追加されています。ただし、DC、AC、および過渡シミュレーションは、SPICEのようなシミュレーターを使用するときに理解する必要がある最初の3つです。


私は以前の回答でMNA方程式を設定する方法について話しました:electronics.stackexchange.com/questions/19198/...
光子

2
また、デジタル回路シミュレーションではまったく異なる方法を使用することも追加する必要があります。そして、それはアナログ-デジタル協調シミュレーションをそれ自体の問題全体にします。
ザフォトン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.