0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excelの回路計算では投げ出すような複雑回路を、自作Pythonツール『PyMNA-Pro』でねじ伏せる

0
Last updated at Posted at 2026-03-29

回路計算をエクセルでしている人を助けたい。

1. 前回のあらすじ MNAを用いた回路計算ツールをつくった。

前回の記事

前回の記事では、エクセルの回路計算の手間を解消すべく、Pythonで修正節点解析(MNA)を用いた回路計算ツールのプロトタイプを作成しました。

今回はその「レベルアップ版」として、さらにアルゴリズムの改良を行った
「PyMNA-Pro v2」 について解説します。

MNAの回路計算ツールを公開している方はたくさんいますが
以下のツールでは部品や電源のばらつき、公差を考慮して 各ノードの最悪値を算出する機能が追加されています。よろしければ使ってみてください。

MITライセンスですから 修正、改善など自由です。
(改善例を共有してもらいたいです。)

※2026/4/11 追記 最新のはこちらです。

2. 今回の挑戦:20素子超えの複雑メッシュネットワーク

単なる分圧回路ではなく、複数の電源系統やブリッジ結合が絡み合う複雑な回路の検証が求められた場合を想定します。
今回は、以下の20個の抵抗が網目状に結合されたメッシュネットワークをテストケースとして用意しました。
image.png

  • Layer 1-5の多段構成
  • ブリッジ結合による相互干渉
  • 正負混合電源(+24V / -12V)への引き込み

このような「どこかの定数を変えると、全ノードの電位が複雑に連動する」回路こそ、エクセル回路計算が最も苦手とする領域です。

というかそんなエクセル作りたくないですね。これをエクセルで作ろうと思ったら
TYP値の計算式セルを作るだけで何時間もかかってしまうのではないでしょうか。
MAX、MINまで計算が必要となったらそのセルの計算式の数値参照先はあっているのか?など心配事は尽きません。

 
回路図からネットリストを作成してみると以下のような形になります。
電圧源と電流源は向きを間違えないように ノードの番号を入力していきます

部品種 部品番号or部品名 接続ノードその1 接続ノードその2 誤差%(MIN/MAX)

の順に入力していきます。

検証用ネットリスト

今回の検証に使用した、20素子の複雑なメッシュ回路のネットリストです。以下のコードブロックの右上にあるコピーボタンから、そのまま pymna-pro2.py に貼り付けて使用できます。


  • 電源系
    V Vp 1 0 24 1
    V Vn 0 10 12 1
    I Ibias 0 5 10m 5

  • 第1ラダー層
    R R1 1 2 1k 5
    R R2 2 0 1k 5
    R R3 1 3 1.2k 5
    R R4 3 0 1.2k 5

  • 第2ラダー層(ブリッジ結合)
    R R5 2 4 820 5
    R R6 3 4 820 5
    R R7 4 5 470 5
    R R8 2 3 100 5

  • 第3層(負電源への引き込み)
    R R9 5 6 1.5k 5
    R R10 6 10 1.5k 5
    R R11 4 6 2.2k 5

  • 第4層(複雑なメッシュ)
    R R12 6 7 1k 5
    R R13 7 0 1k 5
    R R14 3 7 2.7k 5
    R R15 5 7 3.3k 5

  • 第5層(出力段への結合)
    R R16 7 8 560 5
    R R17 8 10 820 5
    R R18 6 8 1.2k 5

  • 最終出力段
    R R19 8 9 1k 5
    R R20 9 0 1k 5


上記ネットリストをpymna-pro2.pyに貼り付けて解析を実行すると結果がすぐに出ます

緑色の文字が実行結果です。 
TYP値は 上記のLTspiceの回路画像に書かれてるノード電圧値と合致していることがわかります。

エクセルで計算するのとは比べ物になりません。
回路図があれば(ネットリストがあれば)回路計算が一瞬なのですから。

image.png

image.png

3. ワーストケース算出アルゴリズム:感度解析+反復収束法

抵抗が20個ある場合、全ての組み合わせをしらみつぶしに調べようとすると $2^{20} = 1,048,576$ 通り(約100万通り) の計算が必要になります。
これは回路が大きくなるほど指数関数的に増えてしまい、現実的ではありません。「感度解析」+「反復収束法」を用いることで、本プログラムがいかに効率的に計算しているかを補足説明として追加します。

具体的には20素子の場合:
感度解析: 20回(各素子1回ずつ動かす)
反復収束法: 1ループにつき最大20回の再検証。これが最大15ループ。
つまり、最悪でも 20 + (20 * 15) = 320 回程度の計算で済みます。100万通り調べるのに比べて圧倒的に速く、かつ実用上十分な精度で極値を見つけ出すことができます。
これだけでもエクセルでやるには大変な時間と労力があります。
回路の動作条件が変わると作業が倍増していきます。
(入力のSWをONしたら? 回路のトランジスタがONしたら?)

複雑な回路では、ある抵抗を大きくしたときに、特定のノード電圧が「上がるか下がるか」が他の部品の状態に依存する場合があります。これに対処するため、以下のステップで最悪値を確定させます。

感度分析(初期方向の決定):
各素子を個別にTyp値から微小変化(またはMaxへ変更)させ、ターゲットノードの電圧が「増加」するか「減少」するかを確認し、暫定的なMax/Minの方向を決めます。

