GaN图腾柱PFC过零点难题:三种无锁相环方案实测对比
发布时间:2026/9/24 14:31:47 锦皓数字建站

做过GaN图腾柱PFC的朋友十有八九都被“过零点”折磨过。示波器上明明是干净漂亮的正弦电流波形一到电网电压过零附近电流就开始乱跳要么冒出一截尖刺要么直接拖出一段持续震荡严重的甚至把半桥驱动信号都打乱。网上的资料大多在讲PFC控制环路怎么调很少有文章愿意把过零点这个局部问题单独拎出来讲透。今天这篇我就把这两年两个项目里实测过的三种无锁相环过零处理方案完整记录下来包括原理、代码思路、实测波形和踩过的坑希望对正在调GaN图腾柱PFC的同仁有点帮助。1. 过零点难题的成因拆解为什么偏偏是这里出问题1.1 GaN图腾柱PFC的基本结构与工作特点要解决过零点问题先把图腾柱PFC的家底翻一翻。图腾柱PFC的功率级由两个桥臂组成一个高频桥臂一个工频桥臂。高频桥臂用两颗GaN FET负责PWM开关和同步整流工频桥臂用两颗普通硅MOSFET或慢管只跟着电网正负半周切换方向。正半周时工频桥臂下管导通高频桥臂下管作为Boost开关管工作上管作为同步整流管负半周时角色互换。因为电流路径里始终只有一个二极管压降实际上是同步管的导通压降所以效率能做得很高。再加上GaN器件没有体二极管反向恢复问题开关速度极快图腾柱PFC成了目前大功率服务器电源、充电桩模块里最主流的高频PFC方案之一。GaN器件有几个和硅器件截然不同的脾气输出电容Coss非线性非常严重Vds越低Coss越大反向导通压降大死区时间稍微长一点就损失效率栅极驱动窗口很窄Vgs最大值一般只有6V左右误导通风险高。这几个特点决定了过零点附近绝不是GaN图腾柱PFC可以“随便浪”的地方。1.2 过零点附近到底发生了什么电网电压过零时整流后的母线电压也接近零输入电流需要从正方向平滑过渡到负方向。从控制角度看Boost电感的伏秒积在这个位置很小占空比接近0.5半桥开关节点电压在母线电压和地之间来回翻转。问题就出在这里第一电流过零附近信号幅值很小电流采样信噪比急剧变差采样到的数值根本不可信。第二半桥中点的电位在过零瞬间需要快速翻转GaN的Coss非线性会放大dv/dt开关节点电压容易冲出很高的尖峰。第三电感电流接近零时如果控制环路还在按正常逻辑输出占空比很容易出现电流“打穿”到反向这时候再硬切换回来就是一波振荡。这里顺便说一句电源里的“过零点”和电机控制里BEMF反电动势过零检测完全是两码事。BEMF过零检测是在永磁电机三相绕组里通过反电动势过零来估算转子位置图腾柱PFC的过零点是指交流输入电压/电流的过零点。两者只是中文都叫“过零”原理、对象、处理方式都不搭边千万被绕进去。1.3 传统方案为什么不好用传统图腾柱PFC处理过零点最常规的做法是硬件过零检测电路加锁相环。交流电压通过电阻分压后接比较器检测到过零后给DSP一个中断再用数字或模拟PLL锁住电网相位。这套方案听起来成熟实际用起来痛点很明显过零比较器和后续隔离电路有延迟。别小看这个延迟几十微秒的延迟在100kHz开关频率下就是几个开关周期对过零附近的瞬时响应来说误差很大。PLL在大电网频率偏移时会有相位误差电网频率不是固定50Hz的白天晚上、重载轻载都会漂PLL要持续调调不好就是过零窗口错位。数字PLL参数多和PFC控制环路藕断丝连现场调起来非常痛苦。所以现在很多新设计开始转向“无锁相环”思路不锁相位不依赖硬件过零检测而是用预测、消隐、波形整形等手段让系统在过零点附近安全过渡。下面这三个方案就是我实际测过的无锁相环路子。2. 三种无锁相环方案的设计思路与原理2.1 方案一固定消隐窗口法固定消隐窗口法叫法很多也有人叫“过零死区抑制法”或“固定时间窗口屏蔽法”。思路一句话说清电网频率就是50Hz半周期10ms我不需要实时锁相只要软件里维护一个自由运行的周期计数器按上一次电网周期的平均值预测过零时刻在预测点前后各开一段消隐窗口。窗口内封锁高频PWM让系统“歇口气”等过零风暴过去了再恢复正常工作。窗口内的具体动作可以是强制半桥两管同时关闭、强制输出低电平或者切入低频对称模式让电感电流自然续流。我实际用得最多的是强制半桥关闭一小段靠母线电容维持输出电感电流通过GaN反向导通特性自然续流几百微秒内不会有任何异常。代码实现的核心就一段判断在PWM中断周期里检查计数器是否落进窗口区间// PWM周期中断每10us触发一次 // zeroCnt是一个自由运行的半周期计数器0~1000循环 #define ZERO_START 450 // 窗口起点对应过零前100us #define ZERO_END 550 // 窗口终点对应过零后100us if (zeroCnt ZERO_START zeroCnt ZERO_END) { // 进入消隐窗口强制PWM输出低电平 EPwm1Regs.AQCSFRC.bit.CSFA 2; // 强制低 EPwm1Regs.AQCSFRC.bit.CSFB 2; // 强制低 zeroInWindow 1; } else { // 恢复正常PWM输出 EPwm1Regs.AQCSFRC.bit.CSFA 0; EPwm1Regs.AQCSFRC.bit.CSFB 0; zeroInWindow 0; }窗口宽度怎么选这是方案一的灵魂。电网频率波动是主要误差源电网标准允许±0.5Hz折算到50Hz的半周期就是±10us偏差。如果考虑你用的MCU晶振误差一个周期累计下来还有个几微秒所以理论最小窗口也就±30us。但我实测下来±30us太激进负载变化引起的电流相位偏移会直接把窗口顶穿尖峰又冒出来。我习惯留5到10倍裕量取±100us到±150us。这个窗口宽度下过零附近电流波形会略有一点平坦但对THD影响可控制在0.3%以内完全可接受。方案一的优点是逻辑极其简单、完全不用管电流采样噪声、也不会出现传统过零检测的延迟问题MCU算力占用几乎为零。缺点是过零窗口附近电流波形有轻微畸变对THD极致敏感的产品需要斟酌。2.2 方案二伏秒积重构预测法方案二本质上是把一个“电流过零传感器”搬进数字控制器里用状态观测的思路估算出电感电流过零的时间点比固定窗口更精准。在Boost PFC中每个开关周期内电感电流的上升斜率是(Vin - Vsw)/L下降斜率是(Vout - Vin)/L。过零前平均电流Iavg是正的过零后是负的Iavg的斜率是连续变化的。那么只要采集到当前Iavg及其变化率就能线性外推电流过零的时刻。听起来和电机控制里的观测器有点像但这里不需要很复杂的模型因为PFC的电气参数是明确的电感值L、输入电压Vin、输出电压Vout你都拿得到。核心思路是在每个PWM周期中断里用电流采样累加值算一个平均电流再用相邻周期的平均电流差值算di/dt然后外推零电流对应的时间。伪代码大概是// 每个PWM周期10us执行一次 int32_t iavg_new iavgAccum 4; // 取16个周期滑动平均 int32_t di_dt iavg_new - iavg_old; // 电流变化率单位LSB/周期 if (di_dt ! 0) { // 外推距电流过零还有几个PWM周期 zeroEtaTicks (0 - iavg_new) * PWM_PERIOD_US / di_dt; } iavg_old iavg_new;这里要注意几个细节。一是零电流附近的平均电流非常小变化率也小外推结果对采样噪声极其敏感。所以我前面强调要滑动平均最好用16次或32次累加值采样毛刺会被摊平。二是外推结果只在短时间有效比如预测到100us后过零这个可以信如果预测到2ms后过零就别信了负载扰动早就改变了电流轨迹。所以实际工程上伏秒积重构法一般只用来生成一个“短时预告”预告后200us内再配合消隐窗口做处理而不是直接替代窗口。方案二的测量精度显然比方案一高THD和效率表现都更好但代价是代码复杂度上去了而且对电流采样的质量和一致性要求很高。如果你选用的电流采样方案在过零附近本来就很差那方案二给出的外推结果也不可用容易弄巧成拙。2.3 方案三分裂占空比软过渡法第三个思路换个角度与其较劲找到过零点的精确时刻不如让系统在过零附近“钝化”下来电流从正到负的过渡本身就不需要那么陡。分裂占空比软过渡法是在预测的过零窗口附近把原来一个正常的PWM周期拆成多个小幅占空比的子脉冲每几个子周期占空比只走一小步从当前的占空比逐步渐变到新半周的目标占空比。这样做的效果是电感电流的正负切换被“展宽”成一个平滑的弧线而不是硬生生折过去。即使过零时间估算偏了几十微秒由于占空比本身是渐变的电流不会瞬间产生巨大尖峰或震荡。实现上有两个位置可以插代码。一是直接改比较值在过零窗口内逐步修改CMPA寄存器每几个开关周期增加或减小一个步进量。二是用PWM模块的调制模式切换让PWM从正常连续模式切到突发模式或者低开关频率模式。第一种我实测过代码量不大逻辑也直观。举个例子假设正常半周开始时占空比从0.4平滑涨到0.5过零窗口的做法是每次中断把EPwm的CMPA值改一次步进量为0.01一个窗口200us内改20步占空比就从0.4走到了0.6电流方向自然切换。关键是开关频率下这个渐变过程非常平滑波形上几乎看不出来。方案三的优点是容错性极强对过零时间误差不敏感适合和多模式控制配合使用EMI表现也好。缺点是多出的过渡过程让效率略有下降毕竟每个子脉冲都有开关损耗而且代码层多了一个渐变查表逻辑比方案一复杂一点。3. 实测对比与关键实现细节3.1 测试平台与控制器实现要点先说下我实测用的平台输入220V/50Hz输出400V额定功率2kW峰值3kW开关频率65kHzBoost电感240uH母线电容配了220uF。控制器用的是TI的C2000系列PWM以UP-DOWN计数模式产生中心对齐波形ADC采样点在周期中间正好避开开关沿的噪声。无论用哪个方案数字控制器的PWM模块都要预留强制输出和比较值在线修改能力。C2000的EPWM模块有AQCSFRCAction Qualifier Continuous S/W Force Register可以在软件里直接强制PWM输出高低电平这是实现消隐窗口的关键寄存器。STM32G4的话可以用HRTIM的紧急刹车或比较事件效果类似。ADC采样要特别注意电流采样点必须放在PWM周期中间并且要做滑动平均。过零附近电流本来就小信噪比差采样点再落在开关沿附近就彻底没法看了。我一般做16次滑动平均采样率从65kHz降到4kHz左右带宽够用噪声削掉一大截。3.2 过零窗口与相关参数的计算方法这次实测过程中我先后试过好几组参数踩了不少坑整理出一套比较稳的计算逻辑过零窗口方案一宽度计算公式我前面提过理论最短取电网频率偏差折算值的5倍以上。电网频率偏差按±0.5Hz算半周期时间偏差为Δt (1/(2×49.5) − 1/(2×50)) × 10^6 × 修正系数 ≈ ±10us再考虑MCU晶振误差和负载电流相位偏移实际取±100us比较稳妥。如果负载动态变化大我不建议盲目扩大窗口更合理的做法是窗口内同时做小幅度占空比渐变这样窗口即使短一些也不会硬切。死区时间的选择也是过零处理的重要参数。GaN器件死区我设在60ns到100ns之间。死区太长过零附近GaN反向导通时间变长损耗明显增加严重时体二极管参与续流同步整流效果被破坏波形上能看出有一截效率凹陷。死区太短开关节点瞬间直通风险加大GaN栅极驱动一旦有振铃就非常容易误导通真炸过管子。3.3 三种方案的实测数据对比这里把三种方案放在同样的200V输入、400V输出、2kW负载条件下实测数据做一个横向对比方案THD 2kW过零尖峰幅度轻载表现实现难度备注方案一固定消隐窗口3.8%620V未加吸收一般窗口内效率略下降低纯软件逻辑适合中低功率、算力紧张场景方案二伏秒积重构预测3.2%540V好外推误差小中需要高质量电流采样适合追求THD和效率的电源方案三分裂占空比软过渡4.1%无尖峰但有轻微凹陷好容错强中需要查表渐变适合EMI敏感、追求可靠性的场景尖峰幅度这事得说明白这个数值和母线电压、驱动电阻、PCB寄生参数都有关系不同的板子差异很大。同一块板子上方案一的尖峰从560V到650V都有方案三基本看不到尖峰这是由它的软过渡本质决定的——电流切换过程被展平了没有猛烈的dv/dt冲击。THD方面方案二明显优于方案一和方案三。原因在于方案二的干预窗口是“按需触发”的过零附近正常控制几乎不受影响而方案一有固定窗口的能量中断方案三有占空比渐变的拖尾这两个都会损失一点波形质量。3.4 实际调通一个组合方案的记录在第二个项目里我最终采用的不是单一方案而是“方案一为主、方案三打辅助”的组合。最开始的版本只有固定消隐窗口窗口设了±100usTHD做到3.8%但EMI预扫时发现过零附近150MHz到300MHz频段有凸起。排查下来是窗口退出时占空比从零直接跳到正常值形成一个陡峭的电流阶跃激励了高频谐振。后来在窗口结束前80us内加了占空比渐变相当于用方案三的思路给方案一做“软着陆”——从窗口内强制关闭状态逐步恢复占空比每次加一小步200us左右恢复到正常占空比。加了这个渐变之后EMI凸起直接消掉THD还从3.8%降到了3.5%。这算是一个我比较满意的组合方案。组合思路其实很好理解窗口负责“挡住”过零风暴渐变负责“平稳上岗”各干各的事互不干扰。如果还要更激进一点可以在渐变过程中再用方案二的伏秒预测动态调节渐变起点让软过渡的动作起点更贴近真实过零点。这个我没在量产项目里继续做因为现有组合已经满足指标再优化的收益不大。4. 常见问题与排查技巧实录4.1 过零尖峰和过零振荡是两回事调试过程中最容易混淆的就是尖峰和振荡。我总结了一个快速区分方法尖峰是单次脉冲触发电平放在正常工作电压之上用单次触发抓波形抓到的是一个孤立的凸起振荡是重复存在的减幅波形持续好几个周期跑起来就一直有。尖峰的处理方向是抑制dv/dt增大驱动电阻、在开关节点加RC吸收电路、缩短功率回路走线。振荡的处理方向是检查控制环路过零附近环路是否还有足够的相位裕量占空比变化是否过猛以及窗口退出的瞬间有没有引入新的扰动。4.2 死区、采样与布板细节死区问题我在前面提过一次这里再说一个具体教训死区从60ns调到120ns效率在2kW负载下掉了接近0.5%过零附近波形也出现了明显的台阶。原因就是GaN反向导通压降高死区越长反向导通损耗越大。死区优化不是加大那么简单要在驱动芯片能力和安全裕量之间取最优值。调试时可以用热成像看半桥区域温升如果过零附近局部发热明显很大概率是死区偏长。电流采样我建议用中心对齐PWM的周期中点采样并且一定要避开开关沿。GaN在过零附近的dv/dt非常快哪怕采样点偏移几十纳秒也可能采到开关噪声。这里可以给个相对稳的配置ADC触发事件放在PWM周期中间也就是增减计数模式的周期匹配事件触发延迟设为1us左右再叠加16次滑动平均基本能把过零附近的毛刺滤干净。PCB布板方面半桥中点到电感的功率回路面积要尽量小过零附近的高dv/dt是主要的EMI发射源。回路面积大寄生电感就大尖峰电压就是L×di/dt叠加在母线电压上两项一加非常可观。另外GaN栅极驱动回路要短而粗驱动电阻取值建议在1Ω到4.7Ω之间太小Vgs振铃严重太大开关损耗增加。4.3 三种方案的适用场景与避坑组合最后做个方案路线的选型建议如果你做的是中小功率、成本敏感、软件算力紧张的产品比如1.5kW以下的充电器、适配器主推方案一。代码量小调参简单稳定性高过零问题基本能压住。唯一要做的就是接受那一点THD牺牲。如果你做的是服务器电源、通信电源这类对THD和效率都有硬指标的模块建议直接上方案二。虽然电流采样要求高但3.2%的THD在2kW级别已经很能打。轻载时外推误差小实际运行稳定性也不错。如果你做的是车载充电机、大功率充电桩这种对EMI和可靠性要求极高的场景方案三更合适。波形没有尖峰展开的电流过渡过程对后级干扰小而且容错性强即使电网频率波动异常也不容易出现功能性故障。组合的避坑点我想多说几句。第一不要同时启用方案一和硬件过零检测电路。我试过两者同时工作时硬件过零中断和软件窗口触发时间点会有微差两套逻辑互抢控制权波形反而变乱了。第二固定窗口不要覆盖负载突变时刻。负载突然从10%跳到100%时电流过零点会大幅度漂移固定窗口会失效这时候要靠环路的快速响应去拉回来而不是靠消隐。第三方案二的外推结果不要直接用于长期预测只做短时预告超过几个PWM周期之外就当噪声丢掉否则负载突变时误判很危险。5. 写在最后的经验总结做GaN图腾柱PFC一年多我最大的感受是过零点问题与其说是“检测难题”不如说是“策略问题”。很多同仁执念于把过零时刻精确到微秒级花大量精力去调硬件比较器、调PLL参数结果效果还不如一个干干净净的软件窗口来得稳。GaN器件本身速度足够快它的短板恰恰是需要人在策略上多给它留一点缓冲空间尤其在过零这种瞬态关键区域。如果你也在调这个环节我的建议顺序是先把PFC主环路调稳确认环路裕量充足再回头看过零点。因为很多所谓的过零问题根源其实是环路带宽不够或者相位裕量不足在过零附近被放大了而已。环路稳了过零点问题直接少一半。最后再分享一个小技巧示波器观察过零波形时一定要把时基拉到几十微秒级别电压探头用短地簧不要用长地线。用长地线量出来的500mV振铃很可能一半以上是探针本身引入的伪信号。细节决定成败GaN的过零点调试尤其如此。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。