深入解析eHRPWM动作限定器:从事件驱动到PWM波形精准生成
2026/7/21 10:58:00 网站建设 项目流程

1. 从事件到波形:eHRPWM动作限定器(AQ)模块的核心逻辑

在电力电子和电机驱动的世界里,PWM(脉冲宽度调制)信号就像是给功率开关下达的精确指令。我们通常知道,改变PWM的占空比就能调节输出电压或电流,但你是否想过,这个“占空比”在芯片内部究竟是如何被精确“雕刻”出来的?这背后,一个名为“动作限定器”(Action-Qualifier, AQ)的模块扮演着至关重要的角色。它不是简单地比较和输出,而是一个基于事件的、高度可编程的“波形雕刻师”。

想象一下,你有一个不断循环计数的时钟(时间基准计数器TBCNT),以及几个你预设好的“闹钟”(比较寄存器CMPA、CMPB,以及周期值TBPRD和零值)。动作限定器的工作,就是监听这些“闹钟”响起的时刻(即事件:CTR=CMPA, CTR=CMPB, CTR=PRD, CTR=0),并在响铃的瞬间,对输出引脚(EPWMxA和EPWMxB)执行你预先设定好的动作:拉高、拉低,或者翻转。这种“事件驱动”的逻辑,使得PWM波形的每一个边沿都变得可编程、可预测。

AQ模块的技术价值,远不止生成一个简单的方波。它允许你为计数器的递增和递减阶段分别设置不同的动作,这是生成中心对称(Up-Down模式)PWM波形的关键。它还能独立控制两个输出通道,轻松实现互补输出、带死区的驱动信号,甚至是复杂的位置脉冲。无论是伺服驱动器里需要精确控制转矩和位置的PWM,还是数字电源中需要调节电压的PWM,亦或是逆变器中需要生成三相正弦波的马鞍波,都离不开AQ模块对底层波形边沿的精细控制。理解AQ,就是握住了打开高效、精准功率控制大门的钥匙。

2. AQ模块架构与事件驱动模型详解

2.1 模块定位与输入输出关系

在eHRPWM的完整信号链中,AQ模块处于承上启下的核心位置。它的上游是时间基准(TB)模块和计数器比较(CC)模块。TB模块产生核心的时基计数器TBCNT及其计数方向(CTR_dir),而CC模块则负责维护CMPA和CMPB这两个关键的比较值。AQ模块的输入,正是这四个核心事件:

  • CTR = PRD:计数器达到周期值。
  • CTR = 0:计数器归零。
  • CTR = CMPA:计数器等于比较值A。
  • CTR = CMPB:计数器等于比较值B。

此外,还有一个特殊的软件强制事件,它不由计数器触发,而是由程序直接写入特定寄存器来产生,拥有最高的响应优先级,用于紧急控制或特殊同步。

AQ模块的输出动作直接作用于EPWMxA和EPWMxB这两个物理输出引脚(在经过后续的死区DB、斩波PC等模块之前)。它可以执行四种基本操作:

  1. 置高(Set High):将输出引脚驱动为高电平。
  2. 拉低(Clear Low):将输出引脚驱动为低电平。
  3. 翻转(Toggle):将输出引脚的电平状态取反。
  4. 无操作(Do Nothing):保持引脚当前电平不变。需要注意的是,“无操作”仅针对引脚动作,该事件仍然可以触发中断,供CPU处理。

你可以把AQ模块想象成一个高度可编程的交叉开关矩阵。矩阵的输入端是上述几种事件,输出端是对两个引脚的操作。通过配置寄存器,你可以自由地将任意输入事件“连线”到任意输出动作上。例如,你可以规定:“当计数器在递增过程中等于CMPA时(CAU事件),将EPWMxA置高;当计数器在递减过程中等于CMPA时(CAD事件),将EPWMxA拉低。” 这就构成了一个边沿对齐的PWM脉冲。

2.2 核心控制寄存器解析

