Pythonで独自のPCBトレース幅計算機を作成する方法
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をタグ付けしてください — コミュニティのツールを見るのが大好きです!
学び続ける
適切なPCB形状の選択
PCBに適切な形状を選択することは、電子デバイスの全体的な性能、製造性、美観に大きな影響を与える重要な決定です。長方形のPCBが最も一般的で汎用性がありますが、特定のアプリケーションで独自の利点を提供するさまざまな形状があります。この包括的なガイドでは、さまざまなPCB形状を探り、各形状の例を提供し、それらがどのように設計と機能性を最適化するかを紹介します。PCB形状の重要性を理解し、具体的な例を考慮することで、電子システムを強化するための情報に基づいた決定を下すことができます。 長方形PCB形状:定番の選択 長方形PCBは、実績のある選択肢であり、多様な業界で広く使用されています。その長方形の形状は、シンプルさ、製造の容易さ、標準プロセスとの互換性を提供します。この形状により、効率的な部品配置、簡単な信号配線、標準化された筐体への統合が可能になります。例えば、ハイエンドノートパソコンは通常、内部スペースの利用を最大化するために長方形のPCB形状を採用しています。長方形の形状により、プロセッサ、メモリ、ストレージ、その他のコンポーネントを効率的に配置でき、コンパクトで強力なコンピューティングデバイ......
部分的に反転したパネル化のチュートリアル
PCB設計のレイアウトエンジニアリング段階では、パネライゼーションが頻繁に採用されます。パネライゼーションとは、本質的には個々の基板をより大きな一枚の基板に組み立てることであり、Vカット、プロセスエッジ、フィデューシャル、ツーリングホール、その他のプロセス用クリアランスのためのスペースを確保します。 PCB試作時には、製造および実装の前に、Altiumで小さな基板をより大きな一枚の基板に組み立てる方が効率的であることがよくあります。 部分的反転パネライゼーション方法 今日は、PCB試作に特化した部分的反転パネライゼーション方法について詳しく見ていきましょう。基本的には、描画したPCBのTOP層をBOTTOM層に変換し、その逆も行ってパネライゼーションするものです。 全体的な手順は以下の通りです: 1. 新しいPCBファイルを作成し、完成したPCB設計を新しく作成したPCBファイルにコピーします。 2. 特殊貼り付けを実行します。 3. PCB基板全体をコピーし、選択して反転させ、時計回りに180度回転させます。 これらの手順を実行するには: 1. ファイル全体を選択します(ショートカット:S+A)......
PCB層数の決定
プリント基板(PCB)の設計を始めるとき、あなたが下すべき重要な決定の一つは、PCBの層数を決めることです。層数が異なれば、プロジェクト設計の結果に必ず影響を与えます。ここでは、その意味について説明し、PCB設計における銅層の数を決定するための簡単なガイドラインを提供します。 PCB層の理解 回路の複雑さを分析する: 回路の複雑さは、PCBの層数を決定する主要な要素です。多数の部品と複雑な配線要件を持つ複雑な回路では、必要なトレースと接続を収容するために追加の層が必要になる場合があります。 部品密度が高い回路は、通常、必要な配線を収容するためにより多くの層を必要とします。設計に複数の高速信号や敏感なアナログ信号が含まれる場合、追加の層は専用の電源プレーンとグラウンドプレーンを提供し、ノイズを低減することで信号整合性の向上に役立ちます。さらに、高速回路や敏感なアナログ信号を含む設計では、信号整合性に特別な注意が必要です。追加の層を利用して電源プレーンとグラウンドプレーンを分離し、ノイズを最小限に抑え、信号干渉やクロストークを低減することができます。 スペースの制約を考慮する: 設計をコンパクトな電子......
銅トレース設計のマスター
銅トレースは、PCB設計において電気信号の効率的な流れを確保する上で極めて重要な役割を果たします。あなたが電子工作愛好家、ホビイスト、エンジニア、学生、あるいはこの分野のプロフェッショナルであっても、銅トレース設計の原理と技術を理解することで、あなたのPCBプロジェクトを新たな高みへと引き上げることができます。本日は、JLCPCBが銅トレース設計の技術をマスターし、あなたのプロジェクトが最終的に最適な結果を達成できるようご案内します。 銅トレース設計の重要性: 銅トレースはあらゆるPCBの生命線であり、コンポーネント間で信号を伝達し、電子デバイスの機能を可能にします。適切に設計された銅トレースレイアウトは信号損失を最小限に抑え、電磁干渉(EMI)を低減し、信号整合性を向上させます。銅トレース設計をマスターすることで、PCBの全体的な性能と信頼性を高めることができます。 銅トレース設計における重要な考慮事項: a. トレース幅と間隔: 適切なトレース幅と間隔を決定することは、インピーダンス制御を維持し、信号劣化を防ぎ、電流容量要件に対応するために極めて重要です。トレース寸法を選択する際には、電流レベ......
PCB設計ルールのマスター:最適な結果を得るための包括的ガイド
PCB設計ルールは、プリント基板の機能性、信頼性、製造性を確保するための重要なガイドラインです。PCB設計ルールに従うことで、設計者は最適な性能を実現し、製造プロセス中および最終製品における潜在的な問題を最小限に抑えることができます。この包括的なガイドでは、PCB設計ルールの世界を深く掘り下げ、貴重な洞察、実践的なヒント、実例を提供し、成功するPCBレイアウトの作成を支援します。 I. PCB設計ルールの重要性を理解する 信号整合性と電磁両立性(EMC): 信号整合性を維持し、電磁干渉を防ぐために、設計者はプレーンとトレースの間隔、インピーダンス制御、グランド分離などの要素を考慮する必要があります。適切なトレース間隔はクロストークとノイズを低減し、コンポーネント間の明確な通信を確保するのに役立ちます。インピーダンス制御は高速設計において重要であり、PCBトレース全体にわたって信号整合性を維持します。 製造および組立プロセスの促進: 効果的なコンポーネント配置は、効率的な組立とテストに不可欠です。コンポーネントの配置と方向に関する設計ルールに従うことで、設計者はアクセシビリティ、製造の簡素化、将来の......
適切なUSBコネクタの選択:設計ガイドライン
エレクトロニクスの世界において、USBコネクタは接続性の基盤であり、無数のデバイス間でデータ転送と電力供給を可能にしています。さまざまなタイプと規格が存在するため、プロジェクトに適したUSBコネクタを選定するには慎重な検討が必要です。このブログでは、アプリケーションに最適なUSBコネクタを選択するための基本的な設計ガイドラインをご紹介します。最近のブログ記事からPCB製造の全工程 をご覧ください。 USBコネクタの種類を理解する: USBコネクタにはいくつかのタイプがあり、それぞれ特定のニーズに対応しています: 1. USB Type-A: これはオリジナルで最も認知されているUSBコネクタであり、長方形の形状が特徴です。ほとんどすべてのUSBケーブルの一端に使用されています。ノートパソコンやデスクトップには複数のUSB-Aポートがあります。残念ながら、両端がUSB-Aのケーブルは見つけるのが困難です。メス型USB-Aコネクタは標準的な「ホスト」コネクタです。延長ケーブルにはメス型とオス型の両方のAコネクタが利用可能です。 従来の長方形コネクタ。 コンピュータやキーボード、フラッシュドライブなどの......