1. 为什么CLLC不是又一个LLC如果你之前调过LLC谐振变换器第一次接触CLLC的时候大概率会有一个疑问这不就是把LLC的谐振电容拆成两个、再加个变压器电感吗看起来拓扑几乎一样凭什么单独拎出来讲我最初也是这么想的直到在一个双向储能项目里被LLC反着跑的效率曲线狠狠教育了一顿。正向工作时效率能到97%的LLC样机反向运行时效率直接掉到88%左右谐振腔完全不在最佳工作点上原边开关管还容易进入硬开关状态。这个问题的根源在于LLC的谐振网络天生不对称——它只在一个方向上具备完整的谐振特性。CLLC的核心价值就在这里它在原边和副边各放了一个谐振电容让整个谐振网络在正反两个方向上呈现对称的阻抗特性。这意味着无论能量从哪边流向哪边变换器都能工作在相近的谐振状态效率曲线不会出现一边倒的情况。对于需要双向充放电的储能系统、车载充电机OBC、以及V2G场景来说这个特性几乎是刚需。但对称带来的代价是参数设计空间从二维变成了三维甚至四维。LLC你调两个参数电感比k和品质因数Q基本就能收敛CLLC你至少要面对原边谐振电感Lr1、副边谐振电感Lr2、原边谐振电容Cr1、副边谐振电容Cr2、励磁电感Lm这五个量而且它们之间还存在对称性约束。手动试凑基本等于大海捞针。所以这篇内容我会按我自己的实操路径来走先用基波近似法FHA把增益特性算清楚再基于MATLAB把参数扫描和优化跑通最后给出可以直接复现的仿真文件结构和调试要点。适合已经了解LLC基本原理、想往双向拓扑方向深入的电源工程师也适合正在做储能或OBC项目、需要快速评估CLLC方案可行性的朋友。提示如果你连LLC的FHA分析都还没跑过建议先把LLC的增益曲线推导过一遍再来否则CLLC的对称约束会让你更晕。2. 基波分析法在CLLC上的适配与修正2.1 FHA的基本假设在CLLC中还成立吗基波近似法的核心思路是谐振腔的输入是一个方波电压但真正参与谐振能量传输的主要是方波的基波分量高次谐波被谐振腔滤掉了。这个假设在LLC上已经被验证过很多次精度在谐振频率附近足够工程使用。搬到CLLC上FHA的基本框架是成立的但有两个地方需要特别注意。第一个是副边谐振电容Cr2的折算问题。在正向工作时Cr2在副边谐振腔里你需要把它折算到原边才能统一分析。折算系数是n²n为变压器匝比折算后的等效电容是Cr2/n²。反向工作时则反过来Cr1折算到副边。这个折算过程看起来简单但很多人在写MATLAB代码时把折算方向搞反了导致正反向增益曲线对不上。第二个是励磁电感Lm的对称性问题。在LLC里Lm只参与原边的谐振但在CLLC中Lm同时影响两个方向的增益特性。如果你为了正向效率把Lm调得很大反向的增益范围可能会被压缩到不够用。这就是为什么CLLC的参数设计不能只盯着一个方向看。2.2 增益公式的推导与关键变量定义我直接给出CLLC在正向工作时的归一化增益表达式这是后面所有MATLAB计算的基础定义归一化频率 ( f_n f_s / f_{r1} )其中 ( f_{r1} 1/(2\pi\sqrt{L_{r1} C_{r1}}) ) 是原边谐振频率。定义电感比 ( k L_m / L_{r1} )品质因数 ( Q \sqrt{L_{r1}/C_{r1}} / (n^2 R_{ac}) )其中 ( R_{ac} 8n^2 R_L / \pi^2 ) 是交流等效负载。定义电容比 ( \alpha C_{r2} / (n^2 C_{r1}) )这个参数是CLLC特有的LLC里没有。正向增益 ( M(f_n) ) 的表达式为[ M \frac{1}{\sqrt{\left[1 \frac{1}{k}\left(1 - \frac{1}{f_n^2}\right)\right]^2 Q^2\left(f_n - \frac{1}{f_n}\right)^2 \cdot \left(1 \frac{1}{\alpha f_n^2}\right)^2}} ]这个公式比LLC的增益公式多了一个 ( \alpha ) 相关的项。当 ( \alpha \to \infty )即Cr2非常大相当于短路时公式退化为标准LLC的增益表达式。你可以用这个退化关系来验证你的MATLAB代码写得对不对。反向工作时你只需要把 ( f_n ) 换成 ( 1/f_n )把 ( Q ) 换成 ( Q/\alpha )把 ( k ) 保持不变就能得到反向增益曲线。这个对称关系是CLLC设计中最有用的性质之一。2.3 用MATLAB画出第一组增益曲线我建议你先把下面这段代码跑一遍建立对CLLC增益特性的直觉% CLLC正向增益曲线 - 基础版 clear; clc; k 5; % 电感比 Lm/Lr1 Q 0.4; % 品质因数 alpha 1.0; % 电容比 Cr2/(n^2*Cr1) fn linspace(0.5, 2.0, 1000); M 1 ./ sqrt( (1 (1/k).*(1 - 1./fn.^2)).^2 ... Q^2 .* (fn - 1./fn).^2 .* (1 1./(alpha.*fn.^2)).^2 ); plot(fn, M, LineWidth, 1.5); xlabel(归一化频率 f_n); ylabel(电压增益 M); title(sprintf(CLLC增益曲线 k%d, Q%.1f, alpha%.1f, k, Q, alpha)); grid on; yline(1, --r, M1);跑完之后你会看到几个关键现象增益峰值出现在略低于谐振频率的位置这和LLC一致但高频段的增益下降速度比LLC更快因为那个 ( \alpha ) 相关项在高频时贡献了额外的衰减。这意味着CLLC在轻载高频段的调压能力比LLC弱一些设计时需要把最大工作频率留够余量。注意如果你把alpha设成0.5或2.0再跑一遍会发现增益曲线的形状变化很明显。alpha1时正反向增益最对称这也是大多数设计取alpha≈1的原因。3. 参数扫描哪些组合能同时满足正反向增益需求3.1 设计指标到参数约束的映射假设你手上有一个具体的项目需求输入电压范围300V-400V输出电压400V额定功率3.3kW要求正向和反向的增益范围都能覆盖0.8到1.3。这个需求翻译成参数约束就是正向最大增益 ( M_{fwd,max} \geq 1.3 )对应最低输入电压300V时正向最小增益 ( M_{fwd,min} \leq 0.8 )对应最高输入电压400V时如果输出需要调压反向增益范围同样要覆盖0.8到1.3谐振频率附近效率最优所以额定工作点应落在 ( f_n \approx 1 ) 附近这些约束不是独立的它们通过k、Q、alpha三个参数耦合在一起。我的做法是先固定alpha1保证对称性然后在k-Q平面上做二维扫描找出满足所有增益约束的区域。3.2 用MATLAB做k-Q平面扫描下面这段代码是我常用的扫描框架你可以直接改成自己的指标% k-Q平面扫描找出满足增益约束的参数区域 clear; clc; k_vec linspace(2, 10, 50); Q_vec linspace(0.1, 1.0, 50); alpha 1.0; fn linspace(0.4, 2.5, 2000); M_max_fwd zeros(length(k_vec), length(Q_vec)); M_min_fwd zeros(length(k_vec), length(Q_vec)); for i 1:length(k_vec) for j 1:length(Q_vec) k k_vec(i); Q Q_vec(j); M 1 ./ sqrt( (1 (1/k).*(1 - 1./fn.^2)).^2 ... Q^2 .* (fn - 1./fn).^2 .* (1 1./(alpha.*fn.^2)).^2 ); M_max_fwd(i,j) max(M); M_min_fwd(i,j) min(M(fn 1)); % 只取高频段的最小增益 end end % 找满足 M_max1.3 且 M_min0.8 的区域 valid (M_max_fwd 1.3) (M_min_fwd 0.8); [K_grid, Q_grid] meshgrid(k_vec, Q_vec); figure; scatter(K_grid(valid), Q_grid(valid), 20, filled); xlabel(电感比 k); ylabel(品质因数 Q); title(满足增益约束的参数区域 (alpha1)); grid on;跑完这张图你会看到一个类似香蕉形状的可行区域。k太小3时峰值增益很高但高频段增益压不下去k太大8时峰值增益不够带不动最低输入电压。Q太大时整个增益曲线被压扁Q太小时峰值增益过高但调节线性度变差。我的经验是k取4到6之间、Q取0.3到0.5之间这个区域通常能同时满足增益范围和效率要求。如果你的指标更苛刻比如增益范围要求0.6到1.5可行区域会明显缩小这时候就需要考虑调整变压器匝比n来分担一部分增益压力。3.3 alpha不等于1时会发生什么实际设计中由于变压器漏感和外置谐振电感的分配问题alpha很难精确等于1。我做过一组对比扫描alpha从0.7到1.4变化时正向和反向增益曲线的对称性会明显恶化。具体来说alpha1时反向增益范围被压缩alpha1时正向增益范围被压缩。如果你的应用对某一个方向的增益要求更高比如放电模式需要更宽的调压范围可以故意把alpha往那个方向偏一点。但偏太多会导致另一个方向效率下降一般建议alpha控制在0.8到1.2之间。alpha值正向增益范围反向增益范围对称性评价0.70.75-1.450.85-1.15反向偏窄0.90.78-1.380.82-1.25较好1.00.80-1.350.80-1.35最佳1.10.82-1.280.78-1.40较好1.30.85-1.180.75-1.48正向偏窄这张表是我在k5、Q0.4条件下扫出来的你的具体数值会不同但趋势是一致的。4. 从增益曲线到实际元件参数4.1 谐振频率与元件值的确定顺序很多人卡在这一步增益曲线调好了但不知道怎么变成实际的L和C。我的推荐顺序是第一步确定谐振频率 ( f_r )。这个由你的开关频率范围和磁性元件尺寸决定。频率越高磁芯和电容越小但开关损耗和驱动难度上升。3.3kW级别的CLLC我一般取 ( f_r ) 在100kHz到150kHz之间。取120kHz是个比较稳妥的选择。第二步确定变压器匝比n。n由额定输入输出电压比决定但要注意留出增益调节余量。如果额定输入400V、输出400V理论n1但实际我会取n0.9到0.95让额定工作点落在增益略大于1的位置这样正反向都有调节空间。第三步由Q和k反推Lr1、Cr1、Lm。这里有一个容易忽略的细节Q的定义里包含了负载R_L而R_L随工况变化。所以Q应该按额定负载计算然后验证轻载和重载下的增益是否仍然满足要求。具体计算流程% 从设计指标反推元件参数 P_rated 3300; % 额定功率 W V_in_nom 400; % 额定输入 V V_out 400; % 输出 V f_r 120e3; % 谐振频率 Hz n 0.95; % 匝比 k 5; % 电感比 Q 0.4; % 额定负载下的品质因数 R_L V_out^2 / P_rated; % 等效负载电阻 R_ac 8 * n^2 * R_L / pi^2; % 交流等效电阻 Z_r R_ac * Q; % 谐振腔特征阻抗 Lr1 Z_r / (2*pi*f_r); % 原边谐振电感 Cr1 1 / (Z_r * 2*pi*f_r); % 原边谐振电容 Lm k * Lr1; % 励磁电感 Cr2 Cr1 * n^2; % 副边谐振电容 (alpha1) fprintf(Lr1 %.2f uH\n, Lr1*1e6); fprintf(Cr1 %.2f nF\n, Cr1*1e9); fprintf(Lm %.2f uH\n, Lm*1e6); fprintf(Cr2 %.2f nF\n, Cr2*1e9);按这组参数跑出来Lr1大概在30-40μH量级Cr1在50-60nF量级Lm在150-200μH量级。这些值在实际中都是可实现的电容用薄膜电容并联电感用铁氧体磁芯绕制。4.2 死区时间与励磁电感的耦合关系这一步是CLLC设计里最容易翻车的地方。死区时间必须足够长让励磁电流在死区期间完成原边开关管结电容的充放电实现ZVS。但死区太长又会增加体二极管导通损耗。死区时间的下限由这个公式估算[ t_{dead,min} \frac{2 C_{oss} V_{in}}{I_{Lm,pk}} ]其中 ( C_{oss} ) 是开关管输出电容( I_{Lm,pk} ) 是励磁电流峰值。而 ( I_{Lm,pk} \frac{V_{in}}{4 L_m f_s} )。把这两个式子联立你会发现Lm越大励磁电流越小需要的死区时间越长。而Lm又由k和Lr1决定。所以k不能取太大否则死区时间会长到影响效率。我实测的经验是k5时120kHz开关频率下死区时间取150-250ns比较合适。如果你把k调到8以上死区可能要超过400ns这时候体二极管导通损耗会明显增加效率至少掉0.5个点。提示死区时间确定后一定要在仿真里看开关管漏源电压波形确认在死区结束前Vds已经降到零。如果没降到位说明死区不够或者Lm太大。4.3 谐振电容的电压应力校核CLLC有两个谐振电容它们的电压应力不一样需要分别校核。原边谐振电容Cr1的电压应力主要由原边谐振电流和容抗决定。在谐振频率附近Cr1上的电压有效值大约是[ V_{Cr1,rms} \approx I_{Lr1,rms} / (2\pi f_r C_{r1}) ]副边谐振电容Cr2的电压应力则与副边电流和Cr2的容抗有关。由于Cr2通常比Cr1大n²倍它的容抗更小电压应力相对低一些但副边电流通常更大所以不能简单认为Cr2的应力一定比Cr1小。我在一个3.3kW样机上实测过Cr1用两个100nF/630V薄膜电容并联Cr2用两个220nF/400V薄膜电容并联满载运行两小时后电容表面温度在45度左右留够了余量。如果你选的电容耐压刚好卡在计算值上建议至少留1.5倍余量因为谐振腔里还有高次谐波分量。5. MATLAB仿真文件的结构与调试要点5.1 仿真模型的模块划分我习惯把CLLC仿真分成四个独立模块这样调试的时候可以单独替换某一块而不影响其他部分模块一开环增益验证。用固定频率和固定占空比驱动测量输出电压验证FHA计算的增益曲线是否和仿真一致。这个模块用来确认参数计算没错。模块二闭环调频控制。加入PI调节器通过调频实现稳压。这个模块用来验证动态响应和稳定性。模块三正反向切换。用开关切换负载和源的位置验证双向工作的对称性。这个模块用来检查alpha是否合理。模块四损耗与热模型。加入开关管导通损耗和开关损耗的估算粗略评估效率。这个模块用来做参数微调。每个模块我都建议单独存成一个.slx文件用MATLAB脚本统一调用和参数传递。这样你改一个参数四个模块可以批量重跑。5.2 仿真步长与求解器设置CLLC的仿真对步长很敏感。谐振频率120kHz意味着谐振周期约8.3μs仿真步长至少要小于周期的1/50也就是160ns以下。我一般设最大步长50ns求解器用ode23tb或ode15s。如果你用固定步长步长设20ns比较稳妥但仿真速度会慢。变步长求解器在谐振点附近会自动缩小步长整体效率更高。我实测同一个模型变步长比固定步长快3到5倍精度还更好。注意如果你在仿真里看到谐振电流波形有明显的锯齿或毛刺八成是步长太大了。先把步长减半再跑一遍如果波形变光滑了说明之前的结果不可信。5.3 从仿真到实测的偏差来源仿真跑通了不代表实测就能对得上。我踩过的坑主要有这几个第一个坑是变压器漏感没算准。仿真里你设的Lr1是理想值但实际变压器的漏感可能只有你设计值的一半剩下的要靠外置电感补。我的做法是先绕一个变压器用LCR表测出漏感然后反推需要外置多少电感再微调Cr1保持谐振频率不变。第二个坑是开关管输出电容的非线性。仿真里C_oss是个固定值但实际MOSFET的C_oss随Vds变化很大。这会导致实际死区时间和仿真对不上。解决办法是在仿真里用电压相关的电容模型或者干脆在实测时用示波器看Vds波形来调死区。第三个坑是谐振电容的ESL。薄膜电容虽然ESL小但在100kHz以上仍然有影响。如果你发现实测谐振频率比设计值偏高很可能是电容的ESL在作怪。换用叠层电容或者多个小电容并联可以缓解。6. 参数优化的几个实战方向6.1 效率最优 vs 增益范围最优的权衡这两个目标在CLLC里往往是矛盾的。效率最优通常要求k小、Q小这样谐振电流小、环流损耗低但增益范围最优要求k大、Q适中这样峰值增益够高、调压范围够宽。我的处理方式是先满足增益范围约束再在可行区域内找效率最优点。具体做法是在第3节扫出来的可行区域里对每个(k,Q)组合估算谐振电流有效值和开关管损耗选总损耗最小的那个点。估算谐振电流有效值的简化公式[ I_{Lr1,rms} \approx \frac{V_{out}}{n \cdot R_{ac}} \cdot \sqrt{1 \left(\frac{\pi^2}{8} \cdot \frac{1}{Q \cdot f_n}\right)^2} ]这个公式在谐振频率附近精度还可以偏离谐振点越远误差越大。但用来做参数筛选足够了。6.2 用优化工具箱做自动寻优如果你有MATLAB的Optimization Toolbox可以直接用fmincon做约束优化。目标函数设为总损耗约束设为增益范围、死区时间、电容电压应力等。% 用fmincon做CLLC参数优化 (需要Optimization Toolbox) % 变量: x [k, Q, alpha] x0 [5, 0.4, 1.0]; lb [3, 0.2, 0.8]; ub [8, 0.8, 1.2]; % 目标函数: 估算总损耗 (简化版) objfun (x) estimate_loss(x(1), x(2), x(3)); % 非线性约束: 增益范围、死区时间等 nonlcon (x) gain_constraints(x(1), x(2), x(3)); options optimoptions(fmincon, Display, iter, ... Algorithm, sqp, MaxIterations, 100); [x_opt, fval] fmincon(objfun, x0, [], [], [], [], lb, ub, nonlcon, options); fprintf(最优参数: k%.2f, Q%.2f, alpha%.2f\n, x_opt(1), x_opt(2), x_opt(3));estimate_loss和gain_constraints这两个函数需要你自己根据前面的公式写。我建议先把目标函数写简单一点只考虑导通损耗和环流损耗跑通之后再逐步加入开关损耗和磁芯损耗。6.3 优化结果的工程化修正优化工具箱给出的结果往往是连续值比如k4.73、Q0.38。但实际元件只能取标准值所以你需要做工程化修正。我的修正原则是k往小取整Q往大取整。因为k小一点增益范围更宽有余量Q大一点谐振电流更小效率更好。比如优化结果k4.73我取k4.5Q0.38我取Q0.4。修正后再跑一遍增益验证确认所有约束仍然满足。修正后的参数还要做一轮蒙特卡洛分析考虑元件容差电感±10%、电容±5%对增益范围的影响。如果最坏情况下增益仍然够用这组参数就可以定稿了。7. 我踩过的三个典型坑7.1 正反向增益曲线对不上第一次做CLLC的时候我按正向增益算好参数仿真正向没问题一切到反向就发现增益范围完全不够。排查了半天发现是副边谐振电容折算方向搞反了。正向分析时Cr2要除以n²折算到原边反向分析时Cr1要乘以n²折算到副边。我在代码里把两个方向用了同一个折算系数导致反向增益算错了。这个坑的教训是每次切换方向都要重新检查折算关系。最好在代码里把正向和反向的折算写成两个独立函数不要共用。7.2 轻载时增益失控有一版参数在满载时表现很好但10%轻载时输出电压开始飘调频调到最高频率也压不住。原因是轻载时Q很小增益曲线的峰值变得非常高而且峰值位置向低频偏移。我的最大工作频率设得不够高导致轻载时进入了增益上升区。解决办法有两个一是提高最大工作频率让轻载时也能工作在增益下降区二是在轻载时切换到间歇模式burst mode跳过调频控制。我最终选了第一种把最大频率从1.5倍谐振频率提高到2倍问题解决。7.3 死区时间与效率的矛盾前面提到死区时间要足够长才能实现ZVS但死区太长会增加体二极管导通损耗。我在一个项目里为了确保ZVS把死区设到了350ns结果满载效率比预期低了1.2个点。后来用示波器仔细看Vds波形发现250ns其实就够了之前是仿真模型里C_oss设大了。这个坑的教训是死区时间不要只靠仿真定一定要实测波形确认。仿真里的C_oss通常偏大导致算出来的死区偏保守。8. 仿真文件的使用说明与扩展方向我整理的MATLAB仿真文件包含四个部分增益计算脚本、参数扫描脚本、Simulink主模型、以及一个参数配置脚本。你拿到之后只需要改参数配置脚本里的设计指标其他三个部分会自动适配。使用顺序建议是先跑增益计算脚本确认FHA公式没问题再跑参数扫描脚本找到可行区域然后把选定的参数填入配置脚本最后打开Simulink模型跑闭环仿真。如果你只想快速验证一组参数直接改配置脚本跑Simulink就行。这个模型后续还可以往几个方向扩展加入磁集成变压器模型来评估漏感分配的影响加入热网络模型来估算稳态温升把调频控制换成移相调频混合控制来拓宽软开关范围。我自己正在做的是把CLLC和三相交错结构结合起来用三个CLLC单元错相120度运行进一步降低输入电流纹波。这个方向对中大功率储能PCS很有吸引力等跑出完整结果再单独整理一篇。