对AQ模块的编程,完全通过对一组寄存器的读写来完成。这些寄存器直接映射到内存地址,没有影子寄存器(Shadow Register),意味着写入立即生效,这要求操作时需格外注意时序。

  • AQCTLA (Action-Qualifier Control Register For Output A):控制EPWMxA输出行为的核心寄存器。它是一个16位寄存器,每2位组成一个字段,分别对应一个特定事件发生时对EPWMxA执行的动作。
  • AQCTLB (Action-Qualifier Control Register For Output B):控制EPWMxB输出行为的核心寄存器。其位域定义与AQCTLA完全一致,实现了对两个输出的独立控制。

以AQCTLA为例,其关键位域通常如下分配(具体位偏移需查阅芯片数据手册):

  • AQCTLA[1:0] (ZRO):配置当CTR=0事件发生时对EPWMxA的动作。
  • AQCTLA[3:2] (PRD):配置当CTR=PRD事件发生时对EPWMxA的动作。
  • AQCTLA[5:4] (CAU):配置当计数器递增且CTR=CMPA事件发生时对EPWMxA的动作。
  • AQCTLA[7:6] (CAD):配置当计数器递减且CTR=CMPA事件发生时对EPWMxA的动作。
  • AQCTLA[9:8] (CBU):配置当计数器递增且CTR=CMPB事件发生时对EPWMxA的动作。
  • AQCTLA[11:10] (CBD):配置当计数器递减且CTR=CMPB事件发生时对EPWMxA的动作。

每个2位字段的编码含义通常是:00-无操作,01-置高,10-拉低,11-翻转。AQCTLB的位域定义与之对称,用于控制EPWMxB。

  • AQSFRC (Action-Qualifier Software Force Register):软件强制寄存器。通过向该寄存器的特定位写1,可以立即(异步于TBCLK)产生一个软件强制事件,并指定其对EPWMxA/B的强制动作(置高、拉低、翻转)。这在需要立即改变输出状态(如故障保护响应)时非常有用。
  • AQCSFRC (Action-Qualifier Continuous Software Force Control Register):连续软件强制控制寄存器。它可以配置一种“一次性”或“连续”的软件强制模式。在连续模式下,写入的强制动作会持续生效,直到被软件清除。这常用于测试或强制输出特定状态。

注意:软件强制事件拥有最高优先级,会覆盖任何由计数器事件触发的动作。在使用后,尤其是连续强制模式,务必记得及时清除强制状态,否则正常的PWM生成会被阻断。

2.3 事件优先级机制与冲突处理

一个关键问题是:如果多个事件在同一时刻(同一个TBCLK周期)发生,AQ模块听谁的?例如,在Up-Down计数模式下,当计数器从TBPRD-1计数到TBPRD时,会同时发生CTR=PRD事件和计数方向从递增变为递减的变化。如果CTR=PRD配置了动作,同时CAD(递减时等于CMPA)事件也在此刻满足(假设CMPA等于TBPRD),就会产生冲突。

AQ模块内置了一套固定的硬件优先级逻辑来解决此问题。其核心原则是:“软件强制事件优先级最高,其他事件的优先级与时间顺序和计数方向相关”

对于最常用的Up-Down计数模式,优先级顺序如下(1为最高):

  1. 软件强制事件
  2. CTR = CMPB (递增时,CBU)
  3. CTR = CMPA (递增时,CAU)
  4. CTR = 0
  5. CTR = CMPB (递减时,CBD)
  6. CTR = CMPA (递减时,CAD)
  7. CTR = PRD

这个优先级列表揭示了设计上的一个精妙之处:在计数器到达峰值(TBPRD)时,CTR=PRD事件的优先级最低。这确保了在对称PWM生成中,基于比较值(CMPA/CMPB)的动作能够优先执行,从而保证波形的对称性。当你需要基于周期事件做某些操作(如触发ADC采样)时,通常应通过事件触发(ET)模块产生中断,而不是在AQ模块用CTR=PRD事件直接改变输出电平。

对于递增计数模式,事件种类减少,优先级为:软件强制 >CTR=PRD>CBU>CAU>CTR=0。 对于递减计数模式,优先级为:软件强制 >CTR=0>CBD>CAD>CTR=PRD

