1. 从"让电网看见纯电阻"说起:Zin策略的核心逻辑
1.1 PFC的本质目标与Zin的定义
做PFC这些年,我越来越认同一个观点:单相PFC的数字控制问题,本质上是一个"阻抗整形"问题。Boost PFC的拓扑不复杂——整流桥、升压电感、开关管、二极管和输出电容,难的是控制:输入侧要正弦电流、要单位功率因数,输出侧要稳定的直流电压,两个目标挤在一个变换器里,互相牵制。
用阻抗的语言描述,PFC变换器从电网侧看进去的输入阻抗Zin是一个复阻抗。控制策略的终极目标,就是让Zin在工频附近呈现纯阻性:Zin = R_e,没有虚部。一旦Zin出现明显的虚部,输入电流和电压之间就有了相位差,无功分量出现,功率因数自然往下掉。这个视角虽然简单,但它把"电流波形好不好"这个模糊的目标,转换成了"输入阻抗是不是纯电阻"这个可以用频域工具精确测量、精确评估的目标。
Zin控制策略的核心,就是把控制目标从"让电流跟踪某个正弦参考"改写为"让变换器的输入阻抗逼近预设的等效电阻"。这个R_e不是拍脑袋定的,它由输出功率和输入电压有效值共同决定:
R_e = V_in_rms² / P_o
举个例子:220V输入、输出1kW时,R_e = 220² ÷ 1000 = 48.4Ω。负载变重时,电压环检测到母线电压跌落,会动态减小R_e(或者说增大等效导纳G = 1/R_e),电流参考变大,输入功率上升,母线电压被拉回目标值。整个功率平衡过程,本质上是电压环在动态调整R_e这个参数——这就是Zin策略和"死板地跟踪固定电流参考"的做法的分水岭。
1.2 为什么用阻抗视角而不是电流视角
这是Zin策略和传统平均电流模式控制(ACMC)最本质的区别。传统做法是:电压环输出一个电流幅值指令,电流环去跟踪一个与输入电压同相的正弦参考。这个框架本身没问题,但调试中你会发现一个麻烦——电流环参数对工况很敏感,负载变了、输入电压变了,环路特性跟着变,参数得反复重调,而且很难说清楚"到底调到什么程度算最优"。
Zin视角下,你关心的问题变了:不是"电流有多大",而是"输入阻抗是什么形状"。理想情况是全频段Zin = R_e,但实际上数字延迟和电流环带宽限制,会让Zin在高频段呈现感性(相位滞后);Boost电感自身的阻抗特性,叠加采样滤波网络的影响,可能会在特定频率形成谐振尖峰。电流内环本质上就是在做Zin整形——通过反馈把变换器输入阻抗拉向目标值。环路增益越高、带宽越宽,Zin越接近理想电阻,但延迟和噪声的代价也随之而来。
这个视角带来的直接价值是:你可以用阻抗测量的方法做控制策略评估。比如在电网侧注入一个小幅扰动电压,测输入电流的响应,画出Zin的波特图,看看工频处有没有相位偏移、高频处有没有谐振峰。这比单纯盯着THD和PF数字要深入得多——THD和PF是结果,Zin的频域形状是原因。我在调试中习惯先画出目标阻抗形态,再反推电流环和电压环分别该承担什么整形任务,整个逻辑清晰很多。
2. 数字控制平台搭建:采样、同步与PWM时序
2.1 硬件链路与芯片选型
数字单相PFC的硬件链路,我这边用的是TI的TMS320F280049C,主频100MHz,内置12位ADC和独立的PWM模块,做单相PFC富余量很大。当然,STM32F334或者带高精度PWM的国产DSP也能做,关键看ADC采样率和PWM分辨率能不能满足需求,以及PWM模块能不能支持灵活的同步触发。
采样链路是这套系统最容易出幺蛾子的地方,我梳理一下各通道的设计要点:
- 输入电压采样:交流电压经过电阻分压后送入ADC。我建议直接采交流电压的绝对值(整流桥前的波形),而不是整流后的馒头波——保留过零信息对软件PLL做相位同步至关重要。
- 电感电流采样:用采样电阻或者霍尔传感器。采样电阻温漂小、成本低,但要处理隔离;霍尔传感器隔离方便,但带宽和零漂要注意。实验室阶段我倾向采样电阻,量产评估时再看成本和隔离需求。
- 母线电压采样:分压电阻加隔离放大器,注意耐压等级和响应速度,这直接影响电压环的动态表现。
- PWM输出:经过驱动光耦或专用栅极驱动芯片接到Boost管的栅极。驱动电路的回流路径要短、要粗,否则开关噪声会串进模拟采样回路,污染整条信号链。
一个实用建议:所有模拟采样通道的RC滤波时间常数要尽量匹配。特别是电压和电流通道,如果滤波时间常数不一致,会引入额外的相位差,最终体现在PF和THD上。我吃过这个亏——两个通道一个用了100ns滤波,一个用了1μs滤波,结果输入电流和电压之间出现固定相位差,怎么调控制器都消不掉,最后发现根因在采样链路的相位失配。
2.2 采样时刻选择与数字延迟的影响
数字控制最大的天敌是延迟。从ADC采样到PWM占空比更新,最快也得一个PWM周期。以80kHz开关频率为例,一个周期就是12.5μs——这个延迟在工频50Hz下只占0.225°,看起来微乎其微;但对电流环来说,延迟引入的相位滞后在环路带宽附近会被放大,直接限制你能实现的带宽和相位裕度。
实操上我的做法是:ADC采样触发同步到PWM载波的峰顶或谷底(中心对齐模式)。为什么选这个时刻?因为Boost电感的电流纹波在一个开关周期内是三角波,峰顶和谷底正好对应纹波的中点,此时采样得到的是电流平均值,而不是峰值或谷值。这个细节决定了电流环能不能直接用PR控制器,还是要额外做采样值补偿——很多从模拟控制转数字控制的工程师因为没注意这个时序,电流环怎么调都振。
PWM更新模式同样重要。建议用shadow register加载模式,也就是占空比在PWM周期开始时才更新,避免在一个周期中间突然改变占空比导致电流突跳。配合中心对齐PWM和"周期末更新"这套时序,是数字PFC比较稳妥的框架。我在第一版代码里图省事用了"立即更新"模式,结果电流波形上出现肉眼可见的毛刺,查了半天才定位到是这个时序问题。
数字延迟的补偿思路,我在第4章会详细展开。这里先记住一句话:采样时刻决定你"看到"什么,PWM更新时刻决定你"控制"什么,这两个时刻必须有一个明确的、固定的相位关系,这是数字控制的地基。
3. 双闭环与Zin整形:电流参考生成与控制律设计
3.1 电压环的带宽约束与母线电容配合
PFC的输出侧天然带有100Hz(或120Hz)的工频纹波——输入功率是正弦脉动的,而输出功率近似恒定,差值全靠母线电容吞吐。电压环如果带宽太高,会把这种纹波"看见",并通过电压环的输出直接调制电流参考的幅值,导致输入电流出现三次谐波畸变。所以电压环的穿越频率通常压在10~20Hz,比工频纹波频率低一个数量级以上。这不是保守,是物理规律决定的。
带宽压低了,动态响应必然变慢。负载突加时,母线电压的跌落只能靠电容里储存的能量来扛。母线电容的取值本质上是在体积成本和动态响应之间做权衡。工程上可以按这个估算式来选:
C ≥ P_o ÷ (2π × f_line × ΔV_o_max × V_o)
算个例子:1kW输出、母线电压400V、允许负载阶跃时电压跌落40V、工频50Hz,C ≥ 1000 ÷ (2π × 50 × 40 × 400) ≈ 199μF,实际取330μF或470μF,留足裕量。电容太大可以把动态压得很低,但成本和体积上去了,启动充电浪涌时间也变长,得不偿失。
数字实现上,电压环用PI控制器就能满足要求,但有两个细节必须处理。一是输出限幅:电压环的输出是电流参考的幅值(或者说等效导纳G),必须限幅防止过流。二是抗饱和(anti-windup):很多人忽略这个——电压环输出一旦饱和,积分项继续累积,负载恢复瞬间会产生很大的过冲甚至振荡。我的做法是让积分项的限幅动态跟随输出限幅,实测母线过冲能压下来三分之一以上,这个经验值得抄。
3.2 电流环的PR控制器与电网电压前馈
电流环的参考波形是正弦。如果用PI控制器跟踪正弦参考,稳态下一定有幅值和相位误差——PI控制器在直流处的增益才是无穷大,对正弦信号增益有限。带宽足够高时误差可以压小,但带宽总有上限。用PR(比例谐振)控制器在工频处提供高增益,是实现正弦参考无静差跟踪的成熟做法。
PR控制器的连续域形式是:
G_PR(s) = K_p + K_r × s / (s² + ω₀²)
离散化的时候有个容易踩的坑:ω₀要按实际工频(50Hz)给定,而且建议用Tustin变换加预畸变(prewarp)做离散化。我一开始用普通双线性变换,谐振频率偏移了将近2Hz,工频处的增益大打折扣,THD一直压不下来;换成prewarp之后谐振点才准,问题当场解决。
Zin策略里还有一个很关键的前馈通道:电网电压前馈。电流参考是i_ref = v_in / R_e,电网电压突然波动(电压跌落、谐波干扰)会直接扰动电流。加上v_in的前馈项,可以在一个采样周期内把电感的大部分电压补偿掉,让电流环只负责修正偏差。这个前馈本质上就是在调整Zin的相位——前馈越准,Zin越接近纯阻性。我实测过,加上前馈后输入电流在电网波动场景下的畸变明显减小,THD能再降1到1.5个百分点。
电流环的带宽目标,我习惯取开关频率的1/10到1/6。80kHz开关频率下,电流环带宽设计在8~13kHz,相位裕度保持在45°以上。带宽再往上,数字延迟的相位滞后会让你捉襟见肘——不是不能做,而是投入产出比太差,系统对寄生参数也变得过于敏感。
4. 实测调试中绕不开的五个坑
4.1 过零畸变:Zin在过零区域失效
单相Boost PFC有个天生问题:输入电压过零附近,电感两端电压差几乎为零,电流变化率非常小,电流环想拉电流也拉不动——驱动占空比已经接近极限了。结果输入电流在过零附近出现"台阶"或"毛刺",这是THD的主要贡献源。Zin策略在这个区域也一样失效,因为电流根本跟不上参考,等效阻抗形态完全偏离纯阻性。
我调试时实测过几个方法的组合效果:
- 过零附近对电流误差增益做自适应调整,把环路增益临时拉高,让电流更快跟上参考。
- 给PR控制器并联3次、5次谐波补偿器,针对THD的主要成分做定点消除。
- 让电流参考略微超前于电压相位,补偿数字延迟带来的滞后。
单独用第一个方法,过零畸变能控制在2%~3%;三个方法叠加,THD能做到5%以内。要注意谐波补偿器的增益不能给太大,否则弱电网下容易引发振荡,需要结合阻抗测量结果来整定——这一步没有捷径,只能反复实验。
4.2 数字延迟导致的相位滞后补偿
这个坑每个做数字电源的人都躲不掉。前面说过,ADC采样到PWM更新至少有一个周期延迟。80kHz开关频率下,1kHz处的电流环相位滞后大概是4.5°(每周期0.225°×20),听起来不大;但电流环带宽放到10kHz附近时,累积的相位滞后会显著吞掉相位裕度,系统容易在高频段出现谐振峰,动态时电流会振铃。
我常用的两种补偿手段:
- 超前-滞后补偿器(lead-lag compensator),在电流环中串联一个零点略低于期望带宽、极点略高于期望带宽的超前环节,把带宽附近的相位往回拉。实现简单,调参直观,适合工程快速落地。
- 模型预测控制(MPC),用离散模型预测下一个开关周期的电流行为,直接对消数字延迟。效果更好,但对模型参数(电感值、等效电阻)的准确性敏感。我目前的测试版本用的是这种思路的简化变体——电感饱和导致参数变化时,需要在线重新估计。
这两种方案各有适用场景,实验室验证用方案一就够了;如果目标是极致动态性能,方案二值得投入时间。但无论选哪种,前提都是先把采样时序和PWM更新时序理清楚。
4.3 轻载与空载下的Zin异常
轻载时输出功率很低,按R_e = V_in_rms² / P_o算出来R_e非常大,几百欧姆到几千欧姆。此时电流参考很小,电流环的跟踪精度下降;而且Boost电感在轻载下很容易进入断续模式(DCM),DCM下变换器的增益特性和CCM完全不同——如果还用同一套PI参数,控制效果会变得很怪,甚至出现电流反向振荡。
我的处理办法:
- 检测电感电流过零,判断CCM/DCM状态,切换不同的控制参数或控制策略。
- 轻载时用突发模式(burst mode),间歇性开关,既维持母线电压又降低开关损耗。
- 对R_e做限幅,避免电流参考小到控制分辨率以下,出现步进式跳变。
这里要强调:"Zin异常"不是指R_e变大这件事本身——R_e本来就应该随负载变化——而是指变换器在轻载下阻抗形态偏离了纯阻性。你用阻抗测量工具在轻载下扫一下Zin的频域特性,会发现相位偏移和幅频波动比满载明显得多,这就是轻载需要专门处理控制策略的根本原因。
4.4 ADC采样的毛刺与均值偏差
开关管动作瞬间会产生很大的dv/dt和di/dt,如果采样时刻离开关动作太近,ADC采样值会包含毛刺。前面说采样同步到载波峰谷,就是为了避开开关动作窗口,但实际电路中振铃可能持续几百纳秒,采样窗口要留足裕量。在驱动波形上确认好振铃衰减时间,再回去设置ADC触发延时不迟。
另外,电流采样通道的增益误差和偏置必须认真对待。电感电流采样电阻的精度、运放的偏置电压、ADC的失调,都会转化为输入电流的直流偏置或增益误差。直流偏置在PFC里特别致命——它会直接变成输入电流的偶次谐波,THD快速飙升。我用过两个办法:硬件上加隔直电容滤掉直流分量;软件上在空载时做动态零点校准。第二个办法更灵活,推荐优先实现。
还有一个均值偏差的问题:如果你采样的是瞬时电流,而控制目标是对应PWM周期的平均电流,两者在占空比不是50%时会有偏差。这个偏差可以通过采样时刻的选择来消除——前面说了,载波峰谷采样就是对平均电流的采样,只要时序做对,这个问题基本不存在。所以这四条坑其实环环相扣,地基不牢,后面全受影响。
4.5 保护逻辑与软启动时序
数字PFC的过流保护不能完全依赖软件。ADC采样加判断最快也要几微秒,而短路或过流时电流上升速度可能极快,几微秒足够让电流飙到危险量级。我建议硬件上用比较器做过流保护,直接封锁PWM输出;DSP软件只做慢速保护:过温、过压、母线欠压、输入欠压等。主次分清,才不会在故障瞬间"来不及反应"。
软启动也是必须设计的环节。启动瞬间母线电容相当于短路,如果不做软启动,浪涌电流会非常大,可能直接炸整流桥或保险丝。我的做法是分阶段:
- 先让母线通过限流电阻预充到整流电压峰值;
- 再逐步放开电流参考的限幅值,从0缓慢提升到目标;
- 电压环的输出限幅同步放开,避免积分饱和导致启动过冲。
整个过程配合前面说的R_e限幅,能实现无缝启动,母线电压平稳爬升到设定值。这个时序在调试时要用示波器反复确认,尤其在高输入电压工况下,启动过冲是烧MOS管的头号原因之一。别问我怎么知道的。
5. 控制策略评估:怎么看一台PFC到底行不行
5.1 稳态指标:PF、THD、效率的边界
控制策略评估不能只看PF。PF接近1是必要不充分条件——如果输入电流严重畸变但基波与电压同相,PF照样能做上去。所以必须同时看THD,尤其要拆开看3次、5次、7次谐波的分量,因为不同国家的谐波标准(比如IEC 61000-3-2)限值不同,做产品出口要按目标市场的标准来评估。
我整理了一组实测数据供参考(220V输入、600W负载、80kHz开关频率、Zin策略加谐波补偿):
| 指标 | 实测值 | 评估边界 |
|---|---|---|
| 功率因数PF | 0.993 | 满载下应大于0.99 |
| 总谐波畸变THD | 4.2% | 加谐波补偿前为6.8% |
| 满载效率 | 96.5% | 硬开关下的合理水平 |
| 电压环穿越频率 | 约15Hz | 低于工频纹波一个数量级 |
| 电流环穿越频率 | 约8kHz | 约为开关频率的1/10 |
THD测试一定要用功率分析仪,采样窗口要覆盖整数个工频周期,否则FFT会泄漏,数值不可信。同一台样机,我用示波器的FFT功能测出来THD只有2%,放到功率分析仪上一测是4.2%——不是仪器坏了,是示波器的分析窗口和处理方式不同,评估时必须统一测量标准和测量仪器。
5.2 动态指标:负载阶跃与母线过冲
负载阶跃测试是控制策略评估里最直观的一环。我的测试方法:电子负载在半载和满载之间阶跃切换,用示波器记录母线电压波形,读取跌落深度、过冲深度和恢复时间。
我的样机实测数据(母线电容470μF、电压环带宽15Hz):
- 半载切满载:母线跌落约28V,恢复时间约180ms;
- 满载切半载:母线过冲约35V,恢复时间约200ms。
这个表现基本符合"母线电压允许5%~10%的动态波动"的设计预期。如果你做的是快充适配器或者服务器电源,动态要求更高,就要考虑加大母线电容或者引入负载前馈——在阶跃瞬间直接修改电流参考的前馈量,能显著缩短恢复时间。
从阻抗视角理解动态性能也很有意思:负载突变本质上是改变了R_e,相当于给闭环系统注入了一个阶跃扰动。输入阻抗Zin的闭环形态——它的带宽、阻尼、相位特性——决定了这个扰动如何被吸收和衰减。这也是我坚持用Zin的频域工具做控制策略评估的原因:它是连接稳态指标和动态指标的桥梁,而不是两套割裂的测试。
5.3 从单相PFC到MMC:Zin思路的扩展
最后说点题外话。Zin这种"把变换器当成一个阻抗网络来设计和评估"的思路,不止适用于单相PFC。最近我在研究MMC(模块化多电平变换器)的控制策略评估,发现同样的逻辑完全成立:MMC桥臂的等效阻抗、环流抑制的控制参数、交流侧等效阻抗的整形,都可以放进输入阻抗/输出阻抗的框架下分析和测量。
网上搜"mmc控制策略"能出来大量论文,但核心思路和单相PFC的Zin策略是相通的——控制策略评估的本质,是看变换器对外呈现的阻抗(或导纳)特性是否符合你设计的频域目标。单相PFC的Zin要纯阻性,MMC的桥臂阻抗要满足环流抑制和能量平衡,背后都是同一套频域思维。掌握了Zin的思路,再看其他拓扑的控制问题,视角会开阔很多。
写到这里,翻了翻自己的调试笔记,发现这套Zin控制策略前后调了快半年,最有价值的收获不是最终那组漂亮的THD和PF数据,而是建立了一套"用阻抗语言描述和评估控制效果"的方法论。如果你正在做数字单相PFC,我建议你也试试:先画出目标阻抗形态,再来调控制器,整个调试逻辑会清晰很多。过程中踩过的坑,大概率都在上面这几条里了,祝顺利。