
先说明一下这篇文章我用工程笔记的方式写不是那种“复制粘贴规格书”的教程。双脉冲测试这块网上讲原理的多讲怎么用单片机真正把脉冲发出来、把波形测准的少尤其是用STM32F030这种入门级Cortex-M0片子来做的更少。我把自己从画板子到出波形的完整过程整理出来包括电路图、代码思路、关键参数计算和踩过的坑希望对正在做电源或电机驱动验证的朋友有帮助。1. 双脉冲测试到底在测什么1.1 为什么电源工程师离不开这个测试做功率变换器的人对“开关损耗”这个词肯定不陌生。MOS管在开通和关断的瞬间电压和电流是同时存在的这段时间里器件承受的瞬时功率很高累积起来就是开关损耗。开关损耗直接影响效率、温升和可靠性但问题在于——它没法直接通过万用表或普通示波器读出来必须用双脉冲测试这种专门的方法去抓取动态过程。双脉冲测试的原理说穿了很简单给被测器件DUT施加两个宽度可控的栅极脉冲第一个脉冲让电流上升到目标值第二个脉冲用来观察关断和开通过程。关键在于这两个脉冲之间有一个短暂的死区时间在死区里电感电流通过续流二极管续流这样就能在第二个脉冲上升沿观测到二极管反向恢复与MOS开通过程的交叠在第一个脉冲下降沿和第二个脉冲上升沿分别观测MOS的关断和开通波形。这项测试的价值在于它能直接在真实的电路条件下测量MOS管的开关时间、开关损耗、栅极电荷特性、体二极管反向恢复特性还能验证驱动电阻取值是否合理、有没有振铃隐患、米勒平台区域是否稳定。无论你是做DC-DC、AC-DC还是电机驱动只要MOS开关频率超过50kHz这组数据就是选型和优化绕不开的“体检报告”。1.2 双脉冲波形里能读出哪些关键参数为了后面讲实操时方便对照这里先把波形里的核心信息梳理一遍。读一波双脉冲波形主要看这几个量关断延迟时间td(off)从栅极驱动信号下降到Vgs的90%开始到Vds上升到10%为止。这段时间器件还在导通但已经开始退出饱和区。关断上升时间trVds从10%上升到90%所需的时间。这个指标直接关联关断损耗。开通延迟时间td(on)栅极信号上升到10%到Vds下降到90%之间的时间反应的是栅极电容充电过程。开通下降时间tfVds从90%降到10%的时间受米勒电容影响较大。开通损耗和关断损耗通过对Vds × Id波形积分得到这是评估散热设计的关键输入。体二极管反向恢复时间trr在第二个脉冲上升沿可以看到一个负向电流尖峰这个尖峰持续的时间就是反向恢复时间。如果被测器件是SiC MOSFET还要额外关注关断时的电压过冲幅度和开通过程中的di/dt因为SiC器件开关速度太快寄生电感的影响会被成倍放大。2. 硬件电路设计与器件选型2.1 为什么选STM32F030作为脉冲发生器做双脉冲测试脉冲发生器不一定要用昂贵的FPGA或专用信号发生器STM32F030这种几块钱的片子完全够用。F030是Cortex-M0内核主频48MHz自带高级定时器TIM1有互补PWM输出和死区插入功能这对双脉冲测试来说是天然优势。你可能会有疑问双脉冲需要的是“两个单脉冲”和互补PWM有什么关系好问题。双脉冲测试虽然最终只输出两路单脉冲但TIM1的互补通道和死区控制可以用来做“单脉冲整形”——它允许你对上升沿和下降沿分别设置不同的延迟和宽度这在调整第二个脉冲的边沿位置时非常方便。F030另一个好处是启动速度快、外设简单代码量控制在几百行以内就能完成全部时序逻辑。相比之下用FPGA的话开发周期长用台式信号发生器的话成本高而F030的开发板十几块钱就能买到自己画最小系统板也就几十块钱很适合实验室预算有限的场景。2.2 功率回路的拓扑结构双脉冲测试的回路由直流电源、母线电容、电感负载、被测MOS管、续流二极管构成。我用的电路结构如下直流电源通过一个可调稳压源供电电压范围10V-100V可调。母线电容并联在电源输出端容量取470μF电解电容加1μF CBB电容前级防振铃后级滤高频。负载电感L串联在母线正端和开关节点之间电感量选择是关键——它决定了电流上升斜率。被测MOS管放在低边源极直接接地栅极通过驱动电阻接驱动器输出。续流二极管采用快恢复二极管或直接使用MOS管体内的二极管取决于你要测什么。这里补充一个关键点高压母线电容不是越大越好。电容太大会导致关断时能量无法快速泄放母线电压会异常升高电容太小则第一个脉冲期间母线电压跌落明显影响测试精度。我实测下来100V/20A级别的测试470μF电解加1μF CBB的组合比较稳妥。2.3 负载电感量的计算负载电感的大小决定了第一个脉冲期间电流的上升速度。电感电流的上升斜率由公式 di/dt Vdc / L 决定。假设直流母线电压60V目标峰值电流20A第一个脉冲宽度为20μs电流上升量为ΔI (Vdc / L) × t1反解出 L Vdc × t1 / ΔI 60 × 20×10⁻⁶ / 20 60μH。实际制作时我用了两个33μH的功率电感串联实测电感量65μH左右满足需求。这里要提醒你电感最好选用高频铁硅铝或铁氧体磁环不能用工字电感或普通滤波电感因为脉冲状态下电流变化很快普通电感容易饱和。如果你手头没有合适的电感也可以用绕线法自制用铁硅铝磁环绕制圈数通过AL值计算N √(L / AL)。比如AL 100nH/N²要得到60μH需要绕 √(60×10⁻⁶ / 100×10⁻⁹) ≈ 24.5圈取25圈左右实测后再微调。2.4 栅极驱动电路栅极驱动部分我用了经典的推挽驱动方案。控制信号从STM32的TIM1_CH1输出经过一个高速光耦或者数字隔离器再进入栅极驱动芯片。驱动芯片我选的是UCC27524双通道输出峰值电流5A开关速度足够快驱动能力也充裕。栅极驱动电阻的选择比较讲究分开通电阻和关断电阻。开通电阻Rg_on主要限制开通时的di/dt减小振铃关断电阻Rg_off则影响关断速度。工程上常用“开通慢一点、关断快一点”的策略我实测的推荐值是Rg_on 10ΩRg_off 5Ω可以分两路二极管隔离实现。驱动芯片的供电电压一般取12V到15V我用的是12V。对于SiC MOSFET建议加到18V-20V具体要看器件手册的推荐栅极电压范围。2.5 完整电路图与关键节点备注电路的主干部分如下STM32F030最小系统板或用F030C8T6芯片画板PA8输出PWM信号。光耦隔离如6N137或数字隔离器ISO7721将单片机信号与功率部分隔离。驱动芯片UCC27524输入接光耦输出输出通过Rg_on/Rg_off网络接MOS栅极。感性负载L 60μH连接在母线正端和MOS漏极之间。续流二极管D1并联在电感两端阴极接母线正端。母线电容C1 470μF/160V电解电容C2 1μF/100V CBB电容并联在电源两端。被测MOS管比如IRFP460、IPP075N15N3或SiC的C2M0080120D源极接地漏极接电感下端。需要注意的节点有驱动回路必须遵循“短而粗”的原则驱动芯片输出到MOS栅极的走线控制在10mm以内否则寄生电感会引起栅极振铃。功率回路采用开尔文连接电流检测电阻的采样线必须单独走线不能和功率线共用。母线电容要尽量靠近MOS管的漏极和源极减小功率回路寄生电感。我实测过母线电容离MOS管远1cm关断过冲就会增加将近10V。这里强调一下很多人第一次做双脉冲测试时把精力全放在脉冲宽度和代码上忽略了功率回路的寄生电感结果波形一团糟。实际上寄生电感是双脉冲测试最大的敌人比代码问题难搞得多。所以PCB布局时功率回路面积要尽量小最好是“一”字形布局母线电容正极 → MOSFET漏极 → MOSFET源极 → 母线电容负极形成一个紧凑的回路。3. STM32F030脉冲发生器的实现方法3.1 定时器配置思路双脉冲测试对脉冲时序的要求非常高两个脉冲的宽度、间隔都必须精确可控而且要有足够的调整精度。STM32F030的TIM1是16位高级定时器工作在48MHz时最小分辨率约20.8ns——这个精度对于100kHz级别的开关测试完全够用甚至测SiC器件也勉强能应付SiC的开关过程一般在几十纳秒级别。我用的是TIM1的PWM模式把CH1配置为PWM输出通过修改CCR1的值来控制脉冲宽度。为了保证第一次和第二次脉冲宽度独立可调我用了一个简单的方法让定时器工作在单次PWM模式下每触发一次就输出一个指定宽度的脉冲然后重装载再触发第二次。更优雅的做法是利用TIM1的重复计数器和更新事件在主中断里动态修改CCR1这样两个脉冲的宽度和间隔都能精确控制。但考虑到F030的中断延迟抖动比较大约1-2μs如果间隔时间特别短比如小于5μs建议改用DMA或硬件比较输出。我自己的实现方案是这样的初始化TIM1为PWM1模式输出极性为高电平有效。设置预分频器PSC 0不分频自动重装载ARR 65535得到约1.365ms的最大周期。输出引脚PA8复用为TIM1_CH1。开启TIM1更新中断在主中断服务函数中按状态机切换脉冲宽度和间隔。第一次脉冲宽度设为t1间隔时间设为t_delay第二次脉冲宽度设为t2。3.2 状态机实现“发两个脉冲就停止”双脉冲测试的控制逻辑其实就是一个简单的状态机空闲 → 发第一个脉冲 → 等待 → 发第二个脉冲 → 结束。我用一个全局变量state来记录当前状态在TIM1的更新中断里做状态切换。在F030这种低主频MCU上做高精度时序最核心的原则是不允许在中断服务函数里做任何浮点运算和延时函数调用所有参数预先算好存成整数中断里只做寄存器赋值和状态切换。关键代码思路如下伪代码风格实际工程用寄存器/HAL均可volatile uint8_t pulse_state 0; volatile uint16_t t1_ccr 960; // 第一个脉冲宽度对应CCR值 volatile uint16_t t2_ccr 480; // 第二个脉冲宽度对应CCR值 volatile uint16_t gap_ccr 1000; // 间隔时间对应计数值 void TIM1_BRK_UP_TRG_COM_IRQHandler(void) { if (TIM1-SR TIM_SR_UIF) { TIM1-SR ~TIM_SR_UIF; // 清更新标志 switch (pulse_state) { case 0: // 初始状态设置第一个脉冲 TIM1-CCR1 t1_ccr; pulse_state 1; break; case 1: // 第一个脉冲结束进入间隔 TIM1-CCR1 0; // 拉低 // 这里设置下一次更新为间隔结束 TIM1-ARR gap_ccr; pulse_state 2; break; case 2: // 间隔结束发第二个脉冲 TIM1-CCR1 t2_ccr; pulse_state 3; break; case 3: // 全部结束输出低电平 TIM1-CCR1 0; TIM1-ARR 65535; pulse_state 4; break; default: break; } } }注意上面的伪代码里用了一个技巧在间隔阶段把ARR改小让更新事件提前到来这样就可以用一个中断源控制整个时序流。这个方法实测是可行的但要小心修改ARR会影响当前计数比较行为需要准确理解定时器的预装载特性。如果你不想被ARR动态修改搞晕还有一个更稳妥的办法每个阶段都用独立的延时定时器比如TIM3来触发。第一个脉冲由TIM1产生TIM1更新时启动TIM3定时TIM3更新时间到后启动第二个脉冲。这样隔离更彻底逻辑更清晰缺点是占用了两个定时器。3.3 计算脉冲宽度和间隔假设你要模拟的是50kHz、占空比50%的工况第一个脉冲电流从0升到20A的电流上升时间由 L Vdc × t1 / ΔI 决定。反过来已知电压60V、电感65μH、目标电流20At1 L × ΔI / Vdc 65×10⁻⁶ × 20 / 60 ≈ 21.7μs。把这个时间换成计数个数count1 t1 × 48MHz 21.7×10⁻⁶ × 48×10⁶ ≈ 1042。第二个脉冲的宽度一般取1μs到5μs视你关心的开关过程具体阶段而定。我常用2μs对应count2 96。间隔时间——也就是两个脉冲之间的死区——一般取5μs到50μs目的是让电感电流在续流阶段基本保持恒定。我常用10μs对应count_gap 480。这里有个容易犯的错误间隔时间不是越短越好。间隔太短二极管还在反向恢复过程中第二个脉冲的电流波形会受到干扰间隔太长电感电流在二极管续流过程中会衰减导致第二个脉冲起始电流低于目标值。理想的间隔是“让续流电流衰减量控制在1%以内”。衰减量可以用 ΔI Vf × Δt / L 估算Vf是二极管正向压降。取Vf 1V、L 65μH、Δt 10μs时ΔI ≈ 0.15A在20A的电流基底上占比不到1%可以接受。3.4 进阶加入SiC MOSFET测试支持如果你要测的是SiC MOSFET比如C2M0080120D这种脉冲参数的设定需要调整。SiC器件的开关速度快关断di/dt非常大如果还是用65μH的电感关断时的电压过冲会非常吓人。原因在于V_overshoot L_stray × di/dt寄生电感哪怕只有20nHdi/dt如果达到5A/ns就会产生100V的过冲。这对低压测试比如100V母线来说是致命的。测SiC时的应对措施功率回路的寄生电感必须压到10nH以下这基本意味着要采用多层PCB叠层母线设计或者用紧凑的模块化布局。驱动电阻要重新调大一点比如Rg_on 20Ω牺牲一点开关速度来换电压应力。采样示波器带宽至少500MHz探头要用差分探头或光隔离探头普通无源探头在SiC的高dv/dt环境下会产生严重的振铃失真。电流采样建议用罗氏线圈如Pearson 2877或同轴分流器不能用普通的电流探头带宽不够。4. 实操过程与波形解读4.1 调通脉冲输出的排查顺序焊好板子、烧好程序之后不要急着加高压。先把功率回路的母线电压调到0V只给控制电路上电用示波器观察栅极驱动信号。这一步非常关键我能确认整个信号链路是通的再往功率部分加电。检查项PA8是否有PWM输出脉冲宽度是否正确。用示波器测量应该看到两个宽度不同的脉冲间隔和设定一致。光耦或数字隔离器输出是否正常。如果光耦输出高电平不足驱动芯片可能无法完全开通MOS。驱动芯片的Vgs波形正常应是方波上升沿干净没有明显振铃。如果Vgs波形有大的负向过冲说明栅极回路寄生电感过大或者驱动芯片退耦电容不足。我遇到过一次Vgs振铃严重的问题排查后发现是驱动芯片的VCC退耦电容放得太远导线上有寄生电感。后来把100nF的C0G电容直接贴在驱动芯片的VCC和GND引脚旁边振铃立刻消失了。这类问题属于典型的“布局杀死电路”和原理图没关系但对实际性能影响巨大。4.2 加上母线电压后的波形调测信号链路确认无误后开始逐步升高母线电压。我习惯从10V开始逐步升到20V、40V、60V每一步都记录波形。这个过程的目的是确认电流上升斜率和理论是否一致。母线电压60V、电感65μH、目标电流20A时第一个脉冲宽度约为21.7μs。示波器触发方式是用Vds信号下降沿作为触发源设置触发电平在母线电压的50%处这样能稳定抓到开通过程。关键观测点Vgs波形上升沿应干净利落开通瞬间可能会有小的振铃但振幅不应超过Vgs稳态值的20%。Vds波形开通时应快速下降关断时应快速上升关断瞬间的过冲Vds_max - Vbus应在30V以内对于100V耐压的管子。电感电流波形第一个脉冲期间线性上升间隔期间基本保持恒定第二个脉冲期间继续上升。二极管反向恢复电流如果测的是体二极管在第二个脉冲上升沿可以看到一个负向电流尖峰这个尖峰就是反向恢复电流。从波形上读取开关参数的做法用示波器的光标功能分别测量Vds下降到90%→10%的时间tf、Vds上升到10%→90%的时间tr、以及Vgs下降沿到Vds开始变化之间的延迟td(off)。更精确的做法是把Vds和Id波形数据导出来在电脑上用Python或Excel做积分运算算开通损耗和关断损耗。4.3 损耗计算的原理与实操开关损耗计算公式是E_on ∫(Vds × Id)dt积分区间为Vds下降到10%时刻到Vds下降到0或Id达到稳态时刻。E_off ∫(Vds × Id)dt积分区间为Vds开始上升到Id下降到0时刻。实际用示波器算的时候我推荐用数学通道在示波器上定义M1 Vds × Id然后对M1做积分。大部分中高端示波器都支持这种操作。如果手头示波器不支持数学通道积分可以导出CSV数据用Python的NumPy做梯形积分。用Python处理的部分示意import numpy as np # 假设从示波器导出了CSV文件包含时间和Vds/Vgs/Id数据 data np.genfromtxt(scope_data.csv, delimiter,, skip_header1) t data[:, 0] * 1e-6 # 时间转为秒 vds data[:, 1] id_current data[:, 3] # 计算瞬时功率 p_inst vds * id_current # 在关断区间积分比如t 100us and t 110us mask_off (t 100e-6) (t 110e-6) e_off np.trapz(p_inst[mask_off], t[mask_off]) print(f关断损耗: {e_off * 1e6:.2f} uJ)这里唯一要注意的是电流和电压探头的延时对齐。电流探头和电压探头本身的传播延时不同通常差几纳秒到几十纳秒在测量十几纳秒级别的开关过程时这个差异会导致损耗计算出现非常大的误差。解决办法是在示波器上设置通道延时校正Deskew用同一个方波信号同时激励两个探头把两者的上升沿对齐。这个步骤虽然繁琐但属于“必须做”的操作。4.4 各类器件的波形特征对比用同一套测试平台换了不同类型的MOS管波形差异非常明显普通硅MOS如IRFP460开关速度较慢Vds上升沿和下降沿有较明显的倾斜开关损耗较大。体二极管反向恢复时间较长反向恢复电流尖峰也比较大。低压CoolMOS如IPP075N15N3开关速度明显加快波形边沿变陡关断过冲会略有增加。反向恢复特性比IRFP460好很多。SiC MOSFET如C2M0080120D开关过程极快Vds边沿几乎是垂直的必须用高带宽示波器才能测到真实波形。关断过冲需要更关注因为di/dt太大。栅极电压振铃问题也要特别注意寄生参数稍微不合理就会产生很高的负压尖峰可能损坏器件。这里再强调一下用SiC时特别容易忽略的一点栅极驱动回路的共模干扰。因为SiC开关时dv/dt极高可达50V/ns以上通过米勒电容耦合到栅极的共模电流很大。如果驱动电路抗共模能力不足Vgs波形会乱到无法直视。解决方法是使用带米勒钳位的驱动芯片或者在栅极并联一个10nF左右的密勒钳位电容仅限慢管快管慎用。5. 常见问题与排查技巧实录5.1 波形振铃严重不看驱动回路先看功率回路很多人一看到Vds波形振铃就认为是驱动电阻太小其实大多数时候真凶是功率回路的寄生电感。我自己的排查顺序是先量Vds波形在关断时的过冲幅度如果过冲超过母线电压的30%基本可以断定功率回路寄生电感过大。这时不要急着改驱动电阻先重新布局功率回路把母线电容靠近MOS管缩短功率走线长度。如果过冲不大但Vgs波形有振铃再看驱动回路。可以在栅极串一个小电阻几欧到几十欧来抑制振铃但要权衡开关速度。一个经典的“土办法”是用一根短线在栅极引脚上绕一圈相当于增加几纳亨电感看振铃频率是否变化——如果振铃变了说明问题在栅极回路如果没变多半是功率回路的问题。5.2 电流上升斜率不对先确认电感是否饱和电流上升斜率不对最常见的原因是电感饱和。测试时如果听到电感发出“吱吱”声或者发现电流波形在脉冲中后段突然变得很陡基本可以判断是磁芯饱和了。用示波器电流探头看电感电流波形正常应该是线性上升直线如果变成曲线、斜率逐渐增大就是电感量在下降也就是磁芯在进入饱和。解决方法是换更大饱和电流的电感或者增加线圈匝数。但要注意匝数增加会导致电感量变大同样的脉冲宽度下电流上升量会减少需要重新计算脉冲参数。5.3 Vgs波形在关断时出现负压尖峰Vgs关断时出现负压尖峰通常是米勒效应和栅极回路寄生电感共同作用的结果。当漏极电压快速上升时通过米勒电容Crss向栅极注入位移电流在栅极电阻上产生压降形成负压尖峰。尖峰太大可能击穿栅极氧化层一般栅极耐压是±20V。解决办法减小栅极回路的寄生电感尽量让驱动芯片靠近MOS管。采用负压关断用负电源给驱动芯片供电这是检查SiC器件的常用做法。选用带米勒钳位功能的驱动芯片比如IXDN609SI或者TI的UCC27531在关断期间主动把栅极拉到低电平。5.4 第二个脉冲的电流起始点和预期不符第二个脉冲起始电流应等于第一个脉冲结束时的电流减去间隔期间的衰减量。如果发现第二个脉冲起始电流明显偏低说明间隔时间太长续流阶段的电流衰减太多。这时可以缩短间隔时间或者增大电感量。另一个可能原因是续流二极管压降太大。肖特基二极管的压降比较低0.3V到0.5V快恢复二极管则在1V到2V之间SiC肖特基二极管几乎可以忽略。如果用了普通快恢复管做续流间隔阶段电流衰减会明显快一些。对高精度测试来说建议使用SiC肖特基二极管做续流管反向恢复电荷几乎为零也更贴近实际应用场景。5.5 高效操作的几个习惯最后分享几个我做了几十次双脉冲测试后总结出来的习惯每次测试前在测试记录表里记下母线电压、脉冲宽度、间隔、温度、电感量、驱动电阻、被测器件型号。没有记录的数据等于白测。示波器使用“平均采集模式”至少64次平均可以把随机噪声滤掉更清楚地看到真实的开关轨迹。但要确认电路没有在逐周期变化否则平均会掩盖真实的抖动。测试SiC器件时一定要先降低母线电压比如先跑30V确认波形正常后再升到额定电压。SiC器件在高压下的失效往往是瞬间的一步到位容易“放烟花”。示波器探头的地线要尽可能短最好用探头自带的弹簧地针而不是夹子线。长地线在开关过程中会引入几十纳亨的寄生电感导致测出的波形出现假的振铃和过冲。关于如何选示波器探头我再多说两句。测低压MOS100V级别时普通10x无源探头加短地针勉强够用测高压400V以上或SiC时必须用差分探头或光隔离探头。示波器带宽方面测量开关时间小于20ns的信号带宽至少要500MHz。很多人拿100MHz的示波器测SiC测出来的波形边沿其实是假平滑损耗计算完全不准——这不是操作问题是设备带宽不够。我做这个项目的最大体会是双脉冲测试的难点不在“发两个脉冲”这个动作而在于建立一个让你信得过测试结果的系统。从功率回路的寄生电感控制到示波器探头的延时校正再到代码状态机的时序精度每一个环都会直接影响最终数据的可信度。当你把整个链路都打通能一次测出干净、可重复、符合理论预期的波形时对开关电源和器件特性的理解会上升一个台阶。这套平台后续还可以扩展比如加上温度控制模块测不同壳温下的开关特性或者换不同的驱动电阻做损耗-速度优化曲线用途远比一次测试本身更广。