接vin-是为了让输入电流经过采样电阻,这样如果只接USB2时也能采样到输入电流
博主你在写软件时有没有使用HRTIM的fualt事件?我使用比较器实现当电感电流大于我的设定值时,mos管直接硬件关断,但是在软起动过程中,我发现我的PWM输出好像是关闭的,感觉是电容充电电流太大,导致撞到我的设定值,使得我的PWM输出关闭 ,我想知道如何配置STM32的HRTIM实现Cycle-by-Cycle,就是在软起动期间,如果撞到我设定的电感电流最大值后,PWM输出马上关断,但是下个周期PWM输出自动打开,
你的测量电路是否校正了,你画的电路板会有许多寄生参数,导致测量电路的增益有一些小变化,需要校正后才能比较精确的输出正确的值
软件有没有改过,检查一下采样电路有没有问题
大佬,我加入了硬件过流保护(逐周期限流),也放缓了开环软起动(现在500Hz,步进0.001),没加电流内环,因为我觉得先把开环完成后再加闭环,
1.我上板测试时,发现空载时,电路可以正常工作,我加一个20R的负载(输出电压Vo设为30V)后,MOS再次损坏,这个可能的原因是什么?
2。空载与带载的电路和代码是完全一样的,为什么会出现MOS损坏的情况?
3.下一步应该怎么做?是把我的输出电容减小吗?因为之前我的输出电容比较小的时候,电路带载也可以正常工作,但是我加完输出电容后再上电,mos就坏了,我把输出电容减小后,电路能否正常工作?为什么会这样?
这个问题很典型,软启动时输出电容充电的浪涌电流确实容易误触发过流保护。如果你用的是 HRTIM Fault 锁存模式(Latched),那一旦触发就会一直关断,直到软件手动清除,这就是你看到的"PWM彻底关闭"现象。
要实现 Cycle-by-Cycle(逐周期限流),核心思路是:Fault 只关断当前周期,下个周期自动恢复。HRTIM 硬件上是完全支持这个功能的,不需要软件每个周期去手动清标志。
给你几个配置要点,直接对着寄存器或者 HAL 配就行:
1. Fault 源配置为"自动恢复"模式
在 HRTIM_FLTINR1/2 里,找到你接比较器的那一路 Fault(比如 Fault1),关键看这两个位:
- FLTxP[1:0](Fault Polarity):根据你的比较器输出极性配,一般是高电平有效。
- FLTxSRC[1:0](Fault Source):选外部输入(COMPx_OUT 或者外部引脚)。
- FLTxF[3:0](Fault Filter):建议加几 ns 的滤波,防止比较器毛刺误触发。
最重要的是 HRTIM_FLTxR 寄存器里的 FLTxRSM(Fault Reset Mode):
- 配成 0:Immediate —— Fault 信号消失后,PWM 立即恢复。
- 不要配成 Latched(锁存),那是故障保护用的,不是逐周期限流用的。
2. Timer 级 Fault 响应配置
在 HRTIM_TIMxFLTR 寄存器里(x 对应你的 Timer,比如 TIMA/B/C/D):
- FLTxEN:使能对应的 Fault 通道。
- FLTLCK:软启动期间建议先不锁死,保持自动恢复。
- Fault 保护输出状态:配成 “输出无效电平”(Active 状态关断 MOS),具体看你上下管驱动是高有效还是低有效。HRTIM 的 Fault 输出可以独立配置 Set/Reset 状态。
3. 关键:消隐(Blanking)或软启动期间临时抬高阈值
软启动时,空电容充电电流 I = C × dV/dt,如果占空比爬升太快,这个浪涌很容易超过你的正常工作限流点。除了改 HRTIM 模式,建议从系统层面做配合:
方案 A:软启动期间加电流消隐(Current Blanking)
HRTIM 本身支持 Fault Blanking Window,在 PWM 开通后的一段时间内屏蔽 Fault 输入。但这个更适合屏蔽开关噪声,对软启动几十 ms 的充电过程不太够用。
方案 B:软启动分阶段限流(推荐)
- 软启动前 50ms~100ms,把比较器阈值临时抬高(比如正常限流 10A,软启动期间设到 15A 或 20A)。
- 等输出电压爬到设定值的 80% 左右,再切回正常的逐周期限流阈值。
- 这个切换可以用 HRTIM 的 DMA 联动,或者软件定时器去做,不占用 CPU 周期。
方案 C:用 HRTIM 的 Delayed Protection 模式
如果你用的是 G474 的 HRTIM,Timer 支持 Delayed Protection(在 HRTIM_OUTxR 里配置),可以设置 Fault 触发后不是立即全关,而是只限制占空比,但这个更适合打嗝(Hiccup)模式,不是严格的 Cycle-by-Cycle。
4. 代码层面的 HAL 示例(参考思路)
// 假设用 Fault1,接 COMP1_OUT,高电平有效
HRTIM_FaultCfgTypeDef pFaultCfg = {0};
pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;
pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE; // 或加 2-3 个时钟滤波
pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE; // 不锁死
HAL_HRTIM_FaultConfig(&hhrtim, HRTIM_FAULT_1, &pFaultCfg);
// 关键:配置为自动恢复模式
HAL_HRTIM_FaultResetConfig(&hhrtim, HRTIM_FAULT_1, HRTIM_FAULTRESETMODE_IMMEDIATE);
// Timer A 使能 Fault1 响应
HAL_HRTIM_TimerFaultConfig(&hhrtim, HRTIM_TIMERINDEX_TIMER_A, HRTIM_FAULT_1, HRTIM_TIMFAULTENABLE_FAULT1);
然后在中断里(如果用了中断)或者主循环里,不需要手动清 Fault 标志,硬件会在比较器输出变低后自动恢复 PWM。你唯一要关注的是:如果连续 N 个周期都触发 Fault,说明真的过流了,这时候软件再介入降占空比或关断。
5. 调试建议
用示波器抓三波形对比:
- 电感电流(或采样电阻电压)
- 比较器输出(直接看 HRTIM Fault 引脚)
- HRTIM PWM 输出
如果 PWM 关断后,比较器输出变低了,但 PWM 没恢复 → 说明 FLTxRSM 没配成 Immediate,还在 Latched。
如果 PWM 每个周期都关断一下又打开 → 说明 Cycle-by-Cycle 生效了,只是软启动电流真的太大,需要配合方案 B 临时抬阈值。
总结:你要的 Cycle-by-Cycle 就是 Fault 自动恢复模式 + 不锁存,HRTIM 硬件原生支持。软启动误触发的问题,建议配合软启动阶段动态调整比较器阈值来解决,比单纯改 HRTIM 更可靠。
你这个问题很典型,空载能活、带载就炸,说明你的开环软起动根本没过"电流应力"这一关。
先直接回答你三个问题:
-
空载能工作,带20R就炸,是因为带载启动时电感电流=输出电容充电电流 + 负载电流。空载时电感只需要给电容充电,电流小;带20R负载(1.5A)时,同样的占空比步进下,电感需要额外扛住这1.5A的直流分量,峰值电流很容易顶穿你电感12A的饱和点。电感一饱和就等同于导线,58V直接硬怼在MOS的Rds(on)和走线电阻上,电流瞬间几十安培。你那个"逐周期限流"要么采样点不对,要么响应速度跟不上饱和后的电流上升斜率,根本保不住。
-
代码一样但工况天差地别。开环控制是瞎子,它不管后面是空载还是满载,都按固定步进推占空比。空载启动是"散步",带载启动是"负重爬山",你让电路用同样的节奏去跑,电感电流峰值在带载时可能是空载的几倍,它不炸才怪。
-
减小输出电容确实能暂时不炸,因为启动瞬间需要的充电电荷量少了,电感电流峰值降低,离饱和点更远。但这只是掩耳盗铃——你总不能以后产品只用小电容吧?根本原因是你的控制没有限流。下一步最该做的不是调电容,而是立刻在电感回路串个采样电阻(或电流探头),用示波器抓一把带载启动的电流波形,看看峰值到底跑到了多少。
具体分析和建议:
你现在等于"半裸奔"——有硬件OCP但无电流闭环,软起动步进0.001听起来温柔,但带大电容+负载启动时,电感电流峰值早就超过12A了。CSD19534Q5A虽然脉冲电流能扛100A,但那是建立在电感没饱和、电流受控的前提下。电感一饱和,电流不受控,管子几微秒内就热熔穿硅片,GDS全短路。
为什么只炸Buck侧?
Buck模式下Buck上管是主开关,直接面对58V输入和饱和电感的"近似短路"。Boost侧上管常通,只流过相对平稳的负载电流,没有Buck上管那种高频硬开关+饱和冲击的双重debuff。能量从输入端来,Buck上管是第一道闸,它先死很正常。
你下一步该干什么(按优先级):
-
抓波形确认死因:把输出电容减回470uF,带20R负载,在电感上串个0.1Ω采样电阻(或直接用电流探头),用示波器看启动电流。我赌你启动峰值超过15A。如果减电容后峰值降到10A以内能正常启动,那就证实是启动电流饱和导致的炸管。
-
检查你的硬件OCP:逐周期限流的采样点在哪?如果是采Buck下管(续流期)的电流,那上管导通期间的电流尖峰你根本看不到,有至少1个开关周期的死区。电感饱和往往发生在上管导通期间,等你下管导通时检测到过流,上管已经化成渣了。建议:
- 把限流点设到8~9A(留3A以上裕量,别贴着12A设)
- 确保从过流检测到PWM关断的总延迟**<500ns**
- 如果用的是低端采样,考虑改到母线或电感高端采样,或者至少加个比较器做硬件快速关断
-
别再死磕开环了:你已经两次证明开环带载启动不可行。赶紧加电流内环,哪怕是最简陋的峰值电流限制——在电压环输出后面加个限幅器,把电流给定钳位在10A以内,超了直接封PWM。这比什么软起动步进都管用。双闭环(电压外环+电流内环)是Buck-Boost的底线,不是可选项。
-
电感已经废了:你说电感有烧焦痕迹,那这电感已经不可靠了。铁硅铝磁环一旦过饱和,磁导率会永久性下降,下次可能8A就饱和。建议换颗饱和电流20A以上的电感,或者至少换颗全新的同型号。别省这个钱,再炸一次MOS更贵。
-
输出电容可以加大,但启动必须限流:大电容没问题,但启动时得恒流充电。成熟的方案都是先限制电感电流(比如5A),等输出电压爬到目标值附近再切恒压闭环。你现在的开环软起动本质上是在"恒占空比瞎撞",撞对了就活,撞狠了就炸。
总结:减小输出电容能让你暂时跑起来做实验,但只要你还在开环+大负载启动,炸管只是时间问题。当务之急是抓电流波形确认饱和点,然后上电流内环。别在电容容量上纠结了,那是表象,控制缺环才是病根。
我重新画了一版,结果buck侧的sw引脚变成这样了(黄色的线),我又测试了一下我的上管驱动波形(红色的线),我应该修改什么地方?自举电容?还是什么其他的东西?我之前几版没有出现这个问题,这个问题是由于什么东西引起的?
1.我的测试是在输入17V,0.2A,运行在固定占空比0.5空载(10K电阻,加不加都一样)下,输出大概6.5V(我计算了一下,按电感两端电压相等,确实是这个值),我不明白为什么SW点电压会是这种梯形波
2.第一张图中的黄线是电感电流波形
3.这个图片我手机上看的挺清晰的,不知道为什么上传后就变糊了
修改了什么地方?
看看layout
第一张是我的原理图,第二张是我测试大于20V时BUCK侧VS对地,以及电感的电流波形,第三张是第二章的放大,第四张是我在小于20V时的VS和电感电流。我的pwm是100K,固定0.5的占空比
1.为什么我加大输入电压,会导致电感电流纹波频率缩小,MOS在第二次打开时VS为什么就成很尖的波形,而不是方波?
2.我该如何解决这个问题?
请问恒压模式下,输出5V,电子负载未开启下,输出电压=5V,电子负载开到0.5A,电子负载显示输出电压变成4.91V;电子负载开到1.5A,电子负载显示输出电压变成4.74V;电子负载开到2.5A,电子负载显示输出电压变成4.56V;但是以上情况下,单片机的采样输出电压都是5V,请问这是什么原因?
线损造成的压降,你连接电子负载的线是不是太细了
确实跟线损有关,我用的是14awg规格的线,我看您视频演示的似乎没有收到线损的影响,您是怎么操作的呢?
那你测一下电源板上的端子座电压有没有掉
哥们,看了你发的原理图和波形,这现象在做STM32数字电源(尤其是自己搭的分立驱动Buck-Boost)时太经典了。
既然你在程序里把PWM写死了固定50%(0.5)的占空比,那理论上MCU应该雷打不动地输出等宽方波。你在图3(>20V)看到那种“一宽一窄”、“电感电流纹波频率错乱(Pulse Skipping / 大小波)”以及“VS节点出现极窄尖峰”,本质上是这个周期的驱动信号被异常截断了。
我按我的经验帮你盘一下原因和解决思路:
1. 为什么电压上去后会出现这种现象?
输入电压从<20V升到>20V,最直观的变化是开关管动作时的 dv/dt 和 di/dt 显著变大了,这会带来几个致命的连锁反应:
-
干扰/地弹(Ground Bounce)导致MCU或驱动逻辑错乱: 电压升高后,开关瞬间的高频噪声(EMI)变强。这些噪声很容易耦合到MCU的PWM走线上,或者引起参考地电平剧烈抖动。如果驱动IC的逻辑输入端读到了一个毛刺,或者单片机定时器受到干扰,就会导致本该持续半个周期的PWM被提前关断,形成你看到的“尖峰”。
-
自举电路失效或VS负压过大: 你的原理图里用的是带自举电容(C25, C27,目前看是100nF)的高低管驱动方案。当电压升高,死区时间内电感电流续流会导致VS节点出现很深的负压振铃(低于PGND)。如果负压过深,会把自举电容里的电荷瞬间抽干,或者触发驱动IC内部的欠压保护(UVLO)。自举电压一掉,高管马上罢工关断,就变成了极窄的尖峰。
-
硬件保护误触发(如果有): 如果你的板子上有基于电流采样(比如图里的R27、R28等5mΩ电阻)做的硬件过流保护或运放比较器,电压升高后,开关瞬间的“前沿尖峰(Leading Edge Spike)”也会变大,极容易让比较器误翻转,强行屏蔽掉当前的PWM脉冲。
-
电感趋于饱和: 虽然不一定是主因,但电压升高导致峰值电流变大,如果电感余量不够,电流飙升带来的尖峰也会加剧上述的噪声干扰。
2. 怎么解决和排查?
别急着大改板子,做数字电源查Bug讲究“顺藤摸瓜”,建议你按以下步骤来:
第一步:定位“黑手”到底是谁(最关键!)
你现在只测了VS节点。你需要拿示波器的两个通道,同时测STM32的PWM输出引脚 和 VS节点(或者高管的Gate引脚)。
-
情况A: 如果单片机引脚测出来的波形就已经一宽一窄、乱七八糟了,说明是强电干扰了MCU。你需要检查STM32的供电稳不稳、强弱电的地有没有铺好/单点接地,或者尝试在PWM靠近驱动IC的地方加个小RC滤波(比如几十欧串联,配个22pF到地的电容)。
-
情况B: 如果单片机引脚出来的是完美的50%方波,但VS端还是尖峰,那就说明驱动级出问题了,重点查下面第二步。
第二步:针对驱动级的优化
如果是驱动端的问题,大概率是自举或者开关速度过快引起的:
-
加大自举电容: 你现在的C25、C27是100nF,跑100k频率在重载或高压下可能有点虚。建议并联一个1uF的MLCC,保证高管有充足的电荷维持导通。
-
压制开关节点的振铃(重点): 拿示波器放大看看波形下降沿,VS节点是不是冲到了-2V甚至更低?如果是,建议在VS1对地、VS2对地加 RC Snubber(RC吸收电路),比如串个几欧姆的电阻和几百pF的电容,把振铃吃掉。
-
稍微放慢一点开关速度: 可以在高管的门极(Gate)串一个小电阻(如果有位置的话,看原理图好像直接连的),稍微牺牲一点点开关损耗,降低dv/dt,整个系统会稳定非常多。
-
检查二极管反向恢复: 你的自举二极管用的SS14(肖特基),耐压40V,输入>20V时如果加上振铃,反向耐压可能有点勉强了,建议换成耐压更高、恢复极快的二极管,并串联一个2.2Ω左右的小电阻限制充电峰值电流。
先去测下单片机管脚的PWM源头吧,确定了是源头被干扰还是驱动层扛不住,就能对症下药了。祝调试顺利!
看了下你的波形和原理图,这个现象挺典型的,核心原因就是输入电压升高后,电感进入了断续导通模式(DCM)。
1. 为什么加大输入电压,纹波 “频率缩小”,第二次开通 VS 是尖脉冲而不是方波?
PWM 频率其实没变,还是 100K,是电流波形变形造成的视觉效果。
你现在开环固定 50% 占空比,纯 Buck 模式下输出大概是输入的一半。输入电压升高,电感电流纹波 ΔI = (Vin-Vout)×D/(L×f) 会线性增大。当纹波峰峰值超过两倍平均输出电流时,电流谷值直接撞到 0,就从 CCM 掉进 DCM 了。
进入 DCM 之后:
- 关断阶段电感电流早早降到 0,续流二极管截止,VS 节点变成高阻态,由寄生 LC 自由谐振,所以不再被钳位成方波。
- 下一个周期 MOS 再开通时,电感电流是 0,相当于硬开关 ——MOS 直接给开关节点寄生电容充放电,di/dt 极大,打出一个很尖的电压脉冲。但因为没有持续电感电流维持,尖峰很快泄放,所以看起来是窄脉冲而不是方波平台。
- 所谓 “纹波频率缩小”,其实是电流在大半个周期里都贴着 0(只有微小谐振波动),有效三角波只占一小段,视觉上像是频率变低了;严重时还会出现隔一个周期才传一次能量的跳脉冲现象。
另外你这是自举驱动的高端 NMOS,DCM 下 VS 长时间不到地,自举电容 C7 充不上电,驱动能力会下降,开通波形只会更难看 —— 你原理图上 C7 标了 100pF,这也偏小了,自举电容一般几百 nF 起步。
2. 怎么解决?
几个方向,按优先级排:
① 回到 CCM(治本)
- 换更大感值的电感:按最大输入电压算一下,保证纹波峰峰值不超过平均电流的 30%~40%,留够余量。这是最直接的办法。
- 加重负载:提高平均输出电流,把谷值电流 “抬” 离 0 点,可以快速验证是不是 DCM 的问题。
- 降开关频率也能减小纹波,但 100K 挺合理的,不建议从频率下手。
② 抑制尖峰和振铃(改善应力和 EMI)
- 在 VS 节点对地加个RCD 缓冲(比如 100Ω 电阻 + 1nF 电容 + 快恢复二极管),或者简单的 RC 缓冲(几十 Ω + 几百 pF),能把尖峰和振铃明显压下去。
- 布局上开关节点铜箔面积尽量小,驱动回路走最短路径,减少寄生参数。
③ 控制方式改进
- 开环固定占空比本身就不太适合 Buck-Boost 这种拓扑。建议改成电压闭环,输入变化时占空比自动调整,既能稳压也能缓解 DCM 问题。
- 如果一定要开环跑,那就按你最大输入电压重新设计电感参数,保证全范围 CCM。
总结一下:本质是高压轻载掉进 DCM 了,尖峰是零电流硬开关的产物。 你可以先临时挂个重负载试试,波形如果恢复成低压时那样的方波 + 三角波,就确认是 DCM 的问题,接下来换大电感就行。
万用表测,电压也有掉,不是准的5V,但是用万用表测线的阻抗,在180m欧左右,跟加大电流掉电压的幅度是对的上的










