Magnetics · Appendix A — Area product by magnetic kind (draft)

Draft appendix to the magnetics lesson, which the 2025 lectures V8 (inductor design) and V9 (transformer design) cover until the 2026 lesson is written. Numbers come from scripts/area_product_bias.py and are recorded in area-product-checks.json.

V8 sizes an inductor from the stored energy and the window. V9 sizes a transformer by iteration, from the balance of copper loss and core loss. Both methods give an area product Ap=WaAeA_p = W_aA_e. This appendix shows why one flux density cannot serve both.

A size proxy that uses one flux density for every magnetic gives a biased result. It sizes DC-dominated chokes well, but it makes AC-flux magnetics far too small. An audit of six built components showed this pattern. The DC chokes landed within −30 % to +42 % of the real area product. The AC-flux magnetics (an ICT, an ICMCI and a DAB transformer) came out 64 % to 74 % too small.

This appendix explains the cause and gives the fix. Saturation limits the flux in a choke. Core loss limits the flux in an AC-flux magnetic. The two kinds therefore need two sizing methods: the core-geometry constant KgK_g for chokes, and KgfeK_{gfe} for AC-flux parts.

A.1 What the area product says

A magnetic must satisfy two conditions at the same time. The core must carry the flux without exceeding a flux density limit B^\hat B. The window must hold the copper at a current density JJ.

The peak flux linkage per turn λ^\hat\lambda sets the core area. The sum of winding ampere-turns, divided by the turns of one reference winding, sets the copper area:

Ae≥λ^NB^,KuWaJ≥NItot.A_e \ge \frac{\hat\lambda}{N\hat B},\qquad K_uW_aJ \ge N I_{\mathrm{tot}}.

Here AeA_e is the effective core area, WaW_a the window area, KuK_u the fraction of the window that holds copper, and Itot=∑j(Nj/N)Ij,rmsI_{\mathrm{tot}}=\sum_j (N_j/N)I_{j,\mathrm{rms}}. Multiply the two conditions and the turns count NN cancels:

Ap=WaAe≥λ^ ItotKu J B^.A_p = W_aA_e \ge \frac{\hat\lambda\, I_{\mathrm{tot}}}{K_u\,J\,\hat B}.

This one equation covers both kinds. For a choke, λ^=LI^\hat\lambda = L\hat I and Itot=IrmsI_{\mathrm{tot}}=I_{\mathrm{rms}}, so Ap=LI^Irms/(KuJB^)A_p = L\hat I I_{\mathrm{rms}}/(K_uJ\hat B). For a transformer with a square-wave voltage VV at frequency ff, λ^=V/(4f)\hat\lambda = V/(4f). The result is the familiar Ap=Pt/(4KuJB^f)A_p = P_t/(4K_uJ\hat Bf), with the apparent power Pt=∑VjIjP_t=\sum V_jI_j.

The equation is exact for a full window. If a design fills its window, the equality holds with the real KuK_u, JJ and B^\hat B of that design. A proxy that inserts fixed values Ku0K_{u0}, J0J_0 and B0B_0 is therefore wrong by exactly

Ap,proxyAp,real=B^B0⋅JJ0⋅KuKu0.\frac{A_{p,\mathrm{proxy}}}{A_{p,\mathrm{real}}} = \frac{\hat B}{B_0}\cdot\frac{J}{J_0}\cdot\frac{K_u}{K_{u0}}.

The bias has no other source. To explain it, find which of the three factors moves, and why.

A.2 Which limit sets the flux density

In a DC choke, the DC current sets most of the flux. The ripple adds only a small AC swing. In the buck choke of section A.5, the peak flux density is 300 mT but the AC amplitude is only 27 mT. Core loss is small, so saturation sets B^\hat B. The design value is about 0.8Bsat0.8B_{\mathrm{sat}}.

In an AC-flux magnetic, all of the flux alternates. The core loss per volume follows the Steinmetz equation:

Pv=k fαB^β.P_v = k\,f^{\alpha}\hat B^{\beta}.

The Ferroxcube 3C90 datasheet gives three loss points at 100 °C:

ff / kHz B^\hat B / mT PvP_v / (kW/m³)
25 200 80
100 100 80
100 200 450

Two pairs of points give the exponents directly, without a curve fit:

β=ln⁡(450/80)ln⁡2=2.49,α=ln⁡(450/80)ln⁡4=1.25.\beta = \frac{\ln(450/80)}{\ln 2} = 2.49,\qquad \alpha = \frac{\ln(450/80)}{\ln 4} = 1.25.

At saturation flux, the core cannot get rid of its heat. At 100 kHz and B^\hat B = 300 mT, 3C90 loses 1.24 MW/m³. An ETD54 core (35.5 cm³) would dissipate 44 W. The same core can lose only about 8 W at a 40 K temperature rise. Core loss, and not saturation, sets B^\hat B in this part. The usable value is near 100 mT, a third of the saturation value.

This is the main term of the bias. A proxy that uses B0B_0 = 300 mT for an AC-flux part overstates B^\hat B by about three times. It understates ApA_p by the same factor.

The window fill adds a second term. A DC choke uses solid round wire, and KuK_u = 0.4 is a normal value (McLyman, ch. 4). An AC-flux part at 100 kHz needs litz wire or foil to control skin and proximity loss. Litz strands, serving and air between bundles reduce KuK_u to about 0.25 to 0.30. A transformer with reinforced isolation also needs tape, margins or triple-insulated wire, and KuK_u falls to about 0.2.

A.3 DC-dominated chokes: Kg at saturation flux

The core-geometry method (Erickson and Maksimović, ch. 14) replaces the fixed current density with a copper-loss budget PcuP_{cu}. The winding resistance is R=ρN2 MLT/(KuWa)R = \rho N^2\,\mathrm{MLT}/(K_uW_a), where MLT is the mean length of a turn. Combine this with N=LI^/(B^Ae)N = L\hat I/(\hat BA_e):

Kg=Ae2WaMLT≥ρ L2I^2Irms2B^2PcuKu.K_g = \frac{A_e^2W_a}{\mathrm{MLT}} \ge \frac{\rho\,L^2\hat I^2 I_{\mathrm{rms}}^2}{\hat B^2P_{cu}K_u}.

KgK_g depends only on the core. The right side depends only on the specification. A core is large enough if its KgK_g is above the requirement. For a choke, B^\hat B is the saturation design limit.

Worked example: buck choke 48 V to 12 V, 30 A, 100 kHz. The specification is LL = 15 µH, ΔI\Delta I = 6 A, I^\hat I = 33 A and IrmsI_{\mathrm{rms}} = 30.05 A. Use B^\hat B = 0.30 T, KuK_u = 0.40, and copper at 100 °C with ρ\rho = 2.26 × 10⁻⁸ Ω m. The loss budget is the loss that gives a 40 K rise on the core in question (section A.5).

Core KgK_g of core / cm⁵ PcuP_{cu} budget / W Required KgK_g / cm⁵ Result
ETD34 0.28 3.20 0.44 too small
ETD39 0.55 4.18 0.33 pass

ETD39 has AeA_e = 125 mm². The turns count is N=LI^/(B^Ae)N = L\hat I/(\hat BA_e) = (15 µH × 33 A)/(0.30 T × 125 mm²) = 13.2, so wind 14 turns. The core loss is 0.04 W, which confirms that the choke is DC-dominated.

Mueller (2025) uses the same logic for powder-core DC filter inductors. He prefers KgK_g to ApA_p, because KgK_g sets a loss and not an assumed current density. A powder core has no gap to adjust, so a material "saturation constant" Γ=Bmax⁡2\Gamma = B_{\max}^2 replaces B^2\hat B^2. The method ignores AC core loss by assumption. That assumption is the boundary of this appendix: KgK_g at saturation is valid only while the AC flux is small.

A.4 AC-flux magnetics: Kgfe

For an AC-flux part, the flux density is a free design variable. More turns lower B^\hat B and the core loss, but they raise the copper loss:

Pfe=KfeB^βAele,Pcu=ρ λ12Itot2 MLT4KuWaAe2⋅1B^2.P_{fe} = K_{fe}\hat B^{\beta}A_el_e,\qquad P_{cu} = \frac{\rho\,\lambda_1^2I_{\mathrm{tot}}^2\,\mathrm{MLT}}{4K_uW_aA_e^2}\cdot\frac{1}{\hat B^2}.

