开关电源知识库

40_仿真验证 07 —— GetDP 能量法提电感实战:从两个空白文件到 µH 级核对

本篇回答的问题:反激变压器设计 与 电感深潜 都在手算电感(安匝→气隙→AL 值);本篇给出器件级验证手段——开源 FEM(Gmsh+GetDP 磁静场)把磁场能算出来,再用 L=2W/I² 提电感,与解析公式核对。全流程本机实际运行,模型文件已归档 90_资料源/getdp_能量法/。 实测声明:Gmsh 4.13.1 + GetDP 3.5.0(Debian 仓库),2026-10-01 本机三次运行(I=0.5/1/2 A)结果全记录在 §3。 与库内的关系:能量法正是变压器篇 §3“气隙储能占比 99%”论证的反向应用(那里用储能论证气隙主导,这里用储能定义提取 L);双线回路解析公式属教科书通识;对 磁件设计流程的“验证”环是器件级补全。


本篇总结

  1. 最小可运行的磁 FEA 只要两个文本文件:loop.geo(几何+区域标签)+ loop.pro(材料+源+求解+导出)——不需要 GUI,两条命令出结果(本机全流程 <2 s)。
  2. 能量法三步:给定电流 I 解磁场 → W=∫½ν|B|²dV → L=2W/I²。线性介质下 L 与 I 无关——本篇用三点电流扫描把这条性质实测成恒等式(0.5/1/2 A 三次运行,L' 恒为 1.2307 µH/m)。
  3. 解析核对差值的完整分解(经练习①边界收敛实测修正归因):初稿将 −5.1% 全部归因于“有限 Dirichlet 边界”;D=600 mm 实测推翻该归因——本例导体是 1×1 mm² 方截面,严格解析口径为几何平均距离法 1.2430 µH/m(不是内切圆导线近似的 1.2973),按 GMD 口径边界镜像效应只占 −0.99%(D=60)→ −0.28%(D=600),占比最大的 −4.2% 来自截面模型口径差。修正记录见 §3。
  4. GetDP 语法四类陷阱均已实测复现(§4):模板组名约定、.geo 不支持 abs()、PostOperation 没有 Integral 操作、Format Excel 不存在——每个报错的原文与修法都在。
  5. 同一方法可直接迁移至变压器计算:把“一对反向导体”换成“双绕组+磁芯”,串助/串反两次仿真取差得 M 与漏感 Lσ(§5 给出改造清单;数值留作练习,不虚构数据)。
  6. 工具链定位:FEMM 本机不可装(Debian 无包),Gmsh+GetDP 组合即可完成磁静场全套——与 01 工具总览 的“磁件手算+FEA 验证”路线一致。

1. 装环境(两条命令)

sudo apt install gmsh getdp
gmsh --version    # 本机 4.13.1
getdp --version   # 本机 3.5.0

模板库路径(后面 Include 要用):/usr/share/doc/getdp/examples/templates/,例程:/usr/share/doc/getdp/examples/examples/。

2. 两个文件怎么写(全文已归档)

归档:loop.geo、loop.pro、loop.msh(生成网格,可跳过 gmsh 直接重复运行)。

2.1 loop.geo 的设计要点

lc = 0.15e-3;   // 导体区网格 0.15mm(1mm 见方导体里给 ~10 单元)
lca = 6e-3;     // 空气区粗网格
a = 0.5e-3;     // 导体半宽 → 1×1mm² 截面
d = 5e-3;       // 半间距 → 两导体中心距 10mm
D = 60e-3;      // 方形空气域 ±60mm(外边界 A=0)

2.2 loop.pro 的设计要点(关键是“填充模板”)

GetDP 官方磁静场模板 Lib_Magnetostatics_a_phi.pro 无需自行编写方程——只需按约定名填组、填函数:

Group {
  Vol_Mag    = Region[{CoilP, CoilM, Air}];   // 全磁域
  Vol_S0_Mag = Region[{CoilP, CoilM}];        // 规定电流密度区("S0")
  Sur_Dir_Mag 或 Dirichlet_a_0                // A=0 边界(本例用后者)
}
Function {
  nu[Vol_Mag] = 1/mu0;                        // 线性介质
  js[CoilP] = Vector[0., 0.,  1e6];           // 源电流密度
  js[CoilM] = Vector[0., 0., -1e6];
}
Constraint { { Name a ; Case { { Region Dirichlet_a_0 ; Value 0. ; } } } }
Include "/usr/share/doc/getdp/examples/templates/Lib_Magnetostatics_a_phi.pro"

2.3 跑起来

gmsh -2 loop.geo -o loop.msh            # 2D 网格
getdp loop -solve Magnetostatics_a -pos B   # 解 + 导出 b.pos

3. 实测:能量法 + 线性三点 + 解析核对

能量在后处理算(ν 全域常数,直接求和):对 b.pos 每个三角单元 VT(坐标){B值} 取面积 A、单元中心 |B|²,

$$W' = \sum \tfrac12 \nu |B|^2 A, \qquad L' = \frac{2W'}{I^2}\ \ (\mathrm{H/m})$$

本机三跑实测(改 js 幅值,其余不动):

I W′ L′=2W/I²
0.5 A 0.1538 µJ/m 1.2307 µH/m
1 A 0.6154 µJ/m 1.2307 µH/m
2 A 2.4615 µJ/m 1.2307 µH/m

读法:不跑 D=600,“−5.1% 全记在边界名下”的口径错误不会暴露——FEA 的价值恰恰在于用收敛性研究检验“看似自洽的归因”。方法验证本身依旧成立:三电流点 L′ 恒等、线性介质与边界行为符合预期、对严格解析 −0.28%(D=600)。

4. 语法陷阱(本机真实报错记录)

# 报错原文(节选) 根因 修法
1 Unknown variable 'abs(.)' Gmsh .geo 脚本函数集没有 abs() 老老实实逐条写 Line(1)=...
2 Constraint 'phi' is not provided + 自己的 Formulation 语法错误 以为要自己写方程块 别写——Include 官方模板,按约定组名填 Vol_Mag/Vol_S0_Mag/js 即可(phi 警告无害)
3 syntax error (Integral) PostOperation 里没有 Integral[...] 这个操作 能量在外部算:导出 b.pos 用脚本积分(或后续再用 GetDP 自定义后处理)
4 Unknown PostProcessing Format: Excel GetDP 3.5 不认该格式名 Print[ b, ..., File "b.pos" ] 默认格式即可

5. 搬到真问题上:双绕组变压器/电感怎么改

改 .geo(加磁芯多区域、两个窗口绕组区标 104/105 匝数标签)与 .pro(nu[Core]=1/(µr·µ0) 线性起步、js 按 NI/A_window 换算)后:

6. 操作速查

# 全流程
gmsh -2 loop.geo -o loop.msh && getdp loop -solve Magnetostatics_a -pos B
# 换电流:改 loop.pro 两行 js 的 Vector 第三分量,重跑(线性自检)
# 能量积分脚本:解析 b.pos 的 VT(...) 行(§3 公式;归档目录含可直接复制的解析逻辑)
量 本例值 口径
网格尺寸 导体 0.15mm / 空气 6mm 导体角部加密优先
边界距离 60mm −0.99% / 600mm −0.28%(GMD 口径) 练习①实测完成
求解耗时 <1 s(6452 单元) 网格 ×4 仍秒级

要点:磁静场 FEA 的入门门槛就是一个“两个文本文件+两条命令”的双线回路——完成它,你就有了校验一切电感手算公式的器件级标尺;剩下的只是把几何画成磁芯。

2026-10-07 复跑:本篇全部记录值已在本机复现(ngspice 44.2 / LTspice 26.0.2),明细见 10_仿真复跑记录。