深入解析C2000 ePWM死区生成与斩波功能:从原理到工程实践

1. 项目概述与核心价值

在电力电子和电机驱动的世界里,PWM(脉冲宽度调制)信号是驱动功率开关器件(如MOSFET、IGBT)的“指挥棒”。我们通过调节PWM的占空比,就能精确控制输出电压或电流的平均值,从而驾驭电机转速、调节电源功率。然而,在实际的桥式电路(如H桥、半桥)中,一个致命的风险潜伏着:上下桥臂的功率管可能因为开关延迟而同时导通,形成瞬间的短路大电流,即“直通”或“穿通”(Shoot-Through),轻则导致效率下降、发热严重,重则直接烧毁器件。

为了解决这个问题,“死区时间”(Dead Time)应运而生。它本质是在一对互补的PWM信号(如控制上管的PWM_A和控制下管的PWM_B)的边沿之间,人为插入一个短暂的时间间隔,确保一个管子完全关断后,另一个管子才被允许开启。德州仪器(TI)在其C2000系列微控制器中集成的增强型PWM(ePWM)模块,将死区生成、PWM波形调制乃至故障保护等功能高度集成化、可配置化,成为了工业界实现高可靠性功率控制的利器。

这篇文章,我将结合多年的电机驱动和数字电源开发经验,为你深入拆解ePWM模块中两个关键子模块:死区生成器(DB)PWM斩波器(PC)。我不会仅仅复述数据手册的寄存器描述,而是聚焦于工程师最关心的实际问题:如何根据不同的功率拓扑和栅极驱动器需求,正确配置死区模式?如何计算和设置死区时间?PWM斩波功能在什么场景下必须使用,又如何配置其参数?我会通过具体的配置案例、波形分析和避坑指南,让你不仅能看懂手册,更能用活这些功能,设计出稳定、高效的硬件系统。

2. 死区生成器(DB)子模块深度解析

死区生成器是ePWM模块中防止直通的核心硬件单元。它的设计哲学是:你提供一个原始的PWM信号(通常来自动作限定器AQ模块),DB模块能自动生成一对带有可编程延迟的互补信号。

2.1 死区时间的本质与计算

死区时间不是软件延时循环,而是由硬件计数器实现的精确延迟。在ePWM中,时间基准是TBCLK,它是系统时钟EPWMCLK经过分频后的时钟。死区时间由两个独立的寄存器控制:

  • DBRED(Rising Edge Delay):上升沿延迟值。
  • DBFED(Falling Edge Delay):下降沿延迟值。

它们都是14位寄存器(在Type 4模块中),其延迟时间计算公式为:

  • 标准模式:延迟时间 = 寄存器值 × TBCLK周期
  • 半周期时钟模式 (DBCTL[HALFCYCLE]=1):延迟时间 = 寄存器值 × (TBCLK周期 / 2)

半周期模式可以将时间分辨率提高一倍,这对于需要高精度死区控制的场合(例如使用氮化镓GaN等超快开关器件)非常有用。

实操心得:死区时间设置多少合适?死区时间并非越大越好。过大的死区会引入波形畸变,降低输出电压精度,增加谐波,尤其在低占空比时可能导致有效输出脉冲消失。一个经验值是设置为功率器件开关时间(Turn-off延时 + 存储时间)的1.5到2倍,并留有一定裕量。对于常见的IGBT,通常在几百纳秒到几微秒;对于MOSFET,可能在几十到几百纳秒。务必参考你的功率器件和栅极驱动器数据手册中的开关时间参数。

2.2 经典死区工作模式详解

DB模块提供了多种输出模式,主要通过DBCTL[POLSEL]DBCTL[OUT_MODE]这两个关键位域来配置。理解这些模式是正确应用的关键。下面这个表格总结了最常用的五种经典模式:

模式编号模式描述DBCTL[POLSEL]DBCTL[OUT_MODE]典型应用场景
模式1直通模式X (无关)X (无关)调试阶段,绕过死区模块,直接输出AQ原始信号。
模式2主动高互补 (AHC)10最常用。输出一对主动高(高电平有效)的互补PWM。适用于栅极驱动器输入为高电平开启的场合。EPWMxA为原始信号,EPWMxB为其反相且加入死区。
模式3主动低互补 (ALC)01输出一对主动低(低电平有效)的互补PWM。适用于某些需要低电平开启的栅极驱动器或光耦隔离电路。
模式4主动高 (AH)00两个输出均为主动高,但EPWMxB是EPWMxA的延迟版本(仅RED或FED生效)。可用于非对称半桥等需要相位偏移的拓扑。
模式5主动低 (AL)11两个输出均为主动低,EPWMxB是EPWMxA的延迟版本。应用场景同模式4,但极性相反。

