This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28P659DK-Q1:如果 CMPA 等于 TBPRD、则 ePWM OUTB 上的随机脉冲

Guru**** 2686445 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1598358/tms320f28p659dk-q1-random-pulse-on-epwm-outb-if-cmpa-is-equal-to-tbprd

器件型号: TMS320F28P659DK-Q1

您好:
我写信请求您提供有关 ePWM 外设配置的支持。

在我们的应用中、我们使用四个外设来驱动两个 H 桥的两个桥臂。
在运行期间、在前半个周期中、两个桥臂的 MOSFET 必须根据调制信号进行开关、而对于其余的两个桥臂、高侧 MOSFET 的驱动信号必须保持低电平、低侧 MOSFET 的驱动信号必须保持高电平。 在后半个周期中、行为必须反转。 除此之外、我们还需要改变 PWM 周期。

在实现该行为时、我们已经看到、驱动低侧的信号上随机出现持续时间与死区相等的脉冲(请参阅随附的屏幕)。
只有当我们改变 PWM 周期时、才会出现这种行为。

为了确保低侧信号始终为高电平、高侧信号始终为低电平、在半个周期内、我们将比较器设置为与周期相同的值。
附件您还可以根据您的一个示例找到固件、我们用于重现此行为。

PWM 外设已按如下方式配置:

EPWM_setClockPrescaler(myEPWM1_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
EPWM_setTimeBasePeriod(myEPWM1_BASE, 500);	
EPWM_setTimeBaseCounter(myEPWM1_BASE, 0);	
EPWM_setTimeBaseCounterMode(myEPWM1_BASE, EPWM_COUNTER_MODE_UP_DOWN);	
EPWM_disablePhaseShiftLoad(myEPWM1_BASE);	
EPWM_setPhaseShift(myEPWM1_BASE, 0);	
EPWM_setCounterCompareValue(myEPWM1_BASE, EPWM_COUNTER_COMPARE_A, 250);	
EPWM_setCounterCompareShadowLoadMode(myEPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
EPWM_setCounterCompareValue(myEPWM1_BASE, EPWM_COUNTER_COMPARE_B, 0);	
EPWM_setCounterCompareShadowLoadMode(myEPWM1_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);		
EPWM_setDeadBandDelayPolarity(myEPWM1_BASE, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW);	
EPWM_setDeadBandDelayMode(myEPWM1_BASE, EPWM_DB_RED, true);	
EPWM_setRisingEdgeDelayCountShadowLoadMode(myEPWM1_BASE, EPWM_RED_LOAD_ON_CNTR_ZERO);	
EPWM_setRisingEdgeDelayCount(myEPWM1_BASE, 20);	
EPWM_setDeadBandDelayMode(myEPWM1_BASE, EPWM_DB_FED, true);	
EPWM_setFallingEdgeDelayCountShadowLoadMode(myEPWM1_BASE, EPWM_FED_LOAD_ON_CNTR_ZERO);	
EPWM_setFallingEdgeDelayCount(myEPWM1_BASE, 20);	
EPWM_enableInterrupt(myEPWM1_BASE);	
EPWM_setInterruptSource(myEPWM1_BASE, EPWM_INT_TBCTR_ZERO);	
EPWM_setInterruptEventCount(myEPWM1_BASE, 3);	

epwm_ex2_updown_aq_test.zip 

您是否看到过类似的行为? 您对如何配置外设来避免这种情况有何建议?

谢谢您、

Simone

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    为了更好地了解配置、您可以帮助直观显示下图中的死区配置。

    还建议绘制原始的 A 和 B 以及最终所需的 A 和 B 以及观察到的相应波形。 波形和相应的波形将更好地帮助理解什么是根本原因。 如果存在除周期变更之外的任何特定情况、请同时突出显示这些情况。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、
    我附加了一个图、其中包含配置和工程图、以及预期波形和实际波形。

    波形图中的脉冲 是您可以在示波器屏幕截图中看到的脉冲(在上面的问题中)、我不能完全确定何时发生、具体取决于 TBCTR。

    如果您需要任何其他信息、请告诉我。

    谢谢您、
    Simone

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    CMPA 是否始终保持在 TBPRD? 那么、您是使用 CMPA 作为动作限定器、而不是将 TBPRD 作为动作限定器吗?  

    为什么 AQ 高电平和低电平都接通 CMPA?

    您希望 A 始终为低电平、B 始终为 高电平(从 A 的反转)?

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    CMPA 并不总是设置为 TBPRD。 系统工作方式如下:

    对于一个半周期 (10ms)、A 必须保持低电平、而 B 必须保持高电平(这就是我将 CMPA 设置为 TBPRD 的原因);对于另一个半周期 (10ms)、CMPA 会根据 PID 控制器的输出而变化。 同时、TBPRD 必须在最小值和最大值之间变化(每 2ms 1 个周期)。

    如果 TBPRD 变化、我描述的行为就会在前半个周期内发生。

    在整个系统中、有 4 个 ePWM 外设必须以这种方式运行。

    我想询问是否错误配置外设、或者是否有替代方法可以获得相同的结果。

    谢谢、

    Simone

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    感谢您了解更多信息。 让我检查一下、下周就回来