Here Kfe=kfαK_{fe} = kf^{\alpha} is the Steinmetz coefficient at the operating frequency. The quantity λ1\lambda_1 is the peak-to-peak flux linkage per turn, so B^=λ1/(2NAe)\hat B = \lambda_1/(2NA_e). Set dPtot/dB^=0dP_{\mathrm{tot}}/d\hat B = 0. The total loss is a minimum when

βPfe=2Pcu.\beta P_{fe} = 2P_{cu}.

For 3C90, β\beta = 2.49, so core loss is 0.80 of copper loss at the optimum. Insert the optimum into Ptot≤Pmax⁡P_{\mathrm{tot}} \le P_{\max}. This gives the condition of Erickson and Maksimović (ch. 15):

Kgfe=WaAe2(β−1)/βMLT  le2/β[(β2)−ββ+2+(β2)2β+2]−β+2β≥ρ λ12Itot2Kfe2/β4Ku Pmax⁡(β+2)/β.K_{gfe} = \frac{W_aA_e^{2(\beta-1)/\beta}}{\mathrm{MLT}\;l_e^{2/\beta}}\left[\left(\frac{\beta}{2}\right)^{-\frac{\beta}{\beta+2}}+\left(\frac{\beta}{2}\right)^{\frac{2}{\beta+2}}\right]^{-\frac{\beta+2}{\beta}} \ge \frac{\rho\,\lambda_1^2I_{\mathrm{tot}}^2K_{fe}^{2/\beta}}{4K_u\,P_{\max}^{(\beta+2)/\beta}}.

No flux density appears in this condition. The method picks B^\hat B from the loss balance at the operating frequency. It does not assume B^\hat B. The script checks the closed form against a numerical loss minimum on all seven ETD cores, with agreement to 10⁻⁴.

Worked example: DAB transformer, 400 V, 1.5 kW, 100 kHz. The winding voltage is a ±400 V square wave, so λ1=V/(2f)\lambda_1 = V/(2f) = 2.0 mV s. The turns ratio is 1:1 and each winding carries 4.5 A rms, so ItotI_{\mathrm{tot}} = 9.0 A. Use KuK_u = 0.20 for litz wire with reinforced isolation. In SI units, KfeK_{fe} = 2.48 × 10⁷ W m⁻³ T⁻β.

Core KgfeK_{gfe} of core Pmax⁡P_{\max} / W Required KgfeK_{gfe} Result
ETD49 2.72 × 10⁻⁷ 6.45 2.74 × 10⁻⁷ too small by 0.7 %
ETD54 4.04 × 10⁻⁷ 8.04 1.84 × 10⁻⁷ pass

KgfeK_{gfe} has a unit that depends on β\beta. Compare it only with a requirement in the same SI units. On ETD54, the loss-optimal design has 39 turns and B^\hat B = 92 mT. The losses are PfeP_{fe} = 2.31 W and PcuP_{cu} = 2.88 W, which is 5.2 W against an 8.0 W limit.

Kazimierczuk and Sekiya (2009) give area-product equations for resonant inductors in terms of the loaded quality factor, the output power and the frequency. Their equations have the correct form, but B^\hat B and KuK_u are still inputs. Their examples compare a single-wire and a multiple-strand winding, with skin, proximity and fringing effects. KgfeK_{gfe} removes the guess of B^\hat B, which is the larger of the two errors.

A.5 Teaching example: six magnetics on one core family

The example sizes six magnetics on Ferroxcube ETD cores in 3C90 at 100 kHz and 100 °C. All core and material data come from the Ferroxcube datasheets. Nothing is fitted to the result. Each part is sized three times:

  1. Old proxy. Ap=λ^Itot/(Ku0J0B0)A_p = \hat\lambda I_{\mathrm{tot}}/(K_{u0}J_0B_0), with Ku0K_{u0} = 0.40, J0J_0 = 4 A/mm² and B0B_0 = 0.30 T for every kind.
  2. Method by kind. DC chokes use KgK_g at B^\hat B = 0.30 T. AC-flux parts use KgfeK_{gfe}. Each method selects the smallest ETD core that meets its condition.
  3. Reference. For each core, a numerical search finds the turns count with the lowest total loss and B^≤\hat B \le 0.30 T. The reference is the smallest core whose loss gives a temperature rise of 40 K or less.

