
1. 从一个反直觉的现象说起为什么占空比算对了输出还是不对很多人第一次接触PWM调节DCDC都会经历这样一个阶段理论算得明明白白占空比DVo/Vin电感按纹波公式一套电容按输出纹波一除感觉万无一失。结果板子一上电输出电压要么偏高要么带载就掉要么效率低得离谱甚至MOS管烫得能煎鸡蛋。问题出在哪出在把PWM当成一个理想的“数字旋钮”了。实际上PWM调节DCDC的核心不是“占空比决定输出”这么一句话而是占空比通过控制电感伏秒平衡进而影响能量传递最终由反馈环路锁定输出。这条链路里任何一个环节的参数没算对整个系统就不成立。这篇内容面向的是正在做DCDC电源设计、或者准备用单片机PWM去驱动DCDC的工程师和学生。我会把PWM调节DCDC的参数计算原理拆开从基尔霍夫定律出发讲清楚伏秒平衡怎么来的、电感电容怎么算、误差放大器在环路里干什么、以及实际调试中那些公式不会告诉你的坑。不管你是用STM32的定时器输出PWM还是用专用PWM控制器底层的计算逻辑是相通的。2. 伏秒平衡PWM调节DCDC的第一性原理2.1 从基尔霍夫定律到电感电压方程DCDC变换器的核心储能元件是电感。要理解PWM如何调节输出必须先理解电感在一个开关周期内经历了什么。以Buck电路为例。开关管导通时电感一端接Vin另一端接Vout电感两端电压为Vin - Vout电流线性上升。开关管关断时续流二极管或同步整流管导通电感一端被钳位到约0V另一端仍是Vout电感两端电压为-Vout电流线性下降。对电感回路列基尔霍夫电压定律KVL导通阶段Vin VL_on Vout即VL_on Vin - Vout关断阶段0 VL_off Vout即VL_off -Vout稳态下电感电流一个周期内必须回到起点否则电流会逐周期累积或衰减系统不可能是稳态。这就引出了伏秒平衡VL_on × Ton VL_off × Toff 0代入得(Vin - Vout) × DTs (-Vout) × (1-D)Ts 0化简(Vin - Vout)D Vout(1-D)最终Vout D × Vin这就是Buck电路占空比与输出的关系。注意这个结论是从伏秒平衡推出来的不是拍脑袋定义的。Boost和Buck-Boost的推导逻辑完全一样只是电感充放电的回路不同。2.2 为什么伏秒平衡比“占空比公式”更重要很多人只记Vout D×Vin但遇到Boost电路就懵了。其实只要抓住伏秒平衡所有拓扑都能推。Boost电路导通时电感接VinVL_on Vin关断时电感通过二极管向输出释放能量VL_off Vin - Vout注意Vout Vin所以这是负值。伏秒平衡Vin × DTs (Vin - Vout) × (1-D)Ts 0化简Vin × D Vin(1-D) Vout(1-D)即Vin Vout(1-D)最终Vout Vin / (1-D)这就是Boost的升压关系。D越大Vout越高。但注意当D趋近于1时Vout趋近于无穷大——现实中当然不可能因为寄生电阻、电感DCR、开关损耗会限制实际升压比。这也是为什么Boost电路在D0.8以后效率急剧下降的原因。Buck-Boost电路同理伏秒平衡给出Vout -Vin × D/(1-D)输出是负压幅值可以大于或小于输入。关键点伏秒平衡是PWM调节DCDC的底层约束。不管你是电压模式、电流模式还是COT架构电感两端的伏秒积必须在一个周期内归零否则系统不收敛。2.3 连续导通模式与断续导通模式的边界上面推导默认电感电流始终大于零即连续导通模式CCM。但如果负载电流很小电感电流在关断阶段可能降到零并保持为零进入断续导通模式DCM。DCM下伏秒平衡依然成立但关断阶段分成了两段电感电流从峰值降到零的阶段以及电流保持为零的阶段。此时输出电压不再简单等于D×Vin而是与负载电流、电感值、开关频率都有关。判断CCM/DCM边界的临界电感Lcrit (1-D) × Vout / (2 × fsw × Iout_min)其中Iout_min是你希望维持CCM的最小负载电流。如果实际电感小于Lcrit轻载时就会进入DCM输出纹波会变大环路特性也会改变。实际设计中我一般会让电感值大于Lcrit的1.5到2倍留足裕量。但也不能太大电感大了体积大、DCR高、动态响应慢。这是一个需要权衡的参数。3. 电感、电容、频率三个互相拉扯的参数怎么定3.1 电感值计算从纹波电流反推电感值决定了电流纹波的大小。纹波电流ΔIL通常取输出电流的20%到40%作为设计目标。以Buck为例导通阶段电感电流上升量ΔIL (Vin - Vout) × D / (L × fsw)反过来求LL (Vin - Vout) × D / (ΔIL × fsw)其中D Vout/Vinfsw是开关频率。举个例子Vin12VVout5VIout3Afsw500kHz取ΔIL30%×3A0.9A。D 5/12 0.417L (12-5) × 0.417 / (0.9 × 500000) 2.919 / 450000 ≈ 6.49μH实际选型取标准值6.8μH或10μH。取10μH的话ΔIL会降到约0.58A纹波更小但动态响应会慢一些。这里有个经验如果你用的是COTConstant On-Time架构的DCDC电感值的选择还要考虑输出电容的ESR因为COT架构的环路稳定性依赖于输出纹波的相位。电感太大纹波电流小输出纹波可能不足以触发COT比较器导致开关频率不稳定。3.2 输出电容计算纹波和瞬态响应的双重约束输出电容承担两个任务一是吸收电感电流纹波维持输出电压稳定二是在负载突变时提供瞬时电流限制电压跌落。从纹波角度Cout ≥ ΔIL / (8 × fsw × ΔVout)其中ΔVout是允许的输出电压纹波。继续上面的例子假设ΔVout50mVCout ≥ 0.9 / (8 × 500000 × 0.05) 0.9 / 200000 4.5μF但从瞬态响应角度这个值远远不够。负载从0跳到3A时电容需要在环路响应之前提供电流。假设环路响应时间tr10μs允许电压跌落ΔVtrans100mVCout ≥ Iout × tr / ΔVtrans 3 × 10e-6 / 0.1 300μF这两个结果差了近70倍。实际选型要按大的来同时考虑电容的ESR和ESL。通常会用多个陶瓷电容并联比如4个100μF的MLCC再并一个小容值的去高频噪声。注意陶瓷电容的直流偏压效应非常明显。标称100μF的X5R电容在5V偏压下实际容值可能只有60μF甚至更低。选型时一定要看厂商提供的偏压曲线不能只看标称值。3.3 开关频率的选择效率、体积、EMI的三角博弈开关频率fsw直接影响电感、电容的体积也影响开关损耗和EMI。频率高电感电容可以小动态响应快但开关损耗增加Psw ∝ fsw驱动损耗增加EMI在高频段更难处理。频率低效率高EMI好处理但无源元件体积大动态响应慢。常用频率范围应用场景典型fsw原因大功率工业电源50k-200kHz效率优先体积不敏感消费电子DCDC500k-2MHz体积优先效率可接受手机PMIC2M-6MHz极致小型化允许效率损失单片机PWM驱动10k-100kHz受限于MCU定时器分辨率和GPIO驱动能力用单片机PWM直接驱动MOS管做DCDC时频率通常不会太高。因为MCU的PWM分辨率有限频率越高可调的占空比步进越粗。比如STM32的定时器在72MHz时钟下如果fsw100kHzARR720占空比分辨率约0.14%如果fsw500kHzARR144分辨率降到0.7%。对于需要精细调压的场合这个分辨率可能不够。4. 误差放大器与反馈环路PWM的“大脑”4.1 误差放大器在环路中的角色前面算的都是开环参数。但实际DCDC必须闭环工作否则输入电压波动或负载变化时输出根本稳不住。误差放大器Error Amplifier就是闭环的核心。它的工作原理很简单将输出电压的分压采样值与基准电压比较输出一个误差信号。这个误差信号经过补偿网络后与PWM比较器的锯齿波比较决定占空比的大小。如果Vout偏低采样值低于Vref误差放大器输出升高PWM比较器输出的占空比增大Vout回升。反之亦然。整个环路是一个负反馈系统。误差放大器的设计决定了环路的带宽、相位裕度和稳态误差。设计不好轻则输出振荡重则系统不稳定。4.2 补偿网络的类型与选择常见的补偿网络有三种Type I补偿只有一个积分电容在原点提供一个极点。适用于电流模式控制或需要高直流增益的场合。但相位裕度有限带宽做不高。Type II补偿一个原点极点、一个零点、一个高频极点。这是最常用的补偿方式适用于大多数电压模式和电流模式DCDC。零点用来补偿LC滤波器的双极点相位滞后高频极点用来抑制开关噪声。Type III补偿两个原点极点、两个零点、一个高频极点。适用于需要高带宽的场合比如陶瓷电容输出的电压模式Buck因为LC双极点Q值很高需要两个零点来补偿相位。选择哪种补偿取决于功率级的传递函数。对于用单片机PWM做DCDC的场景如果只是做简单的调压Type II通常够用。如果是高性能场合可能需要Type III。4.3 用单片机PWM做闭环时的特殊问题用MCU的ADC采样输出电压、用PWM输出驱动MOS管本质上是一个数字闭环。这里有几个模拟环路没有的问题采样延迟ADC采样、中断响应、PID计算、PWM更新这一套下来至少几个微秒的延迟。这个延迟在环路中引入相位滞后会降低相位裕度。如果开关频率是100kHz周期10μs延迟5μs就相当于180度相位滞后环路根本没法稳定。解决办法降低开关频率或者用硬件比较器代替ADC做快速保护或者用DMA定时器实现硬件级PWM更新。PWM分辨率前面提过分辨率不够会导致输出有低频纹波或极限环振荡。比如你需要输出5.00V但PWM只能调到4.98V或5.02V系统就会在这两个状态之间来回跳输出出现低频振荡。ADC噪声MCU的ADC容易受开关噪声干扰采样值跳动会导致PWM抖动。需要在ADC输入端加RC滤波或者在软件里做滑动平均。我实际做过一个用STM32F103的PWMADC做Buck闭环的项目。fsw50kHzADC采样时间1.5μs中断计算约3μs总延迟约5μs。相位裕度只有30度左右负载突变时输出有约200mV的过冲。后来把fsw降到20kHz延迟占比减小相位裕度提到50度以上过冲降到80mV。代价是电感从10μH增加到47μH体积大了不少。5. 从原理图到实测那些公式不会告诉你的坑5.1 自举电容和Boot引脚电阻很多DCDC芯片尤其是同步整流Buck需要一个自举电容来驱动高侧N-MOS。自举电容的容值通常在10nF到100nF之间太小会导致高侧驱动不足MOS管发热太大则充电时间常数大低频时可能来不及充电。有些芯片的Boot引脚还需要串一个小电阻通常1Ω到10Ω用来限制自举电容充电时的峰值电流减少EMI。这个电阻不能太大否则高侧驱动电压上升慢开关损耗增加。我遇到过一个问题Boot引脚串了10Ω电阻结果在低温下MOS管发热严重。后来发现是低温下自举电容的等效串联电阻增大加上外部电阻导致高侧驱动电压不足MOS管工作在线性区。换成4.7Ω后问题解决。5.2 死区时间与直通风险同步整流Buck的上下管不能同时导通否则Vin直接对地短路瞬间大电流会烧毁MOS管。所以必须设置死区时间。死区时间太短直通风险。死区时间太长体二极管导通时间增加效率下降而且体二极管反向恢复会产生EMI。一般死区时间在10ns到50ns之间具体取决于MOS管的开关速度和驱动能力。用MCU做DCDC时死区时间由定时器的死区寄存器设置。STM32的高级定时器支持死区插入分辨率通常是时钟周期级别。注意死区时间不是设一次就完事。MOS管的开关时间随温度、电流变化批量生产时不同批次的MOS管参数也有差异。建议死区时间留足裕量宁可效率低一点也不要冒直通的风险。5.3 电流采样与过流保护DCDC必须有过流保护否则负载短路时电感电流失控MOS管和电感都会烧。常见的电流采样方式有三种电阻采样在低侧MOS管源极或电感回路串一个小电阻通常几毫欧到几十毫欧测电阻两端电压。简单可靠但电阻上有功耗效率略低。MOS管Rds(on)采样利用MOS管导通时的导通电阻作为采样电阻。没有额外功耗但Rds(on)随温度变化大约0.5%/°C精度差。电感DCR采样利用电感绕组的直流电阻。同样没有额外功耗但DCR也随温度变化需要温度补偿。用MCU做DCDC时电流采样通常用ADC读取然后在软件里做比较。但ADC采样速度有限短路发生时可能来不及响应。所以最好加一个硬件比较器直接触发PWM关断。5.4 PCB布局参数算对了布局毁了照样不行DCDC的PCB布局和参数计算一样重要。几个关键原则功率回路最小化Vin电容、高侧MOS、低侧MOS、GND组成的回路面积要尽可能小。这个回路里的电流是脉冲状的di/dt很高回路面积大就会辐射EMI。反馈采样点远离功率节点输出电压的采样点要接在输出电容两端不要接在电感后面。反馈走线要远离电感和开关节点否则会耦合开关噪声。接地平面完整功率地和信号地要分开最后在输出电容处单点连接。不要在地平面上开槽否则回流路径被切断EMI会恶化。我见过一个案例参数完全一样的两个板子一个布局紧凑、反馈走线短输出纹波20mV另一个布局松散、反馈走线绕了一大圈输出纹波200mV而且带载时振荡。后来重新布局问题消失。所以DCDC设计里布局不是“锦上添花”而是“生死攸关”。6. 不同拓扑的参数计算差异与实战对照6.1 Buck、Boost、Buck-Boost的公式对照前面分别推了Buck和Boost的伏秒平衡。这里把三种基本拓扑的关键公式列在一起方便对照。参数BuckBoostBuck-BoostVout/VinD1/(1-D)-D/(1-D)电感充电电压Vin-VoutVinVin电感放电电压-VoutVin-Vout-Vout电感值公式(Vin-Vout)D/(ΔIL·fsw)Vin·D/(ΔIL·fsw)Vin·D/(ΔIL·fsw)输出电容纹波公式ΔIL/(8·fsw·ΔVout)Iout·D/(fsw·ΔVout)Iout·D/(fsw·ΔVout)峰值电感电流IoutΔIL/2Iout/(1-D)ΔIL/2Iout/(1-D)ΔIL/2注意Boost和Buck-Boost的输出电容纹波公式和Buck不同。因为Boost的输出电流是断续的二极管只在关断时导通输出电容需要在整个导通期间提供负载电流。所以Boost的输出纹波通常比Buck大需要更大的电容。6.2 COT架构的参数计算有什么不同COTConstant On-Time架构近年来在消费电子里很流行因为它不需要传统的误差放大器和补偿网络环路响应极快。COT的工作原理高侧MOS固定导通一段时间Ton然后关断直到输出电压跌到参考值以下再开启下一个Ton周期。所以开关频率是变化的取决于负载和输入电压。COT的参数计算有几个特殊点Ton的确定Ton通常由输入电压和输出电压决定目标是让开关频率落在合理范围内。近似公式Ton ≈ Vout / (Vin × fsw_nominal)输出电容的ESR要求COT架构依赖输出纹波来触发比较器所以输出电容的ESR不能太小。如果全用MLCCESR只有几毫欧纹波太小COT比较器可能无法正常工作。通常需要故意串一个小电阻或者用钽电容MLCC的组合。电感值的影响COT架构下电感值决定了纹波电流进而影响输出纹波。电感太大纹波小COT可能不稳定电感太小纹波大效率低。一般取ΔIL为Iout的30%到50%。6.3 用555定时器做PWM驱动DCDC的注意事项有些低成本场合会用555定时器产生PWM再驱动MOS管做DCDC。这种方案简单便宜但有几个坑555的输出驱动能力有限标准555的输出电流约200mA驱动大MOS管不够需要加图腾柱驱动。频率稳定性差555的频率受电源电压和温度影响较大不适合做精密DCDC。占空比调节范围有限标准555的占空比调节范围约5%到95%但接近边界时线性度很差。没有死区控制555做同步整流时无法插入死区直通风险高。所以555方案通常只用于非同步Buck用二极管续流。如果非要用555建议用CMOS版本的555如TLC555频率稳定性好一些电源电流也小。但总体来说555做DCDC只适合教学演示或极低成本场合正经产品还是用专用PWM控制器或MCU。7. 实测验证从计算值到实际波形的偏差分析7.1 效率测试与损耗分解参数算完后第一件事是测效率。效率低说明损耗大需要定位损耗来源。DCDC的主要损耗包括导通损耗I²R包括MOS管Rds(on)、电感DCR、采样电阻开关损耗0.5×Vin×Iout×(trtf)×fsw驱动损耗Qg×Vgs×fsw死区损耗体二极管导通期间的损耗静态损耗芯片自身工作电流实测时可以用示波器测MOS管的Vds和Id波形两者相乘再积分得到开关损耗。导通损耗可以用万用表测各元件两端电压结合电流算出。我一般会先测满载效率再测半载和轻载效率。如果满载效率低多半是导通损耗或开关损耗大如果轻载效率低多半是静态损耗或开关损耗占比高。7.2 输出纹波与开关噪声的区分示波器测输出纹波时看到的波形通常包含两部分低频的三角波开关纹波和高频的尖峰开关噪声。开关纹波的频率等于fsw幅值可以用前面公式估算。如果实测远大于计算值可能是电容容值不足直流偏压效应或ESR太大。开关噪声的频率很高几十MHz到几百MHz幅值通常几十mV。它来自MOS管开关瞬间的di/dt和dv/dt通过寄生电容耦合到输出。要减小开关噪声可以在开关节点加RC吸收电路减小功率回路面积在输出端加铁氧体磁珠或小电感优化MOS管驱动电阻减慢开关速度注意测纹波时示波器探头要用弹簧地线不要用鳄鱼夹。鳄鱼夹的地线环路会耦合空间磁场测出来的噪声比实际大好几倍。7.3 负载瞬态响应测试负载瞬态响应是检验环路稳定性的最直接方法。用电子负载做电流阶跃比如从10%到90%额定电流观察输出电压的跌落和恢复时间。如果输出跌落很大、恢复很慢说明环路带宽不够。如果输出有振荡说明相位裕度不足。一般来说相位裕度45度以上可以接受60度以上比较理想。带宽通常取fsw的1/10到1/5。带宽太高开关噪声会干扰环路带宽太低动态响应慢。调整环路的方法改变误差放大器的补偿电容电阻或者改变MCU里PID的参数。如果是数字环路PID的积分时间常数对应模拟补偿的零点微分时间常数对应高频极点。8. 写在最后几个我踩过的坑和常用检查清单做DCDC这些年踩过的坑比算过的公式多。分享几个印象深刻的坑一忽略电感的饱和电流。算电感值时只看了感值和DCR没注意饱和电流。结果满载时电感饱和感值骤降电流失控MOS管炸了。选电感时饱和电流至少要大于峰值电流的1.3倍。坑二输出电容的直流偏压效应。标称22μF的0805 X5R电容在12V偏压下实际容值只有8μF。纹波比计算值大了近3倍。后来换成1210封装、更高耐压的电容问题解决。坑三反馈电阻的走线太长。反馈分压电阻放在芯片旁边但走线绕了半个板子才接到输出电容。结果输出纹波里全是开关噪声环路一直在抖。把反馈电阻移到输出电容旁边问题消失。坑四死区时间设得太小。为了追求效率死区时间设了5ns。常温下没问题高温下MOS管开关变慢上下管出现直通效率骤降MOS管发热。后来改成20ns效率略降但稳定可靠。坑五用MCU的PWM做DCDC时忘了初始化顺序。先启动了PWM再配置ADC和中断。结果上电瞬间PWM以默认占空比输出输出电压冲到9V烧了后级电路。正确的顺序是先配置ADC和中断再配置PWM最后使能输出。最后给一个我常用的DCDC参数检查清单伏秒平衡是否满足电感电流是否在CCM电感值、饱和电流、DCR是否满足要求输出电容的容值、ESR、直流偏压特性是否核实开关频率是否在芯片和MCU的能力范围内误差放大器补偿是否匹配功率级传递函数死区时间是否足够直通风险是否排除电流采样和过流保护是否可靠PCB功率回路是否最小化反馈走线是否远离噪声源上电时序是否正确有无输出过冲风险满载、半载、轻载效率是否达标纹波和瞬态响应是否合格这套清单不一定全面但每次做新设计过一遍至少能避开80%的常见问题。DCDC设计没有捷径公式是基础实测是验证经验是积累。多测波形多分析损耗多总结踩坑慢慢就有手感了。