☰
BUCK电路动态建模:从大信号到小信号及补偿器设计
2026/10/7 1:23:51 网站建设 项目流程

1. 从一个让人头疼的波形说起:为什么BUCK电路不能只用稳态公式算

刚接触开关电源那会儿,我对BUCK电路的理解停留在"占空比乘以输入电压等于输出电压"这个层面。算电感、算电容、选MOS管,全靠这套稳态公式,做出来的板子也能跑。直到有一次做一个12V转3.3V、负载电流从0.5A到8A动态跳变的项目,输出电压在负载突变时直接跌了400mV,恢复时间超过200微秒,后级MCU直接复位。我拿着示波器盯着那个波形看了半天,才意识到问题出在我从来没认真对待过BUCK电路的动态行为。

稳态公式告诉你的是"最终会稳定在多少伏",但它不告诉你"从0.5A跳到8A的那一瞬间,电压会掉多少、多久能回来"。要回答这些问题,必须建立BUCK电路的动态模型。而动态模型分两种:大信号模型和小信号模型。这两个词听起来很学术,但说白了,大信号模型描述的是电路在大范围扰动下的行为(比如启动、短路、负载大幅跳变),小信号模型描述的是电路在工作点附近微小扰动下的线性化行为(比如稳态下负载小幅波动、输入电压纹波)。

为什么两个都要?因为它们的用途完全不同。大信号模型用来分析启动过程、限流保护、大负载跳变,这时候电路的非线性特征非常明显,占空比可能从0直接拉到最大,电感电流可能从连续模式进入断续模式。小信号模型用来设计补偿网络、分析环路稳定性、算相位裕度,这时候电路在工作点附近可以近似为线性系统,用传递函数就能完整描述。

我踩过的最大坑就是:拿小信号模型去分析启动过程,或者拿大信号模型去设计PID参数。前者会得出完全错误的结论,因为启动时电路根本不满足小信号假设;后者会让你无从下手,因为大信号模型是非线性的,没有传递函数可用。

这篇内容我打算把BUCK电路从大信号到小信号的完整推导链路捋一遍,包括状态空间平均法的每一步怎么来的、为什么这么近似、最终传递函数怎么用。适合已经懂BUCK基本工作原理、但想深入理解动态建模的电源工程师,也适合正在学电力电子建模的学生。推导过程我会尽量把每一步的物理意义讲清楚,而不是堆公式。

2. 大信号模型:状态空间平均法的每一步到底在做什么

2.1 为什么不能直接对开关电路列写状态方程

BUCK电路有两个开关状态:开关管导通时,电感两端电压是Vin-Vout,电感电流上升;开关管关断时,电感通过续流二极管(或同步整流管)续流,电感两端电压是-Vout,电感电流下降。每个状态都可以列写一组线性状态方程,但问题是这两个状态在周期性切换,整个系统是时变的。

你当然可以对每个状态分别列方程,然后用周期平均的方式处理。但直接平均会丢失开关纹波的信息,而且平均后的方程是否还能描述系统行为,需要理论支撑。状态空间平均法的核心思想就是:当开关频率远高于电路的自然频率(LC谐振频率)时,可以用一个开关周期内的平均值来近似瞬时值,从而把时变系统转化为时不变系统。

这个假设的物理含义是:电感电流和电容电压在一个开关周期内变化很小,它们主要跟随开关周期的平均值缓慢变化。换句话说,开关纹波是"小"的,平均值是"大"的。这就是为什么叫"大信号模型"——它描述的是平均值的动态行为,而这个平均值可以有大范围的变动。

2.2 两个开关状态的方程列写

设电感电流为iL,电容电压为vC(等于输出电压vout),负载电阻为R。开关管导通期间(占空比d,持续时间dTs):

电感电压方程:L diL/dt = Vin - vC

电容电流方程:C dvC/dt = iL - vC/R

开关管关断期间(持续时间(1-d)Ts):

电感电压方程:L diL/dt = -vC

电容电流方程:C dvC/dt = iL - vC/R

注意这里假设了二极管导通压降为零、开关管导通电阻为零,这是理想化处理。实际建模时可以把这些寄生参数加进去,但推导思路完全一样。

2.3 周期平均操作的具体步骤

把上面两组方程分别乘以d和(1-d),然后相加,得到平均方程:

L d⟨iL⟩/dt = d·Vin - ⟨vC⟩