The temperature limit uses McLyman's natural-convection relation ΔT=450 (P/At)0.826\Delta T = 450\,(P/A_t)^{0.826}, with PP in W and AtA_t in cm². AtA_t is the surface of a box around the core and the winding. ETD29 can lose 2.5 W and ETD59 can lose 9.8 W.

Part Kind Proxy ApA_p / cm⁴ Reference core Reference ApA_p / cm⁴ Proxy error B^\hat B / mT JJ / (A/mm²) KuK_u Pfe+PcuP_{fe}+P_{cu} / W Limit / W
Buck choke 48→12 V, 30 A DC 3.10 ETD39 2.93 +6 % 300 4.2 0.40 0.04 + 2.51 4.18
Boost choke 24→48 V, 25 A in DC 2.40 ETD34 1.66 +45 % 300 5.8 0.40 0.06 + 2.99 3.20
Output filter choke, 40 A DC 3.42 ETD39 2.93 +17 % 300 4.7 0.40 0.00 + 3.05 4.18
Two-phase ICT 200→400 V, 2 × 10 A AC 2.08 ETD49 7.25 −71 % 113 4.1 0.30 2.58 + 3.22 6.45
Resonant inductor 40 µH, 12 A rms AC 1.70 ETD49 7.25 −77 % 107 4.2 0.25 2.28 + 2.84 6.45
DAB transformer 400 V, 1.5 kW AC 1.88 ETD54 12.61 −85 % 92 3.9 0.20 2.31 + 2.88 8.04

Flux density alone makes the AC-flux parts three times too small. The thinner window fill adds the rest. Current density stays near the proxy value.

The example shows the same pattern as the audit. The DC chokes land between +6 % and +45 %. The AC-flux parts land between −71 % and −85 %.

The figure shows where the error comes from. For the DC chokes, B^\hat B and KuK_u match the proxy. Only JJ moves, because a small core can shed more heat per unit of copper. For the AC-flux parts, the flux factor is 0.31 to 0.38 and the fill factor is 0.50 to 0.75. The current density stays within 5 % of J0J_0. The audit hypothesis named thermally limited BB and JJ plus litz and isolation KuK_u. This example confirms BB and KuK_u. It does not confirm JJ.

Bias between kinds. Take the geometric mean of Ap,proxy/Ap,refA_{p,\mathrm{proxy}}/A_{p,\mathrm{ref}} for each kind. It is 1.21 for the DC chokes and 0.22 for the AC-flux parts. The bias between kinds is the ratio of the two, 5.6×. The method by kind selects the reference core for all six parts, so its bias is 1.00×.

That 1.00× does not validate the method. The reference uses the same loss model as KgfeK_{gfe}, so agreement is guaranteed. The example shows the mechanism of the bias. Only measured parts can show that the method is correct.

A.6 For KPI owners: the acceptance rule

An area-product KPI that uses one flux density for all magnetics compares parts of different kinds on a biased scale. The fix has three rules:

  1. Report the area product separately for each magnetic kind.
  2. For DC-dominated chokes, keep ApA_p or KgK_g at the saturation flux density.
  3. For AC-flux magnetics (ICT, coupled inductors, transformers), use KgfeK_{gfe}. It sets the flux swing from core loss at the operating frequency.

KgK_g alone does not remove the bias, because it still sizes the flux at saturation.

Acceptance test. Replay the six components of the earlier proxy audit with the new method. Fit nothing to those six parts. Calculate the bias between kinds as in section A.5. If the bias is below 1.5×, the KPI is qualified. If it is 1.5× or more, report the KPI as unqualified.

The audit gave a bias of 3× to 4× with the old proxy. This appendix predicts that most of the bias comes from B^\hat B, with a smaller part from KuK_u. If the replay still fails, check KuK_u first. Litz construction and isolation build-up differ more from part to part than the core loss does.

A.7 What if

Sources

Reproduce

Use the repository environment ntbees2:

python scripts/area_product_bias.py

The script writes area-product-checks.json and figures/area-product-bias.svg. It asserts three things:

  1. The Steinmetz parameters return all three datasheet points.
  2. The closed-form KgfeK_{gfe} equals the numerical loss minimum.
  3. The three proxy factors multiply to the proxy error.