理解优先级对于配置复杂波形至关重要。例如,如果你希望在一个PWM周期内生成一个非常窄的脉冲,这个脉冲的边沿由CMPA和CMPB定义,但你又希望在周期结束时(CTR=PRD)确保输出为低。如果CTR=PRD的优先级高于CMPB,那么它可能会覆盖掉由CMPB设定的动作,导致脉冲形状异常。根据上述优先级,在Up-Down模式下CTR=PRD优先级最低,因此不会覆盖比较事件,这是安全的。

3. 核心波形生成原理与配置实战

理解了架构和寄存器,我们进入实战环节。AQ模块的强大之处在于其灵活性,可以通过不同的配置组合,生成满足各种应用需求的PWM波形。下面我们通过几个最典型、最常用的配置案例,来深入理解其配置逻辑。

3.1 案例一:递增计数,非对称PWM(边沿对齐)

这是最简单也是最常见的PWM模式,常用于开关电源的Buck、Boost电路或简单的电机调速。

波形特征:PWM脉冲的一个边沿(通常是上升沿)固定在周期开始(CTR=0),另一个边沿(下降沿)由比较值CMPA(或CMPB)控制。占空比 = CMPA / (TBPRD + 1)。

配置思路

  1. 时间基准(TB)配置:设置为递增模式(TBCTL.CTRMODE = TB_UP)。TBPRD设定为PWM周期对应的计数值。
  2. 计数器比较(CC)配置:将CMPA的装载模式设置为在CTR=0时从影子寄存器装载到活动寄存器(CMPCTL.LOADAMODE = CC_CTR_ZERO)。这样,每个PWM周期开始时,CMPA使用新值,保证占空比更新同步,避免毛刺。
  3. 动作限定器(AQ)配置:这是核心。
    • CTR=0(ZRO)事件时,将EPWMxA置高AQCTLA.ZRO = AQ_SET)。这固定了脉冲的上升沿。
    • 在计数器递增且等于CMPA(CAU)事件时,将EPWMxA拉低AQCTLA.CAU = AQ_CLEAR)。这由CMPA的值控制下降沿,从而控制脉宽。
    • 对于CTR=PRD事件,通常配置为“无操作”(AQCTLA.PRD = AQ_NONE),因为周期事件在递增模式下优先级高于CTR=0,如果在此处也设置动作,会与ZRO事件冲突,导致波形不稳定。

寄存器配置示例: 假设系统时钟SYSCLKOUT为100MHz,TBCLK不分频(即TBCLK=100MHz),欲生成一个10kHz的PWM,占空比初始为50%。

  • 计算TBPRD:PWM周期 = 1 / 10kHz = 100us。TBCLK周期 = 1 / 100MHz = 10ns。因此,TBPRD = 100us / 10ns - 1 = 9999。
  • 计算初始CMPA:占空比50%,则CMPA = 9999 * 50% = 4999.5,取整为5000。
  • 关键寄存器配置
    EPwm1Regs.TBPRD = 9999; // 设置周期值 EPwm1Regs.TBPHS.bit.TBPHS = 0; // 相位清零 EPwm1Regs.TBCTR = 0; // 计数器清零 EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // 递增模式 EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位装载 EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; // 周期寄存器使用影子模式 EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; // 禁用同步输出 EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // 高速时钟分频为1 EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // 时钟分频为1 EPwm1Regs.CMPA.bit.CMPA = 5000; // 初始比较值A EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // CMPA使用影子寄存器 EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // 在CTR=0时装载 EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // CTR=0时置高 EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // 递增时CTR=CMPA拉低 EPwm1Regs.AQCTLA.bit.PRD = AQ_NONE; // 周期事件无操作

运行时调整:要改变占空比,只需在安全时刻(如CTR=0中断服务程序中)更新CMPA影子寄存器的值即可:EPwm1Regs.CMPA.bit.CMPA = new_duty_ratio * (EPwm1Regs.TBPRD + 1);

实操心得:在递增模式下,CTR=PRD事件发生在计数值从TBPRD归零的瞬间。如果你在此事件配置了动作,由于其优先级高于CTR=0,它会在ZRO动作之前执行。如果你想在周期结束时做一个“清理”动作(比如确保输出为低),更安全的做法是在CAU事件拉低,并确保CMPA的值永远不会大于TBPRD。或者,使用后面介绍的“Active Low”配置。

