2727 字
14 分钟
关于学习BUCK降压电路的一些想法

关于学习BUCK降压电路的一些想法
#

前言#

笔者在学习嵌入式中需要做一个基于stm32设计输出稳定可调节电压小设计,于是上网搜索buck电路学习。虽然笔者大一下学过了模电这本书,但经历了学生时代的人都懂理论学习不经过实际运用一会儿就忘了,所以作为一个类似零基础的人去设计这样一个电路难度还是蛮大,但最终在不断的讨教老学长和与gpt进行长篇大论以及自我学习中也算是设计出来了(能不能用目前还不知道,亟待实验),对此在下文我将简单谈论下我的见解。

正文#

先附上一张经典的buck电路拓扑

BUCK 降压电路拓扑图
图 1:BUCK 降压电路的基本拓扑结构

buck电路是开关降压电路,不同于ldo降压,ldo是将多余的电压以热量的形式散发出去。这两种不同的方式也就说明了两种不同的用途。在实际使用时ldo的效率通常是

η=VoutVin\eta=\frac{V_{out}}{V_{in}}

因此在前后压差大,电流大的时候ldo就显得不那么友好了。而DCDC降压电路(即buck电路)采用开关的形式可以极大程度的提升效率,适用于前后电压差大,大电流的情况。

理论基础#

首先先做个形象化的比喻,在现实生活中我们通过调节水龙头的旋钮来调整水流的大小,而在电路中同理我们也可以通过制作一个开关做成一个控制电压的电路。依旧搬出拓扑图

BUCK 降压电路拓扑图
图 1:BUCK 降压电路的基本拓扑结构

但实际上控制电压比控制水流更复杂一点,依照电流方向以此介绍。首先通过一个nmos管,在这里充当开关管的作用,那我们就可以思考我们是通过调整水龙头的阀门来调整水流的,可在电路中我们显然没有阀门来调整,我们可以调整的只有开关的占空比即开占一个周期的百分比,此时nmos管的作用就体现出来了。然后经过电感,续流二极管,电容以及负载。此时可能会有点懵,一下多了这么多元器件,但是先别着急我们依次分析。首先电路一共有两种状态,开和关那我们就逐个分析。当开关闭合时,续流二极管反向截至,此时我们暂且说明只有一个回路,电流通过电感流过负载最后回到电源。当开关打开的时候,此时电感里储存磁能需要释放,如果没有续流二极管,此时就没有一个完整的通路来供电感释放磁能,此时负载将处于不工作的状态,电感的磁能转换为热能。所以我们需要一个续流二极管来构造回路,那为什么一定时二极管呢?如果是一个导线显然不行,那能不能时电阻呢,如果是个电阻那无论开还是关,都有电流流入电阻,这必然导致额外的功率损失。而二极管就没有这个损失,开关打开的时候分析点位二极管时处于截至的,只有电感放电的时候才会导通。接着我们在解释下电容的作用,总所周知输出电容一般具有滤波的作用,这里就是充当滤波的作用,此外还有使电流电压更平滑的功能。最后应该只有nmos管的栅极没有讲了,一般来说这里的mos管的栅极会接一个pwm(Pulse Width Modulation)信号来控制,处于高电平时导通,低电平时关闭,通过调整占空比来调整VoutV_{out}。

公式#

以上都是感性分析,现进行实际推导(该推导均为理想化,不涉及寄生电容电感等)先给出以下物理量: VinV_{in}:输入电压 VoutV_{out}:输出电压 LL:电感 DD:占空比 TswT_{sw}:开关周期

电感方程U=Ldidt\text{电感方程}U=L\frac{di}{dt}

进入稳态后,在一个开关周期内,当开关打开的时候有

Δiin=(Vin−Vout)⋅Tsw⋅DL\Delta i_{in}=\frac{(V_{in}-V_{out})\cdot T_{sw}\cdot D}{L}

当开关断开的时候有

Δiout=(Vout)⋅Tsw⋅(1−D)L\Delta i_{out}=\frac{(V_{out})\cdot T_{sw}\cdot (1-D)}{L}