C d⟨vC⟩/dt = ⟨iL⟩ - ⟨vC⟩/R

这里⟨iL⟩和⟨vC⟩表示一个开关周期内的平均值。注意d·Vin这一项:导通时电感电压是Vin-vC,关断时是-vC,平均后就是d(Vin-vC)+(1-d)(-vC) = d·Vin - vC。这个结果非常直观:从电感两端看,输入电压被占空比"斩波"了,等效为一个受d控制的电压源d·Vin。

这就是状态空间平均法的核心结论:BUCK电路的平均模型可以等效为一个变压器(变比1:d)加一个LC滤波器。这个等效电路在Simulink里可以直接搭出来,用受控电压源实现d·Vin,后面接LC和负载。

2.4 大信号模型能回答什么问题

有了这个平均模型,你可以做几件事:

第一,分析启动过程。假设d从0阶跃到某个值,你可以解这个非线性微分方程(其实对BUCK来说,d固定时方程是线性的),得到iL和vC的响应。如果考虑软启动,d是缓慢上升的,也可以分段求解。

第二,分析负载大范围跳变。比如负载从满载切到空载,vC会上升,iL会下降,你可以用这个模型估算过冲量和恢复时间。注意这时候如果电感电流降到零,电路进入DCM(断续导通模式),平均方程需要修正,因为关断期间电感电流为零时,vC的方程会变。

第三,分析输入电压大范围变化。比如输入从12V掉到8V,d需要相应调整,你可以用这个模型看输出电压怎么变化。

但大信号模型的局限也很明显:它是非线性的(因为d乘以Vin,d和状态变量耦合),没有传递函数,不能直接用经典控制理论设计补偿器。而且它只描述了平均值,丢失了开关纹波信息,不能用来分析纹波大小。

注意:状态空间平均法成立的前提是开关频率远高于LC谐振频率。一般要求开关频率至少是LC谐振频率的5到10倍。如果你的开关频率只有100kHz,而LC谐振频率到了50kHz,那平均模型就不准了,需要考虑采样效应。

3. 小信号模型:在工作点附近"线性化"的完整推导

3.1 为什么要线性化

大信号模型虽然能描述大范围行为,但没法用传递函数。而设计补偿网络、分析环路稳定性,最方便的工具就是传递函数。线性系统有完整的频域分析理论,非线性系统没有。所以我们需要在工作点附近把非线性方程线性化。

具体做法是:假设系统在一个稳态工作点附近受到小扰动,把每个变量写成"稳态值+小扰动量"的形式,代入原方程,然后忽略二阶及以上的小量。这样得到的方程就是线性的,可以求传递函数。

3.2 分离稳态和扰动

设稳态占空比为D,稳态电感电流为IL,稳态电容电压为VC。加入小扰动:

d = D + d̂(d̂是小扰动量)

iL = IL + îL

vC = VC + v̂C

Vin = Vin + v̂in(输入电压也可能有扰动)

把这些代入平均方程:

L d(IL+îL)/dt = (D+d̂)(Vin+v̂in) - (VC+v̂C)

C d(VC+v̂C)/dt = (IL+îL) - (VC+v̂C)/R

展开后,把稳态项和扰动项分开。稳态项满足:

0 = D·Vin - VC

0 = IL - VC/R

这正好是BUCK的稳态关系:VC = D·Vin,IL = VC/R。

扰动项(忽略d̂·v̂in这类二阶小量):

L dîL/dt = D·v̂in + d̂·Vin - v̂C

C dv̂C/dt = îL - v̂C/R

注意d̂·Vin这一项:d̂是小量,Vin是稳态值,乘积是一阶小量,必须保留。而d̂·v̂in是两个小量相乘,是二阶小量,忽略。

3.3 从时域方程到传递函数

对扰动方程做拉普拉斯变换(假设零初始条件):

sL·îL(s) = D·v̂in(s) + d̂(s)·Vin - v̂C(s)

sC·v̂C(s) = îL(s) - v̂C(s)/R

我们的目标是求控制到输出传递函数Gvd(s) = v̂C(s)/d̂(s),假设输入电压扰动为零(v̂in=0)。从第二个方程解出îL:

îL = (sC + 1/R)·v̂C

代入第一个方程:

sL·(sC + 1/R)·v̂C = d̂·Vin - v̂C

整理:

v̂C·(s²LC + sL/R + 1) = d̂·Vin