3.2 案例二:递增-递减计数,对称PWM(中心对齐)

这种模式生成的PWM波形关于中心对称,是电机控制(如SVPWM)和全桥/半桥变换器中的标准配置。其谐波特性更好,电磁干扰(EMI)更低。

波形特征:PWM脉冲的中心与计数器的峰值(TBPRD)对齐。上升沿和下降沿分别由计数器递增和递减过程中与CMPA的比较事件产生。占空比 = (TBPRD - CMPA) / TBPRD * 100% (具体公式取决于配置方式)。

配置思路

  1. 时间基准(TB)配置:设置为递增-递减模式(TBCTL.CTRMODE = TB_UPDOWN)。计数器从0计数到TBPRD,再递减回0,如此循环。
  2. 计数器比较(CC)配置:同样,将CMPA的装载点设置为CTR=0CTR=PRD,以实现同步更新。
  3. 动作限定器(AQ)配置:这是体现“对称”的关键。
    • 在计数器递增且等于CMPA(CAU)事件时,将EPWMxA置高AQCTLA.CAU = AQ_SET)。
    • 在计数器递减且等于CMPA(CAD)事件时,将EPWMxA拉低AQCTLA.CAD = AQ_CLEAR)。
    • CTR=0CTR=PRD事件通常配置为“无操作”。

寄存器配置示例: 生成一个10kHz的中心对称PWM,占空比50%。TBCLK=100MHz。

  • 计算TBPRD:在Up-Down模式下,PWM周期 = 2 * TBPRD * T_{TBCLK}。因此,TBPRD = (1/10kHz) / (2 * 10ns) = 5000。
  • 计算初始CMPA:对于中心对称且CAU置高、CAD拉低的配置,当CMPA=0时,输出始终为低(0%占空比);当CMPA=TBPRD时,输出始终为高(100%占空比)。50%占空比对应CMPA = TBPRD / 2 = 2500。
  • 关键寄存器配置
    EPwm1Regs.TBPRD = 5000; // 设置周期值 EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 递增-递减模式 // ... 其他TB、CC配置与案例一类似 EPwm1Regs.CMPA.bit.CMPA = 2500; // 初始比较值A EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 递增匹配CMPA时置高 EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 递减匹配CMPA时拉低 EPwm1Regs.AQCTLA.bit.ZRO = AQ_NONE; EPwm1Regs.AQCTLA.bit.PRD = AQ_NONE;

波形分析:计数器从0上升到2500(CMPA)时,触发CAU事件,输出变高;继续上升到5000(TBPRD)后开始下降,当下降到2500(CMPA)时,触发CAD事件,输出变低。这样,高电平时间集中在周期中心,形成对称波形。

重要注意事项:在Up-Down模式下配置对称PWM时,必须注意CMPA/CMPB的取值边界,以避免脉冲丢失或异常。官方文档给出了黄金法则:

  • 如果你在CTR=0时刻装载CMPA影子寄存器(LOADAMODE = CC_CTR_ZERO),那么CMPA的值必须大于等于1
  • 如果你在CTR=PRD时刻装载CMPA影子寄存器(LOADAMODE = CC_CTR_PRD),那么CMPA的值必须小于等于TBPRD-1。 这样做的目的是确保在每个PWM周期内,至少有一个TBCLK周期的高电平或低电平脉冲。因为如果CMPA=0且从0装载,CAU事件在计数开始时立即触发,而CAD事件在计数下降到0时触发,两者几乎重合,可能产生一个极窄的、系统无法识别的脉冲。遵循上述规则可以避免这种边界情况。

3.3 案例三:生成互补PWM与死区控制

在驱动H桥或半桥电路时,需要一对互补的PWM信号(EPWMxA和EPWMxB)来控制上下管,并且必须插���死区时间(Dead Time)以防止上下管直通短路。AQ模块结合CMPA和CMPB,可以非常灵活地实现带死区的互补PWM。

