matlab-manage-pcb-material

$npx mdskill add matlab/matlab-agentic-toolkit/matlab-manage-pcb-material

Manage dielectric substrates, metals, and stackups for RF PCB simulation.

  • User needs to define PCB material properties or create a multi-layer stackup.
  • Depends on RF PCB Toolbox dielectric() and metal() functions.
  • Selects named materials (FR4, Rogers) or guides custom property input.
  • Outputs MATLAB code to create dielectric or metal objects for simulation.

SKILL.md

.github/skills/matlab-manage-pcb-materialView on GitHub ↗
---
name: matlab-manage-pcb-material
description: "Dielectric substrates, metal conductors, multi-layer stackups, and loss models (FR4, Rogers, Teflon) for RF PCB simulation. TRIGGER: user asks to set up a substrate, define dielectric properties, create a stackup, select a PCB material (FR4, Rogers, Teflon, etc.), or configure metal conductors. Invoke BEFORE writing dielectric() or metal() code — the API for named vs custom materials differs significantly. SKIP: PCB layout assembly (use matlab-assemble-pcb-layout), transmission line design (use matlab-design-pcb-txline), EM analysis (use matlab-analyze-em), importing a PCB file (use matlab-read-pcb-layout)."
license: MathWorks BSD-3-Clause
metadata:
  author: MathWorks
  version: "1.0"
---

# Managing Materials for RF PCB Toolbox

## When to Use

- Creating dielectric substrates for transmission lines, filters, couplers, or custom pcbComponent designs
- Selecting metals (Copper, Gold, etc.) for realistic conductor loss modeling
- Building multi-layer dielectric stacks for stripline or embedded designs
- Choosing frequency-dependent dispersion models (DjordjevicSarkar) for wideband accuracy
- Looking up catalog material properties or adding custom materials

## When NOT to Use

- Building the PCB layer structure itself — use `matlab-assemble-pcb-layout`
- Running EM analysis after materials are defined — use `matlab-analyze-em`
- Designing transmission lines that happen to need substrates — use `matlab-design-pcb-txline` (it references this skill for material details)
- Importing material properties from an existing board file — use `matlab-read-pcb-layout`

## Typical Workflow

1. **This skill:** Define substrate, conductor, and stackup — typically the first step in any RF PCB design
2. **After:** Any design skill (`matlab-design-pcb-filter`, `matlab-design-pcb-txline`, `matlab-assemble-pcb-layout`, `matlab-model-via`) — pass materials to the component

## Quick Reference

| Task | Code |
|------|------|
| Catalog dielectric | `sub = dielectric("FR4")` |
| Custom dielectric | `sub = dielectric(Name="MyMat", EpsilonR=4.4, LossTangent=0.02, Thickness=1.6e-3)` |
| Multi-layer dielectric | `sub = dielectric("FR4","Teflon"); sub.Thickness = [0.8e-3 0.4e-3]` |
| Catalog metal | `cond = metal("Copper")` |
| Custom metal | `cond = metal(Name="MyMetal", Conductivity=5.8e7, Thickness=35e-6)` |
| Browse dielectrics | `DielectricCatalog` |
| Browse metals | `MetalCatalog` |
| Frequency-dependent | `sub = dielectric(..., Frequency=1e9)` |
| Get properties at freq | `[epsr, tand, f] = getMaterialProperties(sub, freqVector)` |

## Creating Dielectrics

The `dielectric` object defines substrate properties. Create from the built-in catalog or specify custom parameters.

### From Catalog

```matlab
sub = dielectric("FR4");
sub = dielectric("Teflon");
sub = dielectric("RO4730JXR");
sub = dielectric("TMM10");
```

To see every name in the catalog:

```matlab
dc = DielectricCatalog;
disp(dc.Materials)
```

Available catalog names (R2026a): Air, FR4, Teflon, Foam, Polystyrene, Plexiglas, Fused quartz, E glass, RO4725JXR, RO4730JXR, TMM3, TMM4, TMM6, TMM10, TMM10i, Taconic RF-35. Add custom materials with `add(dc, ...)` if your material is not listed.

### Custom Properties

```matlab
sub = dielectric(Name="Rogers4350B", EpsilonR=3.66, LossTangent=0.0037, Thickness=0.508e-3);
```

### Key Properties

| Property | Description | Units |
|----------|-------------|-------|
| `Name` | Material identifier | string |
| `EpsilonR` | Relative permittivity | dimensionless |
| `LossTangent` | Dielectric loss tangent (tan δ) | dimensionless |
| `Thickness` | Layer thickness | meters |
| `Frequency` | Reference frequency for loss tangent | Hz |
| `FrequencyModel` | `'Constant'`, `'DjordjevicSarkar'`, `'MeanDjordjevicSarkar'`, or `'TableDriven'` | — |

