mcpField
M
matlab-assemble-pcb-layout

matlab-assemble-pcb-layout

github.com/matlabその他1.2k77 回インストール1 日前に更新
リポジトリ

matlab-assemble-pcb-layout について

`pcbComponent`、形状プリミティブ、給電定義を使ってカスタム多層 PCB 構造を組み立てる MATLAB スキルです。標準カタログ部品では扱えない形状や給電方式を必要とする RF レイアウト向けです。

主な機能

  1. 01カスタム多層 PCB スタックアップ
  2. 02形状プリミティブとブール演算
  3. 03給電とビアの配置
  4. 04欠陥接地構造パターンの作成
  5. 053D とレイアウトの可視化

活用シーン

  1. 01カスタムストリップライン構造の構築
  2. 02グラウンド層へのパターン形成
  3. 03カスタム RF 形状へのポート追加
  4. 04電磁界解析用レイアウトの準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-assemble-pcb-layout

インストール後、Claude Code で/matlab-assemble-pcb-layoutを入力して読み込まれたか確認します。

同梱ファイルmanifest.yamlreferences/shape-primitives.md

詳細

カスタム PCB コンポーネントの組み立て

使用する場合

  • カタログオブジェクト(microstripLine、coupledMicrostripLine など)では対応できないカスタム PCB 構造を構築する場合
  • 各層にカスタム金属形状を配置した多層スタックアップを構成する場合
  • 形状プリミティブをブール演算(和、差、積)で組み合わせる場合
  • グラウンドプレーンにパターンをエッチングして欠陥グラウンド構造(DGS)を作成する場合
  • フィードポートやビアを配置する場合、または高度な FeedDefinitions(同軸、エッジ、デルタギャップ)を使用する場合
  • ストリップラインまたはシールド付き筐体構造を組み立てる場合

使用しない場合

  • 標準的な伝送線路を設計する場合 — matlab-design-pcb-transmission-line を使用してください
  • Gerber、ODB++、Allegro からレイアウトをインポートする場合 — matlab-read-pcb-layout を使用してください
  • 誘電体または金属材料を定義する場合 — matlab-manage-pcb-material を使用してください
  • 組み立て後に EM 解析を実行する場合 — matlab-analyze-em を使用してください
  • 複数の pcbComponents をカスケード接続または接続する場合 — matlab-integrate-pcb-circuit を使用してください

一般的なワークフロー

  1. 事前: matlab-manage-pcb-material — 基板と導体を設定します
  2. このスキル: pcbComponent、形状、フィードを使ってカスタム PCB 構造を構築します
  3. 事後: matlab-analyze-em — S パラメーターを検証 → matlab-optimize-pcb-design — 寸法を調整 → matlab-write-pcb-layout — Gerber をエクスポート

クイックリファレンス

タスクコード
pcbComponent を作成pcb = pcbComponent
層を割り当てpcb.Layers = {signal, substrate, ground}
基板形状を設定pcb.BoardShape = ground
厚さを設定pcb.BoardThickness = 1.6e-3
フィードを配置pcb.FeedLocations = [x1 y1 1 3; x2 y2 1 3]
フィード径pcb.FeedDiameter = W/2
導体を設定pcb.Conductor = metal("Copper")
ビアを追加pcb.ViaLocations = [x y topLayer botLayer]
可視化show(pcb)
レイアウト表示layout(pcb)
ブール和shape = s1 + s2
ブール差shape = s1 - s2
ブール積shape = s1 & s2

pcbComponent の構造

pcbComponent は、カスタム RF PCB 構造用の汎用コンテナーです。

最小構成の 2 層マイクロストリップ
pcb = pcbComponent;
substrate = dielectric("FR4");
substrate.Thickness = 1.6e-3;

signal = traceRectangular(Length=20e-3, Width=3e-3);
ground = traceRectangular(Length=30e-3, Width=20e-3);

pcb.Layers = {signal, substrate, ground};
pcb.BoardShape = ground;
pcb.BoardThickness = substrate.Thickness;
pcb.Conductor = metal("Copper");
pcb.FeedDiameter = 1.5e-3;
pcb.FeedLocations = [-10e-3 0 1 3; 10e-3 0 1 3];
show(pcb);
5 層ストリップライン構造
pcb = pcbComponent;
sub = dielectric(Name="FR4", EpsilonR=4.4, LossTangent=0.02, Thickness=0.8e-3);