配置思路:利用两个独立的比较寄存器CMPA和CMPB,分别控制两个输出的边沿。例如,让EPWMxA在CAU置高,在CAD拉低;让EPWMxB在CBU拉低,在CBD置高。通过设置CMPB > CMPA,两者之间的差值(CMPB - CMPA)就自然形成了死区时间。

寄存器配置示例(基于Up-Down模式,生成带死区的互补对称PWM): 假设需要10kHz互补PWM,死区时间为1us,TBCLK=100MHz (10ns)。

  • 计算TBPRD:同上例,TBPRD = 5000。
  • 计算CMPA和CMPB:假设目标占空比为60%。对于对称PWM,高电平时间 = 2 * (TBPRD - CMPA)。设CMPA为控制EPWMxA下降沿(CAD拉低)和EPWMxB上升沿(CBD置高)的点。
    • 先求中心点:对于60%占空比,高电平计数值 = 0.6 * 2 * TBPRD = 0.6 * 10000 = 6000。由于对称,一侧高电平计数值为3000。
    • 因此,从周期中心向两侧各延伸1500个计数。CMPA = TBPRD - 1500 = 5000 - 1500 = 3500。这个点定义了EPWMxA的下降沿和EPWMxB的上升沿。
    • 死区时间1us对应100个TBCLK周期。设置CMPB = CMPA + 100 = 3600。这个点定义了EPWMxA的上升沿(CAU置高)和EPWMxB的下降沿(CBU拉低)。
  • 关键寄存器配置
    EPwm1Regs.TBPRD = 5000; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // ... 其他TB配置 EPwm1Regs.CMPA.bit.CMPA = 3500; EPwm1Regs.CMPB.bit.CMPB = 3600; EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // 配置EPWMxA: CAU置高, CAD拉低 EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 配置EPWMxB: CBU拉低, CBD置高 (与EPWMxA互补) EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; EPwm1Regs.AQCTLB.bit.CBD = AQ_SET;

波形分析:在计数器递增阶段,当CTR=CMPA(3500)时,无动作(EPWMxA未定义动作,EPWMxB是CBD动作,发生在递减阶段)。当CTR=CMPB(3600)时,触发CBU事件,将EPWMxB拉低(此时EPWMxA仍为低)。计数器到达峰值后递减,当CTR=CMPB(3600)时,触发CBD事件,将EPWMxB置高。当CTR=CMPA(3500)时,触发CAD事件,将EPWMxA拉低。这样就形成了EPWMxA和EPWMxB两个互补的PWM波,并且EPWMxA的下降沿比EPWMxB的上升沿早了100个TBCLK(即1us),这就是插入的死区时间。

避坑指南:使用AQ模块生成死区的优点是灵活,死区时间可以通过CMPA和CMPB动态调整。但缺点是占用了两个比较寄存器。对于更传统、更简单的死区生成,eHRPWM提供了专用的死区生成(DB)子模块,它可以在AQ模块输出的原始PWM信号基础上,自动插入可编程的上升沿延迟(RED)和下降沿延迟(FED),无需占用CMPB资源,配置更直观。选择哪种方式取决于具体应用需求。如果死区需要动态变化或与占空比解耦,用AQ+CMP方式更优;如果死区固定或只需简单延迟,用DB模块更节省资源。

4. 高级应用与故障排查实录

4.1 利用软件强制与连续强制进行调试和保护

