This website requires JavaScript.
クーポン
発送先
ブログ

Pythonで独自のPCBトレース幅計算機を作成する方法

初出公開日 Sep 25, 2026, 更新日 Sep 25, 2026

3 min

目次
  • 考慮すべきパラメータ
  • Pythonトレース幅計算機の機能
  • オンラインPythonコンパイラでトレース計算機を実行する方法
  • Pythonコード:
  • 最終的な考察:

PCBトレースは、あらゆる設計において電流容量、信号整合性、そして熱性能にとって極めて重要です。IPC-2152は標準的な計算式を提供していますが、手計算は時間がかかります。このチュートリアルでは、IPC-2152に基づいた軽量なPythonトレース幅計算機を作成します。任意のオンラインコンパイラで実行でき、実製造における精度のためにJLCPCBの無料オンラインインピーダンス計算機で結果を相互検証できます。

例から始めましょう:電源PCBを設計していて、トレースが10mmの長さで5Aの電流が流れる場合、厚さはどうなるでしょうか?IPCに基づいて計算する必要がありますが、コンピュータの時代に手計算はしません!そう、任意のオンライン計算機を使えますが、なぜそれらに頼る必要があるでしょうか?私たちは独自のコードを設計します。

本題に戻りましょう - 銅トレースの幅はどのくらいにすべきでしょうか?答えは、流す必要のある電流、許容される温度上昇、銅の厚さ、そしてトレースが内層か外層かなど、いくつかの要因によって異なります。このプロセスを合理化するために、IPC-2152ガイドラインに基づいたPythonのトレース幅計算機を開発しました。この記事では、設計プロセス、考慮されるパラメータ、ツールの機能について説明します。そして最後に、任意のオンラインPythonコンパイラで実行する方法を紹介します。

考慮すべきパラメータ

計算機を設計する際に、以下の主要なパラメータ(IPC-2152およびJLCPCBの能力に基づく)を含めました:

1. 電流容量(A) – トレースが安全に流せる電流量。

2. 温度上昇(°C) – トレース温度が周囲温度よりどれだけ上昇できるか。

3. 層タイプ – 外層トレースは内層トレースよりも放熱性が高いため、計算式が異なります。

4. 銅の重量(oz/ft²) – 一般的に1 ozまたは2 oz銅;厚さと抵抗に影響します。

5. トレース長(mm) – 抵抗と電圧降下の計算に重要です。

6. トレース幅(mm) – 指定されたサイズから最大電流を計算する際に使用します。

JLCPCBの最小トレース幅/間隔は、標準1 oz銅で0.10 mm(4 mil)です。

Pythonトレース幅計算機の機能

コードは非常に軽量なため、UIはありません。そのため、任意のPythonコンパイラを使用してオンラインで実行できます。私の計算機でできることは以下の通りです:

2つのモード:
1)  
電流から幅を計算 – 電流を入力し、必要なトレース幅を取得。
2)
幅から電流を計算 – 幅を入力し、最大対応電流を取得。

追加計算:

  • トレース抵抗(Ω)
  • 指定された負荷に対する電圧降下(V)
  • トレースでの電力損失(W)

計算後は、常にJLCPCBの無料オンラインインピーダンス計算機で結果を相互確認し、見積もり時に「Controlled Impedance」を選択して±10%の公差検証を行ってください。

オンラインPythonコンパイラでトレース計算機を実行する方法

このツールを使用するためにローカルのPython環境は必要ありません。以下のコードをコピーするだけで、実行ガイドはこちらです:

1. 任意のオンラインPythonコンパイラにアクセスし、コードを貼り付けます。例としてProgramizを使用していますが、任意のローカルなものを選択できます。

2. Runをクリックします。

3. ターミナルウィンドウのプロンプトに従ってパラメータを入力します。

まず、ユーザーに2つのモード(電流から幅、または幅から電流)の選択を求めます。それぞれの出力とプロンプトは以下の通りです:

電流から幅:

幅から電流:

