matlab-assemble-pcb-layout について
`pcbComponent`、形状プリミティブ、給電定義を使ってカスタム多層 PCB 構造を組み立てる MATLAB スキルです。標準カタログ部品では扱えない形状や給電方式を必要とする RF レイアウト向けです。
主な機能
- 01カスタム多層 PCB スタックアップ
- 02形状プリミティブとブール演算
- 03給電とビアの配置
- 04欠陥接地構造パターンの作成
- 053D とレイアウトの可視化
活用シーン
- 01カスタムストリップライン構造の構築
- 02グラウンド層へのパターン形成
- 03カスタム RF 形状へのポート追加
- 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を使用してください
一般的なワークフロー
- 事前:
matlab-manage-pcb-material— 基板と導体を設定します - このスキル: pcbComponent、形状、フィードを使ってカスタム PCB 構造を構築します
- 事後:
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) | 誘電体の厚さの合計と一致する必要があります |
FeedLocations | N×4 行列 | ポートごとの [x, y, signalLayer, groundLayer] |
FeedDiameter | スカラー(m) | フィードビア/プローブの直径 |
ViaLocations | M×4 行列 | ビアごとの [x, y, topLayer, bottomLayer] |
ViaDiameter | スカラー(m) | ビアバレルの直径 |
FeedViaModel | 文字列 | 'strip'、'square'、'octagon'、'hexagon' |
Conductor | metal オブジェクト | すべての金属層に使用する導体 |
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 を参照してください。
注意点
-
金属の外側に給電点を配置しない:給電位置で給電円(
FeedDiameter)が金属トレース内に完全に収まる必要があります。トレースの端から少なくともFeedDiameter/2内側に配置してください。これを守らないと、ソルバーエラーが発生します。 -
BoardThickness の不一致 — Layers より先に設定する:
BoardThicknessは、Layers内のすべての誘電体層の厚さの合計と完全に一致している必要があります。Layersのセッターは現在のBoardThicknessに対して検証を行うため、合計が既定値(1.6 mm)と異なる場合は、Layersより先にBoardThicknessを設定してください。既定値以外の合計になるようにLayersを先に設定すると、エラーが発生します。 -
レイヤーのインデックス:
Layersセル配列では、金属レイヤーのインデックスは奇数(1、3、5、...)、誘電体レイヤーのインデックスは偶数(2、4、...)です。FeedLocationsが参照するのは金属レイヤーのインデックスのみです。 -
ブール演算の順序:減算は順序に依存します(
A - B ≠ B - A)。最初のオペランドがベースとなり、2 番目のオペランドがそこから取り除かれます。 -
和集合での形状の重なり:
+で連結されたジオメトリを作るには、形状同士が重なるか、接している必要があります。離れた形状は複数ボディの構造となり、ソルバーが正しく処理できない場合があります。 -
ストリップラインでの FeedViaModel:5 層(ストリップライン)の構造では、
FeedViaModelを設定して、内部信号レイヤーと外部のポート基準を接続する給電ビアの形状を指定します。 -
Corner プロパティは整数値:
Cornerは整数で設定してください。1 = Miter、2 = Smooth(既定値は Sharp)です。"Miter"のような文字列を指定すると、エラーが発生します。 -
DGS:戻り値を取得し、セル配列を使用する:
dgsはオブジェクトをその場で変更しないため、出力を取得する必要があります:ms = dgs(ms, {dgsShape})。また、形状は単体ではなくセル配列で渡してください:dgsShapeではなく{dgsShape}を使用します。 -
IsShielded を設定すると FEM に自動で切り替わる:
pcb.IsShielded = trueを設定すると、SolverTypeは自動的に'FEM'に変更されます。これは想定された動作ですが、解析時間が大幅に長くなります。 -
z 軸回転には rotate ではなく rotateZ を使用する:
rotate(shape, angle)には 4 つの引数(角度と、回転軸を定義する 2 つの 3D 点)が必要です。単純な z 軸回転にはrotateZ(shape, angle)を使用してください。他の軸には同様にrotateXとrotateYを使用します。 -
FeedFormat は排他的です。
FeedFormat = 'FeedDefinitions'を設定すると、FeedLocationsは無効になります。両方のモードを併用することはできないため、どちらか一方を選択してください。 -
**複数のグラウンドでは GroundLayers を列ベクトルにする。**両側にグラウンドがあるストリップライン構造では、
GroundLayersを[1, 5]ではなく、列ベクトル[1; 5]で渡してください。 -
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.