所以:

Gvd(s) = v̂C(s)/d̂(s) = Vin / (s²LC + sL/R + 1)

这就是BUCK电路功率级的控制到输出传递函数。写成标准形式:

Gvd(s) = Vin / (1 + s/(Q·ω0) + (s/ω0)²)

其中ω0 = 1/√(LC)是LC谐振角频率,Q = R·√(C/L)是品质因数。

3.4 传递函数的物理意义解读

这个传递函数告诉我们几个关键信息:

直流增益是Vin。也就是说,占空比变化1%,输出电压变化Vin的1%。这符合直觉:占空比直接控制输入电压的"接通比例"。

在低频段(远低于ω0),传递函数近似为Vin,相位接近0度。这时候电感电容还没起作用,输出电压跟随占空比变化。

在ω0附近,出现谐振峰,峰值高度由Q决定。Q越大,峰值越高,相位变化越剧烈。Q = R·√(C/L),负载越重(R越小),Q越小,谐振峰越低。这就是为什么重载时环路更稳定,轻载时容易振荡。

在高于ω0的频段,传递函数以-40dB/dec的斜率下降,相位趋近-180度。这是因为LC滤波器是二阶的,高频衰减很快。

提示:实际电路中电感的直流电阻(DCR)和电容的等效串联电阻(ESR)会改变传递函数。ESR会在高频段引入一个零点,DCR会降低Q值。这些寄生参数在建模时最好加上,否则仿真和实测可能对不上。

4. 从传递函数到补偿器:PID参数到底怎么算

4.1 为什么BUCK功率级需要补偿

看Gvd(s)的相位:在低频段是0度,在ω0附近快速下降到-180度。如果闭环系统在这个频段还有增益,那相位裕度就不够,系统会振荡。所以必须加补偿器,在ω0附近提升相位,保证足够的相位裕度。

常用的补偿器是PID或者Type III补偿器。PID的传递函数是:

Gc(s) = Kp + Ki/s + Kd·s

比例项提供即时响应,积分项消除稳态误差,微分项提供相位超前。对BUCK来说,积分项是必须的,因为功率级在直流处有增益但有限,要消除稳态误差需要积分器。

4.2 用穿越频率和相位裕度反推参数

设计补偿器的标准流程是:

第一步,确定穿越频率fc。一般取开关频率的1/10到1/5。比如开关频率500kHz,fc取50kHz到100kHz。fc越高,动态响应越快,但太高的fc会受开关纹波和采样效应影响。

第二步,计算功率级在fc处的增益和相位。把s=j2πfc代入Gvd(s),算出幅值和相位。

第三步,确定补偿器在fc处需要提供的增益和相位。增益要使得环路总增益在fc处为1(0dB),相位要使得总相位在fc处大于-180度加上相位裕度(一般取45度到60度)。

第四步,根据需要的增益和相位,解出Kp、Ki、Kd。

这个过程说起来简单,但实际算的时候有几个坑。第一个坑是功率级的Q值随负载变化,轻载时Q大,谐振峰高,相位下降快,补偿器要提供更多相位。第二个坑是ESR零点,它会在高频段提供相位提升,设计时可以利用。第三个坑是数字控制的延迟,会额外引入相位滞后,必须留够裕量。

4.3 一个具体的计算例子

假设Vin=12V,Vout=3.3V,L=10μH,C=100μF,R=1Ω(负载3.3A),开关频率500kHz。

先算ω0 = 1/√(10e-6 × 100e-6) = 1/√(1e-9) = 31623 rad/s,对应频率约5kHz。

Q = R·√(C/L) = 1 × √(100e-6/10e-6) = 1 × √10 ≈ 3.16。

取fc = 50kHz,远高于ω0。在fc处,Gvd的幅值约为Vin/(ω/ω0)² = 12/(50/5)² = 12/100 = 0.12,即-18.4dB。相位约为-180度(因为远高于ω0)。

要使得环路在50kHz处0dB,补偿器需要提供+18.4dB的增益,即约8.3倍。要使得相位裕度为45度,补偿器需要提供-180+45=-135度,即补偿器相位为+45度(因为功率级已经是-180度)。

用PID实现:在fc处,Kp的增益为8.3,Ki/(2πfc)和Kd·2πfc要配合提供45度相位。具体解方程这里不展开,但思路就是这样。