これにより、Pythonをインストールしなくても、任意のデバイスから計算機を実行できます。

Pythonコード:

import math
def calculate_trace_width(current, temp_rise=10, is_external=True):
    # IPC-2152 constants
    if is_external:
        k = 0.048
        b = 0.44
        c = 0.725
    else:
        k = 0.024
        b = 0.44
        c = 0.725

    width_mils = (current / (k * (temp_rise ** b))) ** (1 / c)
    width_mm = width_mils * 0.0254
    return width_mm

def calculate_trace_properties(width_mm, length_mm, copper_oz):
    # Constants
    copper_thickness_mm = {1: 0.035, 2: 0.07}  # in mm
    resistivity = 1.68e-8  # Ohm-meter for copper

    # Get thickness
    thickness_mm = copper_thickness_mm.get(copper_oz, 0.035)
    cross_section_mm2 = width_mm * thickness_mm

    # Convert to meters
    length_m = length_mm / 1000
    area_m2 = cross_section_mm2 * 1e-6

    # Resistance
    resistance = resistivity * length_m / area_m2
    return resistance

# --- Main Program ---

mode = input("Choose mode (1 = Width from Current, 2 = Current from Width): ")

if mode == '1':
    current = float(input("Enter current (A): "))
    temp_rise = float(input("Enter temperature rise (°C, default 10): ") or 10)
    layer = input("Is it external layer? (y/n): ").lower() == 'y'
    length_mm = float(input("Enter trace length (mm): "))
    copper_oz = int(input("Copper weight (1 or 2 oz): "))

    width_mm = calculate_trace_width(current, temp_rise, layer)
    resistance = calculate_trace_properties(width_mm, length_mm, copper_oz)
    voltage_drop = current * resistance
    power_loss = current ** 2 * resistance

    print(f"\n--- Results ---")
    print(f"Required trace width: {width_mm:.3f} mm")
    print(f"Trace resistance: {resistance:.4f} Ω")
    print(f"Voltage drop: {voltage_drop:.4f} V")
    print(f"Power loss: {power_loss*1000:.2f} mW")

elif mode == '2':
    width_mm = float(input("Enter trace width (mm): "))
    temp_rise = float(input("Enter temperature rise (°C, default 10): ") or 10)
    layer = input("Is it external layer? (y/n): ").lower() == 'y'
    length_mm = float(input("Enter trace length (mm): "))
    copper_oz = int(input("Copper weight (1 or 2 oz): "))

    width_mils = width_mm / 0.0254
    if layer:
        k = 0.048
    else:
        k = 0.024
    b = 0.44
    c = 0.725

    current = k * (temp_rise ** b) * (width_mils ** c)
    resistance = calculate_trace_properties(width_mm, length_mm, copper_oz)
    voltage_drop = current * resistance
    power_loss = current ** 2 * resistance

    print(f"\n--- Results ---")
    print(f"Maximum supported current: {current:.2f} A")
    print(f"Trace resistance: {resistance:.4f} Ω")
    print(f"Voltage drop: {voltage_drop:.4f} V")
    print(f"Power loss: {power_loss*1000:.2f} mW")

else:
    print("Invalid option.")

最終的な考察:

これはIPC-2152に基づいたシンプルでありながら強力なPythonプロジェクトです。動作させるには、設計者が適切なパラメータ情報を持ち、トレース計算機のためにIPCガイドラインを確認する必要があります。結果はオンライン計算機と異なる場合があります。なぜなら、それらのいくつかは以前のバージョンのコードを実行しているからです。

JLCPCBでの実際の製造には:

- 迅速なプロトタイピングには計算機を使用してください。

- 最終的な値はJLCPCBの無料インピーダンス計算機で検証してください。

- 注文時に「Controlled Impedance」を選択して±10%の公差(または±5%オプション)とTDRテストを行ってください。

TkinterやStreamlitを使用してGUIでコードを簡単に拡張できます。あなたのバージョンを共有してJLCPCBをタグ付けしてください — コミュニティのツールを見るのが大好きです!

学び続ける