又因为伏秒平衡有

Δiin=Δiout\Delta i_{in}=\Delta i_{out}

整理可得

Vout=DVinV_{out}=DV_{in}

又因为0<D≤10<D\leq1,所以buck电路是降压电路,输出电压通常小于等于输入电压 此外还有同步整流式的buck电路,把续流二极管换成mos管,进一步减少了二极管压降的影响,但由于笔者才疏学浅这里就不多赘述了。

实际运用#

简单赘述了下原理后我们可知只要通过调整DD占空比即可输出我们所需要的电压,而又又总所周知stm32内置pwm波,也就是说我们可以通过软件上调整占空比来调整电压,但很明显这是开环的,受到环境和一些神秘因素以及非理想情况的影响,输出电压必然不可能是我们理论算的电压,因此要引入反馈用pid进行一个闭环。其次在控制nmos管开闭的过程中nmos管是有寄生电容的,想要缩短充放电时间那就电路就不可避免的变大,而stm32的io口所承受的电流是有限的,因此我们还需要一个驱动芯片来驱动mos管的栅极,至此所有程序闭环。

遇到的问题#

理论是美好的,但是落实到工程上其实并没没有想象中的那么简单,工程上往往还要选择合适的参数,这往往也是最头疼的,例如buck电路电容和电感的参数计算,这里涉及到纹波率的概念是笔者没学过的,所以笔者只能借助gpt和咨询老学长。此外在设计驱动器原理图的时候经过老学长的提醒才知道还要加个自举电容(有空也会单独讲讲),反正绕来绕去这篇文章也是记录下笔者学习的过程以及其中的一些见解,专业性没那么强,可能会有许多纰漏,望多多谅解。

神秘内容#

之前分析buck电路的时候没有介绍伏秒平衡以及都是在稳态条件下分析的,下附上gpt的相关描述

下面以理想、固定占空比的 Buck 电路为主解释。实际电路还会受到闭环控制、软启动和限流影响。

1. 什么是伏秒平衡#

电感的基本关系是:

vL=LdiLdtv_L=L\frac{di_L}{dt}

两边在一段时间内积分:

∫t1t2vL(t) dt=L[iL(t2)−iL(t1)]=LΔiL\int_{t_1}^{t_2}v_L(t)\,dt =L[i_L(t_2)-i_L(t_1)] =L\Delta i_L

所以,电感电压曲线下的“面积”,决定了电感电流的变化量:

  • 正的伏秒面积:电感电流增加
  • 负的伏秒面积:电感电流减少
  • 正负面积相等:电感电流回到原来的值

这里的“伏秒”就是电压乘时间,单位为 V⋅s\mathrm{V\cdot s}。

2. Buck 的一个开关周期#

设输入电压为 VinV_{in},输出电压为 VoV_o,占空比为 DD,周期为 TsT_s。

开关管导通,持续 DTsDT_s:

vL=Vin−Vov_L=V_{in}-V_o

因此电感电流增加:

ΔiL,on=Vin−VoLDTs\Delta i_{L,on} =\frac{V_{in}-V_o}{L}DT_s

开关管关断,持续 (1−D)Ts(1-D)T_s:

vL=−Vov_L=-V_o

因此电感电流变化:

ΔiL,off=−VoL(1−D)Ts\Delta i_{L,off} =-\frac{V_o}{L}(1-D)T_s

在周期稳态下,一个周期结束后电感电流必须回到原值:

iL(t+Ts)=iL(t)i_L(t+T_s)=i_L(t)

所以:

ΔiL,on+ΔiL,off=0\Delta i_{L,on}+\Delta i_{L,off}=0

代入得到:

(Vin−Vo)DTs−Vo(1−D)Ts=0(V_{in}-V_o)DT_s-V_o(1-D)T_s=0

化简:

DVin−Vo=0DV_{in}-V_o=0

因此理想 Buck 在 CCM 稳态下:

Vo=DVin\boxed{V_o=DV_{in}}

注意,伏秒平衡不是任何时刻都必须满足的条件,而是电感电流进入周期稳态之后的结果。

3. 没有达到稳态时会怎样#

在第 kk 个开关周期内,把输出电压近似看成当前值 vo,kv_{o,k},该周期的电感电流净变化约为:

ΔiL,k≈DVin−vo,kLTs\Delta i_{L,k} \approx \frac{D V_{in}-v_{o,k}}{L}T_s

这条式子非常关键:

  • 若 vo,k<DVinv_{o,k}<DV_{in},则 ΔiL,k>0\Delta i_{L,k}>0,电感电流逐周期增大
  • 若 vo,k=DVinv_{o,k}=DV_{in},则 ΔiL,k=0\Delta i_{L,k}=0,达到伏秒平衡
  • 若 vo,k>DVinv_{o,k}>DV_{in},则 ΔiL,k<0\Delta i_{L,k}<0,电感电流逐周期减小

例如 Vin=12VV_{in}=12\mathrm V、D=0.5D=0.5,对应目标电压约为 6V6\mathrm V:

  • 输出为 0V0\mathrm V 时,平均电感电压约为 6V6\mathrm V,电流增长很快
  • 输出升到 3V3\mathrm V 时,平均电感电压约为 3V3\mathrm V,电流继续增长但变慢
  • 输出达到 6V6\mathrm V 时,平均电感电压为零
  • 若输出超过 6V6\mathrm V,平均电感电压为负,电感电流开始下降

这是一种自然的负反馈关系,但由于电感和电容都能储能,输出可能发生过冲和振荡,并不一定平滑停在目标值。

4. 输出电压为什么会上升#

电感电流流入输出节点,一部分供给负载,剩余部分给电容充电:

iC=iL−ioi_C=i_L-i_o

对于电阻负载:

io=voRi_o=\frac{v_o}{R}

所以:

Cdvodt=iL−voRC\frac{dv_o}{dt}=i_L-\frac{v_o}{R}

于是:

  • iL>vo/Ri_L>v_o/R:电容充电,输出电压上升
  • iL<vo/Ri_L<v_o/R:电容放电,输出电压下降
  • iL=vo/Ri_L=v_o/R:电容平均电流为零,输出平均电压不再变化

因此完整稳态需要同时满足两个条件:

DVin=Vo\boxed{DV_{in}=V_o} IL=VoR\boxed{I_L=\frac{V_o}{R}}

第一个是电感的伏秒平衡,第二个是电容的安秒平衡,也称电荷平衡。

5. Buck 启动过程#

从输出为零开始,大致经历:

  1. 开关导通,电感电流从零开始增加。
  2. 电感电流流入输出电容和负载,输出电压逐渐上升。
  3. 输出电压升高后,导通期间的 Vin−VoV_{in}-V_o 变小,电流上升速度减慢。
  4. 电感电流可能先超过负载所需电流,导致输出过冲。
  5. 当平均电感电压和平均电容电流都趋近于零时,进入周期稳态。

启动初期,电感电流经常会降到零,因此可能先处于 DCM,而不是图中的 CCM。非同步 Buck 中,二极管会阻止电流变成负值;实际电源通常还通过软启动逐渐提高占空比,避免过大的启动电流和输出过冲。

Buck 在 CCM 下的周期平均动态方程为:

LdiˉLdt=DVin−voL\frac{d\bar i_L}{dt}=DV_{in}-v_o Cdvodt=iˉL−voRC\frac{dv_o}{dt}=\bar i_L-\frac{v_o}{R}

这两个联立方程描述了稳态之前电感电流和输出电压如何相互作用。稳态并不是电流、电压完全不动,而是它们仍有开关纹波,只是每个周期的起点和终点重复。

关于学习BUCK降压电路的一些想法
https://wleaf666.github.io/posts/buck电路/
作者
Wleaf
发布于
2026-08-16
许可协议
CC BY-NC-SA 4.0