反復検証と相互干渉の解消:
他のすべての素子を「暫定的な最悪条件」に固定した状態で、各素子を1つずつ再検証します。「本当にこの方向で電圧が最大(最小)になるか?」を全素子に対して繰り返し確認します。

収束判定:
どの素子のMax/Min状態を反転させても、ターゲット電圧がそれ以上更新されなくなった時点で「真の最悪値」と断定し、出力を確定します(最大15回のループ)。

このツール反復検証の有無はチェックボックスで切り替えられます。
感度解析だけではだめなことが結果比較でわかると思います。

左が反復収束法なし、右が反復収束法あり 
ありのほうの最悪値がさらに悪化している。 
感度解析だけでは最大化するパラメータを全部採択しても打ち消しあう、増幅するような干渉作用があればそれを見逃してしまう。

image.png

4. 解析結果の可視化(トルネードチャート)

「どの部品が一番効いているのか?」を直感的に把握するため、トルネードチャート機能を強化しました。
複雑なメッシュ回路においても、特定の出力ノード に対して影響度の大きい部品をランキング形式で表示します。これにより、マージン不足時の対策(どの部品を高精度品に変えるべきか)が瞬時に判断できます。

今回ケースのノード9のトルネードチャート表示例
R17 の寄与度が大きいことがわかる
image.png
 

5. LTspiceとの連携

「自作ツールで計算して終わり」ではなく、その結果を標準的な設計フローに戻せるよう、.asc(LTspice回路図)および .cir(ネットリスト)へのエクスポート機能を実装しました。
これにより、自作ツールで見つけた最悪条件を、そのままLTspiceの過渡解析や環境変化シミュレーションに引き継ぐことができます。未ワイヤのため配線は必要ですが部品を置く手間が削減されます。

 

6. GitHubで公開中

今回紹介した「PyMNA-Pro v2」のソースコードはGitHubで公開しています。
前回のプロトタイプから大幅に安定性と機能を向上させています。

おわりに

「道具(ツール)がなければ作る」のがエンジニアの醍醐味です。
エクセルの計算に悩まされている設計者の方、ぜひ一度Pythonによる直接解法(MNA)のパワーを体感してみてください。

つぎは ネットリストを作るのも面倒なので
回路図PDFをネットリストに変換するツールもつくってみたいですね。
(そもそもCADにこのツールの機能をつけてほしいです。(あるのかな?)
CADで回路図引いたら設計計算が完了するっていうのが普通になるんじゃないでしょうか。)

そのほか
ゴールシーク機能(この電圧になるような抵抗値の選定をする。)
定格電力チェック機能(まぁ全部品の消費電力計算)

以下はマニュアルです 

PyMNA-Pro v2 ユーザーマニュアル

PyMNA-Pro v2 は、電子回路の設計において避けて通れない「最悪値解析(WCA)」を、誰でも簡単に、かつ高精度に行うためのツールです。エクセルでの計算限界を感じている設計者のためのソリューションです。

1. クイックスタート

ステップ1:回路情報の入力

メイン画面の左側にあるテキストエリアに、解析したい回路のネットリストを入力します。エクセルの設計書や部品表からコピー&ペーストすることも可能です。

入力書式:
[素子種別] [名前] [ノード1] [ノード2] [Typ値] [誤差(%)]

R1 1 2 1k 5 (1kΩ、誤差±5%の抵抗)

Vp 1 0 24 1 (24V、誤差±1%の電圧源)

ステップ2:解析の実行

画面右下の [Analyze / 解析実行] ボタンをクリックします。

解析が完了すると、右側の出力エリアに Typ値, MAX値, MIN値 がノードごとに表示されます。

##2. 主要機能の使い方

2.1 トルネードチャート(感度分析)

解析実行後、[Tornado Chart / トルネードチャート] ボタンが有効になります。

ボタンを押すと、ターゲットとするノード番号を聞かれます。

ノード番号(例: 9)を入力してOKを押すと、そのノードの電圧に対して「どの部品が最も影響を与えているか」をグラフで表示します。

右に伸びる棒: その部品が大きくなると電圧も上がる

左に伸びる棒: その部品が大きくなると電圧は下がる

2.2 反復改良アルゴリズム (v2新機能)

複雑なメッシュ回路では、素子同士が複雑に影響し合うため、1回の計算では真の最悪値が見つからないことがあります。本ツールは背後で最大15回の反復計算を行い、誤差が累積・干渉する条件下での「理論的限界値」を自動で探索します。

2.3 LTspice連携

[Save LTspice (.asc/.cir)] にチェックを入れた状態で解析すると、実行フォルダに以下のファイルが自動生成されます。

output_circuit.asc: 回路図ファイル。LTspiceで開いて配線すればシミュレーション可能です。

output_netlist.cir: 標準的なSPICEネットリスト。

3. トラブルシューティング

原因と対策

Singular Matrix エラー

フローティングノード(どこにも繋がっていない点)があるか、GND(0)へのパスがありません。接続を確認してください。

収束しない

回路構成が極端に不安定な可能性があります。ネットリストのノード番号に間違いがないか確認してください。

単位が認識されない

k (キロ), m (ミリ), u (マイクロ) など、標準的なSPICE単位を使用してください。大文字小文字は区別しません。

4. 設計のヒント

最悪値解析の結果、電圧の振れ幅が大きすぎる場合は、トルネードチャートで上位(長い棒)に表示されている部品の精度を上げる(5% → 1%など)のが、最もコストパフォーマンスの良い設計変更になります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?