### Browsing the Catalog

```matlab
dc = DielectricCatalog;
open(dc)               % Opens interactive catalog viewer
disp(dc.Materials)     % List all materials as a table
s = find(dc, "FR4");   % Returns struct with Name, Relative_Permittivity, Loss_Tangent, Frequency, Comments
```

## Creating Metals

The `metal` object defines conductor properties.

### From Catalog

```matlab
cond = metal("Copper");       % Conductivity=5.96e7, Thickness=35.56e-6 (1 oz)
cond = metal("Aluminium");    % Conductivity=3.77e7, Thickness=762e-6
cond = metal("Gold");         % Conductivity=4.11e7, Thickness=0.2e-6
```

Available catalog metals (R2026a): PEC, Copper, Aluminium, Gold, Silver, Zinc, Tungsten, Lead, Iron, Steel, Brass.

### Custom Properties

```matlab
cond = metal(Name="ThickCopper", Conductivity=5.8e7, Thickness=70e-6);
```

### Browsing the Catalog

```matlab
mc = MetalCatalog;
open(mc)                    % Opens interactive catalog viewer
disp(mc.Materials)          % List all metals as a table
s = find(mc, "Aluminium");  % Returns struct with Name, Conductivity, Thickness, Units, Comments
```

### Assigning to Components

```matlab
mline = microstripLine;
mline.Conductor = metal("Copper");
```

## Multi-Layer Substrates

Many RF PCB components support multi-layer dielectric stacks. Pass multiple material names or use vector properties.

### Shorthand Syntax (catalog names)

```matlab
sub = dielectric("FR4", "Teflon");
sub.Thickness = [0.0016 0.0008];
```

### Explicit Multi-Layer

```matlab
sub = dielectric(Name={"FR4","Foam","FR4"}, ...
    EpsilonR=[4.4 1.05 4.4], ...
    LossTangent=[0.02 0.001 0.02], ...
    Thickness=[0.4e-3 0.8e-3 0.4e-3]);
```

**Important**: Use a cell array `{...}` for `Name`, not a string array `[...]`. String array concatenation (`["FR4","Foam"]`) produces a single string `"FR4Foam"`, not a multi-element array.

### Assigning to Components

```matlab
balun = balunMarchand;
balun.Height = 0.0016;
balun.Substrate = sub;
show(balun);
```

Multi-layer substrates are supported by all catalog components that have a `Substrate` or `Height` property (transmission lines, filters, couplers, splitters, etc.).

## Dielectrics in pcbComponent

When building custom structures with `pcbComponent`, dielectrics appear as layers in the `Layers` cell array:

```matlab
pcb = pcbComponent;
substrate = dielectric("RO4730JXR");
substrate.Thickness = 1.52e-3;
ground = traceRectangular(Length=20e-3, Width=10e-3);

pcb.BoardThickness = substrate.Thickness;
pcb.Layers = {signalTrace, substrate, ground};
```

For multi-dielectric pcbComponent stacks (5-layer):

```matlab
sub1 = dielectric(Name="FR4", EpsilonR=4.4, LossTangent=0.02, Thickness=0.8e-3);
sub2 = dielectric(Name="FR4", EpsilonR=4.4, LossTangent=0.02, Thickness=0.8e-3);

pcb.BoardThickness = sub1.Thickness + sub2.Thickness;
pcb.Layers = {topTrace, sub1, groundPlane, sub2, bottomTrace};
```

## Frequency-Dependent Loss Models

For accurate wideband modeling, specify a reference frequency for the loss tangent:

```matlab
sub = dielectric(Name="FR4", EpsilonR=4.4, LossTangent=0.02, ...
    Thickness=1.6e-3, Frequency=1e9);
```

When `Frequency` is specified, the `FrequencyModel` property automatically becomes `'DjordjevicSarkar'`. This causal model extrapolates permittivity and loss tangent across the analysis bandwidth, ensuring physically consistent results. Without `Frequency`, the model uses `'Constant'` (frequency-independent).

Available dispersion models:
- `"Constant"` -- (default) frequency-independent permittivity and loss tangent
- `"DjordjevicSarkar"` -- wideband causal model, best for PCB substrates
- `"MeanDjordjevicSarkar"` -- averaged version of DjordjevicSarkar
- `"TableDriven"` -- user-supplied frequency-dependent data from vendor datasheets

### Frequency Model Selection Guide