topGnd = traceRectangular(Length=40e-3, Width=20e-3);
signal = traceRectangular(Length=30e-3, Width=2e-3);
botGnd = traceRectangular(Length=40e-3, Width=20e-3);

pcb.BoardThickness = 2 * sub.Thickness;          % Set BEFORE Layers
pcb.Layers = {topGnd, sub, signal, sub, botGnd};
pcb.BoardShape = topGnd;
pcb.Conductor = metal("Copper");
pcb.FeedLocations = [-15e-3 0 3 1; 15e-3 0 3 5];
pcb.FeedDiameter = 1e-3;
show(pcb);
主なプロパティ
プロパティ形式説明
Layersセル配列金属形状、誘電体、金属形状、... の順に交互に指定します
BoardShape形状オブジェクトPCB の外周境界
BoardThicknessスカラー(m)誘電体の厚さの合計と一致する必要があります
FeedLocationsN×4 行列ポートごとの [x, y, signalLayer, groundLayer]
FeedDiameterスカラー(m)フィードビア/プローブの直径
ViaLocationsM×4 行列ビアごとの [x, y, topLayer, bottomLayer]
ViaDiameterスカラー(m)ビアバレルの直径
FeedViaModel文字列'strip'、'square'、'octagon'、'hexagon'
Conductormetal オブジェクトすべての金属層に使用する導体
SolverType文字列'MoM' または 'FEM'

形状プリミティブ

長方形のトレース
rect = traceRectangular(Length=20e-3, Width=5e-3, Center=[0 0]);
ライントレース(曲げを含む複数セグメント)
tl = traceLine;
tl.Length = [10 5*sqrt(2) 10]*1e-3;
tl.Angle = [0 45 0];
tl.Width = 3e-3;
tl.Corner = 1;          % 1 = Miter, 2 = Smooth (default: Sharp)
show(tl);
点で定義するトレース
tp = tracePoint;
tp.TracePoints = [0 0; 10e-3 0; 15e-3 5e-3; 25e-3 5e-3];
tp.Width = 2e-3;
tp.Corner = 2;          % 2 = Smooth
スパイラルトレース
sp = traceSpiral;
sp.NumTurns = 3;
sp.InnerDiameter = 4e-3;
sp.Spacing = 0.5e-3;
sp.TraceWidth = 0.5e-3;
show(sp);
テーパートレース
tt = traceTapered;
tt.Length = 10e-3;
tt.InputWidth = 1e-3;
tt.OutputWidth = 3e-3;
ベンド

ベンドの Width は、2 本のアームを表す 2 要素ベクトル [w1 w2] です。

bc = bendCurved;
bc.Width = [2e-3 2e-3];
bc.CurveRadius = 5e-3;

bm = bendMitered;
bm.Width = [2e-3 2e-3];

br = bendRightAngle;
br.Width = [2e-3 2e-3];
U ベンド

U ベンドの Width は、3 要素ベクトル [arm1 bottom arm2] です。

uc = ubendCurved;
uc.Width = [2e-3 2e-3 2e-3];
uc.CurveRadius = 3e-3;

um = ubendMitered;
um.Width = [2e-3 2e-3 2e-3];
その他の形状
d = delta;
d.OuterRadius = 5e-3;                           % Triangle/delta

db = dumbbell;
db.SideLength = 6e-3;                           % Head size (square Type, default)
db.ArmLength = 10e-3;
db.ArmWidth = 0.5e-3;                           % Dumbbell (for DGS)
% Note: Type='Square' uses SideLength; Type='Circle' uses Diameter

rt = racetrack;
rt.Length = 15e-3;
rt.Width = 5e-3;                                % Racetrack

rd = radial;
rd.OuterRadius = 5e-3;
rd.Angle = 60;                                  % Radial sector

ar = ringAnnular;
ar.InnerRadius = 1e-3;
ar.Width = 4e-3;                                % Annular ring (InnerRadius must be > 0)

sr = splitRing;
sr.RingDiameter = 10e-3;
sr.TraceWidth = 0.5e-3;
sr.SplitGap = 0.5e-3;                           % Split ring resonator

