TMS320F28379D: 28379芯片的PWM输出在启用死区和禁用死区之间切换时候出现异常的PWM占空比

Part Number: TMS320F28379D

       你好,我们正在用TI的TMS320F28379芯片开发一款电源。我们设计的功能需要芯片输出PWM波形在带死区输出和不带死区输出的PWM之间进行无缝切换。也就是说,不带死区PWM输出时候,PWM2A输出PWM信号,而PWM2B输出低电平;1毫秒后,PWM2B也输出PWM,同时与PWM2A的输出PWM波形死区互补。但是PWM2B在正常输出的PWM波形的前面,出现2个异常的大占空比的PWM波形。请问一下我应该如何解决这个问题?谢谢!

使用的代码如下:

/////禁用死区 EPWM_setDeadBandDelayMode(EPWM2_BASE, EPWM_DB_FED, false);  EPWM_setDeadBandDelayMode(EPWM2_BASE, EPWM_DB_RED, false); EPWM_setActionQualifierContSWForceAction(EPWM2_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_SW_DISABLED);//PWMB OUTPUT

/////启用死区 EPWM_setDeadBandDelayMode(EPWM2_BASE, EPWM_DB_FED, true); // EPWM_setDeadBandDelayMode(EPWM2_BASE, EPWM_DB_RED, true);// GPIO_setPinConfig(myEPWM2_EPWMA_PIN_CONFIG); GPIO_setPadConfig(myEPWM2_EPWMA_GPIO, GPIO_PIN_TYPE_STD); GPIO_setQualificationMode(myEPWM2_EPWMA_GPIO, GPIO_QUAL_SYNC); GPIO_setPinConfig(myEPWM2_EPWMB_PIN_CONFIG); GPIO_setPadConfig(myEPWM2_EPWMB_GPIO, GPIO_PIN_TYPE_STD); GPIO_setQualificationMode(myEPWM2_EPWMB_GPIO, GPIO_QUAL_SYNC); EPWM_setActionQualifierContSWForceAction(EPWM2_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_SW_DISABLED);//PWMB OUTPUT EPWM_setActionQualifierContSWForceAction(EPWM2_BASE, EPWM_AQ_OUTPUT_A,EPWM_AQ_SW_DISABLED);//PWMA OUTPUT

       我的邮箱是:yixiang.peng@faithtech.cn

 

 

              

  • 感谢您对TI产品的关注。
    我们正在核实您的问题,请等待我们的答复。

  • 你好,

    我们正在调查此事,下周初会尽快回复您。

    谢谢

  • 你好,

    PWM2B 上的两个异常大的占空比脉冲是由于从强制低电平模式切换到死区模式时,动作限定符 (AQ) 状态与时基计数器不同步造成的。具体来说:

    1. EPWM_AQ_SW_DISABLED不会立即生效——它与操作限定符事件逻辑相关联,并且仅在下一个计数器为零事件 (TBCTR=0)时恢复正常操作,而不是在您调用函数1 的瞬间恢复正常操作。

    2. 死区模块立即启用,但馈送它的 AQ 输出可能在 1-2 个 PWM 周期内处于未定义/过时状态,直到下一个比较事件正确设置/清除输出。

    3. F2837xD 上的 4 型 ePWM 模块在 AQ 和死区输出中引入了一个 TBCLK 周期的延迟,这加剧了模式转换期间的定时错位2

    解决方案

    将所有配置更改同步到计数器归零 (CTR=0) 边界。以下是推荐的方法:

    校正序列

    // 1. Wait for CTR=0 before making changes (use an ISR triggered at CTR=0, 
    //    or poll TBCTR)
    // This ensures all changes take effect at a known counter state.
    
    // 2. Keep PWM2B forced low UNTIL dead-band is fully configured
    //    Do NOT disable the software force yet.
    
    // 3. Enable dead-band first
    EPWM_setDeadBandDelayMode(EPWM2_BASE, EPWM_DB_FED, true);
    EPWM_setDeadBandDelayMode(EPWM2_BASE, EPWM_DB_RED, true);
    
    // 4. Configure GPIO pins (do this BEFORE releasing the output)
    GPIO_setPinConfig(myEPWM2_EPWMB_PIN_CONFIG);
    GPIO_setPadConfig(myEPWM2_EPWMB_GPIO, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(myEPWM2_EPWMB_GPIO, GPIO_QUAL_SYNC);
    
    // 5. NOW disable the software force — at the next CTR=0, 
    //    PWM2B will start outputting the dead-band complementary signal cleanly
    EPWM_setActionQualifierContSWForceAction(EPWM2_BASE, EPWM_AQ_OUTPUT_B, 
                                              EPWM_AQ_SW_DISABLED);

    关键原则

    你的代码有问题 使固定
    SW力禁用死区启用 → AQ输出在1-2个周期内未定义 在释放SW力之前启用死区
    GPIO 重配置发生在死区使能之后。 在释放输出之前配置 GPIO
    没有与边界同步 CTR=0 时执行转换(例如,在零事件中断服务例程中)
    SW强制禁用不会立即生效 请注意,该规定将在下次 AQ 事件中生效——请据此做好相应准备。

    另一种选择:单次装填模式

    为了实现更精确的控制,可以使用单次模式的全局加载来批量更新所有寄存器,并在特定的计数器事件3 时原子地应用它们。这确保死区使能、AQ 设置和比较值都在 CTR=0 时同时生效,从而消除任何瞬态脉冲。

    概括

    解决方法是解决顺序和同步问题:首先启用死区并配置 GPIO,然后在计数器归零边界处释放对 PWM2B 的软件控制。这样可以避免在死区模块产生有效互补输出之前,PWM2B 的 AQ 输出在 1-2 个周期内不受控制的情况。

    后续问题:您在 EPWM2 中使用的是哪种计数器模式(递增计数还是递增递减计数)和影子寄存器加载事件设置?这将有助于确认您的特定配置是否需要额外的同步调整。


    1. TMS320F28379D:EPWM(端到端)软件连续强制动作
    2. TMS320F2837xD 技术参考手册
    3. 利用新型ePWM特性实现多相控制(SPRACY1)