| Frequency Range | Recommended Model | Use Case |
|-----------------|-------------------|----------|
| DC -- 1 GHz | `Constant` (default) | Low-frequency, quick estimates |
| 1 -- 40 GHz | `DjordjevicSarkar` | Most RF PCB designs, FR4/Rogers |
| Broadband with vendor data | `TableDriven` | Import manufacturer permittivity vs. frequency curves |
| Wideband model fitting | `MeanDjordjevicSarkar` | Averaged causal model for broadband sweeps |

### Querying Dispersion-Aware Properties

Use `getMaterialProperties()` to calculate permittivity and loss tangent at specific frequencies, accounting for the active dispersion model:

```matlab
sub = dielectric("FR4");
sub.FrequencyModel = "DjordjevicSarkar";
sub.Frequency = 1e9;

% Get properties across a frequency sweep
freq = linspace(1e8, 10e9, 100);
[epsr, tand, f] = getMaterialProperties(sub, freq);

% Plot frequency-dependent permittivity
plot(f/1e9, epsr);
xlabel("Frequency (GHz)"); ylabel("\epsilon_r");
title("FR4 Permittivity (DjordjevicSarkar)");
```

## Common Material Parameters

### Dielectric Catalog Values (R2026a)

| Material | EpsilonR | LossTangent | Freq (Hz) | Notes |
|----------|----------|-------------|-----------|-------|
| FR4 | 4.8 | 0.026 | 1e8 | Standard PCB |
| Teflon | 2.1 | 0.0002 | 1e8 | Low-loss PTFE |
| Foam | 1.03 | 0.00015 | 5e7 | Air-like spacer |
| RO4725JXR | 2.55 | 0.0022 | 2.5e9 | Rogers, halogen-free |
| RO4730JXR | 3.0 | 0.0023 | 2.5e9 | Rogers, halogen-free |
| TMM10 | 9.8 | 0.0022 | 1e10 | Ceramic-filled PTFE |
| Taconic RF-35 | 3.5 | 0.0018 | 1.9e9 | Low-loss RF |

Materials **not in catalog** that must be created manually:

```matlab
sub = dielectric(Name="RO4003C", EpsilonR=3.38, LossTangent=0.0027, Thickness=0.508e-3);
sub = dielectric(Name="RO4350B", EpsilonR=3.66, LossTangent=0.0037, Thickness=0.508e-3);
```

### Metal Catalog Values (R2026a)

| Metal | Conductivity (S/m) | Catalog Thickness | Notes |
|-------|-------------------|-------------------|-------|
| PEC | Inf | 0 | Perfect conductor (default) |
| Copper | 5.96e7 | 35.56 μm (1.4 mil, 1 oz) | Most common |
| Aluminium | 3.77e7 | 762 μm (30 mil) | |
| Gold | 4.11e7 | 0.2 μm | Plating |
| Silver | 6.3e7 | 0.2 μm | Highest conductivity |

## Pitfalls

1. **Set BoardThickness before Layers**: `pcbComponent.BoardThickness` must equal the sum of all dielectric thicknesses. Always assign `BoardThickness` **before** `Layers` — reversing the order triggers a warning and silently overwrites dielectric thicknesses.

2. **Default conductor is PEC**: If you don't assign a `Conductor`, components use perfect electric conductor (lossless). Always assign `metal("Copper")` for realistic loss modeling.

3. **Most Rogers materials not in catalog**: Only RO4725JXR and RO4730JXR are in `DielectricCatalog`. Common substrates like RO4003C, RO4350B, and RO3003 must be created manually from datasheet values. Calling `dielectric("RO4003C")` will error.

4. **Multi-layer Thickness must match element count**: When using vector `Thickness`, the number of elements must equal the number of names/EpsilonR values. Mismatched lengths throw an error.

5. **Units are always SI**: Thickness in meters (not mm or mils). A 1.6 mm board is `1.6e-3`, not `1.6`.

6. **FrequencyModel can be set post-design.** After `design()` creates a component with a default constant dielectric, you can switch to DjordjevicSarkar: `obj.Substrate.FrequencyModel = 'DjordjevicSarkar'; obj.Substrate.Frequency = 1e9;`. This is useful when the design step doesn't accept frequency-dependent substrates.

7. **Named catalog dielectrics are single-layer**: `dielectric("FR4")` creates a 1-layer object with fixed catalog properties. For multi-layer pcbComponent stacks, create separate unnamed `dielectric` objects with explicit `EpsilonR`, `LossTangent`, and scalar `Thickness` for each layer. Do NOT use a named catalog entry when you need to control per-layer thickness in a `Layers` cell array.

8. **Dielectric layer count for `viaSingleEnded`**: When building a multi-layer substrate for `viaSingleEnded`, the number of dielectric layers must equal N-1 where N is the number of conductive layers in the stackup (e.g., Signal=[1 5], Ground=[3 7] → 4 metal layers → 3 dielectric layers). When using the `viaSingleEnded(N)` constructor, soldermask layers are added automatically — see `matlab-model-via` Pitfall #17 for exact requirements. All dielectric property arrays (`Name`, `EpsilonR`, `LossTangent`, `Thickness`, `Frequency`) must match in size.

