做电源设计的同仁多半遇到过这种场景:磁性元件供应商在电话里问你要CCM还是DCM的电感,你对着规格书犹豫半天,最后按经验值报了一个电感量——至于它在轻载下、电网过零处、或者输入电压波动时到底还站在哪一边,心里其实没底。我前几年做一台100W的LED驱动电源前置PFC,就在这个问题上栽过跟头:设计时按1mH算,满载波形看着正常,半载一测,输入电流的高频纹波谷底直接掉落,THD从7%飙到15%。拿去给EMI整改的同事复盘,他第一句就问:“你这里是不是已经掉DCM了?”说实话,当时我并不能立刻回答。
后来我在LTspice里把这个Boost PFC完整搭起来,从CCM一路仿真到DCM,才算把这条边界彻底看明白。LTspice这个免费软件的价值,不在于它能解多复杂的场,而在于它能让你亲眼看见电感电流在每个开关周期里是怎么走的。这篇文章就是我把整个仿真过程整理出来的实战笔记,给同样在功率因数校正方向踩坑的同行做个参考。
1. 动工前先理清需求:PFC仿真要回答什么问题
先说清楚Boost PFC在真实产品里解决什么问题。电网对用电设备有谐波限制要求,典型的如IEC 61000-3-2标准,功率超过75W的开关电源必须做功率因数校正。网上关于PFC的讨论很多,但落到实际,目标就两条:让输入电流近似正弦而且和电网电压同相位;同时把输出电压稳定在设计值附近。
Boost拓扑能成为PFC主流方案,原因很直接:它的输入侧是电感而不是开关网络,输入电流天然连续。相比之下,Buck型PFC在输入电压高于输出电压时才能工作,开关节点直接连接输入侧,需要更大的差模滤波。Flyback做PFC虽然成本低,但输入电流断续,THD做不高。所以100W以上、对谐波有硬性要求的场合,Boost PFC几乎是默认选项。
CCM和DCM这两个缩写,指的是Boost电感电流在一个开关周期内是否降到零:
- CCM(连续导通模式):电感电流始终大于零,波形是在直流偏置上叠加三角波纹波;
- DCM(断续导通模式):开关管关断后,电感电流在某个时刻降到零,并且一直保持到本周期结束。
实际电路里,CCM和DCM不是“设计时选一种”那么简单。同一个电感,满载和轻载下模式会变化;同一个负载,在电网电压峰值和过零附近模式也会变化。要搞清楚这条边界,最直观的手段就是仿真——它把电流波形直接用曲线画出来,比只看公式清晰得多。
用LTspice做这件事有几个好处:一是免费,个人学习和公司预研都没有授权问题;二是模型生态好,各大半导体厂商的SPICE模型都能导进来,整流桥、MOSFET、快恢复二极管都有现成参数;三是仿真速度对100kHz级别的开关频率完全够用。当然它也有劣势:对于一些复杂的PFC控制芯片,比如经典的平均电流控制芯片UC3854,SPICE模型往往不完整,或者需要自己搭宏模型。和PSIM、PLECS这类专门面向电力电子的工具相比,LTspice在控制环路深层次分析上弱一些。
所以我的结论是:如果只想验证功率级的电感电流形态、看CCM和DCM的转换边界、观察器件应力,LTspice完全够用;但如果要精确的环路相位裕量、要和真实控制IC的行为逐项对齐,那还是得上专用工具。先把工具边界划清楚,后面的仿真实践才不会跑偏。
2. 主功率电路搭建:器件选型与仿真参数设置
用LTspice搭Boost PFC,第一版建议先搭功率级,不急着上闭环。主电路结构:工频交流源 → 整流桥 → Boost电感 → 开关管 → 续流二极管 → 输出电容 → 负载。
下面给出一个100W、220V输入的规格作为示例。具体参数这样定:
- 交流源:
SINE(0 311 50)。311V是220V RMS对应的幅值,直接在源上设置理想正弦波,不考虑电网内阻。 - 整流桥:四个独立二极管搭,型号先用通用整流管1N5408。实际产品里整桥通常是集成封装,但仿真时用四个独立管子可以分别观察每只管子的反向恢复特性。
- Boost电感L1:初值1mH,串联电阻Rser设为0.1Ω。这个串联电阻很关键,没有它,某些仿真条件下会产生和实物对不上的振铃。
- 开关管Q1:IRFP460,500V/20A,在LTspice内置库中有现成模型。PFC母线电压400V,Vds余量够用。真实设计可以选Qg更小的管子,但仿真阶段关键是模型参数靠不靠谱。
- 续流二极管D5:MUR460,600V/4A,超快恢复类型,反向恢复时间约75ns。这里不要用普通整流管,因为普通二极管在100kHz下的反向恢复电流会造成巨大的开关损耗和电压尖峰,用MUR460才能看到真实的应力水平。
- 输出电容C1:220µF,ESR设0.1Ω。ESR模拟电解电容的等效串联电阻,它直接决定了输出高频纹波电压的大小。
- 负载R_load:先设1.6kΩ,对应400V输出、100W负载。后面用
.step指令改变这个值,就能观察负载变化对CCM/DCM的影响。
功率级的LTspice网表长这样,如果你习惯文本方式建图可以直接用:
* Boost PFC power stage 100W, 220Vrms input, 400V output V1 AC1 AC2 SINE(0 311 50) * Bridge rectifier D1 AC1 BRDG 1N5408 D2 AC2 BRDG 1N5408 D3 BRET AC1 1N5408 D4 BRET AC2 1N5408 * Boost power stage L1 BRDG SW 1m Rser=0.1 M1 SW VG VS VS IRFP460 R_SENSE VS 0 0.1 D5 SW VOUT MUR460 C1 VOUT 0 220u Rser=0.1 R_LOAD VOUT 0 1.6k注意桥式整流器里D3/D4的方向不能搞反:D3阳极接整流桥负端BRET(这里直接接地),阴极接AC1;D4阳极接BRET,阴极接AC2。这样在交流负半周时,电流经D3/D4回流。很多初学者把这两个管子方向接反,仿真出来的输入电流波形会带着巨大的尖刺,和实物完全对不上。
元器件模型方面,LTspice自带的库基本能覆盖常见的Gan/MOSFET/二极管型号。找不到具体型号时,去原厂官网下载SPICE模型文件,放进工程目录后通过.include指令引用,再把符号的Value填成模型名即可。具体流程放在第7节详细展开。
功率级搭好以后,第一件事是验证静态工作点能不能建立起来。用固定脉冲驱动开关管(比如100kHz、40%占空比)先跑一圈看电感电流和输出电压是否合理,确认电路没有接错,再进入闭环控制的设计。这一步虽然基础,但能省下后面排查“为什么波形乱飞”的大量时间。
3. CCM仿真:电感取值不是拍脑袋,先把纹波账算清楚
功率级就绪后,先别急着灌控制环路。电感值直接决定CCM/DCM边界,这个数值一定要先算一遍,有了预期再看仿真结果才有意义。
Boost电路在开关管导通期间,电感电流变化量为:
ΔI = (Vin × D) / (L × fs)
其中Vin是当前交流瞬时值(整流后),D是占空比,fs是开关频率。对Boost拓扑,稳态时有D = 1 - Vin / Vout。CCM的定义是电感电流谷值不小于零,即:
I_avg - ΔI/2 >= 0
把两个公式合起来,CCM成立的条件可以改写成:
2 × L × fs × I_avg >= Vin × (1 - Vin / Vout)
这个不等式就是判断CCM/DCM的核心判据。注意I_avg和Vin都是随交流相位时刻变化的量,所以这个判据在半个工频周期里每一刻都可能给出不同结论。
以100W满载、L=1mH、fs=100kHz为例,取两个典型相位点验算:
- 输入瞬时值200V附近(对应|sin|约0.64),I_avg约0.43A。左侧值
2×1m×100k×0.43=86,右侧值200×(1-200/400)=100,86<100,此点已经进入DCM。 - 输入峰值311V处,I_avg约0.675A。左侧值
2×1m×100k×0.675=135,右侧值311×(1-311/400)=69.2,135>69.2,CCM成立。
结论很直观:同一个1mH电感,在峰峰值附近是CCM,在中间相位反而可能掉入DCM。如果要在整个工频周期里都保持CCM,需要让不等式在最严苛点也成立。最严苛点出现在Vin=Vout/2附近(对400V输出就是200V附近),代入计算可以得到临界电感约2.3mH。
很多教程里写1mH,看起来像标准答案,其实那是针对特定输入功率和频率算出来的。在LTspice里可以直接用.step param L list 0.1m 0.3m 1m 2.5m一次性对比四种电感下的波形差异,几分钟就能看清规律。
控制部分我采用峰值电流模式:外环是输出电压采样与基准的误差,经过补偿得到电压误差信号VEA;内环把VEA和一个与整流后电压成正比的“电流指令”相乘,得到每个开关周期的峰值电流目标;100kHz时钟置位SR触发器开通MOSFET,电流采样电压达到目标时复位关断。
这个结构在LTspice里可以全部用行为源搭出来。其中锯齿波发生器是最简洁的一条语句:
B1 RMP 0 V=5*(time/10u-int(time/10u))int()函数取整,每个10µs周期内信号从0线性升到5V再复位,就得到了100kHz锯齿波。把这个信号和误差比较就构成最基本的PWM发生器。下面的电压环和乘法器用行为源同样可以实现:
R_FB1 VOUT N_FB 3.9MEG R_FB2 N_FB 0 51.1k V_REF VREF 0 5 B_EA VEA 0 V=V(N_FB)-V(VREF) B_MUL IREF 0 V=V(VEA)*abs(V(BRDG))/311把IREF和电流采样电阻RSENSE上的电压送到比较器,输出再控制SR触发器的复位端即可。这套控制结构虽然简化了不少,但足以复现PFC的电流整形过程,也足够展示CCM和DCM下控制行为的差异。等这些行为源搭好、仿真跑通,稳定后看输入电流波形,应该能看到输入电流包络跟随正弦形状。
CCM段最值得观察的波形是电感电流L1:在100kHz的开关频率下,电流以三角波形式在整流后的正弦包络上起伏,谷值始终大于零。把时间轴放大到单个开关周期,可以明显看到三角波的下沿没有触底,这就是CCM的典型形态。
4. 临界点定位:CCM/DCM边界为什么会随相位移动
上一节的验算已经暗示了边界是动态的,这里再用具体数字把边界定位到波形上。
把正弦输入代边界条件,可以得到:
I_avg(θ) = Iin_pk × |sinθ|(近似认为输入电流是正弦)
ΔI(θ)/2 = Vpk × |sinθ| × (1 - Vpk|sinθ|/Vout) / (2 × L × fs)
两式联立并约掉|sinθ|,边界条件变成:
Iin_pk >= Vpk × (1 - Vpk|sinθ|/Vout) / (2 × L × fs)
右边随|sinθ|增大而单调减小,所以最大值出现在|sinθ|趋近于0处,即Vpk / (2 × L × fs)。这意味着“整个工频周期都维持CCM”的充要条件是:
2 × L × fs × Iin_pk >= Vpk
代入100W、L=1mH的数字:左边135,右边311,不满足。这说明1mH在满载100W时根本不可能全程CCM。再具体一点,把边界解出来:当|sinθ|≤0.728时进入DCM,换算成角度是0°~46.7°和133.3°~180°。也就是说,半个工频周期中大约52%的时间工作在DCM。这个反直觉的结论,波形一拉出来就清清楚楚。
如果把电感加大到2.5mH:左边337.5>311,满载时全程CCM。但注意这只是满载。轻载20W时Iin_pk只有0.135A,就算用2.5mH也满足不了67.5<311,照样会掉进DCM。所以有两句话值得刻在桌上:
- CCM/DCM的边界不是一条固定的电感分界线,而是随负载和输入电压移动的动态区域。
- 即使满载设计成CCM,轻载必然进入DCM,这是物理决定的,不是环路能完全补救的。
还有一个细节:在交流过零附近,由于输入电流平均值趋近于零,无论电感取多大都会出现一段DCM或者临界导通区域。这与控制方式无关,是PFC工作在正弦电网下的内禀特性。
在LTspice里定位边界有几种办法。最笨也最直观的是把光标放在L1电流波形上,放大看单个开关周期,判断电流有没有跌到零。稍微高级一点的做法是添加一条测量指令,用.meas找出每个开关周期内I(L1)的最小值。实际调试下来,放大波形肉眼判断的效率最高——仿真本来就是给人看的。
5. DCM波形解析:输入电流的“台阶”、电压尖峰和控制失稳
把电感改成0.3mH,或者把负载电阻提到8kΩ(等效20W),仿真立刻进入明显DCM。DCM下电感电流的形态是:开关导通期电流线性上升;关断后经二极管续流线性下降;降到零后停在那里,直到下个周期开始。这个零电流平台在周期中的占比,就是所谓的断续度。
DCM对PFC最直接的影响体现在输入电流的低频包络上。因为电流断续,每个开关周期内的平均电流不再是“正弦参考值乘一个比例”那么简单,它由导通时间、电感量、输入电压和输出电压共同决定,而且是高度非线性的。实际表现就是:输入电流在过零附近出现“削底”和“台阶”,不再光滑,3、5、7次谐波分量明显增大。THD可能从CCM下的5%以内跳到15%以上,功率因数也跟着往下掉。
DCM带来的第二问题是电压尖峰。在电感电流归零的瞬间,开关管漏极和续流二极管两端会发生一次快速振铃。原因主要是二极管反向恢复电流和寄生电感、结电容形成的谐振。LTspice里如果不设器件的寄生电容,尖峰比实体温和一些,但依然能看到明显过冲。这也是为什么实际PFC电感上会并联一个“二极管串TVS”的支路——当发生短路或极端瞬态时,用它把电感两端电压钳住,保护开关管不超Vds额定值。仿真阶段要观察阻尼效果,可以用一个RC snubber(比如100Ω串联1nF)并在开关管两端,对比加与不加的振铃差异。
DCM对控制环路的冲击最隐蔽,也最容易被忽略。峰值电流模式在CCM下的控制到输出的传递函数近似一阶,补偿很容易做好;进入DCM后,电流环的增益和相位发生剧烈变化,电感电流从“受控连续变量”变成“边界条件变量”,平均电流模式控制的闭环可能出现次谐波振荡或低频抖动。用LTspice做负载阶跃响应可以看到:在CCM区收敛正常的环,到DCM区输出突然出现低频来回振荡,这就是相位裕量不足的直接体现。
工程上的应对手段通常是让PFC控制器在轻载时自动切换突发模式:跳过一部分开关周期,让输出电压在一个滞回区间内微降,同时使电感工作周期和断续状态可控。对于必须全程CCM的场合,比如下游还有一个需要稳定输入阻抗的DC-DC变换器,办法就两条:加大电感,或者提高开关频率,代价是磁性元件体积和开关损耗同步上升。
还有一个LTspice专属的观察技巧:固定电感1mH,负载从1.6kΩ逐步变到8kΩ,用.step指令一次跑完,然后播放波形动画。你会清楚地看到电感电流从完整三角波,逐步过渡到谷底接近零再到出现大段断续,整个模式演变过程一目了然。这种直观体验是任何公式都给不了的。
6. 两种模式怎么选:参数对比与实用决策表
到这里,CCM和DCM的差异已经比较清晰了,汇总成一张参数对比表方便随时查阅。
| 对比维度 | CCM | DCM |
|---|---|---|
| 电感电流形态 | 连续三角波,谷值>0 | 断续,有零电流平台 |
| 电感量需求 | 较大(100W级约2.3mH以上) | 较小(0.1~0.3mH) |
| 输入电流THD | 低,容易做PFC | 高,轻载时尤其明显 |
| 开关管电流峰值 | 较低(约为平均值1.1~1.3倍) | 较高(可达平均值2倍以上) |
| 二极管恢复损耗 | 大,必须用快恢复管 | 小,电流自然过零关断 |
| 控制环路复杂度 | 平均电流/峰值电流都成熟 | 传递函数变化大,易不稳定 |
| 差模滤波负担 | 纹波小,滤波容易 | 纹波大,差模电感需求大 |
| 典型应用场景 | 500W~3kW中大功率PFC | 100W以下低成本适配器、轻载待机 |
这张表背后有一条真实的设计经验:大部分消费类电源产品虽然标称CCM设计,实际上在轻载或待机时都会进入DCM。低于100W的小功率适配器,为了省电感成本,通常直接采用DCM或CRM设计。到了几百瓦以上、对谐波有硬性要求的工业电源,CCM几乎是唯一选择。
CRM(临界导通模式,也叫BCM)是两者之间的折中:电感电流在每个周期结束时刚好降到零,没有断续平台。它保留了MOSFET零电流开通、二极管自然关断的优点,电感量又不需要CCM那么大。代价是开关频率随输入电压和负载变化,在过零附近会飙到几百kHz,EMI滤波器设计得按最高工作频率来。维也纳PFC、图腾柱PFC这些热门拓扑,本质上都是在不同负载和输入区间内管理CCM/CRM/DCM的组合。
我在100W这个功率等级上的取舍习惯是:取临界电感附近的值,接受过零附近的DCM区间,换取电感体积和成本下降。对于要求THD低于5%的场合,则直接把电感加大到满载全程CCM,同时把电流环补偿做扎实。
做决策时可以在LTspice里跑一组对比实验:
.step param L list 0.3m 1m 2.5m,观察THD和电流包络变化;- 用
.four 50 10 I(V1)读取谐波和THD指标,数据说话比经验拍脑袋更有说服力。
这个仿真结果拿到硬件评审会上,是说服磁性元件供应商和EMI同事最有力的武器。
7. LTspice实操避坑:时长、收敛、测量和文件管理
最后整理一下我在LTspice里仿真PFC时踩过的具体坑,都是实际工作里验证过的经验,按优先级排序列出来。
7.1 仿真时长与步长设置
PFC仿真必须覆盖多个工频周期,一般从0开始跑100ms~200ms才能看到稳定的输入电流波形。开关频率100kHz,一个工频周期20ms包含2000个开关周期,控制环路还需要时间收敛。推荐配置:
.tran 0 120m 0 1umaxstep设1µs,每个开关周期至少采样10个点,对观察三角波纹波已经足够。如果想看更细的开关细节,把最大步长降到0.2µs,但总仿真时间会明显变长。建议先粗后细:先用1µs跑出动态趋势,再局部放大看单个开关周期。
7.2 正确测量PF和THD
LTspice的.four指令可以直接输出电流谐波和THD。对50Hz电网:
.four 50 10 I(V1)注意V1的参考方向:LTspice中电流定义为从源的正端流出。如果直接用I(V1)做频谱分析,得到的数据可能和期望反相。更稳妥的做法是在交流源后串一个0.1Ω小电阻,用流过电阻的电流作为测量对象,这样符号方向可控。
7.3 收敛失败的处理顺序
遇到Time step too small或者Singular matrix,按这个顺序排查:
- 先把最大步长放宽到1µs甚至5µs,很多收敛问题就是步长设置过于激进导致的数值爆炸;
- 给电感加Rser、给电容加ESR,理想元件在仿真里的数值问题比实物里还多;
- 更换具体的器件模型——IRFP460、MUR460这类经典模型比某些通用开关模型更容易收敛;
- 加
.options plotwinsize=0关闭波形压缩,必要时把reltol和abstol参数调严格; - 如果还有振铃,先判断是真振铃还是数值振荡。真振铃频率通常和寄生参数有关,数值振荡往往在10倍开关频率以上,可以加RC snubber验证。
7.4 导入厂商SPICE模型
LTspice导入英飞凌这类厂商模型的步骤,我验证过很多次:
- 去官网下载.lib文件,放到LTspice工程目录;
- 在原理图添加SPICE指令:
.include 文件名.lib; - 放置一个通用器件符号(MOSFET用nmos,二极管用d),编辑Value填成库里的具体型号名;
- 如果厂商给的是.subckt宏模型,需要放置对应的通用符号,再绑定调用的子电路名;
- 先跑一次直流工作点,确认静态参数和手册一致再继续。
7.5 关于“保存文件时多出来好几个文件”
这也是新手经常疑问的点。LTspice运行后产生多个文件属于正常现象:.raw是波形数据,.log是运行日志,.plt是波形窗口的显示设置,.net是网表,.op.raw是工作点数据。平时只需要保留.asc原理图和.asy符号文件,其余都是可以随时再生成的临时文件。如果.raw文件太大,可以在控制面板打开波形压缩,或者仿真完直接删掉,不影响下次使用。
这几年做PFC下来,我最大的感受是:工作模式从来不能靠“选一个参数”一锤定音,必须放在具体输入电压、负载、频率条件下逐个验证。LTspice恰恰给了我最低成本的验证手段。如果你也准备在打样之前就把电感量、工作模式和THD之间的三角关系摸透,不妨照着上面的方法自己复现一版仿真。数据在手,和磁性元件供应商谈方案、和EMI整改同事对边界的时候,腰杆都能挺直不少。