ブール演算

演算子を使って形状を組み合わせ、複雑なジオメトリを構築します。

和(+)
left = traceRectangular(Length=10e-3, Width=5e-3, Center=[-5e-3 0]);
right = traceRectangular(Length=10e-3, Width=5e-3, Center=[5e-3 0]);
combined = left + right;
show(combined);
差(-)

スロット、ギャップ、またはエッチングパターンを作成します。

base = traceRectangular(Length=20e-3, Width=10e-3);
slot = traceRectangular(Length=15e-3, Width=1e-3);
slotted = base - slot;
show(slotted);
積(&)
ring = ringAnnular;
ring.InnerRadius = 1e-3;
ring.Width = 9e-3;
rect = traceRectangular(Length=15e-3, Width=15e-3);
clipped = ring & rect;
複雑な例:U-CSRR フィルター
% Create feeding microstrip
ZA = traceRectangular(Length=4e-3, Width=4e-3, Center=[-7e-3 0]);
Cell = traceRectangular(Length=5e-3, Width=5e-3, Center=[-2.5e-3 0]);
LeftSection = ZA + Cell;

% Create slots using traceLine
s1 = traceLine(StartPoint=[-2.5e-3-0.1e-3, -1.9e-3], ...
    Angle=[-180 -270 0], Length=[1.75e-3 3.8e-3 1.75e-3], Width=0.2e-3);
s2 = traceLine(StartPoint=[-2.5e-3+0.1e-3, -1.9e-3], ...
    Angle=[0 90 180], Length=[1.75e-3 3.8e-3 1.75e-3], Width=0.2e-3);

% Subtract slots from base
LeftSection = LeftSection - s1 - s2;

% Mirror for right section
RightSection = copy(LeftSection);
RightSection = mirrorY(RightSection);

% Complete filter
filter = LeftSection + RightSection;
show(filter);

フィードの配置

FeedLocations の形式

各行:[x, y, signalLayerIndex, groundLayerIndex]

  • 層インデックスは、Layers セル配列内の金属層に対応する奇数(1、3、5、...)です
  • 層 1 = 1 番目の金属層(最上層)、層 3 = 2 番目の金属層、など
% 2-port microstrip (signal on layer 1, ground on layer 3)
pcb.FeedLocations = [-10e-3 0 1 3;    % Port 1: left edge
                      10e-3 0 1 3];    % Port 2: right edge
4 ポート結合トレース
pcb.FeedLocations = [0 0 1 3;         % Port 1
                     40e-3 0 1 3;      % Port 2
                     40e-3 -5e-3 1 3;  % Port 3
                     0 -5e-3 1 3];     % Port 4
フィード径
pcb.FeedDiameter = traceWidth / 2;  % Must fit within the trace
内部ポート(集中定数素子用)

集中定数部品への内部接続用に、追加の給電位置を定義します(pcbElement の PortNumber/PortValue については matlab-integrate-pcb-circuit スキルを参照してください)。

DGS — 欠陥接地構造

dgs メソッドを使用して、グランドプレーンにパターンをエッチングします。

ms = microstripLine;
ms.Length = 20e-3;
ms.Width = 3e-3;

% Create a dumbbell DGS under the trace
dgsShape = dumbbell;
dgsShape.SideLength = 4e-3;       % Head size (default Type='Square')
dgsShape.ArmLength = 8e-3;
dgsShape.ArmWidth = 0.5e-3;
ms = dgs(ms, {dgsShape});   % Must capture return value — does not modify in place
show(ms);
memoryEstimate(ms, 10e9, 'RetainMesh', true);  % Check mesh before solving
sp = sparameters(ms, linspace(1e9, 10e9, 51), 'SweepOption', 'interp');
rfplot(sp);

DGS はバンドストップ特性を付加し、カプラーの指向性やフィルターの阻止特性を向上させることができます。

シールド付きエンクロージャー

シールド解析用に導電性の蓋を追加します。

pcb = pcbComponent;
% ... set up layers ...
pcb.IsShielded = true;   % Adds PEC enclosure walls and lid
show(pcb);

エンクロージャー内のフィルターを扱う問題では、シールドが共振周波数と結合に影響します。

形状の操作