为了更直观地理解,我们以模式2(AHC)为例,看一下信号流:

  1. 输入信号EPWMxA_In来自AQ模块。
  2. 该信号同时送入上升沿延迟(RED)和下降沿延迟(FED)单元。
  3. 经过RED延迟的信号路径称为A路径,经过FED延迟并取反的信号路径称为B路径。
  4. 在AHC模式下,OUT_MODE配置将A路径输出到EPWMxA,将B路径输出到EPWMxB
  5. 最终,EPWMxAEPWMxB是一对高电平有效、且边沿错开(死区)的互补信号。

2.3 高级模式与B通道相位移动

在Type 4 ePWM模块中,DB功能得到了增强,引入了DBCTL[DEDB_MODE]DBCTL[OUTSWAP]等位,实现了更灵活的信号路由。一个重要的高级功能是B通道相位移动

传统上,死区是在一对互补信号的边沿插入延迟。而相位移动是指让EPWMxB的整个脉冲相对于EPWMxA有一个固定的时间偏移,而不仅仅是边沿延迟。这在某些移相全桥、多相交错并联的拓扑中非常有用。

如何实现?通过设置DEDB_MODE=1,并配合OUTSWAP等位的配置,可以将RED和FED同时应用到B通道路径上。这样,B通道信号相对于A通道的上升沿和下降沿都会被延迟一个相同的值(PhaseShift = RED = FED),从而实现整体相移。

重要警告:相位移动的局限性数据手册明确警告,使用死区模块实现相位移动时,当前PWM波的占空比必须大于所需的相移量。如果占空比小于相移量,EPWMxA的下降沿会优先于EPWMxB的延迟上升沿发生,导致EPWMxB无法产生有效的上升沿,波形会出错。因此,在动态调节占空比的应用中(如电机控制),需在软件中做占空比限幅,确保其始终大于相移时间对应的计数值。

2.4 影子寄存器与全局加载机制

与TBPRD和CMPx寄存器类似,DBREDDBFED乃至DBCTL本身也支持影子寄存器。这是实现PWM参数无毛刺、同步更新的关键。

  • 使能与加载事件:通过DBCTL[SHDWDBREDMODE]DBCTL[SHDWDBFEDMODE]使能影子模式。加载事件可以配置为在TBCTR=0TBCTR=TBPRD或两者都发生时,将影子寄存器的值更新到活动寄存器。
  • 全局加载:多个ePWM模块的死区参数可能需要同步更新。通过全局加载配置寄存器(GLDCFG)和全局加载控制寄存器(GLDCTL),可以令所有使能了全局加载的ePWM模块,在同一个同步事件下,一次性更新其影子寄存器(包括TBPRD, CMPA, CMPB, DBRED, DBFED等)。这对于多相并联的同步整流Buck或逆变器至关重要。

避坑指南:影子寄存器更新的时序陷阱

  1. 顺序很重要:务必使能影子加载模式(SHDWDBxEDMODE=1),写入DBRED/DBFED影子寄存器。如果顺序反了,使能瞬间会以0值加载到活动寄存器,导致死区时间突然归零,引发直通风险!
  2. 加载时机:当新的死区值从影子寄存器加载到活动寄存器时,它只影响下一个PWM边沿,而不是当前正在处理的边沿。这意味着死区时间的改变是“相位连续”的,不会打断当前周期,但你需要理解这个延迟效应。
  3. 边界值限制:当使用全局加载且加载事件设为CTR=ZERO时,不能使用死区值0;同理,加载事件设为CTR=PRD时,不能使用死区值等于TBPRD。否则在加载边界可能产生不确定行为。通常我们会避免使用0死区。

3. PWM斩波(PC)子模块:为何及如何“斩波”

PWM斩波功能初看可能有些冷门,但在特定应用中不可或缺。它的核心目的是用一个频率高得多的载波信号,去调制原始的PWM波形,生成一串高频脉冲。

