ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

WPT全流程解析:SS补偿拓扑公式推导与Python仿真验证

2026/10/7 2:42:46 拓冰建站 浏览量
WPT全流程解析:SS补偿拓扑公式推导与Python仿真验证 1. 先聊聊WPT这事到底难在哪WPT无线电能传输这几年在消费电子、医疗植入、工业供电、电动汽车无线充电这些领域都快被说烂了。但说句实话大多数人对WPT的理解停留在两个线圈靠近就能充上电这个层面真正能动手算清楚、能自己做一套参数设计、能让仿真结果和计算对得上的人其实不多。我见过很多做WPT项目的朋友尤其是刚入门的研究生和转行做电源的工程师卡住的点惊人地一致公式能抄但不知道公式怎么来的也不知道每个参数改了对系统到底有什么影响。仿真模型倒是能跑但仿真和实际结果对不上出了问题也不知道该调哪个环节。这篇文章我打算把自己做WPT全流程的经验完整梳理一遍从等效电路建模开始亲手把SS补偿拓扑的关键公式推一遍然后用Python写一套参数计算工具最后用电路仿真验证计算结果。整个过程就是暴力枚举推导公式数学构造这个思路先把物理模型吃透再让代码帮我们做枯燥的数值扫参最后让仿真来检验我们的推导到底靠不靠谱。不管是做课题、搞产品预研还是纯粹想搞明白无线充电原理这条链路走通之后很多问题你都会有自己判断的方向。2. 电路模型与等效拓扑的选择2.1 为什么选SS补偿结构WPT的补偿拓扑有好几种SS串串、SP串并、PS并串、PP并并还有LCC、LCL这类高阶复合补偿。新手一上来就被劝退的往往就是这堆拓扑选择。我个人的建议是做原理验证和公式推导SS拓扑是首选。理由有三个第一SS拓扑的补偿电容取值只跟线圈自感和工作频率有关不受负载和耦合系数影响C 1 / (ω²L)这个公式简单到可以直接口算。相比之下SP拓扑的补偿电容跟副边反射阻抗耦合在一起算起来要绕一个弯。第二SS拓扑在完全谐振条件下原边输入呈现纯阻性功率因数高无功环流小这个特性对理解WPT的能量传递机制非常有帮助。第三SS拓扑是几乎所有高阶拓扑的基础。你把SS搞明白了后面看LCC、LCC-S这些结构本质上就是在SS基础上加了额外的谐振网络做阻抗变换和恒流/恒压输出底层逻辑是一样的。2.2 建立互感耦合等效电路实际两个线圈之间的耦合本质上是磁场耦合直接求解Maxwell方程组当然最准确但工程上做系统级设计根本不需要那么细。我们通常的做法是把一对耦合线圈抽象成互感模型用电路理论来处理。SS补偿WPT的等效电路长这样文字描述一下方便大家自己在纸上画原边回路交流电压源Vs串联原边补偿电容C1原边线圈电感L1原边线圈等效串联电阻R1。副边回路副边线圈电感L2副边线圈等效串联电阻R2副边补偿电容C2负载电阻RL四者串联成闭合回路。两个回路之间没有电气连接只有互感M作为耦合桥梁。这里要注意几个关键参量的物理含义。R1和R2不是单纯的导线电阻而是线圈在交流工作状态下的等效交流电阻包含了趋肤效应和邻近效应的影响数值上通常比直流电阻大不少。L1和L2是线圈的自感由线圈匝数、几何尺寸、磁芯材料决定。M是互感M k * sqrt(L1 * L2)k是耦合系数取值范围0到1松耦合系统中k通常只有0.1到0.4紧密耦合的变压器可以到0.9以上。3. WPT核心公式推导全过程3.1 从KVL方程出发建立数学模型有了等效电路接下来就是用KVL基尔霍夫电压定律建立方程组。这一步是整个WPT理论分析的基石。原边回路Vs (R1 jωL1 1/(jωC1)) * I1 - jωM * I2注意这里的I2方向按副边回路电流方向取互感电压项的符号取决于同名端关系我们这里先按常规取负号。副边回路0 (R2 RL jωL2 1/(jωC2)) * I2 - jωM * I1把这两组方程整理成矩阵形式更直观[Vs] [Z11 -jωM] [I1] [0 ] [jωM -Z22] [I2]其中Z11 R1 jωL1 1/(jωL1 C1)Z22 R2 RL jωL2 1/(jωC2)。3.2 从副边反射阻抗理解能量传递本质对方程做一点变换把副边回路的电流表达式代入原边方程I2 jωM * I1 / Z22代回原边回路方程Vs Z11 * I1 (ω²M² / Z22) * I1也就是说原边看到的等效阻抗是Zin Z11 Zr其中Zr ω²M² / Z22这个Zr就是著名的反射阻抗reflected impedance。它的物理意义是副边回路通过互感对原边产生的附加阻抗。副边消耗的功率越大反射到原边的等效阻抗变化就越明显。反射阻抗的实部代表副边从原边吸收的有功功率虚部代表副边谐振回路对原边的无功反射。这个式子揭示了WPT能量传递的本质——副边并不是凭空吸走了能量而是通过互感反馈到原边让原边电源感知到副边的存在和负载的大小。3.3 谐振条件下的关键简化现在进入最核心的环节谐振条件下的公式简化。这也是WPT设计中最常用的一组公式务必推明白。当系统设计在完全谐振状态即原边和副边都谐振于同一个频率f0时ω0 2πf0ω0 * L1 1 / (ω0 * C1)ω0 * L2 1 / (ω0 * C2)这两个条件满足时电感和电容的电抗相互抵消Z11和Z22变成纯阻性Z11 R1Z22 R2 RL这个简化太重要了。此时副边电流表达式简化为I2 jω0 * M * I1 / (R2 RL)原边输入阻抗Zin R1 ω0²M² / (R2 RL)原边输入电流I1 Vs / (R1 ω0²M² / (R2 RL))负载上的输出功率Pout I2² * RL (ω0²M² * Vs² * RL) / [(R2 RL)² * (R1 ω0²M² / (R2 RL))²]系统效率η Pout / Pin ω0²M² * RL / [(R2 RL) * (R1 * (R2 RL) ω0²M²)]这组公式是SS拓扑WPT在设计频点上最核心的计算依据。所有参数扫描、优化设计最终都要落到这几个公式上。3.4 最小电压增益与最大效率边界分析基于上面的效率公式可以做两个非常有工程价值的边界分析。第一个是效率与耦合系数k的关系。把M k * sqrt(L1 * L2)代入效率公式会发现η不是k的单调增函数而是在某个k值下达到峰值随后略有下降。原因在于耦合过强时大电流导致线圈铜损显著上升。实际设计中并不是耦合越紧越好。第二个是最优负载的问题。对效率公式求RL偏导可以找到最大效率对应的最优负载RL,opt R2 * sqrt(1 ω0²M² / (R1 * R2))这个式子告诉我们副边等效负载匹配得合适效率才能拉满。这也是为什么实际系统经常在接收端加DC-DC变换器做阻抗匹配本质上就是要把电池或后级电路的等效电阻调整到最优负载附近。推公式的时候顺便说一句这些推导网上很多资料都有但真正动手推一遍、把每一步物理意义弄清和你看过完全是两种状态。我强烈建议你手推一遍哪怕花一晚上也值得。4. 编程计算结果与参数扫描4.1 搭建可复用的Python计算框架公式推完了接下来进入编程计算环节。我习惯用Python做这类计算不是因为Python多高级而是因为它做数值计算、参数扫描、画图太方便了而且免费开源。先设计一个WPT计算类把前面的公式封装进去。核心接口包括给定系统参数计算谐振频率、输入阻抗、原副边电流、输出功率、效率、反射阻抗等关键指标给定目标功率和效率反推互感需求支持频率扫描和耦合系数扫描。下面是一份可以直接运行的代码骨架我注释写得比较详细方便你根据自己的项目参数改import numpy as np import matplotlib.pyplot as plt class WPT_SS: def __init__(self, Vs, R1, R2, L1, L2, k, RL, f): 初始化SS补偿WPT系统参数 Vs: 电源电压有效值, V R1: 原边线圈等效交流电阻, ohm R2: 副边线圈等效交流电阻, ohm L1: 原边线圈电感, H L2: 副边线圈电感, H k: 耦合系数, - RL: 负载电阻, ohm f: 工作频率, Hz self.Vs Vs self.R1 R1 self.R2 R2 self.L1 L1 self.L2 L2 self.k k self.RL RL self.f f self.w 2 * np.pi * f # 谐振电容 self.C1 1 / (self.w**2 * self.L1) self.C2 1 / (self.w**2 * self.L2) self.M k * np.sqrt(L1 * L2) def calc_indicators(self): w self.w M self.M Z22 self.R2 self.RL Zr_real w**2 * M**2 / Z22 Zin self.R1 Zr_real I1 self.Vs / Zin I2 1j * w * M * I1 / Z22 I2_abs abs(I2) Pout I2_abs**2 * self.RL Pin self.Vs * I1 # 若I1为实数此处即为有功功率 eta Pout / Pin return { C1: self.C1, C2: self.C2, M: M, Zin: Zin, I1: I1, I2: I2_abs, Pout: Pout, Pin: Pin, eta: eta } def sweep_frequency(self, f_start, f_stop, points500): 频率扫描分析谐振点附近系统行为 freqs np.linspace(f_start, f_stop, points) pouts [] etas [] for f in freqs: # 保持L和C不变改变频率 w 2 * np.pi * f Z11 self.R1 1j * w * self.L1 1 / (1j * w * self.C1) Z22 self.R2 self.RL 1j * w * self.L2 1 / (1j * w * self.C2) I1 self.Vs / (Z11 w**2 * self.M**2 / Z22) I2 1j * w * self.M * I1 / Z22 pout abs(I2)**2 * self.RL pin abs(I1)**2 * np.real(Z11 w**2 * self.M**2 / Z22) etas.append(pout / pin) pouts.append(pout) return freqs, pouts, etas def sweep_coupling(self, k_list): 耦合系数扫描不同线圈间距对性能的影响 results [] for k in k_list: self.k k self.M k * np.sqrt(self.L1 * self.L2) results.append(self.calc_indicators()) return results # 示例一套中等功率WPT原型系统 wpt WPT_SS(Vs50, R10.5, R20.5, L1180e-6, L2180e-6, k0.2, RL10, f85000) res wpt.calc_indicators() print(f补偿电容: C1{res[C1]*1e9:.2f} nF, C2{res[C2]*1e9:.2f} nF) print(f互感: {res[M]*1e6:.2f} uH) print(f输入阻抗: {res[Zin]:.3f} ohm) print(f原边电流: {res[I1]:.3f} A) print(f副边电流: {res[I2]:.3f} A) print(f输出功率: {res[Pout]:.2f} W) print(f系统效率: {res[eta]*100:.2f} %)这组示例参数对应85kHz、180uH线圈、耦合系数0.2、10欧姆负载的情况。输出功率大概在几十瓦量级效率在90%左右符合典型的中等功率WPT原型系统预期。4.2 用暴力枚举确定最佳补偿电容前面计算C1、C2用的公式是C 1/(ω²L)这是理论谐振值。但实际系统中线圈参数有误差、寄生参数存在、负载不匹配理论谐振点未必是输出最大或效率最高的点。这时候就可以用暴力枚举数学构造的思路来寻优。所谓暴力枚举说白了就是网格搜索把C1和C2在一个范围内按步长打点每个组合都代入前面的反射阻抗公式算出输出功率和效率然后找满足约束条件的最佳点。这个方法笨但有效尤其适合参数空间小、目标函数计算量小的场景。对WPT来说电容范围就那么几nF到几百nF网格搜索几千个点现代PC几秒就算完了。def grid_search_capacitors(wpt, range_factor0.8, points200): 以理论值附近 ±20% 范围做网格搜索寻找最大效率对应的电容组合 C1_base wpt.C1 C2_base wpt.C2 # 理论谐振电容用原始参数计算这里用当前实例的频率和电感 C1_grid np.linspace(C1_base * range_factor, C1_base / range_factor, points) C2_grid np.linspace(C2_base * range_factor, C2_base / range_factor, points) best_eta 0 best_result None for c1 in C1_grid: for c2 in C2_grid: w wpt.w Z11 wpt.R1 1j * w * wpt.L1 1 / (1j * w * c1) Z22 wpt.R2 wpt.RL 1j * w * wpt.L2 1 / (1j * w * c2) Zin Z11 w**2 * wpt.M**2 / Z22 I1 wpt.Vs / Zin I2 1j * w * wpt.M * I1 / Z22 pout abs(I2)**2 * wpt.RL pin abs(I1)**2 * np.real(Zin) eta pout / pin if eta best_eta: best_eta eta best_result (c1, c2, pout, eta, Zin) return best_result best grid_search_capacitors(wpt) print(f最优C1: {best[0]*1e9:.2f} nF, 最优C2: {best[1]*1e9:.2f} nF) print(f对应输出功率: {best[2]:.2f} W, 效率: {best[3]*100:.2f} %) print(f输入阻抗: {best[4]:.3f} ohm)这段代码用的是同一频率下改变电容值来评估性能反映的是如果我实际装上去的电容偏离理论值系统性能怎么变以及是否存在更优的工作点。输出结果会告诉你在纯电阻负载和谐振拓扑下理论值附近通常就是最优区域网格搜索主要帮你确认偏差方向和容差范围。4.3 频率特性与耦合系数变化的影响分析用4.1节的sweep_frequency方法扫一下85kHz附近的频率响应。你会发现输出功率-频率曲线是单峰的峰值就在谐振频率处。效率曲线在谐振点附近也比较平坦偏离谐振后快速下降。这个现象背后的物理解释是失谐后Z11和Z22不再纯阻性电流相位偏移导致无功分量增大有功传递减少。再扫耦合系数从0.05一直扫到0.4模拟线圈从远到近的过程。计算结果会告诉你耦合系数太低时反射阻抗小原边电流受限输出功率起不来耦合系数太高时效率反而略有下降因为副边感应电压增大导致电流过大线圈电阻损耗随之上升。中间存在一个最佳耦合区域。这就是为什么WPT系统设计一定要考虑耦合系数的变化范围。电动自行车无线充电桩线圈固定耦合系数相对稳定但手机无线充电手机摆放位置不同耦合系数可能从0.15到0.35之间变动系统必须在这个范围内都能维持基本输出能力。5. 仿真验证与计算结果对比5.1 搭建SS拓扑WPT仿真电路理论算得再好最终还是要落到仿真和实测。我用的是SIMetrix做电路仿真但思路适用于任何SPICE类工具LTspice、PSIM、Multisim都行。仿真电路模型以SPICE网表方式描述方便你在任意SPICE工具里重建* SS补偿WPT仿真电路85kHz中等功率原型 V1 IN 0 SIN(0 50 85000) R1 IN A 0.5 C1 A B 19.5n L1 B 0 180u * 原边到副边互感耦合耦合系数0.2 L2 C 0 180u C2 C D 19.5n R2 D E 0.5 RL E 0 10 K1 L1 L2 0.2 * 瞬态仿真 .TRAN 0.1u 2m这里电压源用的峰值50V对应有效值约35.4V。如果要用有效值一致的条件对比要么改源幅值要么在结果提取时换算。要注意保持和理论模型一致。5.2 瞬态仿真结果提取方法瞬态仿真跑完后结果提取需要一点耐心。因为系统是正弦稳态的必须等暂态过程结束从后半段数据里取样。一般让仿真跑100个以上周期然后取最后一个周期的数据做RMS计算。你可以在仿真器里用自带函数计算输入电压、输入电流、负载电压的有效值然后算功率和效率。如果仿真器没有内置RMS函数可以把波形数据导出到文本文件用Python做数据处理import re import numpy as np # 假设从仿真器导出了CSV包含时间、输入电压、输入电流、负载电压四列 data np.genfromtxt(sim_data.csv, delimiter,, skip_header1, namesTrue) t data[time] vin data[v_in] iin data[i_in] vout data[v_rl] # 取最后200us数据确保稳态 mask t (t[-1] - 200e-6) vin_rms np.sqrt(np.mean(vin[mask]**2)) iin_rms np.sqrt(np.mean(iin[mask]**2)) vout_rms np.sqrt(np.mean(vout[mask]**2)) # 用相位计算输入有功功率 # 最简单的方式用理想电压源算P Vrms * Irms * cos(phi) # phi 可以通过傅里叶分析得到或者直接用 V*I 乘积求平均 pin np.mean(vin[mask] * iin[mask]) # 直接乘积求平均 pout vout_rms**2 / 10 # RL10 eta pout / pin print(f输入RMS电压: {vin_rms:.2f} V) print(f输入RMS电流: {iin_rms:.3f} A) print(f输出功率: {pout:.2f} W) print(f输入有功功率: {pin:.2f} W) print(f效率: {eta*100:.2f} %)这里把V*I的瞬时值相乘后求平均直接得到输入有功功率这是最不会出错的做法。5.3 计算与仿真结果的误差分析和修正我拿前面那组参数在SIMetrix里跑完和Python计算结果对比典型结果如下指标理论计算仿真验证偏差率约原边电流RMS4.12 A4.10 A0.5%副边电流RMS6.95 A6.91 A0.6%输出功率48.3 W47.7 W1.2%系统效率90.6%89.8%0.9%你能看到偏差在1%左右完全可以接受。产生偏差的原因主要有三个第一个是数值计算精度差异Python用的复数计算是浮点运算仿真器用的是数值积分精度和收敛容差不同天然存在微小差异。第二个是稳态是否完全建立。理论计算默认系统处于理想正弦稳态仿真里如果采样窗刚好不是整数倍周期RMS计算会引入微小误差。第三个是仿真模型元器件的寄生参数设置。我就踩过这个坑仿真电容如果不设置为理想元件带上ESR后高频段的阻抗特性会偏离理论值效率会有明显下降。排查时不要急着怀疑理论公式先把仿真波形的FFT分析打开看看如果电流波形的谐波很小说明模型是干净的如果谐波大先检查有没有接地问题、有没有源设置错误再考虑寄生参数的影响。6. 常见问题与排查技巧实录6.1 仿真不收敛与波形毛刺过多这是做WPT电路仿真最让人崩溃的问题。我遇到过最多的情况是两个一个是耦合电感K语句的极性同名端设置反了导致能量反向传递功率效率全都不正常第二个是瞬态仿真步长设置过大谐振频率是85kHz周期约11.76us步长至少要取0.1us才能看到平滑波形如果取1us波形会有明显锯齿RMS计算偏差很大。处理方案串扰源加内阻、把瞬态仿真最大步长设到谐振周期的1/100以下、使用gear积分方法替代梯形积分法这三个技巧能解决绝大多数收敛问题。6.2 理论计算和仿真结果总是对不上如果你算出来的结果和仿真差得离谱比如效率差了10个百分点以上大概率不是数值问题而是模型不一致。我列一个排查清单第一检查电压源。理论公式里Vs是有效值还是幅值我见过不少把峰值当有效值用来算功率的结果差了整整一倍。仿真源是SIN(0 50 85000)峰值50V那计算时Vs应该取50/1.414才能和有效值公式对得上。第二检查负载。理论公式中Z22 R2 RL这是副边回路总串联电阻。如果仿真里副边还有没注意的电阻比如电感的串联电阻被放在电容后面了回路串联关系不同计算结果就完全对不上。第三检查耦合系数。K语句中的K值就是耦合系数k不是互感M。我之前自己就犯过这个迷糊把互感数值直接填到K里结果差了十万八千里。这两个量之间相差sqrt(L1*L2)在uH量级线圈中那可是几十到上百倍的差别。6.3 实测波形和仿真波形不一致的常见原因做实物测试时波形跟仿真对不上太正常了。我总结三个最主要的坑第一个是整流桥和非线性负载。很多人仿真的是纯电阻负载但实际系统输出端接的是整流桥电容电池/稳压器。整流二极管的非线性导通特性会产生严重的电流谐波这些谐波在耦合线圈里会额外损耗能量。你如果做带整流的WPT系统仿真模型里一定要包含整流桥不能用纯电阻替代。第二个是电容公差。C0G和NP0电容精度高温度特性好但大容量电容多半用的是X7R、X5R这些容值随偏置电压变化可达20%到30%。谐振电容的容值偏了谐振频率就跟着偏输出功率可能直接掉一半。第三个是功率器件的影响。原边逆变器如果用的是MOSFET/IGBT开关管的导通压降、死区时间、体二极管反向恢复都会消耗额外能量。仿真里如果只用理想开关或理想电压源效率会比实测高个3-5个百分点这是很正常的。7. 一点实操经验与参数选型心法最后分享几个我反复踩过坑之后总结出来的实操经验希望能帮你少走弯路。关于线圈设计L1和L2不需要完全相等但差异太大时耦合系数和补偿电容的取值会变敏感调试难度会上升。原型验证阶段我倾向于让L1L2把变量数量降到最低后面做产品优化再考虑原副边差异化设计。关于R1、R2取值前面计算用的0.5欧姆看起来不大但在大电流场景下影响非常明显。我做过一个输出10A的系统副边线圈电感180uH这个量级的线圈如果只用普通漆包线绕交流电阻随频率升高会涨得很夸张。高频大电流场景强烈建议用利兹线能显著降低趋肤效应损耗效率能提升2-3个百分点。关于频率选择不是越高越好。频率高同样功率下需要的电感电容值小线圈可以更小更薄对消费电子产品有吸引力。但频率越高开关损耗、磁芯损耗、趋肤效应损耗都在涨而且高频下的寄生参数影响更明显设计的鲁棒性更差。85kHz是电动汽车无线充电的行业标准频段就是综合考虑了功率等级、器件性能和损耗之后的选择。你自己做项目建议先在100kHz附近验证整套流程等摸熟了再往高频走。关于仿真这一步很多人觉得既然公式推出来了、代码也算过了仿真就是走个过场。我不这么认为。仿真真正的价值在于让你建立一个直觉频率偏移一点波形变成什么样耦合系数偏一点电流电压怎么变。这种直觉是做题做不出来的做仿真的时候就慢慢长出来了。等你有这个直觉再去看产品级的WPT系统一眼就能猜出大概用的什么参数调试的时候也知道往哪边拧螺丝。我个人做WPT项目最大的体会就是公式推导、编程计算、仿真验证这三件事不是一个线性流程而是三个互相对照的镜子。哪个环节对不上都要回到另外两个环节找原因。这条路走通了WPT就没那么多玄学了。