软件强制事件是AQ模块中一个强大的调试和保护工具。

  • 调试:在系统初始化后,PWM输出可能还未正确配置。你可以先使用连续软件强制模式,将EPWMxA和EPWMxB强制输出为高电平或低电平,以验证GPIO复用、时钟和模块使能是否正常。例如,在初始化序列的最后,执行:
    EPwm1Regs.AQCSFRC.bit.CSFA = AQCSF_FORCE_HI; // 连续强制EPWMxA为高 EPwm1Regs.AQCSFRC.bit.CSFB = AQCSF_FORCE_LO; // 连续强制EPWMxB为低
    用示波器测量引脚,如果能看到预期的电平,说明基础配置正确。然后,再清除强制,切换到正常的PWM生成模式:
    EPwm1Regs.AQCSFRC.bit.CSFA = AQCSF_FORCE_NONE; EPwm1Regs.AQCSFRC.bit.CSFB = AQCSF_FORCE_NONE;
  • 故障保护:当外部故障信号(通过Trip-Zone模块)触发时,可以在中断服务程序中,立即使用一次性软件强制(AQSFRC寄存器)将PWM输出强制拉低(或置为安全状态),其响应速度远快于修改CMPA/B寄存器。例如:
    void TZ_ISR(void) { EPwm1Regs.AQSFRC.bit.OTSFA = AQSF_FORCE_LO; // 强制EPWMxA输出低 EPwm1Regs.AQSFRC.bit.OTSFB = AQSF_FORCE_LO; // 强制EPWMxB输出低 // ... 清除故障标志等操作 }

4.2 生成复杂脉冲序列与占空比超范围处理

AQ模块的“翻转(Toggle)”动作和双比较寄存器,可以生成更复杂的波形。例如,在一个PWM周期内生成一个中心对称的脉冲,脉冲的起始和结束由CMPA和CMPB分别控制。

  • 配置:在Up-Down模式下,设置AQCTLA.CAU = AQ_TOGGLE,AQCTLA.CAD = AQ_TOGGLE。同时,将CMPA和CMPB设置为不同的值(例如CMPA < CMPB)。
  • 波形:计数器从0递增,经过CMPA时第一次翻转(假设从低翻高),经过CMPB时第二次翻转(从高翻低),形成一个脉冲。递减时,先经过CMPB(无动作,因为CBD未配置),再经过CMPA时第三次翻转(从低翻高?)。这里需要仔细设计,因为递增和递减阶段都会触发CAU和CAD事件。要生成单个脉冲,可能需要在递增阶段用CAU置高、CBU拉低,递减阶段不动作。这展示了AQ配置的灵活性。

另一个常见问题是:如果CMPA或CMPB的值大于TBPRD会怎样?AQ模块的行为取决于计数器模式:

  • 递增模式:如果CMPx > TBPRD,则CTR=CMPx事件永远不会发生,因为计数器最大只能到TBPRD。
  • 递减模式:如果CMPx >= TBPRD,则CTR=CMPx事件会在CTR=PRD(计数器等于周期)时发生。因为计数器从TBPRD开始递减,如果CMPx等于或大于TBPRD,那么计数器在起点就已经“匹配”了。
  • 递增-递减模式:如果CMPx < TBPRD,则在递增和递减阶段都会在CTR=CMPx点正常触发事件。如果CMPx >= TBPRD,则CTR=CMPx事件会在CTR=PRD时触发(优先级最低)。

经验之谈:在动态调整占空比时,务必对CMPA/B的新值进行限幅,确保其落在[0, TBPRD]区间内(对于Up-Down模式,根据装载点,可能需限制在[1, TBPRD-1]),否则会导致脉冲丢失或行为异常。这是一个常见的软件Bug来源。

4.3 典型问题排查与诊断技巧

在实际开发中,AQ模块相关的问题通常表现为PWM输出无信号、信号频率/占空比不对、或出现毛刺。

  1. 无PWM输出

    • 检查时钟和使能:首先确认ePWM模块的时钟是否使能(PCLKCRx寄存器)。确认TBCLK有正确的时钟输入(检查TBCTL[HSPCLKDIV, CLKDIV]分频设置)。
    • 检查计数器:读取TBCNT寄存器的值,看它是否在循环计数。如果TBCNT不变化,检查TBCTL.CTRMODE是否被错误设置为停止模式(TB_FREEZE)。
    • 检查GPIO复用:确认输出引脚(GPIO)已正确配置为ePWM功能,而非普通GPIO或其他外设功能。
    • 检查AQ配置:确认AQCTLA/B寄存器已正确配置了非“无操作”的动作。一个常见的疏忽是只配置了CAU而没有配置ZRO或PRD,导致输出始终为默认电平(通常为低)。
  2. 占空比不正确或不可调

    • 检查影子寄存器装载:确保CMPCTL.LOADAMODE/BMO

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询