3.1 核心应用场景:脉冲变压器栅极驱动

为什么需要把好好的PWM波“斩”成碎片?答案主要在于脉冲变压器隔离驱动

在高压、高隔离要求的场合(如变频器、车载充电机),常使用脉冲变压器来传递栅极驱动信号,实现原副边电气隔离。脉冲变压器体积小、成本低、传输延迟短。但它有一个本质缺陷:变压器不能传递直流分量。一个长时间保持高电平的PWM波,其直流分量会使变压器磁芯饱和,导致失效。

PWM斩波器的妙处就在于,它将一个宽脉冲(直流分量)转换成一连串的高频窄脉冲。这些脉冲的伏秒积(电压乘以时间)平均值与原PWM波相同,从而能通过变压器传递相同的控制信息,但每个脉冲的持续时间很短,变压器磁芯有足够的时间在脉冲间隙复位,避免了饱和。

3.2 子模块工作原理与参数配置

斩波子模块位于信号链的死区模块之后。其工作流程如下:

  1. 载波生成:基于系统时钟EPWMCLK,通过一个分频器产生高频载波时钟PSCLK。其频率由PCCTL[CHPFREQ]位控制,可选EPWMCLK/1EPWMCLK/16
  2. 首脉冲(One-Shot):当输入PWM信号(来自DB模块)的上升沿到来时,斩波器会先产生一个宽度可编程的独立单脉冲。这个脉冲通常被设计得比较宽,目的是在开关管导通的瞬间,提供更大的驱动能量,确保其快速、彻底地开通,减少开通损耗。首脉冲宽度由PCCTL[OSHTWTH](4位)控制,计算公式为:T_first_pulse = T_EPWMCLK × 8 × OSHTWTH。例如,EPWMCLK=100MHz时,OSHTWTH从1到16对应脉冲宽度从80ns到1.28μs可调。
  3. 后续维持脉冲:在首脉冲之后,只要输入PWM信号仍为高电平,斩波器就会持续输出频率为PSCLK的脉冲串。这些“维持脉冲”的作用是在开关管导通期间,持续提供驱动能量,维持其导通状态。维持脉冲的占空比PCCTL[CHPDUTY](3位)控制,可选12.5%, 25%, 37.5%, 50%, 62.5%, 75%, 87.5%七档。
  4. 关断:当输入PWM信号变为低电平时,斩波器输出立即停止,等待下一个上升沿。

3.3 配置实例与磁芯复位考量

假设我们有一个基于脉冲变压器的IGBT驱动电路,系统时钟EPWMCLK = 80MHz

  • 目标:生成一个能可靠驱动变压器且利于磁芯复位的斩波波形。
  • 设计步骤
    1. 确定载波频率:选择CHPFREQ,使PSCLK = EPWMCLK/4 = 20MHz。载波周期为50ns。这个频率需要远高于主PWM频率(例如20kHz),但又不能太高以至于脉冲变压器无法响应。
    2. 设计首脉冲:为了强驱动,设置OSHTWTH = 8,则首脉冲宽度= (1/80MHz) × 8 × 8 = 800ns。这个较宽的首脉冲能提供足够的开通能量。
    3. 设计维持脉冲:为了优化磁芯复位,我们希望维持脉冲有足够的“关断”时间。选择CHPDUTY = 2/8 (25%)。这样,每个50ns的载波周期内,高电平12.5ns,低电平37.5ns。低电平时间较长,有利于变压器磁芯在每個载波周期内都得到部分复位。
    4. 使能:最后,将PCCTL[CHPEN]置1,使能斩波器。

经验之谈:占空比选择与变压器设计维持脉冲的占空比选择需要与脉冲变压器的磁芯参数、副边整流电路以及功率器件的米勒平台时间共同考虑。较低的占空比(如25%)意味着更长的磁芯复位时间,对避免饱和更有利,但可能需要在副边使用更大的储能电容来维持栅极电压。较高的占空比(如75%)能提供更稳定的栅极电压,但对变压器的抗饱和能力要求更高。通常需要通过实验,在变压器的体积、成本和可靠性之间取得平衡。

4. 从理论到实践:典型配置流程与代码片段

理解了原理,我们来看一个完整的配置示例:为一个电压型全桥逆变器配置ePWM1和ePWM2,生成两对带死区的互补PWM,并启用斩波功能。