注意:这个例子忽略了ESR零点和数字延迟。实际设计时,ESR零点一般在几十kHz到几百kHz,会提供相位提升,可以降低对补偿器的要求。数字延迟一般是一个开关周期,在500kHz时是2μs,对应50kHz处约36度相位滞后,必须从相位裕度里扣掉。

5. 仿真验证:Simulink和LTspice里怎么搭模型

5.1 Simulink里搭平均模型

Simulink里搭BUCK平均模型非常直接。用受控电压源实现d·Vin,后面接电感、电容、负载。d用PWM发生器或者直接给阶跃信号。要观察传递函数,可以用Simulink的Linear Analysis工具,在稳态工作点附近做小信号线性化,直接得到Gvd(s)的波特图。

具体步骤:先让模型跑到稳态(d固定为D=3.3/12=0.275),然后用Linear Analysis的"Trim"功能找到工作点,再用"Bode"功能画波特图。这样得到的波特图应该和理论推导的Gvd(s)一致。

如果想直接看传递函数,可以用Simulink的"Transfer Function"模块,把推导出的Gvd(s)填进去,和平均模型对比。两者在低频段应该完全重合,在高频段(接近开关频率)会有差异,因为平均模型不包含开关纹波。

5.2 LTspice里搭开关模型

LTspice里搭的是开关级模型,用真实的MOS管和二极管,或者用理想开关。这样可以看到开关纹波,也可以做环路分析。LTspice的环路分析需要用AC扫描,在反馈环路里注入小信号,测量环路增益。

具体做法:在反馈分压电阻中间注入AC信号,用.LOOP命令或者手动计算。LTspice的AC分析是在工作点附近线性化的,所以得到的就是小信号特性。注意LTspice的AC分析需要电路先跑到稳态,可以用.tran跑一段时间,然后用.ic设置初始条件,再跑.ac。

5.3 仿真和实测对不上的常见原因

第一个原因:寄生参数没加。电感的DCR、电容的ESR、MOS管的导通电阻、二极管的压降,这些都会影响传递函数。特别是ESR零点,如果不加,高频段相位会对不上。

第二个原因:工作点不对。小信号模型是在特定工作点线性化的,如果仿真时负载和理论计算时的负载不一样,Q值就不一样,谐振峰也不一样。

第三个原因:数字延迟没考虑。如果是数字控制,ADC采样、计算、PWM更新都有延迟,这些在模拟仿真里没有,会导致相位裕度比仿真值低。

第四个原因:平均模型和开关模型的差异。平均模型在开关频率附近不准,如果穿越频率接近开关频率的1/5,差异会很明显。

6. 数字电源里的离散化:从s域到z域的关键细节

6.1 为什么数字电源必须离散化

模拟补偿器用运放和RC网络实现,传递函数是连续的。数字补偿器用MCU或DSP实现,处理的是离散采样点,传递函数是z域的。所以必须把s域的补偿器转换成z域,这个过程叫离散化。

离散化的方法有很多:前向欧拉、后向欧拉、双线性变换(Tustin)、零极点匹配等。不同方法得到的z域传递函数不同,对系统性能的影响也不同。

6.2 双线性变换的推导和特点

双线性变换是最常用的方法,因为它把s平面的虚轴映射到z平面的单位圆上,频率对应关系是:

s = (2/T)·(z-1)/(z+1)

其中T是采样周期。这个变换的优点是频率畸变小,缺点是高频段有频率 warping。对于BUCK补偿器,穿越频率一般远低于采样频率,warping影响不大。

具体操作:把Gc(s)里的s用(2/T)·(z-1)/(z+1)替换,整理成z的有理分式,然后写成差分方程,就可以在MCU里实现了。

6.3 数字延迟的处理

数字控制有一个固有的延迟:从ADC采样到PWM更新,至少有一个采样周期的延迟。这个延迟在s域里是e^(-sT),在z域里是z^(-1)。设计补偿器时,必须把这个延迟考虑进去,否则实际相位裕度会比设计值低。

处理方法:在环路模型里串一个z^(-1),然后重新设计补偿器。或者在设计模拟补偿器时,把相位裕度目标提高,预留出延迟的相位损失。

提示:数字电源的采样频率一般等于开关频率,所以延迟就是一个开关周期。如果开关频率500kHz,延迟2μs,在50kHz处相位滞后36度。这个数字很可观,设计时必须扣掉。