shape = translate(shape, [dx, dy, 0]);  % Translate
shape = rotateZ(shape, angle);          % Rotate about z-axis (degrees)
shape = rotateX(shape, angle);          % Rotate about x-axis
shape = mirrorX(shape);                 % Mirror about x-axis
shape = mirrorY(shape);                 % Mirror about y-axis
shapeCopy = copy(shape);                % Deep copy
shape = scale(shape, factor);           % Uniform scaling
a = area(shape);                        % Shape area (m²)

カタログオブジェクトの場合、shapes() を使ってレイヤーごとに形状を抽出します。

s = shapes(obj);              % Struct of shapes by layer name
boardArea = area(s.GroundPlane);

pcbComponent の場合、形状は Layers と BoardShape に含まれます。

boardArea = area(pcb.BoardShape);

利用可能なメソッドの確認

methods(obj) を使うと、任意のオブジェクトで利用可能なすべての操作を一覧表示できます。

methods(pcb)                  % List all pcbComponent methods
methods(traceRectangular)     % List all shape methods

可視化

show(pcb);          % 3-D structure view
layout(pcb);        % Top-down layout with feeds and vias
mesh(pcb);          % Mesh visualization
info(pcb);          % Print structure summary

高度な給電設定(FeedDefinitions API)

デフォルトでは、pcbComponent はシンプルなプローブ給電に FeedLocations(XY 座標とレイヤー)を使用します。同軸、エッジ、デルタギャップ、有限ギャップなどの高度な給電タイプを使用するには、FeedDefinitions API に切り替えます。

pcb = pcbComponent;
pcb.FeedFormat = 'FeedDefinitions';     % Enable FeedDefinitions mode
給電タイプ
給電タイプ使用する場合主なプロパティ
ProbeFeed垂直ビアプローブ(パッチアンテナ)SignalLocations、SignalLayers、GroundLayers、ViaDiameter、ViaModel
CoaxialFeed明示的なパッド/アンチパッド形状を指定したプローブPadShape、AntipadShape、SignalLayers、GroundLayers
EdgeFeedストリップライン形式のエッジ励振SignalLocations、SignalLayers、GroundLayers、SignalWidths
DeltaGapFeed電流方向を指定する内部ポートSignalLocations、SignalLayers、SignalWidths、CurrentDirection
FiniteGapFeed内部ギャップポート(信号とグランド)SignalLocations、GroundLocations、SignalLayers、SignalWidths
ArbitraryFiniteGapFeed完全に制御できるコプレーナポートSignalLocations、GroundLocations、SignalWidths、GroundWidths、SignalLayers、GroundLayers
ProbeFeed(最も一般的)
f = ProbeFeed('SignalLocations', [-0.0187, 0], ...
    'SignalLayers', 1, 'GroundLayers', 3, ...
    'ViaDiameter', 1e-3, 'ViaModel', 'square');
pcb.FeedDefinitions = f;
EdgeFeed(ストリップライン構造)

レイヤー 3 に信号、レイヤー 1 と 5 にグランドがある 5 層ストリップライン構造の場合:

f1 = EdgeFeed('SignalLocations', feed1_xy, 'SignalLayers', 3, ...
    'GroundLayers', [1; 5], 'SignalWidths', trace_width);
f2 = EdgeFeed('SignalLocations', feed2_xy, 'SignalLayers', 3, ...
    'GroundLayers', [1; 5], 'SignalWidths', trace_width);
pcb.FeedDefinitions = [f1, f2];
CoaxialFeed(カスタムのパッド/アンチパッド形状)
pad = antenna.Circle('Radius', 0.5e-3);
antipad = antenna.Circle('Radius', 1e-3);
f = CoaxialFeed('PadShape', pad, 'AntipadShape', antipad, ...
    'SignalLayers', 1, 'GroundLayers', 3);
pcb.FeedDefinitions = f;
DeltaGapFeed(内部ポート)
f = DeltaGapFeed('SignalLocations', [x, y], 'SignalLayers', 1, ...
    'SignalWidths', 0.5e-3, 'CurrentDirection', [0, 1]);
pcb.FeedDefinitions(end+1) = f;     % Append to existing feeds
複数の給電

連結または追加によって給電アレイを作成します。