4.1 系统初始化与时钟设置

首先,我们需要初始化系统时钟和ePWM模块的时钟。假设CPU主频为200MHz,我们希望ePWM的时间基准TBCLK为100MHz,以便获得10ns的时间分辨率。

// 假设使用TI的C2000 F2837xD系列,代码基于TI的DriverLib风格 void InitSysClock(void) { // ... 初始化PLL,将CPU时钟设置为200MHz ... // 配置外设时钟分频器,使EPWMCLK = CPUCLK / 2 = 100MHz SysCtl_setClock(DEVICE_OSCSRC_FREQ); SysCtl_setPeripheralClockDivider(SYSCTL_PERIPH_CLOCK_EPWM, 2); }

4.2 ePWM1配置(上桥臂控制)

我们将ePWM1配置为Up-Down计数模式,生成中心对称PWM,并启用AHC死区模式。

void InitEPWM1(void) { // 1. 时基模块 (TB) 配置 EPWM_setTimeBasePeriod(EPWM1_BASE, 1000); // TBPRD = 1000, PWM频率 = 100MHz/(2*1000) = 50kHz EPWM_setPhaseShift(EPWM1_BASE, 0); EPWM_setTimeBaseCounter(EPWM1_BASE, 0); EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_UP_DOWN); EPWM_disablePhaseShiftLoad(EPWM1_BASE); EPWM_setClockPrescaler(EPWM1_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1); // TBCLK = EPWMCLK = 100MHz // 2. 比较器模块 (CC) 配置 - 使用CMPA EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, 500); // 初始占空比50% EPWM_setCounterCompareShadowLoadMode(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO); // 3. 动作限定器 (AQ) 配置 - 生成对称PWM // 在递增计数匹配CMPA时置高EPWM1A,在递减计数匹配CMPA时拉低EPWM1A EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA); EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA); // EPWM1B由死区模块生成互补信号,AQ模块对其不操作或设置为无动作 EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA); EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA); // 4. 死区模块 (DB) 配置 - 关键步骤 // 使能死区模块,并设置为主动高互补模式 (AHC) EPWM_enableDeadBand(EPWM1_BASE); EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_RED, EPWM_DB_MODE_DISABLED); // 输入源为EPWMxA EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_FED, EPWM_DB_MODE_DISABLED); EPWM_setDeadBandCounterClock(EPWM1_BASE, EPWM_DB_COUNTER_CLOCK_FULL_CYCLE); // 全周期时钟模式 // 配置为AHC模式:POLSEL=1, OUT_MODE=0 EPWM_setDeadBandControl(EPWM1_BASE, EPWM_DB_CONTROL_OUTPUT_MODE, EPWM_DB_OUTPUT_MODE_AHC); // 设置死区时间:假设需要200ns死区,TBCLK=10ns,则DBRED=DBFED=20 EPWM_setRisingEdgeDeadBandDelayInput(EPWM1_BASE, 20); // DBRED = 20 EPWM_setFallingEdgeDeadBandDelayInput(EPWM1_BASE, 20); // DBFED = 20 // 使能影子寄存器,在周期点加载新值 EPWM_setDeadBandDelayShadowLoadMode(EPWM1_BASE, EPWM_DB_RED, EPWM_DB_LOAD_ON_CNTR_ZERO); EPWM_setDeadBandDelayShadowLoadMode(EPWM1_BASE, EPWM_DB_FED, EPWM_DB_LOAD_ON_CNTR_ZERO); // 5. PWM斩波模块 (PC) 配置 - 用于脉冲变压器驱动 EPWM_enableChopper(EPWM1_BASE); EPWM_setChopperDutyCycle(EPWM1_BASE, EPWM_CHOP_DUTY_25_PERCENT); // 维持脉冲占空比25% EPWM_setChopperFreq(EPWM1_BASE, EPWM_CHOPPER_CLOCK_FREQ_4); // 载波频率 = EPWMCLK/4 = 25MHz EPWM_setOneShotPulseWidth(EPWM1_BASE, 8); // OSHTWTH=8,首脉冲宽度 = 8 * 8 * 10ns = 640ns // 6. 故障保护 (TZ) 配置示例 EPWM_enableTripZoneSignals(EPWM1_BASE, EPWM_TZ_SIGNAL_1); // 使能TZ1作为故障源 EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZA, // EPWM1A动作 EPWM_TZ_ACTION_LOW); // 故障时强制拉低 EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZB, // EPWM1B动作 EPWM_TZ_ACTION_LOW); // 故障时强制拉低 EPWM_setTripZoneCycleByCycleInterruptFlag(EPWM1_BASE); // 清除CBC标志 }

4.3 ePWM2配置与同步

对于全桥的另一臂,配置与ePWM1类似,但通常需要设置一个相位偏移(Phase Shift)来实现特定的调制算法(如正弦波调制)。

void InitEPWM2(void) { // 基本配置与EPWM1相同 InitEPWM1_Similar_Config(EPWM2_BASE); // 假设有一个通用配置函数 // 关键区别:设置相位偏移,例如偏移180度(半个PWM周期) // 对于TBPRD=1000的Up-Down模式,180度偏移对应相位寄存器值为1000 EPWM_setPhaseShift(EPWM2_BASE, 1000); EPWM_setSyncOutPulseMode(EPWM2_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO); // 配置EPWM2接收来自EPWM1的同步信号,实现精确的相位关系 EPWM_setSyncInputPulseMode(EPWM2_BASE, EPWM_SYNC_IN_PULSE_SRC_EPWM1SYNCOUT); }

4.4 动态调整占空比与死区

在运行中,我们需要根据控制算法(如PID输出)动态更新占空比。必须使用影子寄存器来保证更新同步,避免毛刺。

void UpdateDutyCycle(volatile float duty_cycle) { // duty_cycle范围 0.0 ~ 1.0 uint16_t cmp_val; // 计算比较值,注意边界条件 // 对于Up-Down对称PWM,占空比 = CMPA / TBPRD cmp_val = (uint16_t)(duty_cycle * (float)EPWM_getTimeBasePeriod(EPWM1_BASE)); // **关键:应用边界保护,避免直通** // 根据数据手册建议,若在CTR=0加载,CMPA应>=1;若在CTR=PRD加载,CMPA应<=TBPRD-1 // 这里我们在CTR=0加载,因此限制最小值 if(cmp_val < 1) cmp_val = 1; if(cmp_val > EPWM_getTimeBasePeriod(EPWM1_BASE)) cmp_val = EPWM_getTimeBasePeriod(EPWM1_BASE); // 安全地写入影子寄存器 EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, cmp_val); // 影子寄存器会在下一个CTR=0事件自动加载,更新无毛刺 }

5. 高级话题与故障排查实录

即使配置正确,在实际硬件调试中仍会遇到各种问题。下面分享几个我踩过的“坑”及其解决方案。

5.1 实现0%-100%占空比控制的陷阱

数据手册中专门有一节讨论“0-100% Duty Cycle Control”。在追求极限占空比时,需要特别注意AQ模块的行为。

  • 问题现象:当设置CMPA=0期望100%占空比,或CMPA=TBPRD期望0%占空比时,输出波形异常,或者死区插入不正确。
  • 根本原因:在边界条件下(CMPA接近0或TBPRD),AQ模块的比较事件可能无法正常触发,导致预设的置位/清除动作失效。
  • 解决方案
    1. 对于Up-Down对称PWM:这是最常用的模式。若要实现真正的0%-100%,需遵循:
      • 如果CMPA在CTR=0时加载,则确保CMPA >= 1
      • 如果CMPA在CTR=PRD时加载,则确保CMPA <= TBPRD-1。 这意味着你无法得到理论上的0%或100%,但会有一个至少1个TBCLK周期的极窄脉冲。在大多数系统中,这个脉冲会被栅极驱动器或功率器件本身的响应时间所忽略,实际效果等同于0%或100%。
    2. 对于Up-Count非对称PWM:若要实现0%-100%,必须将CMPA加载事件配置在CTR=PRD,并使用CTR=0事件置位PWM,CMPA匹配事件清除PWM。此时,CMPA的调制范围应为0TBPRD+1
    3. 启用死区时:情况更复杂。当CMPA值太接近0或TBPRD,以至于(CMPA < Deadband)(CMPA > TBPRD - Deadband)时,AQ动作会失效。软件必须介入:在检测到CMPA处于这些边界区域时,动态修改AQCTL寄存器的设置,强制将CAU和CAD事件的动作都设为SET或CLEAR,以产生固定的高电平或低电平输出。这个修改必须与PWM载波周期同步,并确保影子模式已启用。

5.2 死区模块无输出或输出反相

  • 问题现象:配置了死区,但EPWMxB没有信号,或者EPWMxA和EPWMxB同相,没有互补关系。
  • 排查步骤
    1. 检查输入源:确认DBCTL[IN_MODE]设置正确。在经典AHC/ALC模式下,通常配置为“EPWMxA作为上升沿和下降沿延迟的输入源”。如果配置错误,死区模块可能接收不到有效输入。
    2. 检查输出模式:反复核对DBCTL[POLSEL]DBCTL[OUT_MODE]。一个笔误就可能导致模式错误。例如,想要AHC却配成了ALC,输出极性就会完全反相。
    3. 检查旁路开关:确认DBCTL[OUT_MODE]中的S3, S2, S1, S0位是否按照目标模式正确设置。可以对照数据手册中的真值表逐位核对。
    4. 示波器测量:用示波器同时观察AQ模块输出的原始EPWMxA信号(可在死区模块前通过GPIO映射出来)和死区模块后的最终EPWMxA、EPWMxB信号。确认原始信号正确,且死区模块确实产生了延迟和互补。

5.3 PWM斩波导致栅极驱动异常

  • 问题现象:启用斩波后,功率开关管发热严重,或变压器有异响,甚至炸管。
  • 排查步骤
    1. 确认必要性:首先问自己,你的栅极驱动电路真的需要斩波吗?如果是直接驱动或使用带隔离电源的驱动器,绝对不要启用斩波!斩波产生的高频脉冲会令栅极电容频繁充放电,导致巨大的开关损耗和发热,甚至引发振荡。
    2. 检查载波频率CHPFREQ设置是否合适?频率过低(如接近主PWM频率)则失去斩波意义;频率过高可能超出脉冲变压器的带宽,导致信号畸变,驱动能力不足。通常载波频率在主PWM频率的10-100倍之间选择。
    3. 测量维持脉冲:用高带宽示波器观察栅极波形。维持脉冲的幅度是否足够?占空比是否稳定?如果占空比过低或脉冲幅度不足,可能导致功率管在导通期间因栅极电荷泄露而退出饱和区,进入线性区,从而产生巨大损耗。
    4. 调整首脉冲宽度:如果开关管开通缓慢,可以尝试增加OSHTWTH,延长首脉冲宽度,提供更强的开通驱动力。
    5. 检查磁芯复位:计算维持脉冲的关断时间((1-占空比) × 载波周期)。这个时间必须大于脉冲变压器磁芯的复位时间。如果关断��间不足,磁芯会累积偏磁直至饱和,表现为变压器初级电流急剧上升、发热、驱动波形塌陷。此时应降低维持脉冲占空比或提高载波频率。

5.4 故障保护(TZ)不动作

  • 问题现象:短路发生时,PWM输出没有按照配置被拉低或置高阻,导致故障扩大。
  • 排查步骤
    1. 信号路径:确认故障信号(如来自比较器的OC信号)是否正确映射到了对应的TZn输入引脚(通过GPIO MUX和输入X-BAR配置)。
    2. ePWM模块使能:在TZSEL寄存器中,是否已使能该ePWM模块响应特定的TZn信号或DCAEVTx/DCBEVTx事件?
    3. 动作配置:检查TZCTL寄存器,确认针对TZATZB的动作是否配置为“强制高”、“强制低”或“高阻”,而不是“无变化”。
    4. 同步与滤波:TZn信号是异步的,但确保其低电平脉冲宽度大于3*TBCLK,以便被ePWM模块可靠锁存。如果信号有毛刺,考虑在GPIO MUX中启用数字滤波。
    5. 中断与标志:虽然故障动作是硬件即时执行的,但检查TZFLG标志位和中断是否产生,有助于在软件层面确认故障触发的状态,并进行故障记录或系统复位。

调试ePWM是一个需要耐心和细致观察的过程。始终遵循“先验证核心功能,再添加高级特性”的原则。先让AQ模块产生正确的原始PWM,再叠加死区,然后考虑斩波,最后配置故障保护。每一步都用示波器验证波形,与理论分析对照,才能构建出稳定可靠的功率控制系统。