7. 几个容易搞混的概念和我的实操心得

7.1 大信号和小信号的边界在哪里

很多人问:负载跳变多大算大信号,多大算小信号?其实没有严格界限。一般来说,如果扰动导致占空比变化超过10%,或者电感电流变化超过20%,非线性效应就明显了,小信号模型开始不准。但具体要看应用,对精度要求高的场合,5%的扰动就可能需要大信号分析。

我的经验是:设计补偿器时用小信号模型,验证动态响应时用大信号模型。两者结合,才能既保证稳定性又保证动态性能。

7.2 为什么理论计算和实测总是有差距

理论计算用的是理想模型,实测有寄生参数、有噪声、有延迟。差距主要来自几个方面:电感的非线性(饱和)、电容的直流偏压效应(容量下降)、MOS管的开关时间、驱动电路的延迟。这些因素在建模时很难全部考虑,所以实测和理论有10%到20%的差距是正常的。

我的做法是:理论计算确定大致参数,仿真验证趋势,实测微调。不要指望一次算准,迭代两三次很正常。

7.3 一个实用的调试技巧

如果环路不稳定,先看波特图。用频响分析仪或者示波器测环路增益,看穿越频率和相位裕度。如果相位裕度不够,先检查补偿器参数,再检查延迟,最后检查寄生参数。很多时候问题出在延迟上,特别是数字电源。

另一个技巧:在Simulink里搭一个和实际电路参数一致的模型,把实测的波形和仿真对比。如果对不上,说明模型有问题,先修模型再调电路。这样比盲目试参数高效得多。

7.4 元件选型对模型的影响

电感的选型直接影响Q值和谐振频率。电感越大,ω0越低,但DCR也越大,Q值越低。电容的ESR影响高频零点位置,ESR越小,零点越高,对相位提升越少。MOS管的导通电阻影响效率,也影响阻尼。

我的选型原则是:先根据纹波要求选电感,再根据动态响应要求选电容,最后根据效率和热设计选MOS管。选完之后,把寄生参数代入模型,重新验证环路稳定性。如果稳定性不够,再调整补偿器参数。

8. 把模型用起来:从推导到落地的完整链路

推导大信号和小信号模型,最终目的是指导设计。我的完整流程是这样的:

第一步,根据输入输出要求,用稳态公式算占空比、电感、电容的初始值。

第二步,用状态空间平均法建立大信号模型,在Simulink里搭出来,验证启动过程和负载跳变响应。

第三步,在工作点附近线性化,得到Gvd(s),画波特图,确认谐振频率和Q值。

第四步,根据穿越频率和相位裕度要求,设计补偿器,得到Kp、Ki、Kd。

第五步,如果是数字控制,把补偿器离散化,考虑延迟,重新验证相位裕度。

第六步,用LTspice搭开关模型,验证开关纹波和环路稳定性。

第七步,打板实测,用频响分析仪测环路,微调补偿器参数。

这个流程走下来,基本能保证一次成功。我做过十几个BUCK项目,按这个流程走的,最多调两次就能稳定。跳过建模直接试参数的,往往要调十几遍,而且换个负载条件又不行了。

注意:建模不是万能的,它提供的是方向和范围,不是精确值。实际调试时,示波器和频响分析仪才是最终裁判。模型帮你缩小搜索范围,但最后的参数还是要靠实测确定。

9. 写在最后:我踩过的三个典型坑

第一个坑:拿小信号模型分析启动。早期我做软启动,用Gvd(s)算启动时间,结果完全不对。后来才明白,启动时占空比从0到D,是大信号过程,必须用大信号模型。

第二个坑:忽略ESR零点。有一次设计补偿器,理论相位裕度60度,实测只有20度,振荡了。查了半天,发现电容ESR比我预期的小很多,零点跑到很高频,没起到相位提升作用。后来换了ESR合适的电容,问题解决。

第三个坑:数字延迟没扣。做数字电源时,按模拟方法设计补偿器,相位裕度算出来45度,实际只有10度。后来把延迟加进去重新设计,把目标相位裕度提到60度,实际测出来45度,稳定了。

这三个坑的共同点是:模型和实际有差距,但差距是可以量化和补偿的。关键是要知道差距在哪里,然后有针对性地留裕量。建模的价值不在于算得多准,而在于让你知道哪些因素重要、哪些可以忽略、哪些必须留裕量。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询