把Boost PFC的CCM平均电流控制在PLECS里完整跑通是我最近花时间最多的一次仿真也是收获最大的一次。标题里这几个关键词——功率因数校正、CCM、平均电流控制、电流相位补偿——单拆开都不难但串成一条完整的仿真链路后很多环节比想象中讲究。我这次用PLECS从主电路参数计算开始把双环控制搭起来再补上电流相位补偿实测输入电流波形、PF和THD的结果都比较理想。这篇文章就把这套完整做法拆开讲适合正在做PFC课程设计、电源预研或是想验证控制算法的同学直接照着搭。文里所有参数、控制结构和调试经验都是可复现的你拿PLECS开一个模型按这个思路走一遍基本能跑出接近的结果。先交代一个大的结论如果只是交差做课设随便搭一个临界模式或者把峰值电流控制跑通波形也能看但如果目标是把输入电流做到接近正弦、功率因数做到0.99以上那CCM加平均电流控制是产品级PFC最常用的组合再配合相位补偿把零交越和滞后问题压下去才算完整。下面我按照实际搭建的顺序来讲参数怎么算、环路怎么连、相位补偿怎么做、PLECS里哪些坑要注意一条线说完。1. 为什么PFC要选Boost拓扑而且必须工作在CCM1.1 输入电流畸变的问题根源普通的整流加电容滤波负载输入电流只在电压峰值附近一小段导通谐波含量非常高总功率因数通常只有0.6左右对电网污染很大。国内外谐波电流限值标准比如IEC 61000-3-2这类对这类设备有明确的电流谐波限制所以必须做主动功率因数校正让输入电流主动去跟踪输入电压的波形和相位这也就是PFC的核心目的。Boost拓扑能成为PFC的主流选择关键在于电感放在输入侧。电感电流的形态直接决定了输入电流的形态而Boost电感的输入电流本身就是连续的天然适合让输入电流“成型”。反观Buck或反激拓扑输入电流是断续的要做PFC还得额外加滤波器吃力不讨好。Boost的升压特性还带来了一个额外红利输出电容电压高于输入电压峰值意味着在输入电压的绝大部分区间内电路都有能力把电流推出去这正好是PFC最需要的工况。1.2 CCM和DCM的选择边界Boost PFC可以工作在DCM断续模式、BCM临界模式和CCM连续模式。DCM和BCM在几百瓦以下的电源里很常见优点是开关管可以实现零电流开通EMI特性也好一点但问题在于电感电流纹波大相同功率下开关管和电感的电流应力明显更高。到了千瓦级DCM的峰值电流会大到不划算所以中大功率的PFC基本都是CCM。CCM的代价是续流二极管存在反向恢复损耗设计时需要用快恢复二极管或碳化硅二极管同时对控制环路的要求更高。但换来的是电感电流应力小、输入电流THD容易做低、功率因数高所以这个代价值得付。我这次仿真选的就是1kW、220V输入、400V输出的CCM Boost PFC负载按额定功率等效为160Ω电阻先跑稳态再测动态。1.3 平均电流控制相比峰值电流控制的优势电流环的搭建有两种常见方式峰值电流控制和平均电流控制。峰值电流控制实现简单通过比较电感电流瞬时值和参考值直接生成占空比但它的本质是让“峰值”跟随参考平均值和参考之间存在系统误差而且在占空比大于0.5时容易出现次谐波振荡还得加斜坡补偿对噪声也敏感。平均电流控制用电流误差放大器的积分作用让电感电流在一个开关周期内的平均值精确跟踪参考参考就是整流后的正弦模板乘以电压环输出因此理论上可以让输入电流与电压完全同相谐波也更低。从仿真角度看平均电流控制还有一个额外好处电流环的建模方式和实际模拟控制芯片一致后面如果要把控制算法搬到数字控制里迁移起来也比较平滑。所以我在这个项目里直接锁定平均电流控制下面的环路设计全部围绕它展开。如果有同学在峰值电流控制和平均电流控制之间犹豫我的建议很简单仿真的目的如果是贴近工程实际优先平均电流控制。2. PLECS主电路搭建与参数计算2.1 主功率电路结构PLECS里主电路的搭建非常直观。左侧是交流电压源220Vrms、50Hz后面接一个二极管整流桥整流桥正输出端串联升压电感L电感后端接开关管我用的理想MOSFET模型开关频率60kHz到地同时在开关管漏极和输出电容正端之间接升压二极管。输出电容并联一个电阻负载。测量部分加两个元件电感电流用电流传感器输出电压用电压传感器都接到PLECS Control域里去参与控制。这里有个容易忽略的点整流桥和升压二极管建议用带导通压降和反向恢复参数的器件模型不要一上来全用理想开关。特别是升压二极管的反向恢复在CCM模式下直接影响输入电流波形在零交越附近的表现也会让THD有可观的差异。我第一次跑全用理想模型PF算出来0.999换成实际二极管模型后掉到0.99附近瞬间清醒。仿真不是只看拓扑对不对器件模型对结果的影响很大。2.2 电感、电容与开关频率的匹配计算参数设计先定几个边界额定功率1kW输出400V输入220Vrms/50Hz开关频率60kHz。电感L主要按电流纹波要求计算。Boost在开关管导通阶段电感电流上升斜率是Vin/L所以电流纹波约等于Vin·D/(fs·L)。最恶劣情况出现在输入电压峰值处Vin峰值约311V对应占空比D(400-311)/400≈0.22。如果希望纹波控制在额定平均电流的20%以内——额定输入电流峰值约为1000×1.414/220≈6.4A也就是纹波不超过1.3A左右——反解LL Vin·D / (fs·Δi) 311×0.22 / (60000×1.2) ≈ 0.95mH我直接取整用1mH。这个值也保证了在轻载工况下电感电流仍基本连续CCM的边界安全余量比较足。输出电容C按100Hz的二次纹波电压来算。单相PFC的输出有2倍工频的功率脉动电容要吸收这部分脉动能量。输出电压纹波近似为ΔVP/(2π·f_rip·Vout·C)f_rip100Hz。如果允许纹波5V即1.25%则C1000/(2π×100×400×5)≈800µF。我取了1000µF仿真出来的输出纹波在4V左右和估算吻合。设计参数取值输入电压220Vrms / 50Hz输出电压400V额定功率1kW开关频率60kHz升压电感L1mH输出电容C1000µF额定负载R160Ω2.3 采样与调理环节的建模平均电流控制需要的是电感电流的平均值而不是瞬时值。在PLECS里不能直接把传感器信号接进PI因为电流信号里混着显著的开关纹波。我用了两种方式处理并做了对比一是在电流传感器后面加一个一阶低通滤波器截止频率设在开关频率的1/6左右也就是10kHz把纹波滤掉二是直接采瞬时值进控制靠电流环本身的增益衰减来压制纹波。实测下来第二种方式在PLECS里也能跑但THD和波形毛刺明显差一些而且对求解器步长更敏感。所以最终方案是在传感器后加低通这个滤波器的相位滞后正是后文要做相位补偿的原因之一。3. 平均电流控制环路的PLECS实现3.1 双环控制架构整个控制结构是经典的双环电压外环负责稳住输出电压它的输出作为电流幅值指令电流内环负责让电感电流跟踪“整流正弦模板×幅值指令”这个参考输出就是占空比交给PWM调制。我把这个结构拆成三个PLECS Control子模块来搭——参考生成、电压环、电流环——方便后面单独调参数。参考生成这一段要特别注意整流后的电压u_rect是带100Hz纹波的双正弦波如果直接用u_rect做模板它的幅值会在输入电压波动时跟着变所以要先做归一化处理。我用了u_rect除以它的峰值得到一个幅值恒为1的整流正弦模板再乘上电压环的输出v_ctrl得到电流参考。归一化这一步很关键不然电压环和电流环会互相耦合动态响应会明显变差。如果输入电压本身波动较大也可以改用RMS平方做前馈归一化但实现上要多加一个均值计算模块。3.2 电流内环从参考到占空比电流环的主体是PI控制器加PWM调制。PI的输入是“电流参考−滤波后的电感电流”输出限幅在0到1之间作为占空比指令。PWM我用的是PLECS Control里的三角波比较器三角波频率设60kHz占空比指令大于三角波瞬时值时开关管导通。这里方向一定要检查清楚Boost开关管导通时电感电流上升占空比增大对应电流增大所以PI输出到PWM的极性是正的。如果接反了整个环路会变成正反馈一上电就跑飞。电流环PI参数的起点我是按“带宽远高于工频、远低于开关频率”来定的。先用小增益试跑观察电流波形是否能在开关周期尺度上跟踪参考然后逐步加大Ki让电流误差在稳态时压到基本为零。我这一版最后用的Kp0.8、Ki3500这是在PLECS连续时间控制域参数下的经验值不同版本和不同单位定义下会有差异建议按第五节的方法自己扫一遍。3.3 电压外环带宽要压到20Hz以下电压环的设计重点是带宽必须远低于100Hz否则输出电压的100Hz纹波会通过电压环进入电流幅值指令进而污染输入电流波形。我用的电压环PI是Kp0.1、Ki12配合一个输出限幅0到1.2。这里有一个在PLECS里很实用的调试技巧在电压误差信号后面挂一个示波器肉眼观察100Hz分量是否被PI压住。如果电压环带宽太高你会看到v_ctrl上带着明显的100Hz波动输入电流THD立刻变差压下来之后v_ctrl基本是一条干净的直流量只在负载突变时变化。为了启动安全我在电压参考路径里加了一个软启动电压参考从0慢慢斜坡到400V斜坡时间50ms。不加软启动直接给400V参考启动瞬间电流参考会很大励磁电流冲击能把波形冲到好几倍额定值虽然仿真不会炸但会让PI在一开始就饱和拖慢收敛速度。PLECS里实现斜坡参考很简单用一个斜率模块加限幅器就行这个细节对调试体验的提升非常明显。4. 电流相位补偿滞后从哪里来怎么在PLECS里补4.1 相位滞后的三个来源跑通基础版之后把输入电流和输入电压放在同一个示波器里对比你会发现电流整体滞后电压一个角度大概在8到12度左右功率因数卡在0.97上下不去。这个滞后不是单一原因造成的至少有三个来源。第一个来源是电流传感器后面的低通滤波器。我前面用了10kHz的一阶低通在50Hz处会带来约0.3度的滞后这个量很小但如果为了更干净地滤纹波把截止频率调到1kHz滞后就会膨胀到快3度。第二个来源是电流环本身的跟踪误差。电流环带宽不是无穷大输入电流参考里除了50Hz基波还有丰富的低次谐波电流环对这些谐波的跟踪存在相位滞后而且频率越高越明显。第三个来源是零交越附近的“死区”效应。当输入电压接近零点时Boost升压比变得非常大续流二极管导通时间接近整个开关周期控制器很难精确塑形电流这一段的削顶和滞后会直接影响基波的相位。三种因素叠加在一起就是我观察到的那个滞后的全貌。4.2 相位超前补偿的设计思路我的补偿思路是让电流参考比输入电压“提前”一点用提前量去抵消后面那一串滞后。最常见的实现有两种。第一种是模板相位提前在归一化整流正弦模板上加一个微分项v_template_comp v_template k_lead·d(v_template)/dt因为sin的微分是cos相当于在基波上构造了一个幅值基本不变、相位超前atan(k_lead·ω)的新模板。如果要补偿8度k_leadtan(8°)/(2π×50)≈0.00045s。这个办法实现最干净PLECS里用一个增益串联一个一阶高通滤波器传递函数s/(1s·T_filt)就能算微分T_filt取1/(2π×2000)左右既算得出微分又不会放大高频噪声。要注意的是整流模板的微分在电压过零点处本来就有跃变超前量越大这个跃变带来的毛刺越明显所以参数不能贪。第二种是给电流误差路径串一个超前滞后网络G(s) (1s/ωz)/(1s/ωp)取fz300Hz、fp2kHz时在50Hz处大约可以提供8度的相位提升在150Hz、250Hz处提升更大等于顺带补偿了低次谐波的跟踪滞后。这个方案的好处是不动参考生成缺点是超前量随频率变化参数需要扫两轮才能定准。我实际仿真时以第一种为主第二种作为对照验证两者单独用都能把PF拉到0.99以上。4.3 PLECS里的具体搭建与验证我把微分补偿加在了参考生成模块里连接顺序是整流电压→归一化→微分补偿→限幅→乘电压环输出。注意微分补偿要和归一化之后的模板配合不能在归一化之前的原始整流波上做不然补偿量会随输入电压幅值漂移。加上补偿后我做了两组对比仿真一组补偿关掉一组补偿打开其余条件完全一致。实测结果差异很明显补偿前PF为0.974、THD为9.6%补偿后PF为0.995、THD为3.1%。输入电流的过零点明显“提前”了和输入电压的相位差基本消失。这里必须提醒一句超前角度不是越大越好。我试过把k_lead加大到对应15度值时零交越附近反而冒出一个明显的电流凸起THD回升到6%左右。原因是参考提前太多在输入电压接近零时强行让电流建立但Boost本身在那段区间没有能力维持塑形只会制造新的畸变。所以补偿量宁可小一点配合观察波形逐步加。5. 仿真结果对比与PI参数整定经验5.1 补偿前后的关键指标对比把稳态结果放在一起看比较直观。下面是同一模型在补偿前后其余参数完全一致的对比指标补偿前补偿后功率因数PF0.9740.995输入电流THD9.6%3.1%输出电压平均值399.8V400.1V输出纹波峰峰值8.2V8.5V输入电流与电压相位差约9度滞后约1度以内电压纹波基本没变化这是符合预期的因为相位补偿动的是电流参考的相位不影响能量平衡。真正改善的是基波相位和低次谐波这两者恰好是PF和THD的主要贡献项。波形上看补偿后的输入电流在零交越附近的“平台期”明显变短从整流正弦的拟合程度来看残差主要集中在一小段零交越区间这是Boost PFC的物理极限单纯靠线性控制压不掉如果还要继续优化就要上谐波补偿或变占空比塑形了。5.2 PI参数的扫参方法我调试PI时没有用复杂的整定工具就是用PLECS的参数扫描功能暴力扫。扫电流环Kp时固定Ki从0.1开始步进0.2扫到2.0每次跑0.2秒仿真看电流参考与实际电流的误差波形同时记录THD。电流环THD最低点通常出现在THD不再下降、且电流波形没有明显振铃的位置。扫电压环时则固定电流环参数看v_ctrl的100Hz波动幅度和负载阶跃的恢复时间。这一轮下来电流环Kp0.8、Ki3500电压环Kp0.1、Ki12是我这组参数下的最优区间。这里要强调PLECS控制域的PI参数单位和我早年在模拟电路里习惯的那套“电阻电容乘积”完全不同直接照搬别人的数值几乎没有意义。建议每个人都在自己的模型上扫一遍我给的这组值只作为起点。另外扫描时仿真时长要足够至少要覆盖5个工频周期也就是0.1秒否则THD的统计窗口不够结果会有随机波动。5.3 动态响应测试最后补一个动态测试稳在1kW0.15秒时刻把负载从160Ω切到320Ω半载观察输出电压。实测电压过冲到408V左右大约2%的过冲150ms内回到400V附近没有振荡也没有次谐波。这个响应速度对电压环带宽10Hz左右的设定基本合理。如果觉得恢复太慢可以把电压环Ki调大但要同时看输入电流THD是否被100Hz纹波污染两者是矛盾的需要平衡。同理如果把电压环Kp调太大启动阶段v_ctrl可能先撞限幅电流参考变形THD也会有反弹。6. PLECS仿真里容易踩的坑6.1 求解器设置与步长PLECS处理开关电路用的是变步长求解器理论上对开关瞬态有专门处理但仿真时间拉长到多个工频周期时默认设置仍然会偏慢。我的做法是把最大步长设为开关周期的1/10也就是1.67µs这样在开关动作附近强制细化同时在电感、电容这类储能元件上保留默认的连续模型不要为了“提速”改成离散模型。如果只是定性看波形10µs最大步长也能跑但要算THD和PF步长还是得压下来否则谐波统计会偏大结论会失真。6.2 初始条件和软启动很多仿真发散的问题根源在初始条件。电容初始电压为0时直接上电冲击电流非常吓人PI直接饱和电流环参考被限幅拖着走波形要好几拍才恢复正常。我在电容上设置了初始电压380V再配合软启动斜坡两边一起基本上消除了启动冲击。PLECS里电容元件的初始电压可以直接在参数里填不用额外搭预充电电路这个特性很省事。电阻负载的初始值不用设但如果是接电机、电池这类有反电势的负载初始条件要单独考虑。6.3 参考生成的除零问题如果采用“电流参考电压环输出×u_rect/瞬时电压平方”这种前馈写法那么在电压过零点附近会碰到除零PLECS会报数值奇异或者算出一堆尖峰。我用的归一化模板是除以峰值这个常数天然规避了这个坑。如果你就是想用RMS前馈建议给分母加一个小数值下拉保护比如除以RMS平方加上一个极小常数或者把前馈改成一阶低通处理后的量。这个坑在仿真初期很容易被忽略但一遇到就知道有多耽误时间。最后一个经验调PLECS模型时不要一次把所有环路都打开先把电压环断开给v_ctrl一个固定直流量单独验证电流环和相位补偿电流环稳定了再接电压环。这个“先内环后外环”的调试顺序能省掉至少一半的排查时间。我这次就是在电流环单独调试阶段发现零交越处波形不干净才下定决心加相位补偿的如果一上来就双环全开问题混在一起定位起来会痛苦得多。
阅读完成 · 觉得有帮助?