1. 项目概述与ePWM核心价值
在电力电子和电机控制领域,脉冲宽度调制(PWM)技术是连接数字控制器与物理功率世界的桥梁。我们常说的“占空比控制”背后,远不止一个简单的定时器翻转输出那么简单。尤其是在处理高功率、高频率、高可靠性的应用时,比如伺服驱动器、车载充电机(OBC)或光伏逆变器,一个功能强大且灵活的PWM外设模块至关重要。德州仪器(TI)在其C2000系列微控制器中集成的增强型PWM(ePWM)模块,正是为此类工业级应用而生。它不仅仅是一个“定时器+比较器”,而是一个高度模块化、可编程的波形生成引擎。
今天,我们不谈基础的PWM原理,而是深入ePWM模块中三个常被数据手册一笔带过,却在实战中决定系统成败的高级子模块:动作限定器(Action-Qualifier, AQ)的事件优先级机制、死区生成(Dead-Band, DB)模块的灵活配置,以及PWM斩波(PWM-Chopper, PC)模块的特殊应用。理解它们,你就能从“会配置PWM”进阶到“能设计PWM”,从容应对互补驱动、脉冲变压器隔离驱动等复杂场景。无论你是正在调试三相逆变器的新手,还是优化数字电源环路的老手,这些细节都将直接影响你的波形质量、系统效率和可靠性。
2. 动作限定器(AQ)子模块:事件优先级与波形合成的艺术
动作限定器是ePWM的“大脑”,它根据时间基计数器(TBCNT)与比较寄存器(CMPA/CMPB)以及周期值(TBPRD)的匹配事件,决定输出引脚(EPWMxA/B)的置高(SET)、拉低(CLEAR)或翻转(TOGGLE)。听起来简单,但当多个事件在同一时刻(或相邻的TBCLK周期内)发生时,硬件以何种顺序执行这些“动作”?这就是事件优先级机制要解决的问题。
2.1 为什么需要事件优先级?
设想一个场景:在上下计数模式下,你希望计数器到达CMPA时拉高输出,到达周期值(TBPRD)时拉低输出。如果CMPA的值恰好等于TBPRD,那么“匹配CMPA”和“匹配TBPRD”这两个事件几乎同时发生。如果没有明确的优先级,输出行为将是未定义的,可能导致一个极窄的毛刺脉冲,甚至逻辑错误。事件优先级机制就是为了消除这种歧义,确保在任何配置下,输出行为都是确定且符合预期的。
2.2 三种计数模式下的优先级详解
ePWM支持三种计数模式:递增计数(Up-Count)、递减计数(Down-Count)和递增-递减计数(Up-Down-Count)。每种模式下的事件优先级顺序都不同,这是由硬件逻辑决定的。
2.2.1 递增-递减计数模式(Up-Down-Count)这是生成对称PWM最常用的模式。其优先级规则体现了“时间先后”和“方向敏感”的原则。
- 最高优先级(1):软件强制事件。这是通过API手动触发的事件,拥有绝对优先权,用于即时控制输出状态。
- 优先级(2 & 3):与当前计数方向同向的CMPB/CMPA匹配事件。例如,在递增阶段(TBCNT从0到TBPRD),
CBU(CMPB Up-match)的优先级高于CAU(CMPA Up-match)。这允许你用CMPB来定义更高优先级的边沿。 - 优先级(4):计数器零值(ZERO)或周期值(TBPRD)匹配事件。在递增阶段是ZERO事件,在递减阶段是TBPRD事件。
- 优先级(5 & 6):与当前计数方向反向的CMPB/CMPA匹配事件。例如,在递增阶段,
CBD事件(本应在递减阶段发生)的优先级最低。
关键设计启示:这种设计保证了波形的对称性。当你设置CAU=SET,CAD=CLEAR时,无论CMPA值如何变化,上升沿和下降沿总是关于波形中心对称。优先级确保了即使在边界条件下(如CMPA=0或CMPA=TBPRD),也不会产生非预期的脉冲。
2.2.2 递增计数模式(Up-Count)此模式用于生成非对称PWM(左对齐或右对齐)。其优先级顺序更简单:
- 软件强制事件
- 周期匹配事件(PRD)
- CMPB递增匹配事件(CBU)
- CMPA递增匹配事件(CAU)
- 零值匹配事件(ZERO)
注意:递减事件(CAD/CBD)在此模式下永远不会被触发。这种优先级顺序使得你可以方便地实现“在周期点清零,在比较点置高”的经典非对称PWM生成逻辑。
2.2.3 递减计数模式(Down-Count)与递增模式镜像:
- 软件强制事件
- 零值匹配事件(ZERO)
- CMPB递减匹配事件(CBD)
- CMPA递减匹配事件(CAD)
- 周期匹配事件(PRD)
2.3 比较值大于周期值的特殊情况处理
这是一个容易踩坑的细节。当CMPA或CMPB的值被设置为大于TBPRD时,硬件的行为并非报错,而是有明确的规则:
- 递增计数模式:如果CMPx > TBPRD,则递增匹配事件(CAU/CBU)永远不会发生。因为计数器永远达不到这个值。
- 递减计数模式:如果CMPx >= TBPRD,则在计数器等于TBPRD(周期点)时触发事件。这相当于将比较事件“映射”到了周期事件上。
- 递增-递减计数模式:如果CMPx >= TBPRD,则在计数器等于TBPRD时触发事件(无论是CAU/CBU还是CAD/CBD)。
实战经验:这个特性可以被巧妙利用。例如,在某些保护逻辑中,你可以通过将CMP值设置为一个远超正常工作范围的值(如0xFFFF),来“禁用”某个比较事件,而不需要频繁地修改动作限定器的配置。但在计算占空比时,必须确保CMP值在有效范围内(0 ≤ CMPx ≤ TBPRD),否则会导致占空比计算失效。
2.4 影子寄存器与波形更新时机
数据手册中的波形图通常是基于静态CMP值绘制的。但在实际运行系统中,CMPA/CMPB通常由其影子寄存器在特定时刻(如CTR=ZERO或CTR=PRD)更新。这里存在一个关键延迟:新值加载后,基于新值的动作可能延迟一个PWM周期才生效,而基于旧值的动作可能多持续一个周期。
避坑指南:
- 对称PWM(Up-Down-Count):
- 如果在CTR=ZERO时加载CMP,请确保CMP值≥ 1。
- 如果在CTR=PRD时加载CMP,请确保CMP值≤ TBPRD - 1。
- 这样做的目的是保证每个PWM周期内至少有一个TBCLK周期宽度的脉冲。这个极窄的脉冲在实际的功率系统中(由于开关器件的响应时间)往往会被忽略,但它避免了因更新延迟导致的“丢脉冲”或“全高/全低”状态。
- 非对称PWM(Up-Count):若要实现0%-100%的占空比调制,一个可靠的配置是:在CTR=PRD时加载CMP,设置ZERO事件为SET,CAU事件为CLEAR。然后,将CMP值从0调制到TBPRD+1。当CMP=TBPRD+1时,由于CAU事件不发生,输出在整个周期保持高电平,实现100%占空比。
3. 死区生成(DB)子模块:功率开关的“安全卫士”
在H桥、三相全桥等拓扑中,同一桥臂的上管和下管绝不能同时导通,否则会导致电源直通短路,瞬间烧毁器件。死区时间就是在控制上管关断和下管导通(或反之)之间插入的一段两个管子都关断的延时。ePWM的死区模块自动化了这个过程。
3.1 死区模块的工作原理与配置逻辑
死区模块的核心是两路独立的可编程延迟线:一路用于上升沿延迟(RED),一路用于下降沿延迟(FED)。它接收来自AQ模块的EPWMxA_In和EPWMxB_In信号,经过延迟和极性控制,输出最终的EPWMxA_Out和EPWMxB_Out。
其配置围绕三个控制维度展开,通过DBCTL寄存器设置:
- 输入源选择(IN_MODE):决定哪路信号作为延迟线的输入。最常见的是模式0:EPWMxA_In同时作为RED和FED的输入��。这样可以从一个AQ输出生成一对带死区的互补信号。更灵活的模式允许将EPWMxA_In和EPWMxB_In分别分配给RED和FED,用于处理非标准或更复杂的波形需求。
- 输出模式控制(OUT_MODE):决定输出是否包含延迟。可以旁路RED、旁路FED、同时应用两者,或两者都旁路(直通)。
- 极性选择(POLSEL):决定对延迟后的信号是否进行取反。这是生成不同有效电平互补信号的关键。
3.2 经典死区工作模式解析
基于IN_MODE=0(EPWMxA_In作为唯一输入)的经典模式有五种,它们覆盖了绝大多数栅极驱动器的需求:
| 模式 | 描述 | POLSEL | OUT_MODE | 典型应用场景 |
|---|---|---|---|---|
| AHC (Active High Complementary) | 高有效互补 | 1, 0 | 1, 1 | 驱动需要高电平导通,且互补信号本身也应为高有效的开关管。输出EPWMxA_Out是原始信号经RED和FED后的结果,EPWMxB_Out是其反相。 |
| ALC (Active Low Complementary) | 低有效互补 | 0, 1 | 1, 1 | 驱动需要低电平导通(如某些IGBT模块),且互补信号为低有效。输出关系与AHC类似,但极性相反。 |
| AH (Active High) | 高有效独立 | 0, 0 | 1, 1 | 生成两路同相、但边沿错开(带死区)的高有效信号。常用于驱动需要独立信号且高电平导通的两个开关管。 |
| AL (Active Low) | 低有效独立 | 1, 1 | 1, 1 | 生成两路同相、但边沿错开(带死区)的低有效信号。 |
| Bypass | 直通模式 | x, x | 0, 0 | 完全旁路死区模块,AQ的输出直接送到引脚。用于不需要死区或由软件生成死区的场景。 |
波形生成要点:要得到正确的死区波形,AQ模块的配置必须与DB模块的期望输入匹配。例如,要生成AHC波形,AQ应配置为生成一个占空比为D的EPWMxA信号(假设高有效),而EPWMxB在AQ中可以不配置或配置为无关状态。死区模块会以这个EPWMxA_In为基准,自动生成其互补反相并带有死区的两路输出。
3.3 死区时间计算与精度
死区时间由DBRED和DBFED寄存器直接设置,计算公式非常简单:死区时间 = 寄存器值 × TBCLK周期
例如,系统时钟SYSCLKOUT为100MHz,TBCLK不分频(即TBCLK周期为10ns)。若需要500ns的上升沿延迟,则设置DBRED = 500ns / 10ns = 50。
注意事项:
- 分辨率:死区寄存器的位宽(通常为10位或更多)决定了最小可设置步进(一个TBCLK周期)。在高开关频率下,TBCLK周期很短,死区时间分辨率很高。
- 最大值:寄存器最大值限制了最大死区时间。例如10位寄存器最大值为1023,若TBCLK=10ns,则最大死区约10.23μs。对于极低频率的应用可能不够,此时可能需要降低TBCLK频率(增加预分频)。
- 不对称死区:RED和FED可以设置为不同的值,实现不对称死区。这在某些特定开关器件(如MOSFET和IGBT的关断时间不同)的驱动中可能有用。
- 测量与验证:死区时间必须用示波器在真实硬件上测量验证,测量点应在功率器件的栅极驱动引脚上。PCB布局、驱动器传播延迟都会影响最终的死区效果。
4. PWM斩波(PC)子模块:驱动脉冲变压器的利器
PWM斩波模块是一个相对小众但功能独特的部分。它的作用是用一个高频载波信号(Chopping Carrier)去调制来自DB模块(或AQ模块)的基波PWM信号。其主要应用场景是基于脉冲变压器的隔离栅极驱动。
4.1 为什么需要斩波?
在高压、高隔离要求的场合,常使用脉冲变压器来传递栅极驱动信号。变压器无法传递直流或低频分量,它需要交变的信号来维持磁通变化。如果一个PWM导通脉宽很长(例如几毫秒),直流分量会使变压器磁芯饱和,导致驱动失效。斩波模块将长导通脉宽“切碎”成一系列高频脉冲,第一个脉冲(One-Shot Pulse)提供足够的能量以快速打开开关管,后续的维持脉冲(Sustaining Pulses)则提供足够的伏秒积来保持开关管导通,同时避免变压器饱和。
4.2 斩波模块的工作机制
斩波模块的核心是一个由系统时钟(SYSCLKOUT)分频得到的高频载波(PSCLK)。其频率由PCCTL[CHPFREQ]控制,分频系数可选。当输入信号(EPWMxA_In)为高时,斩波模块启动:
- 首脉冲(One-Shot):产生一个宽度可编程的独立脉冲。其宽度计算公式为:
T_first = T_sysclk * 8 * OSHTWTH。OSHTWTH是4位控制字,范围1-16。这个脉冲通常较宽,能量大,用于确保开关管可靠开启。 - 维持脉冲(Sustaining Pulses):首脉冲结束后,以载波频率PSCLK持续产生脉冲序列,直到输入信号变低。维持脉冲的占空比由
PCCTL[CHPDUTY]控制,可在12.5%到87.5%之间以12.5%的步进选择。调整占空比可以优化变压器的磁化状态,避免饱和。
4.3 配置要点与应用考量
- 载波频率选择(CHPFREQ):需远高于基波PWM频率,通常为几百kHz到几MHz。频率太高会增加开关损耗,太低则可能无法有效维持变压器磁通。需要根据脉冲变压器的磁芯材料和设计参数来确定。
- 首脉冲宽度(OSHTWTH):需要足够宽,以提供栅极电荷所需的能量。这取决于开关管的栅极总电荷(Qg)和驱动电路的电流能力。可以通过计算或实验确定。
- 维持脉冲占空比(CHPDUTY):50%占空比通常能提供对称的伏秒积,但有时为了补偿变压器或电路的非线性,需要微调。例如,选择稍高的占空比(如62.5%)来补偿传输过程中的损耗。
- 使能与旁路:通过
PCCTL[CHPEN]位使能。对于非变压器驱动应用,务必禁用(旁路)此模块,否则PWM波形会被意外调制。 - 信号路径:斩波模块通常只应用于EPWMxA通道。EPWMxB通道可以选择直通或也被斩波,具体取决于硬件设计。
一个典型的配置流程:假设系统时钟为100MHz,需要首脉冲宽度200ns,维持脉冲载波频率2MHz,占空比50%。
- 计算
OSHTWTH:T_sysclk = 10ns。OSHTWTH = 200ns / (8 * 10ns) = 2.5,取整为3(寄存器值2,因通常从0开始计数或公式有偏移,需查具体手册)。实际宽度为10ns * 8 * 3 = 240ns。 - 计算
CHPFREQ分频系数:目标PSCLK周期 = 1/2MHz = 500ns。SYSCLKOUT周期为10ns,所需分频比 = 500ns / 10ns = 50。查找寄存器中最近的可选分频值。 - 设置
CHPDUTY为50%对应的编码(通常为4/8,即编码100b或类似)。
5. 实战配置:从寄存器到波形——一个完整的互补PWM生成案例
让我们结合AQ、DB模块,配置一个用于H桥驱动的、带死区的互补对称PWM。目标:PWM频率20kHz(周期50μs),死区时间1μs,采用高有效互补模式(AHC)。
步骤1:系统与时间基(TB)配置假设系统时钟SYSCLKOUT = 100MHz。我们选择TBCLK不分频,即TBCLK = 100MHz (周期10ns)。 对于对称PWM(Up-Down-Count),PWM周期公式为:PWM_Period = 2 * TBPRD * T_TBCLK。 因此,TBPRD = (PWM_Period / 2) / T_TBCLK = (50μs / 2) / 10ns = 2500。 设置TBCTL.CTRMODE = TB_UPDOWN(上下计数模式),TBPRD = 2500。
步骤2:动作限定器(AQ)配置我们希望生成一个占空比可调的基波。设置:
AQCTLA.CAU = AQ_SET(递增匹��CMPA时置高)AQCTLA.CAD = AQ_CLEAR(递减匹配CMPA时拉低)AQCTLB暂不配置(因为死区模块将以EPWMxA_In为源生成互补信号)。- 设置CMPA的初始值,例如1250,对应50%占空比(因为对称模式下,高电平时间 = 2 * (TBPRD - CMPA) * T_TBCLK?这里需要仔细计算:在
CAU=SET, CAD=CLEAR配置下,输出在CTR从0递增到CMPA期间为低,从CMPA到TBPRD为高,然后递减时从TBPRD到CMPA为高,从CMPA到0为低。因此高电平总时间 = 2*(TBPRD - CMPA)*T_TBCLK。占空比 = 高电平时间 / 总周期 = (TBPRD - CMPA) / TBPRD。所以对于50%占空比,CMPA = TBPRD / 2 = 1250)。 - 配置影子寄存器加载模式:
CMPCTL.LOADAMODE = CC_CTR_ZERO(在CTR=0时从影子寄存器加载CMPA)。
步骤3:死区(DB)配置目标:1μs死区,AHC模式。
- 计算死区寄存器值:
DBRED = DBFED = 1μs / 10ns = 100。 - 设置
DBRED = 100,DBFED = 100。 - 配置
DBCTL:IN_MODE = 0(EPWMxA作为RED和FED的源)POLSEL = 1, 0(AHC模式:对RED输出取反,FED输出不取反?这里需要对照手册表格。对于AHC,通常POLSEL设置为10b,表示EPWMxB输出取反以互补)OUT_MODE = 1, 1(使能RED和FED延迟)
步骤4:PWM斩波(PC)配置(本例不需要,故禁用)
- 设置
PCCTL.CHPEN = 0,旁路斩波模块。
步骤5:代码实现要点(以C语言为例)
// 假设 ePWM1 基地址为 EPWM1_BASE #include "driverlib.h" void configureEPWM1(void) { // 1. 时间基配置 EPWM_setTimeBasePeriod(EPWM1_BASE, 2500); // TBPRD = 2500 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_CLOCK_DIVIDER_1); // 2. 比较器与AQ配置 EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, 1250); // 初始50%占空比 EPWM_setCounterCompareShadowLoadMode(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO); 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); // EPWMxB 输出由死区模块生成,AQ可设为无动作 EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO); // ... 其他事件也设为 NO_CHANGE // 3. 死区配置 EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_RED, EPWM_DB_MODE_ENABLE_FALLING_DELAY); // 输入模式:EPWMxA作为源 EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_FED, EPWM_DB_MODE_ENABLE_RISING_DELAY); EPWM_setDeadBandDelayPolarity(EPWM1_BASE, EPWM_DB_RED, EPWM_DB_POLARITY_ACTIVE_HIGH); // 根据AHC模式设置极性 EPWM_setDeadBandDelayPolarity(EPWM1_BASE, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW_COMP); EPWM_setRisingEdgeDeadBandDelayCount(EPWM1_BASE, 100); // DBRED = 100 EPWM_setFallingEdgeDeadBandDelayCount(EPWM1_BASE, 100); // DBFED = 100 EPWM_setDeadBandControlSignals(EPWM1_BASE, EPWM_DB_CONTROL_SIGNAL_MODE, EPWM_DB_CONTROL_SIGNAL_MODE_NORMAL); // 使能输出 // 4. 禁用斩波 EPWM_disablePWMChopper(EPWM1_BASE); // 5. 启动计数器 EPWM_startCounter(EPWM1_BASE); }调试提示:配置完成后,先用示波器观察EPWM1A(AQ直接输出)的波形,确保占空比正确。然后再观察EPWM1A和EPWM1B经过死区模块后的最终输出,验证死区时间是否准确,互补关系是否正确。
6. 常见问题排查与高级技巧
在实际工程中,ePWM的配置问题往往表现为波形异常、无输出或驱动故障。以下是一些典型问题的排查思路和高级使用技巧。
6.1 波形异常问题排查清单
无输出信号:
- 检查GPIO复用:确认EPWMx引脚已正确配置为PWM功能,而非普通GPIO。
- 检查时钟与计数器:确认ePWM模块时钟已使能(PCLKCRx寄存器),TBCLK配置正确,计数器(TBCNT)是否在运行。尝试在调试器中读取TBCNT寄存器,看其是否在循环计数。
- 检查输出使能:某些芯片的ePWM输出可能需要额外的全局使能位(如
HRPCTL[HRPE]对于高分辨率PWM)。
占空比不正确或不可调:
- 影子寄存器未加载:这是最常见的原因。确保
CMPCTL.LOADxMODE已正确配置(如CC_CTR_ZERO),并且计数器确实经过了ZERO或PRD点。在调试时,可以在影子寄存器加载事件(CTR=ZERO)的ISR中设置断点,检查CMPA/CMPB影子寄存器的值是否被更新。 - 比较值超出范围:确认CMPA/CMPB值在0到TBPRD之间(对称模式需注意边界条件)。如果CMP值大于TBPRD,事件可能不会按预期发生。
- 动作配置错误:仔细核对
AQCTLA和AQCTLB寄存器的每一位。常见的错误是把CAU和CAD的动作设反了,或者SET/CLEAR搞混。
- 影子寄存器未加载:这是最常见的原因。确保
死区时间不生效或错误:
- 输入源模式(IN_MODE)错误:如果死区模块的输入源配置错误,它可能在对一个错误的信号进行延迟。确保
DBCTL.IN_MODE与你的AQ输出意图一致。 - 极性(POLSEL)配置错误:AHC和ALC模式容易混淆。如果发现EPWMxA和EPWMxB不是互补,而是同相或同时高/低,首先检查极性配置。最好的方法是结合期望的真值表和寄存器描述逐位核对。
- 输出模式(OUT_MODE)未使能:确保
OUT_MODE位使能了RED和/或FED路径。如果设为00,则死区模块被旁路。 - 时间单位弄错:确认死区时间计算中使用的
TBCLK周期是正确的。如果TBCLK有分频,计算时要用分频后的周期。
- 输入源模式(IN_MODE)错误:如果死区模块的输入源配置错误,它可能在对一个错误的信号进行延迟。确保
开关频率附近出现毛刺或抖动:
- 影子寄存器加载时机冲突:如果在PWM周期中间(非ZERO/PRD点)更新了CMP或TBPRD的影子寄存器,并且加载事件发生在当前周期,可能导致比较匹配点出现一个时钟周期的偏差。确保在稳定的时刻(如CTR=ZERO)进行加载。
- 中断服务程序(ISR)延迟:如果占空比是在PWM周期中断(如CTR=PRD中断)中计算并更新的,ISR的执行时间必须远小于PWM周期。否则,当ISR执行过长,可能错过下一个周期的加载点,导致更新延迟一个周期。优化ISR代码,或考虑使用DMA自动更新CMP寄存器。
6.2 高级技巧与优化
利用事件触发(ET)模块实现精细控制:ePWM的事件触发模块可以在特定事件(如CTR=ZERO, CTR=PRD, CTR=CMPA)发生时产生中断或启动ADC转换。这对于实现电流环采样(在PWM周期中点或谷底采样)至关重要。合理配置ET模块,可以实现与PWM波形严格同步的采样控制。
使用Trip-Zone(TZ)模块进行硬件保护:不要仅仅依赖软件进行过流、过压保护。将故障信号(如比较器输出)连接到TZ引脚,并配置ePWM在故障发生时立即将输出强制为高阻态、低电平或高电平(通过
TZCTL寄存器)。这种硬件级的保护响应时间在纳秒级,远比任何软件中断都要快,是系统安全的最后防线。配置为循环跳变(CBC)模式可用于逐周期限流,配置为单次跳变(OSHT)模式用于严重故障的锁存保护。相位同步实现多模块协作:在多个ePWM模块需要协同工作(如三相逆变器)时,使用
EPWMxSYNCI和EPWMxSYNCO信号进行主从同步。确保所有模块的计数器从相同的相位开始,可以避免相间不平衡和次谐波问题。通常将一个模块设为主机(Master),其他设为从机(Slave),主机在CTR=ZERO时发出同步脉冲。高分辨率PWM(HRPWM)的运用:对于需要极高精度占空比控制的应用(如LLC谐振变换器的频率控制),C2000的HRPWM扩展功能可以将占空比或相位分辨率提高到皮秒级。它通过微边沿定位器(MEP)在传统的TBCLK边沿之间进行插值。启用HRPWM需要对
HRPCTL和HRPCE等寄存器进行���外配置,并注意其与普通ePWM功能的兼容性。动态改变PWM频率与死区:在某些应用如变频电机驱动中,PWM频率可能需要随速度变化。改变
TBPRD会立即影响频率,但要注意在上下计数模式下,TBPRD改变后,当前周期可能不完整。更安全的方法是在CTR=ZERO时从影子寄存器加载新的TBPRD。同样,死区时间也可能需要根据母线电压或温度动态调整以优化效率,只需在安全时刻(如PWM周期开始)更新DBRED和DBFED寄存器即可。