pcb.FeedDefinitions = [f1, f2];          % Row array at once
pcb.FeedDefinitions(end+1) = f3;         % Append incrementally

形状プリミティブのリファレンス

プロパティと一般的な操作を含む、すべての形状プリミティブ(トレース、ベンド、曲線、リング、特殊形状)の完全な一覧については、references/shape-primitives.md を参照してください。

注意点

  1. 金属の外側に給電点を配置しない:給電位置で給電円(FeedDiameter)が金属トレース内に完全に収まる必要があります。トレースの端から少なくとも FeedDiameter/2 内側に配置してください。これを守らないと、ソルバーエラーが発生します。

  2. BoardThickness の不一致 — Layers より先に設定する:BoardThickness は、Layers 内のすべての誘電体層の厚さの合計と完全に一致している必要があります。Layers のセッターは現在の BoardThickness に対して検証を行うため、合計が既定値(1.6 mm)と異なる場合は、Layers より先に BoardThickness を設定してください。既定値以外の合計になるように Layers を先に設定すると、エラーが発生します。

  3. レイヤーのインデックス:Layers セル配列では、金属レイヤーのインデックスは奇数(1、3、5、...)、誘電体レイヤーのインデックスは偶数(2、4、...)です。FeedLocations が参照するのは金属レイヤーのインデックスのみです。

  4. ブール演算の順序:減算は順序に依存します(A - B ≠ B - A)。最初のオペランドがベースとなり、2 番目のオペランドがそこから取り除かれます。

  5. 和集合での形状の重なり:+ で連結されたジオメトリを作るには、形状同士が重なるか、接している必要があります。離れた形状は複数ボディの構造となり、ソルバーが正しく処理できない場合があります。

  6. ストリップラインでの FeedViaModel:5 層(ストリップライン)の構造では、FeedViaModel を設定して、内部信号レイヤーと外部のポート基準を接続する給電ビアの形状を指定します。

  7. Corner プロパティは整数値:Corner は整数で設定してください。1 = Miter、2 = Smooth(既定値は Sharp)です。"Miter" のような文字列を指定すると、エラーが発生します。

  8. DGS:戻り値を取得し、セル配列を使用する:dgs はオブジェクトをその場で変更しないため、出力を取得する必要があります:ms = dgs(ms, {dgsShape})。また、形状は単体ではなくセル配列で渡してください:dgsShape ではなく {dgsShape} を使用します。

  9. IsShielded を設定すると FEM に自動で切り替わる:pcb.IsShielded = true を設定すると、SolverType は自動的に 'FEM' に変更されます。これは想定された動作ですが、解析時間が大幅に長くなります。

  10. z 軸回転には rotate ではなく rotateZ を使用する:rotate(shape, angle) には 4 つの引数(角度と、回転軸を定義する 2 つの 3D 点)が必要です。単純な z 軸回転には rotateZ(shape, angle) を使用してください。他の軸には同様に rotateX と rotateY を使用します。

  11. FeedFormat は排他的です。FeedFormat = 'FeedDefinitions' を設定すると、FeedLocations は無効になります。両方のモードを併用することはできないため、どちらか一方を選択してください。

  12. **複数のグラウンドでは GroundLayers を列ベクトルにする。**両側にグラウンドがあるストリップライン構造では、GroundLayers を [1, 5] ではなく、列ベクトル [1; 5] で渡してください。

  13. Layers 内の各誘電体は単層オブジェクトにする必要があります:複数層の dielectric(Thickness/EpsilonR がベクトルのもの)を、Layers セル配列の単一エントリとして使用しないでください。各誘電体層には、スカラーのプロパティを持つ独立した dielectric オブジェクトが必要です。5 層スタックの場合:pcb.Layers = {metal1, diel1, metal2, diel2, metal3} のように指定し、各 diel の Thickness はスカラーにします。

関連スキル

  • matlab-manage-pcb-material — レイヤーの誘電体と金属の定義
  • matlab-analyze-em — 組み立てた構造の解析
  • matlab-design-pcb-filter — カスタム pcbComponent ジオメトリを使用したフィルター
  • matlab-integrate-pcb-circuit — pcbComponents 同士の接続

Copyright 2026 The MathWorks, Inc.

コメント