## Related Skills

- `matlab-assemble-pcb-layout` — Using materials in custom pcbComponent structures
- `matlab-analyze-em` — How material properties affect solver accuracy
- `matlab-design-pcb-txline` — Substrate selection for impedance control

----

Copyright 2026 The MathWorks, Inc.

More from matlab/matlab-agentic-toolkit

SkillDescription
matlab-access-datafeed>
matlab-add-awgnRead BEFORE writing any code that adds Additive White Gaussian Noise (AWGN) to signals and converts between SNR, Eb/No, Es/No, and per-subcarrier SNR for communications simulations, using awgn(), convertSNR(), berawgn(). The default MATLAB patterns for AWGN (e.g., 'measured' option, manual SNR formulas) produce subtly incorrect results. This skill specifies the correct calling conventions, required function usage, and critical anti-patterns that must be avoided.
matlab-analyze-ams-waveformAnalyze AMS waveform data using Mixed-Signal Blockset utilities: phase noise measurement, clock jitter, anti-aliased resampling, timing measurements, lock time, INL/DNL, ADC/DAC calibration, HSpice import. Use when analyzing time-domain voltage from PLL/VCO/clock simulations, measuring phase noise from variable-step solver output, computing jitter, or resampling non-uniform data.
matlab-analyze-dataAnalyze data using MATLAB. Use when the task involves tables, timetables, time-series data, numeric arrays, sensor matrices, or gridded data — including but not limited to exploring, filtering, sorting, cleaning, transforming, aggregating, smoothing, padding, trimming, and answering questions about data. MATLAB provides extensive, easy-to-use built-in functions for these workflows with no additional products required.
matlab-analyze-dependenciesAnalyze the effective toolbox file set to produce a Dependency Manifest — classify all transitive dependencies as included, product, add-on, or external-unresolved, then present resolution options with tradeoffs. Use after matlab-define-toolbox-api when the spec is approved.
matlab-analyze-emS-parameters, insertion loss, fields, currents, mesh control, and solver selection for RF PCB performance validation. TRIGGER: user asks to compute S-parameters, analyze insertion/return loss, extract fields or currents, compare MoM vs FEM, or control mesh for any RF PCB component. Invoke BEFORE writing sparameters() or solver code — API is non-obvious. SKIP: designing or creating components (use the specific matlab-design-pcb-* skill), material/stackup setup only (use matlab-manage-pcb-material), optimization sweeps (use matlab-optimize-pcb-design), PDN/IR-drop analysis (use matlab-analyze-pcb-pdn).
matlab-analyze-installed-antennaAnalyze antennas installed on electrically large conducting platforms using MATLAB Antenna Toolbox. Loads platform geometry from STL/STEP/IGES, installs antenna elements, selects electromagnetic solvers (MoM-PO, FMM, MoM), and computes patterns, impedance, coupling, and efficiency. Use when the user wants to model an antenna on a vehicle, aircraft, ship, satellite, or other large structure.
matlab-analyze-pcb-pdnPDN DC voltage/current analysis, IR drop, design rule checking, and multi-net batch analysis on imported PCB layouts. TRIGGER: user asks about power integrity, PDN analysis, IR drop, voltage distribution, current density, power nets, or design rule checking on a PCB. Invoke BEFORE writing code — the PDN API chain is specialized and non-obvious. SKIP: importing a PCB file (use matlab-read-pcb-layout), EM field/S-parameter extraction (use matlab-analyze-em), material/stackup setup only (use matlab-manage-pcb-material), transmission line design (use matlab-design-pcb-txline).
matlab-analyze-rcsCalculate and visualize monostatic and bistatic radar cross section (RCS) using MATLAB Antenna Toolbox. Computes RCS of platforms, antennas, and arrays with PO, MoM, and FMM solvers, supporting HH/VV/HV/VH polarization, GPU acceleration, and near-field observation. Use when the user wants to compute, plot, or analyze radar cross section.
matlab-analyze-rf-propagationAnalyze RF propagation and plan wireless sites using MATLAB Antenna Toolbox. Creates transmitter/receiver sites, computes signal strength, coverage maps, SINR, line-of-sight, and ray tracing in geographic or indoor environments. Supports multiple propagation models (free-space, close-in, Longley-Rice, ray tracing, rain/gas/fog), custom terrain, building data, and directional antennas. Use when the user wants to compute coverage, signal strength, path loss, SINR, ray tracing, or plan a wireless network.