mcpField
M
matlab-assemble-pcb-layout

matlab-assemble-pcb-layout

github.com/matlab其他1.2k77 次安装1 天前更新
代码仓库

关于 matlab-assemble-pcb-layout

面向 MATLAB 的技能,使用 `pcbComponent`、形状基元和馈电定义组装自定义多层 PCB 结构。适用于需要标准目录组件以外几何形状或馈电方式的 RF 布局。

主要功能

  1. 01自定义多层 PCB 堆叠
  2. 02形状基元与布尔运算
  3. 03馈电和过孔放置
  4. 04创建缺陷地结构图案
  5. 05三维与布局可视化

适用场景

  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

快速参考

任务代码
创建 pcbComponentpcb = 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 元素向量 [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 层 = 第一层金属(顶层),第 3 层 = 第二层金属,依此类推。
% 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
内部端口(用于集总元件)

为集总元件的内部连接定义额外的馈电位置(有关带有 PortNumber/PortValue 的 pcbElement,请参阅 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 setter 会根据当前 BoardThickness 进行验证,因此,当总厚度与默认值(1.6 mm)不同时,请先设置 BoardThickness,再设置 Layers。若先设置 Layers,且总厚度不是默认值,则会报错。

  3. 层索引:在 Layers 单元格数组中,金属层的索引为奇数(1、3、5……),介质层的索引为偶数(2、4……)。FeedLocations 仅引用金属层索引。

  4. 布尔运算顺序:减法与运算顺序有关(A - B ≠ B - A)。第一个操作数定义基体,第二个操作数会从基体中移除。

  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 轴旋转请使用 rotateZ,而不是 rotate:rotate(shape, angle) 需要 4 个参数(角度和定义旋转轴的两个 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 — 将多个 pcbComponent 连接起来

Copyright 2026 The MathWorks, Inc.

评论

支持 Markdown