做数字PFC这行,慢慢你会发现一个规律:方案选型、主电路拓扑、甚至磁性元件的设计,都有成熟套路可以参考,真正把人逼疯的往往是那些藏在控制细节里的"软问题"。
我前后折腾了五年PFC数字控制,最深的两大深水区,一个是你可能天天都在调的THD,另一个是让你怀疑示波器坏了的低频振荡。前者表现为谐波始终压不下去,波形看着挺正经,上仪器一测就露馅;后者表现为母线电压开始"呼吸",几十到几百赫兹的周期起伏,调参调到怀疑人生。这篇文章把这两个问题的根因、排查链路和实际修复过程完整写出来,希望能帮你少走我当年走过的弯路。
1. THD压不下去的根因拆解——先从电压环和采样环节开刀
很多人一看到THD超标,第一反应就是去调电流环比例积分增益,觉得电流跟踪不够狠。方向不能说全错,但据我的实际经验,THD压不下去的原因往往不在电流环本身,而在更上游的电压环和采样环节。
1.1 电压环带宽过高:100Hz纹波悄悄注入了电流谐波
这是工程上最常见、也最容易被忽视的根因。
PFC的电压外环输出是电流参考的幅值指令,也就是说它是"有功功率"的化身。但输出电压有个固有的2倍工频纹波——单相PFC是100Hz,三相维也纳PFC纹波频率稍高但本质一样。如果你的电压环带宽设计得过高,比如超过30Hz甚至50Hz,那么这个100Hz纹波就不会被电压环充分衰减,它会直接穿过电压调节器,叠加上去变成电流参考幅值上的100Hz包络调制。
这个包络调制是什么概念?你的电流指令不再是一个纯净的正弦波幅值,而是被100Hz信号调幅了。经过乘法器和电流环跟踪后,输入电流里会出现明显的3次、5次谐波。实测中3次谐波的突出表现往往就能反向推断出电压环带宽过高。
定量算一下:设电压环穿越频率为20Hz,对于100Hz的干扰信号,一阶特性的衰减大约只有14dB,也就是干扰信号还有约20%漏进了电流参考;如果把穿越频率降到10Hz,衰减提升到20dB,漏进去的只剩10%。这10%的差异,放在THD指标上可能就是3个百分点。
所以我的第一个建议很简单:先检查电压环带宽。数字PFC里电压环穿越频率通常应该设计在10~20Hz区间,而不是照抄模拟电源的习惯拉到几十赫兹。级联控制里电压环与电流环的带宽差距至少要拉开一个数量级,这是保证内环动态不被外环拖垮的基本前提。
如果带宽已经压到10Hz左右,THD还是压不下去,再考虑上第二层手段:在电压环误差通道里插入100Hz陷波滤波器。我用过两种实现,一种是IIR二阶陷波器,另一种是移动平均梳状滤波器,实测效果都不错,具体选型后面有一节专门说。
1.2 电流过零失真:占空比极限和ADC偏置在"联手作案"
另一个THD元凶是输入电流过零区域的那坨畸形。
用升压型PFC,输入电压过零附近有两个问题同时出现。第一,电感电流在过零附近非常小,电流环为了让占空比往1推,控制器输出接近饱和边界。此时电流环的可控性变差,占空比失去了足够的调整空间,电流波形就会在过零附近出现一小段"平顶"或者"台阶"似的畸变。第二,如果你用的是硬开关电路,死区时间在过零附近的非对称效应也会被放大,因为此时电感电流方向正好在切换。
比这更隐蔽的,是ADC采样偏置引入的偶次谐波。
数字控制里所有电流采样最终都落到ADC上,如果ADC通道存在哪怕几mA的零点偏置,电流波形正负半周就会出现不对称。正半周多了一点、负半周少了一点,你就引入了2次、4次等偶次谐波。偶次谐波在THD里的权重很高,而且它不会被电流环本身消除——因为电流环跟踪的是被偏置过的参考波形,电流环以为系统已经完美跟踪了。
处理办法很笨但很有效:上电后、没有主动电流的时候,软件里做一次ADC零点自校准,把偏置记下来,运行时从采样值里减掉。另外还可以用对称采样的方式做差分,但抛开复杂度不谈,零点校准永远是第一步。我们调试30kW三相维也纳PFC时,只校准了三个电流ADC通道的偏置,THD就掉了将近1个百分点。
1.3 采样时刻:采错了一个点,THD能差一个量级
这一条我刚开始做数字控制的时候完全没概念,直到被实测数据教育了一顿。
数字控制里,ADC采样的时刻不是随便定的。电感电流在PWM开关周期内不是恒定值,它有明显的纹波分量,上升沿和下降沿的斜率取决于输入电压和输出电压的差值。如果你在开关管开通瞬间去采样,此时电路里正好在发生电流换向、开关振铃,采到的可能是"瞬时尖峰值"而不是"周期平均值";如果你在关断瞬间采样,采到的是电流的峰值点。
电流环的目标是控制电感电流的周期平均值(也就是输入电流的基波有效值),如果你的反馈量采的是峰值或谷值,电流环会非常"倔强"地把电流峰值或谷值稳住,但平均值并不等于参考值,波形自然有误差。更麻烦的是,在输入电压过零区域,这种误差是时变的,最终就表现为THD变差。
正确做法是把ADC采样触发同步到PWM载波的谷底(up-down计数器的zero moment)。理由很简单:在载波谷底,电感电流纹波正好处于对称中心,此时采到的值就是周期平均值。TI的TMS320F280049C、ST的STM32G4等主流数字电源芯片都支持PWM事件触发ADC,配置好触发时刻是基本功。
我踩坑的教训是:项目初期为了省事,ADC用定时器触发、没有和PWM同步,结果单相PFC的THD始终在12%以上,怎么调PI都下不来。改成载波谷底同步采样后,同一个PI参数,THD直接掉到4%以下。光是同步这一个动作,就胜过我调了一个星期的环路参数。
2. 低频振荡的真正隐藏在数字环路里——延时、离散化与抗饱和
低频振荡比THD更折磨人。THD你至少知道是波形问题,低频振荡你会先怀疑母线电容、后怀疑负载设备,最后才心不甘情不愿地把目光挪回控制环。
2.1 低频振荡的现象识别:母线电压开始"呼吸"
低频振荡有一个很典型的表现:输出电压示波器波形上出现一个低频大包络,频率通常在20Hz到300Hz之间,包络幅度可能达到几十伏甚至上百伏。此时如果你用电流钳看输入电流,会发现电流波形被同一个低频信号调幅,功率因数表上的数值缓慢跳变,整个系统的"呼吸感"非常明显。
我遇到过的场景大多发生在两种情况下:一是轻载运行,比如30kW机器带3kW负载;二是负载发生阶跃切换的瞬间,比如从半载切到满载。轻载场景更容易持续振荡,负载阶跃场景则多半是振几下后收敛,只有环路非常脆弱时才转变成持续振荡。
很多人会第一时间怀疑硬件:电解电容是不是老化了,ESR是不是变大了,甚至怀疑是电网背景本身在晃。这里有一个很实用的鉴别手段:把电压环调节器的输出(也就是电流参考幅值)引到DAC引脚上,用示波器同时观察DAC输出和母线电压波形。如果母线电压在呼吸、DAC输出也在同步呼吸,那基本可以断定问题就在环路内部,和硬件、电网没太大关系。这个DAC观测法帮我省掉了无数拆板子的时间,强烈建议在样机设计时预留一路DAC用于控制变量观测。
2.2 控制对象的固有脾气:从占空比到输出电压的传递函数
模拟域里,升压PFC的外环控制对象有一个让所有人头疼的特性:右半平面零点(RHPZ)。
它的物理意义可以这么理解:当你增加占空比试图提升输出功率时,在升压电路里,电感电流变大,但电感储存的能量并不能立刻传递到输出侧。在短时间窗口内,输出电容反而会因为更长的电感充电时间而掉电,输出电压先下降、再上升。这个"先反后正"的动态行为,在频域里就表现为一个相位滞后的零点——RHPZ给环路带来了额外的-90°相位拖累,压缩了你可用的相位裕度。
RHPZ的频率有一个粗略估算公式:
f_RHPZ ≈ Vout² / (2π × L × Pout)
假设输出400V,电感300μH,功率30kW,算出来RHPZ大约只有2833Hz,注意这是内环外环共同作用的下限。电压环穿越频率必须明显低于它,一般在它的1/10才会比较安全,否则你设计的电压环可能会在穿越频率处就已经把相位裕度赔光了。
除了RHPZ,PFC电压外环本身还有一个非线性来源:母线电压的平方项。功率P = Vout² / R_等效,但数字控制里你控制的是输出电压的绝对值误差并把它乘以一个增益。输出的平方关系在数学上引入了额外的增益变化——轻载时等效负载电阻变大,控制对象直流增益升高,系统阻尼相对变弱;重载时增益反而小。所以同一个PI参数,在重载可能稳得冒泡,到了轻载就振荡,本质上就是这个非线性在作祟。
2.3 数字延时的相位惩罚:模拟裕度和数字裕度差着十万八千里
这是数字控制和模拟控制最本质的差距,也是很多从模拟电源转过来的工程师最容易掉进去的坑。
模拟控制里,从误差到占空比的更新几乎是即时的,RC补偿网络引入的相位滞后可以精确设计。但在数字控制里,你的控制链路是这样的:ADC采样 → 数据处理 → 控制器计算 → PWM寄存器更新 → 新占空比生效。这整个链路中,从采样到更新的时刻至少有一个开关周期,很多实现里甚至有一个半周期或者两个周期的延时。
延时在频域里折算成相位滞后很简单:
Δφ = 360° × f × Td
其中Td是总的计算与更新延时。举个具体的数:开关频率60kHz,一个周期约16.7μs,如果延时是1.5个周期,那就是25μs。在电压环穿越频率20Hz处,这个延时带来的相位滞后小得可以忽略,但在电流环穿越频率5kHz处,相位滞后高达45°。如果你原本在模拟设计中就只留了两个开关周期延时对应的余量,在数字实现里余量直接被吃干,电流环就会表现出峰值增益前的相位陡降,最终让整个系统的阻尼变差。
更隐蔽的是离散化过程中的相位误差。你从连续域设计出一个补偿器传递函数后,需要用某种变换把它变成数字域的差分方程。常用的有零阶保持器匹配(ZOH)、双线性变换(Tustin)、前向/后向欧拉。我用过的经验是:
- ZOH匹配的相位特性最接近连续设计,尤其在采样频率较低时优势明显;
- 双线性变换在中低频段增益和相位基本不差,但在接近奈奎斯特频率时会产生频率畸变;
- 前向欧拉会引入正的相位误差,很多控制书上明确不推荐用于含有振荡环节的补偿器;
- 后向欧拉在中低频段相位比连续设计额外滞后约ωTs/2,也不算友好。
所以用双线性变换往往是最省心的折中选择,但前提是你要清楚它的频率畸变会出现在高频区。设计时别把穿越频率定得太靠近奈奎斯特频率,否则你在MATLAB里算出来的45度裕度,到了实际机器上缩水成30度甚至更少,振荡也就跟着来了。
2.4 积分饱和与抗饱和失效:轻载振荡的头号嫌疑犯
这是我在30kW样机上实际抓到的大问题,后面复盘章节会展开讲,这里先给结论性的机理。
轻载时,PFC需要的电流参考值很小,可能只有额定值的10%。电压环的PI调节器为了让输出电压稳定在这个很小的有功水平,积分器本来只需要输出一个很小的稳态值。但如果你的PI没有任何抗饱和措施,在启动瞬间或者负载大跌的瞬间,误差一大,积分器就会飞快地往上冲,冲到几十倍的额定值。等输出电压回来之后,这个巨大的积分值需要很长一段时间才能"泄掉"——在这段时间内电流参考被钳在高位,输入功率远大于负载消耗,输出电压必然过冲。过冲之后误差反向,积分器又往另一个方向冲,于是产生了周期性的"冲高-回落-冲高"循环。
这就是低频振荡最常见的形成机制之一,它不是经典环路线性稳定性问题,而是非线性饱和导致的极限环振荡。
抗饱和的标准做法有几种:
第一种是积分器输出限幅(clamp),把积分器的输出限制在电流参考的合理范围内,比如额定值的1.2倍或0倍之间。这种最简单,但要注意单纯限幅后积分器仍然可能被误差"灌满",所以还需要和第二种配合。
第二种是积分分离(conditional integration),只有当输出电压误差在一定死区范围内才允许积分器更新,误差太大时冻结积分器。这个思想写出来很朴素,但它能从根本上防止启动、负载突变时积分器空转。
第三种是反算抗饱和(back-calculation),当控制器输出受限时,把实际输出与理想输出的差值按比例反馈回积分器输入,动态压缩积分值。这种方法响应更快,但调参多一个back-calculation增益,工程实现也稍微复杂一点。
我的经验是:先无条件上积分分离,再加输出限幅,两个合起来能解决绝大多数的轻载振荡。如果还不行,再上反算抗饱和,此时剩下的问题基本就是线性稳定性或者硬件问题了。
3. 逐项避坑:从采样时序到补偿网络数字化的完整实操策略
这一节把上面提到的各个坑合成一整套实操策略,方便你直接在下一个项目里落地。每一条都是我自己验过或者吃过亏的,不是从手册里抄的。
3.1 采样时刻与同步机制:一次配置,终身受益
第一步,务必把ADC触发源配置成PWM事件。优先选择PWM载波谷底触发,因为此时电感电流纹波对称,采样点正好是电流周期平均位置。在双向计数模式(up-down)下,谷底对应计数器的0位置,边沿对齐模式下则要在周期开始前偏移半个周期。
调制PWM的更新点也需要注意。典型做法是载波谷底更新占空比寄存器,让新的占空比在下一个周期开始生效。这样从采样到占空比生效的延时是固定的一拍,不会因为寄存器更新时刻的抖动而随机变化。
电流内环和电压外环的采样可以放在同一个触发时刻,电压信号通常是慢变量,一个周期采一次完全够。但电压采样的纹波抑制建议靠数字滤波而不是靠模拟滤波堆电容,原因后面讲陷波器时会提到。
如果开关频率较高(比如100kHz以上),单次采样噪声大,可以考虑在一个周期内做两次采样求平均——分别采谷底和峰值,两者平均也等于周期平均值,而且对共模噪声有一定抑制能力。
3.2 电压环数字补偿的三个离散化注意点
补偿器设计时,我习惯的顺序是:
- 先确定电流环:设计电流环PI,留45°~60°相位裕度,穿越频率取开关频率的1/10~1/20;
- 然后建模电压环控制对象的离散模型,把内环等效为理想的电流源(这在内环带宽远大于外环时成立);
- 设计电压环PI或PI+陷波器,使穿越频率落在10~20Hz,相位裕度保守地取50°以上;
- 再用双线性变换把连续域补偿器转成数字差分方程,放到仿真里校验离散化后的频率特性。
离散化的坑主要在第4步。用双线性变换时,连续域的极点、零点位置会被"压缩"映射,频率越高偏差越大。更麻烦的是,z域差分方程的系数精度要求很高,如果你用定点DSP并且系数截断到16位,本来就脆弱的相位裕度会再损失5°~10°。建议在C2000或G4系列上做电压环时,系数至少用32位定点或者直接上浮点,不要在精度上省成本。
下面是一段典型的电压环PI加积分分离的伪代码,用来直观展示数字实现里几个关键防坑点:
// 电压环PI离散化示例:采用后向欧拉离散 // y[n] = y[n-1] + Kp*(e[n] - e[n-1]) + Ki*Ts*e[n] // 其中e = Vref - Vout_filt voltage_ctrl_t vc; // 限制积分器输出范围 #define VLOOP_I_MIN 0.0f #define VLOOP_I_MAX 1.2f // 电流参考上限为额定值的1.2倍 float vloop_pi_update(float vout_filt, float vref) { float err = vref - vout_filt; // 积分分离:误差在死区内才积分 if (fabsf(err) < VLOOP_INT_DEADBAND) { vc.i_out += vc.Ki * vc.Ts * err; // 输出限幅 vc.i_out = clamp(vc.i_out, VLOOP_I_MIN, VLOOP_I_MAX); } // 比例项 vc.p_out = vc.Kp * err; vc.out = vc.p_out + vc.i_out; // 总输出限幅(再次保护) vc.out = clamp(vc.out, VLOOP_I_MIN, VLOOP_I_MAX); vc.err_prev = err; return vc.out; }注意细节:积分分离的死区带宽不能设得太窄,否则正常稳态微调时积分器被反复冻结,会留下稳态误差。我通常取额定电压的0.5%~1%作为死区,效果比较理想。
3.3 100Hz陷波器与移动平均滤波:怎么选不翻车
电压环里的100Hz纹波抑制,我试过两种数字滤波方案,各有胜负。
第一种是二阶IIR陷波器,典型传递函数是:
H(z) = (1 + r² z⁻² - 2r cosω₀ z⁻¹) / (1 + r² z⁻² - 2r cosω₀ z⁻¹_res)
一个质量不错的陷波器可以把100Hz处的增益压到-30dB以下,而不影响相邻频段太多。但坑在于:陷波器在陷波频率两侧会引入相位突变,如果你设计的电压环穿越频率恰好靠近陷波器的边带,相位裕度会显著恶化。所以陷波器的Q值不要选得太高(高Q意味着窄带、相位突变更剧烈),我一般把陷波带宽做到±5Hz左右就收手,够用也不伤裕度。
第二种是移动平均梳状滤波器,本质上是开一个窗口,把最近N个周期的采样值做平均。这个滤波器对2倍工频及整数倍谐波有零增益点,原理是把100Hz及其倍数看作梳齿上的"槽位"。它的好处是相位响应在非目标频率上基本平直,主要风险是100Hz与其相邻频率之间的衰减不如IIR陷波器那么陡峭。
我的取舍原则:如果电压环PI本身带宽已经压得很低(10Hz以下),用移动平均就足够;如果因为动态响应要求,带宽需要拉到15Hz以上,此时IIR陷波器的陡降能帮你更干净地滤掉低频干扰。实测中30kW三相维也纳PFC,电压环带宽12Hz配合移动平均滤波,THD已经做到3.2%,并不需要纠结用陷波器。
3.4 数字PWM分辨率:低分辨率带来的极限环
还有一个容易被忽视的坑:PWM分辨率不足导致参考电压量化误差被环路放大,形成高频的微小极限环振荡。
假设PWM时钟频率100MHz、开关频率60kHz,意味着一个PWM周期内只有大约1666个计数步。输出电压的分辨率误差Vout_error = Vin_max / 1666,对于400V母线大约相当于0.24V。如果这个量化误差再经过ADC分辨率、DAC观测等环节放大,母线电压就会出现一个很小幅度但持续存在的限幅振荡,频率往往在几百赫兹到几千赫兹之间,容易被你的示波器误以为是小噪声,但它其实会污染输入电流的波形质量。
解决办法很简单:优先选用带高分辨率PWM(HRPWM/HRTIM)的MCU,比如F280049C的HRPWM和STM32G4的HRTIM。开关频率能锁相的地方都尽量启用dithering,把量化噪声扩散掉。这里的体感是:启用HRPWM前后,THD可能没有质的变化,但波形毛刺明显变干净,环路调试时的"电噪声干扰"错觉也少了很多。
4. 一次完整的调试复盘:30kW三相PFC样机,THD从9%到3.2%、振荡消失的全过程
理论说得再多,不如完整跑一次调试现场。下面是我们一台30kW三相维也纳PFC样机的真实复盘,方案是TMS320F280049C控制,开关频率60kHz,额定输出750V直流,功率因数要求满载时THD小于5%,轻载时小于8%。
4.1 初始问题表现与硬件参数
样机硬件本身很成熟,主电路是成熟拓扑,磁性元件和功率半导体是供应商给的标准方案。第一次整机联调时遇到两个问题同时出现:
- 满载(30kW)THD实测9.3%,明显超标;
- 轻载(3kW)运行约两分钟后,母线电压出现幅度约70V、频率约80Hz的持续振荡,而同样的控制器参数在重载下很稳定。
这两件事同时出现的时候,第一反应其实是在想"会不会是控制板上ADC通道间串扰,或者采样电阻温漂"。但逐项排查下来,硬件指标都在正常范围,问题的根子确实出在数字控制环路的几处配置上。
4.2 THD调试的第一步:先解决采样同步与偏置
这台样机初始配置里,ADC触发用的是定时器模块,而不是PWM事件触发。也就是说,采样点和PWM载波之间没有任何固定的相位关系,采样到的电感电流可能是谷底值、峰值值或者两者之间的任意值,具体取决于定时器和PWM计数器的相对漂移。
这个问题的后果不只是THD差,还会有轻微的"浮频"现象——因为采样相位在慢漂,环路控制到的物理量也在漂,电流波形产生周期性抖动。我们在改配置同步到PWM谷底采样后,光这一步,满载THD从9.3%降到了6.8%。
第二步,针对ADC偏置做了软件零点校准。每个电流ADC通道在上电后读取零电流时的输出值,采样时减掉这个偏置。校准完成后,原本能从电流波形上看出来的正负半周不对称基本消失,THD进一步降到5.9%。
4.3 THD调试第二步:电压环带宽压下来
初始电压环带宽设计在30Hz左右,理由是"动态响应快"。结果就是100Hz纹波充分穿透电压环,注入到电流参考里。我们通过DAC观测电压环输出,能看到一个明显的100Hz抖动分量存在。
修改方案:把电压环穿越频率从30Hz压到12Hz,同时加了一个窗口长度为一个工频周期的移动平均滤波。这两步做完,THD从5.9%降到4.4%。
这里有个很值得说的细节:把电压环带宽降低后,动态响应确实变慢了。满载半载切换时,母线电压跌落幅度增加了约10V,但恢复时间仍在规格书允许范围内。所以对绝大多数PFC应用来说,电压环慢一点其实没有你想象的那么不可接受,反而能减少和控制对象之间的耦合。
4.4 THD调试第三步:轻载与谐波补偿
满载THD此时还有4.4%,距离5%的目标已经达标,但我们想把余量做大一点,同时轻载THD仍然偏高(15%左右)。轻载过高的原因,主电感和控制参数在DCM/临界导通区域确实跟踪变差,但更主要的是电感电流过零畸变在轻载时被放大——因为此时电流基波小,死区和采样偏置的相对占比更大了。
我们的做法:在电流环里为5次和7次谐波分别加入谐振控制器(PR谐振项),补偿这两个占主导地位的谐波分量。电流环的基波PI保持不变,谐振项分别整定在250Hz和350Hz(针对50Hz工频系统的5、7次谐波)。加入后轻载THD从15%降到7.8%,满载THD从4.4%降到3.2%。
这段经历让我比较确定一点:想要THD做得漂亮,电流环基波PI只是打底,谐波补偿才是突破天花板的武器。但前提是前面几步采样、电压环带宽都处理干净了,否则谐振补偿会去追不属于它的寄生分量,反而引入不稳定。
4.5 低频振荡的完整排查链路
回到那个3kW轻载振荡问题。我们排查的链路是这样的:
第一步,先用DAC观测法定位:把电压环输出引到DAC,发现母线电压振荡的同时,DAC输出也在以同样的80Hz频率大幅摆动。判断结论:问题在环路内部。
第二步,用软件把电流参考值、电压误差、积分器输出等中间变量打印到串口。发现一个非常典型的规律:电压误差在某个阈值附近来回翻转时,积分器输出停在限幅的位置——限幅上限设的是2.0倍额定电流参考。在3kW轻载时,实际需要的电流参考可能只有额定值的8%,而积分器输出已经压在2.0倍上限上。这说明积分器已经饱和,进入了极限环振荡模式。
第三步,检查为什么积分器会饱和。看启动日志发现是负载阶跃的结果:这台样机在切入3kW负载前经历过一次空载到满功率的阶跃测试,电压环在阶跃瞬间误差很大,PI积分器在几毫秒内冲到上限,之后轻载状态下泄不掉,稳定不了。所有环节都对上了。
第四步,修改方案:
- 把积分器输出限幅从2.0倍额定电流改到1.2倍额定电流,避免积分器长时间滞留在高饱和区间;
- 加入积分分离逻辑,只有当输出电压误差小于额定电压的0.8%时才允许积分器更新;
- 把电压环离散化方式从后向欧拉改成双线性变换,减少离散化带来的相位损失。
改完后在轻载下连续运行两小时,没有再出现振荡。为了确认不是运气,又做了满载阶跃到轻载的往复测试,以及输入电压从340V到440V的宽范围扫描,均未复现。
4.6 最终参数与实测对照
| 参数项 | 调试前 | 调试后 |
|---|---|---|
| 电压环穿越频率 | ~30Hz | ~12Hz |
| 电压环相位裕度 | 约30°(离散后) | 约48°(离散后) |
| 电流采样同步 | 定时器触发 | PWM谷底触发 |
| ADC偏置校准 | 无 | 软校准 |
| 电流环谐波补偿 | 无 | 5次+7次谐振 |
| 积分器限幅 | 2.0倍(无积分分离) | 1.2倍+积分分离 |
| 满载THD(30kW) | 9.3% | 3.2% |
| 轻载THD(3kW) | 15% | 7.8% |
| 轻载低频振荡 | 持续振荡(80Hz/70V) | 无振荡 |
这个表格看下来,其实没有哪一步是惊天动地的创新,但每一步都卡在数字控制最容易被忽略的地方。这些点单拎出来都不起眼,叠在一起就是压垮THD和稳定性的那几根稻草。
5. 调参顺序与研发闭环的一点实在体会
最后聊点软性的东西。调试PFC数字控制这几年,我最大的感受是:调参顺序决定了你的效率,而中间变量的可观测性决定了你的想象力边界。
5.1 先硬件后软件,先电流环后电压环,先稳态后动态
踩了无数次坑之后,我给自己定的调试顺序是固定的,每次新平台都是这套流程:
第一步,硬件自检。用开环占空比跑一遍,观察输出电压是否正常、采样值是否在预期范围内、ADC偏置是否校准。这一步没做好,后面所有控制都白调。
第二步,电流内环。让电压环输出固定,手动给定一个稳定的电流参考值,观察电流跟踪波形是否平滑。把电流环的穿越频率、相位裕度验证好,再用阶跃参考测试它的动态响应。电流环稳了,后面才有讨论外环的基础。
第三步,电压外环。把电流环闭环后,接上电压环,从很小的PI值开始缓慢增加,观察母线电压是否出现任何形式的振荡。电压环每增加一档增益,都要记录阶跃响应和相位裕度。
第四步,动态与极端工况。满载阶跃、半载阶跃、轻载持续运行、输入电压宽范围扫描、电网波形畸变模拟,这些环节里往往能暴露前几步稳态测试看不出来的非线性问题。
这套流程听起来像废话,但很多项目组真的是把顺序搞混了,带着电流环不稳的问题去调电压环,然后被低频振荡折磨很久。调参顺序有时候比调参本身更重要。
5.2 波形和数据的观测手段决定了排查效率
数字控制最大的优势之一是内部控制变量全都可见,前提是你真的去调用它们。我最常用的是一个四通道示波器配两路DAC输出:
- 一路DAC输出电压环积分器输出(电流参考);
- 另一路DAC输出电流环误差或者某个经过处理的内部信号。
有了这两条"内窥镜",很多环路问题一眼就能定位:电压环输出在呼吸,那就是电压环相关;电压环输出很干净但电流环输出在抖,那是电流环相关;两个都在晃,那就是耦合问题。相比盲调参数,这个观测手段能把排查时间从几天压缩到几小时。
另外,串口打印中间变量也很有用,但只能看变化慢的信号。电压环PI输出、电压环积分器输出这些慢变量适合串口记录,电流环这类快变量只能靠DAC或者调试器的实时变量窗口。
5.3 数字域的思维方式和模拟域完全不同,别硬抄
最后想说一句可能有点得罪人的话:如果一个人带着纯模拟控制的设计习惯来调数字PFC,第一年一定是非常痛苦的一年。
模拟域的补偿网络是物理元器件,参数的自然属性决定了它对频率的响应是连续的、带宽天生的;而数字域里你拥有的是ADC分辨率、PWM分辨率、采样延时、计算不确定性和离散化误差,这些"数字约束"在模拟域里根本不存在。模拟设计里一个RC零点凭直觉放上去就行,数字设计里你可能要为了零点位置和双线性变换的频率畸变吵一个下午。
我现在的习惯是:最终以实测的Bode图和阶跃响应为准,理论设计只用来确定初始值。具体做法是在样机上做电压环和电流环的频率响应测量——信号发生器注入扰动、DAC记录输入输出、软件算增益和相位。每个环路无论理论算得多漂亮,都做一次实测Bode确认,宁可多花半天,不要带着猜出来的裕度上机。
5.4 那几次差点放弃的时刻
做这行五年,说句实话,每个项目都有那么一两周让人想砸示波器。THD压不下去和低频振荡这两个深水区,最大的困难不是没有解决办法,而是问题太多、线索太散,你不知道该往哪个方向使劲。
但回过头看,解决它们的通用路径其实很清晰:把采样时序做对,把电压环带宽做低,把离散化和抗饱和处理好,把谐波补偿加上,再配合DAC观测法去确认每一步的效果。这套组合拳打下来,90%的THD和低频振荡问题都能解除。
如果你现在正被这两个问题卡住,我的建议是先别急着动PI参数,先花一天时间检查你的采样同步和积分器饱和这两个细节。很多时候答案早就在波形里了,只是我们太专注调参,反而忘了去看它。