如果只是看原理图,很多初学者会觉得 BUCK 电路不过如此:一个 MOS 管、一个电感、一个电容,再加个续流二极管,好像就能把 5V 变成 3.3V。可真到动手做项目,或者被面试官问一句“为什么修改占空比就可以改变输出电压”时,才发现自己其实根本没有建立起开关电源的工程直觉。
这篇文章要解决的就是这个问题。
我建议所有入门模拟电路和电源设计的工程师,不要一上来就去啃环路补偿、小信号模型、PCB 寄生参数这些高阶内容,而是先把 BUCK 电路的完整仿真流程跑通。仿真不是“画画原理图点一下运行”那么简单,怎么选开关频率、怎么算电感、怎么判断电流连续还是断续、用什么方式测量纹波、同步整流和异步整流有什么区别,每一步背后都有明确的设计取舍。
读完这篇文章,你可以完成以下目标:理解 BUCK 降压的核心物理过程;掌握一组可复用的参数估算方法;在 LTspice 中搭建一个 5V 转 3.3V 的完整 BUCK 仿真;学会用波形判断电路是否进入稳态;知道仿真报错和波形异常时从哪里排查。
1. BUCK 电路的核心原理:从“降压器”到“能量搬运器”
1.1 彻底理解占空比的作用
很多资料把 BUCK 电路叫做“降压变换器”,这个叫法容易让人产生一个错误印象:好像它是靠电阻分压或者变压器变比来降压的。
这种理解在开关电源里非常危险。
BUCK 电路的输入输出关系由占空比决定,但占空比并不是一个随意定义的数字,它背后是电感在一个开关周期内“充电”和“放电”的伏秒平衡。用一句话概括:BUCK 电路的稳态输出电压等于输入电压乘以占空比,也就是:
Vout = Vin × D
这里的 D 是开关管导通时间占整个开关周期的比例。如果输入是 12V,占空比是 0.25,输出就稳定在 3V 附近。
但为什么这个公式成立?
关键在于电感的伏秒平衡。当开关管导通时,电感两端电压是 Vin - Vout,电流线性上升;当开关管关断时,电感两端电压变成 -Vout(异步整流靠二极管续流,同步整流靠下管导通续流),电流线性下降。只有在稳态时,一个周期内电感电流的上升量等于下降量,输出电压才能保持恒定。由此可以推导出:
Vin × D = Vout
所以,当你修改占空比时,本质上是改变了电感在每个周期里“储能—放能”的比例。输出电容会把这种高频的能量搬运过程平滑成稳定的直流电压。
1.2 同步 BUCK 和异步 BUCK 的区别
BUCK 电路按照续流路径可以分为异步 BUCK 和同步 BUCK。
异步 BUCK 用二极管续流。开关管关断时,电感电流流过二极管,二极管的正向导通压降会带来额外损耗。如果输出只有 3.3V,二极管压降 0.5V,这个比例已经非常可观,效率很难做上去。
同步 BUCK 用一只低侧 MOS 管代替二极管。低侧管导通时电流从源极流向漏极,等效阻抗是毫欧级的 Rds(on),损耗比二极管小很多。但同步整流带来一个经典问题:如果高侧管和低侧管的驱动时序没处理好,两个管子可能同时导通,导致输入到地直通短路。因此同步 BUCK 必须设计死区时间。
在入门仿真阶段,可以先从异步 BUCK 开始,因为电路结构简单,不容易出现直通问题。等到把电感电流、输出电压纹波这些概念搞清楚后,再切换到同步 BUCK,你会更深刻地理解死区时间到底在保护什么。
1.3 电感电流连续模式与断续模式
仿真波形里你会经常看到两个缩写:CCM 和 DCM。
CCM 是 Continuous Conduction Mode,电感电流在整个周期内都不为零;DCM 是 Discontinuous Conduction Mode,电感电流在开关周期的一部分时间内降到了零。判断电路工作在哪种模式,最简单的方法是看电感电流波形底部是否“贴地”。
CCM 和 DCM 对输出的影响非常大。CCM 下输入输出关系接近 Vout = Vin × D,负载调整率好;DCM 下电感电流归零后,输出电容单独向负载供电,电压波动更大,而且输入输出关系会偏离线性比例。
对于初学者,建议第一版仿真先设计在 CCM 模式,因为后续计算反馈补偿、分析稳定性时,CCM 的模型更成熟、更直观。如果一上来就工作在 DCM,会发现电压纹波、占空比调节的线性度都很难控制,容易给人“电路工作不正常”的错误判断。
2. 仿真前的任务书:一个 5V 转 3.3V 的 BUCK 电路设计
仿真不是随手画个原理图就开始跑。没有设计指标的仿真,只能用“看起来有波形”来安慰自己,却无法判断波形是否合理。
这里我们定义一个标准的入门任务书,后面所有内容都围绕这个电路展开。
设计指标如下:
| 参数 | 数值 | 说明 |
|---|---|---|
| 输入电压 Vin | 5V | 典型 USB 供电 |
| 输出电压 Vout | 3.3V | 典型逻辑电压 |
| 输出电流 Iout | 0.66A | 负载电阻 5Ω |
| 开关频率 fsw | 200kHz | 兼顾损耗和器件体积 |
| 输出电压纹波 | ≤ 50mV | 约为输出电压的 1.5% |
| 工作模式 | CCM | 便于理解和调试 |
2.1 确定占空比
因为电路设计在 CCM 模式,占空比可以近似用输出电压除以输入电压估算:
D = Vout / Vin = 3.3V / 5V = 0.66
这意味着高侧开关管每个周期要导通约 66% 的时间。这个数值不小,在异步 BUCK 里,二极管续流时间只有约 34%,整体损耗还不算太夸张。
2.2 计算电感值
电感值的选取是 BUCK 仿真里最关键的一步。电感选太小,电流纹波大,容易进入 DCM;电感选太大,响应变慢,体积变大。
工程上一般取电感电流纹波为满载输出电流的 20% 到 40%。这里取 30%,即:
ΔIL = 0.3 × Iout = 0.198A,约 0.2A
电感在开关导通阶段的电压方程为:
Vin - Vout = L × ΔIL / (D × T)
其中 T = 1 / fsw = 1 / 200kHz = 5μs,D × T 就是导通时间。
L = (Vin - Vout) × D × T / ΔIL
代入数值:
L = (5 - 3.3) × 0.66 × 5μs / 0.2A
L = 1.7 × 3.3μs / 0.2 = 28.05μH
取标准值 33μH 或 22μH 都可以。如果我们想保守一点,让纹波更小,选 33μH;想让动态响应更快,选 22μH。入门仿真建议用 33μH,电感电流更平滑,波形更容易观察。
2.3 计算输出电容
输出电容主要决定输出电压纹波。对于 BUCK 电路,输出纹波主要由电容的 ESR 和充放电电流造成。理想电容情况下,纹波电压近似为:
ΔVout ≈ ΔIL / (8 × fsw × Cout)
我们希望 ΔVout ≤ 50mV:
Cout ≥ ΔIL / (8 × fsw × ΔVout)
Cout ≥ 0.2 / (8 × 200kHz × 0.05V)
Cout ≥ 0.2 / 80000 = 2.5μF
理论上 4.7μF 就够,但实际中电容 ESR 会带来额外纹波,而且我们要给负载阶跃提供电荷,建议取 22μF 或 47μF。仿真时先用 47μF,可以看到比较理想的输出波形。
2.4 选择开关管和二极管
对于入门仿真,不需要指定具体型号,使用理想开关器件即可。仿真时可以用 LTspice 自带的 SW 开关模型配合脉冲电压源作为 PWM 驱动,二极管用标准的 Schottky 模型,耐压选择大于 1.2 倍输入电压,额定电流大于 2 倍输出电流。
在这里要理解一个概念:虽然稳态输出只有 0.66A,但电感电流峰值会高于平均电流,加上启动冲击,二极管和开关管的电流应力要留有足够裕量。仿真里可以暂时不关注具体型号,但心里要有“降额设计”的意识。
3. 仿真工具选择:为什么推荐 LTspice
市面上能做开关电源仿真的工具很多,像 Simplis、PSIM、Cadence PSpice,还有各种在线仿真平台。我在这里选择 LTspice,不是因为它是所有工具里功能最全的,而是因为它在电源仿真场景有几个非常适合初学者的特性。
第一,LTspice 免费,没有 license 限制,公司和个人都能用。第二,它内置了大量 MOS、二极管、电感电容模型,尤其是开关电源芯片模型数量很多。第三,它的瞬态仿真速度和收敛性在免费工具里属于第一梯队,不容易出现“参数没问题但仿真不收敛”的劝退情况。
安装时需要注意,LTspice 的版本更新比较频繁,菜单布局和默认选项会有差异。菜单路径在不同版本里可能不同。更稳妥的做法是用软件自带帮助或者网上官方文档确认。本文的重点是通用仿真流程,不会拘泥于某个版本菜单名称。
在 LTspice 中做 BUCK 仿真,核心工作包括三部分:搭建主电路、设置 PWM 驱动源、配置瞬态仿真参数。下面逐步展开。
4. 完整仿真搭建:从原理图到网表
4.1 用原理图方式搭建
LTspice 最常用的方式是绘制原理图。下面是推荐的基础拓扑结构。
异步 BUCK 主电路包含以下元件:
| 元件 | 参数 | 说明 |
|---|---|---|
| 输入电压源 V1 | DC 5V | 电源输入 |
| 开关 SW1 | 默认 SW 模型 | 由 PWM 源控制 |
| PWM 源 V2 | PULSE(0 5 0 10n 10n 3.3u 5u) | 驱动开关,占空比 66% |
| 电感 L1 | 33μH | 储能元件 |
| 二极管 D1 | 理想二极管模型 | 续流二极管 |
| 输出电容 C1 | 47μF | 滤波电容 |
| 负载 R1 | 5Ω | 模拟负载 |
PWM 源是关键。PULSE 参数依次是:初始电压、脉冲电压、延迟时间、上升时间、下降时间、脉冲宽度、周期。
对应本设计:
PULSE(0 5 0 10n 10n 3.3u 5u)
这里脉冲宽度 3.3μs,对应 66% 占空比,周期 5μs,对应 200kHz。上升时间和下降时间设置为 10ns,模拟开关管的开关动作。
绘制好后,运行瞬态仿真,设置仿真时间为 5ms,因为开关频率只有 200kHz,一个周期 5μs,5ms 相当于 1000 个开关周期。如果时间太短,电路还没有进入稳态,波形无法代表正常工作状态。
4.2 用网表方式搭建
如果不想画图,或者需要把仿真分享给其他人,LTspice 支持直接运行网表。下面是一个完整的异步 BUCK 网表示例。
* Async Buck Converter 5V to 3.3V * Simulation Netlist for LTspice V1 IN 0 5V * PWM source: 0V to 5V, 3.3us on, 5us period V2 SW_CTRL 0 PULSE(0 5 0 10n 10n 3.3u 5u) * Switch model: SW with control node SW_CTRL, 1 ohm on resistance S1 IN SW_OUT SW_CTRL 0 SW .model SW SW(Ron=0.1 Roff=1Meg Vt=2.5 Vh=-0.5) * Inductor L1 SW_OUT VOUT 33u * Diode: use a Schottky-like ideal model D1 0 SW_OUT D_SCHOTTKY .model D_SCHOTTKY D(Is=1e-12 Rs=0.01 Cjo=50p) * Output capacitor and load C1 VOUT 0 47u R1 VOUT 0 5 * Simulation command .tran 0 5m 0 50n * Initial condition to speed up startup .ic V(VOUT)=3.3 .backanno .end这个网表的逻辑很容易看懂:
V2 产生 PWM 信号控制开关 S1。S1 导通时,输入 5V 通过电感向负载供电;S1 关断时,电感电流通过二极管 D1 续流。电感 L1 和电容 C1 组成的低通滤波器把方波电压平滑成直流 3.3V。.tran 0 5m 0 50n 表示仿真 5ms,最大步长 50ns,兼顾速度和波形精度。
把这段网表复制到一个文本文件里,命名为 buck_sim.asc 同目录下的 .net 文件,或者直接新建一个 .asc 文件并用 LTspice 打开,就可以运行。
运行后,打开 VOUT 节点波形,你会看到输出电压从 0 缓慢上升到接近 3.3V,然后出现一个固定幅度的纹波。电感电流波形则是在平均值附近做线性锯齿波动。
4.3 写入测量脚本
为了让仿真结果更加量化,可以在网表中加入 .meas 测量命令,自动计算稳态输出电压、纹波大小、电感电流平均值和峰峰值。
* Measure steady-state output voltage .meas TRAN Vout_avg AVG V(VOUT) FROM 3m TO 5m .meas TRAN Vout_pk MAX V(VOUT) FROM 3m TO 5m .meas TRAN Vout_min MIN V(VOUT) FROM 3m TO 5m .meas TRAN Vout_ripple PARAM Vout_pk - Vout_min * Measure inductor current .meas TRAN IL_avg AVG I(L1) FROM 3m TO 5m .meas TRAN IL_pk MAX I(L1) FROM 3m TO 5m .meas TRAN IL_pp PARAM IL_pk - MIN(I(L1))这里选择 3ms 到 5ms 作为测量窗口,是因为电路经过足够长时间已经进入稳态。仿真结束后,打开 SPICE Error Log 就可以看到计算出的数值。
4.4 输出结果验证
在 LTspice 中,测量结果会输出到 log 文件。一个成功的仿真结果大概是这样的:
vout_avg: AVG(v(vout))=3.30162 FROM 0.003 TO 0.005 vout_pk: MAX(v(vout))=3.32521 FROM 0.003 TO 0.005 vout_min: MIN(v(vout))=3.28436 FROM 0.003 TO 0.005 vout_ripple: 3.32521-3.28436=0.04085 il_avg: AVG(i(l1))=0.660423 FROM 0.003 TO 0.005 il_pk: MAX(i(l1))=0.754335 FROM 0.003 TO 0.005看到这类输出,说明仿真已经成功。输出电压平均值约 3.3V,纹波约 40.85mV,满足设计指标。电感平均电流约 0.66A,也符合负载电阻计算值。如果你的结果和这个数量级差别很大,说明参数设置有误,需要回到前面的计算逐一检查。
5. 仿真结果分析:波形能告诉你什么
5.1 电感电流波形判断 CCM 还是 DCM
先看电感电流波形。如果电感电流在整个周期内都大于 0,说明电路工作在 CCM。
把光标放在 I(L1) 曲线上,观察锯齿波底部是否为零。底部离 0 还有一段距离,说明 CCM;底部刚好触到 0,说明临界状态;如果底部长期停在 0,说明电路进入 DCM。
如果发现自己设计的电路实际工作在 DCM,不要急着怀疑电感值。可以先代入公式计算当前模式的临界电感:
Lcrit = (1 - D) × R / (2 × fsw)
代入数据:
Lcrit = (1 - 0.66) × 5 / (2 × 200k) = 4.25μH
也就是说,负载 5Ω 时,电感只要大于 4.25μH,理论上就能保持 CCM。我们选的 33μH 有充足裕量,所以如果在仿真中看到 DCM,第一反应应该是检查 PWM 占空比是不是设错了,或者电感值是否被写成了 3.3μ。
5.2 输出电压纹波
输出电压纹波是评估滤波效果的重要指标。在 5ms 仿真时间之后,放大输出电压波形,可以看到锯齿波形状,频率与开关频率一致,幅度大约几十毫伏。
纹波来源主要有两个:第一个是电感电流纹波对电容充放电;第二个是电容寄生电阻 ESR。仿真中如果使用理想电容,只能看到第一种纹波。实际项目中必须额外考虑 ESR 的影响,这也是从仿真到工程实践最容易被忽略的差异之一。
如果仿真看到的纹波远大于 50mV,优先检查输出电容是否太小,或者最大仿真步长是否过大。步长太大时,波形采样点不足,显示出来的纹波可能包含大量数值误差,看起来不规则。
5.3 负载阶跃响应
入门仿真只跑恒负载是不够的,因为它不能反映电源的动态特性。
把 R1 修改为阶跃电流源,或者用一个随时间变化的电阻。这里推荐在 3ms 时刻给负载并联一个额外的 5Ω 电阻,使负载从 0.66A 增加到 1.32A。观察输出电压在阶跃期间的跌落和恢复时间,可以直观理解输出电容的支撑作用。
* Add a load step at 3ms S2 R1 R_EXT 0 STEP_CTRL 0 SW .model SW SW(Ron=1m Roff=1Meg Vt=2.5 Vh=-0.5) V3 STEP_CTRL 0 PULSE(0 5 3m 1n 1n 1m 2m) R_EXT R1 0 5在仿真中,你会看到输出电压在负载突加时先下跌,然后逐渐恢复到接近 3.3V。这个恢复时间反映了电路的开环响应速度,也是后续学习补偿网络设计的起点。
5.4 效率估算
效率在仿真中可以通过计算输入功率和输出功率获得。在网表中加入功率测量:
.meas TRAN Pin AVG V(IN)*I(V1) FROM 3m TO 5m .meas TRAN Pout AVG V(VOUT)*I(R1) FROM 3m TO 5m .meas TRAN Efficiency PARAM Pout/Pin*100对一个使用理想开关和二极管的异步 BUCK 仿真,效率可能偏高,因为器件没有完整损耗模型。它的意义不在于得到精确的效率数字,而在于观察不同占空比、不同负载下效率变化的趋势。如果你在仿真中看到效率异常低,比如低于 50%,优先检查二极管是否接反、开关逻辑是否反相。
6. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 输出电压接近 0 | 开关管没有导通 | 查看 PWM 源波形是否为 0-5V 方波 | 检查 PULSE 参数,确认脉冲电压和占空比 |
| 输出电压很高接近输入 | 占空比设置过大或电感短路 | 检查驱动脉冲宽度和电感值 | 把脉冲宽度重新设为 3.3μs,确认电感为 33μH |
| 输出电压有规律振荡 | 开关频率与仿真步长不匹配 | 查看最大步长设置 | 设置最大步长为 50ns 或更小 |
| 电感电流为负 | 电路进入同步整流模式或二极管模型反向恢复 | 检查续流路径 | 使用普通二极管并检查极性 |
| 仿真不收敛 | 模型参数冲突或初始条件异常 | 查看错误日志 | 增加初始条件 .ic 或减少理想模型刚度 |
| 输出纹波特别大 | 输出电容太小或负载过小 | 计算纹波预期值 | 增大输出电容或调整电感值 |
| 启动电流过冲 | 输出电容初始电压为 0 | 查看电感饱和电流限制 | 加入软启动或设置初始条件为 3.3V |
这里重点说一下“仿真不收敛”。很多初学者第一次遇到这个报错就会怀疑软件坏了。其实 LTspice 的收敛问题大多数来自理想开关模型在切换瞬间的电压跳变,尤其是带有快速 di/dt 的电源电路。在开关电源仿真里,通常可以在网表开头加入:
.options abstol=1e-10 reltol=0.003这样能提高收敛概率,同时不会明显影响精度。为了更稳妥,也可以给开关控制信号增加 10ns 左右的上升下降时间,真实电路不会存在零时间跳变,仿真中也不应该追求理想跳变。
7. 从仿真到工程实践:几个重要的提醒
7.1 电感选型不只是电感量
仿真里一个 33μH 的电感只是一个理想器件。到了实际项目中,要重点关注三个参数:饱和电流、额定电流、直流电阻 DCR。
饱和电流决定了电感在峰值电流下还能不能保持标称电感值。如果电感饱和,电感量会骤降,电流失控,轻则输出纹波增大,重则烧毁开关管。DCR 直接带来导通损耗,尤其在大电流输出时,DCR 每增加 1Ω 就会产生可观功耗。仿真时,可以把一个 0.1Ω 的电阻和电感串联,感受一下损耗对输出电压的影响。
在项目选型时,电感的饱和电流至少应该大于最大峰值电流的 1.2 倍,额定电流要覆盖连续输出电流。
7.2 同步 BUCK 的死区时间必须留够
如果你的项目效率要求高,最终大概率会选同步 BUCK 架构。同步 BUCK 用低侧 MOS 管做续流,但两个开关管在切换瞬间必须有一段时间同时关断,这就是死区时间。死区太小,可能直通;死区太大,体二极管导通时间变长,效率下降。具体死区数值取决于驱动芯片和 MOS 管的开关速度,一般从几十纳秒到数百纳秒不等。这个参数在仿真中可以通过两个 PWM 源加延迟来模拟。
7.3 PCB 布局影响真实纹波
仿真里无论怎么降低纹波,上了真实 PCB 都可能出现纹波恶化。原因在于寄生电感和电容布局。BUCK 电路存在高频开关电流环路,这个环路面积越大,寄生电感越大,产生的电压尖峰越高。
常见做法是让输入电容尽量靠近高侧 MOS 管的漏极和低侧 MOS 管的源极,输出电容靠近电感输出端,功率地和控制地单点连接。对于入门者,不需要一上来就研究阻抗控制,先把“发热器件分开、高频环路最小化”这两点做好即可。
7.4 环路补偿是下一个学习重点
这篇文章的仿真流程没有涉及反馈环路,因为开环 BUCK 已经能帮你建立波形直觉。但在实际应用中,BUCK 不可能开环运行。负载变化、输入电压变化都需要环路自动调整占空比,才能维持稳定输出。
学习路径建议是:先能把开环 BUCK 仿真跑熟,理解电感电流和输出电容的作用;再引入电压反馈,把输出电压分压后送给误差放大器,用比较器生成 PWM,实现闭环稳压;最后再分析环路稳定性和补偿网络。
如果你在面试中被问到 BUCK 电路,能够画出电感电流锯齿波,说出 CCM 与 DCM 的判据,解释同步与异步整流的差异,并能用仿真波形证明自己的理解,这已经超过了相当一部分应聘者的水平。真正的核心不是记住公式,而是知道公式从哪里来,仿真里如何验证,异常时如何定位。
8. 用这个流程完成你的第一块电源设计
回到文章开头的问题:为什么修改占空比可以改变输出电压?
因为占空比决定了电感两端伏秒平衡的分配比例,BUCK 电路就是通过这种高频能量搬运实现降压的。能理解这句话,并且能在仿真波形里看到电感电流的上升和下降斜率,看到输出电压纹波随着电容增大而减小,你就已经入门了。
建议你现在就动手做一次完整练习:
输入 5V,输出 3.3V,开关频率 200kHz,负载 5Ω。先手工计算占空比、电感量和电容量,再在 LTspice 中搭建开环异步 BUCK 仿真,测量稳态输出电压、纹波和电感电流。之后尝试把电感改成 10μH,观察电路是否进入 DCM,再改回 33μH,加深对临界电感的印象。最后给负载加一次阶跃,记录电压跌落和恢复时间。
这个流程跑完,你对 BUCK 电路的理解会比单纯看十篇原理文章更扎实。下一步可以学习闭环反馈和环路补偿,也可以去看同步整流驱动电路中的自举电容和电荷泵设计,那些内容都需要这篇文章里建立的波形直觉作为基础。