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.

[参考译文] TMS320F28.0039万C:ePWM -如何使用ePWM的A/B侧

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1097284/tms320f280039c-epwms---how-to-use-a-b-sides-of-epwm

部件号:TMS320F28.0039万C

我正在使用ePWM 2转至2个不同的SCR,并且想要EPWM2 A之外的PWM与我想要的EPWM2B之外的PWM不同。 我该怎么做? 这里的演示并不清楚如何使用A与B  

这是我为初始化所做的操作-  

#define T_PWM_BASE EPWM2_BASE // PWM A
#define U_PWM_BASE EPWM2_BASE // PWM B


//设置时基控制寄存器(TBCTL)

ePWM_setTimeBaseCounterMode (T_PWM_BASE,ePWM_counter_mode_ue_down);
ePWM_DisablePhaseShiftLoad(T_PWM_base);
ePWM_setPeriodLoadMode (T_PWM_BASE,ePWM_Period_Direct_load);
ePWM_enableSyncOutPulseSource(T_PWM_base, ePWM_SYNC_Out_Pulse_on_software);

ePWM_setClockPrescaler (T_PWM_BASE,ePWM_Clock_diver_1,ePWM_HSCLOCK分配器_1);
ePWM_setCountModeAfterSync (T_PWM_BASE,ePWM_COUNT_MODE_UP_After_sync);

ePWM_setEmulation Mode(T_PWM_base, ePWM_emulation_free _run);
ePWM_setPhaseShift (T_PWM_BASE,0);

//设置时基计数器寄存器(TBCTR )
ePWM_setTimeBaseCounter(T_PWM_BASE, 0);

//设置时基期间寄存器(TBPRD)
//初始设置为零
ePWM_setTimeBasePeriod (T_PWM_BASE,0);

//设置计数器比较控制寄存器(CMPCTL)
ePWM_setCounterCompareShadowLoadMode (T_PWM_BASE,ePWM_counter_compare_A,ePWM_COMP_load_on_CNTR_ZERO);
ePWM_setCounterCompareShadowLoadMode (U_PWM_BASE,ePWM_counter_compare_B,ePWM_COMP_load_on_CNTR_ZERO);

//设置Action-Qualifier输出A寄存器(AQCTLA)
ePWM_setActionQualifierAction (T_PWM_BASE,ePWM_AQ_OUTPUT A,ePWM_AQ_OUTPUT高,ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMPA);
ePWM_setActionQualifierAction (T_PWM_BASE,ePWM_AQ_OUTPT_A,ePWM_AQ_OUTPT_HIGH,ePWM_AQ_OUTPT_ON_TIMEBASE期间);
ePWM_setActionQualifierAction (T_PWM_BASE,ePWM_AQ_OUTPUT A,ePWM_AQ_OUTPUT低,ePWM_AQ_OUTPT_ON_TIMEBASE向下_CMPA);
ePWM_setActionQualifierAction (T_PWM_BASE,ePWM_AQ_OUTPUT A,ePWM_AQ_OUTPUT低,ePWM_AQ_OUTPT_ON_TIMEBASE _ZERO);

ePWM_setActionQualifierAction (U_PWM_BASE,ePWM_counter_compare_B,ePWM_AQ_output_high,ePWM_AQ_output_on_timebase _up _CMBB);
ePWM_setActionQualifierAction (U_PWM_BASE,ePWM_counter_compare_B,ePWM_AQ_output_high,ePWM_AQ_output_on_timebase);
ePWM_setActionQualifierAction (U_PWM_BASE,ePWM_counter_compare_B,ePWM_AQ_output_low,ePWM_AQ_output_on_timebbase_down _CMBB);
ePWM_setActionQualifierAction (U_PWM_BASE,ePWM_counter_compare_B,ePWM_AQ_output_low,ePWM_AQ_output_on_timebase _zero);

//设置死带发生器控制寄存器(DBCTL)
ePWM_setDeadBandDelayMode(T_PWM_base, ePWM_DB_red, true);
ePWM_setDeadBandDelayMode(T_PWM_base, ePWM_DB_FED,true);

//选择EPWMA作为死区发生器的输入
ePWM_setRisingEdgeDeadBandDelayInput (T_PWM_BASE,ePWM_DB_INT_EPWMA);
ePWM_setRisingEdgeDeadBandDelayInput (U_PWM_BASE,ePWM_DB_INPUT_EPWMB);

//为有源高互补配置配置正确的极性。
ePWM_setDeadBandDelayPolarity (T_PWM_BASE,ePWM_DB_RED,ePWM_DB_POLICAL_ACTIVE_HIGH);
ePWM_setDeadBandDelayPolarity (T_PWM_BASE,ePWM_DB_FED,ePWM_DB_POLICAL_ACTIVE_LOW);

//设置死区上升边缘延迟寄存器(DBRD)
ePWM_setRisingEdgeDelayCount (T_PWM_BASE,SCR_DEADTIME);

//设置死区下降边缘延迟寄存器(DBFED)
ePWM_setFallingEdgeDelayCount (T_PWM_BASE,SCR_DEADTIME);

//设置PWM斩波器控制寄存器(PCCTL)
ePWM_DisableChopper (T_PWM_BASE);

//设置跳闸区域选择寄存器(TZSEL)
ePWM_DisableTripZoneSignals (T_PWM_BASE,TZSEL_SIGNAL_ALL);

//由于PWM被配置为上/下计数器,因此期间寄存器为
//设置为所需PWM周期的一半
ePWM_setTimeBasePeriod (T_PWM_BASE,SCR_PWM_FREQ);

然后对于A与B,我尝试设置 ePWM_counter_compare_A与 ePWM_counter_compare_B  

//更新T PWM占空比
void UpdateTPWM (内部双循环)

fDutyCycle =双周期/ 100.0 ;
浮点周期=(浮点)(ePWM_getTimeBasePeriod (T_PWM_BASE));
float cmpVal = fDutyCycle * Period;

ePWM_setCounterCompareValue (T_PWM_BASE,ePWM_counter_compare_A,cmpVal);
}

//更新UCAP耦合器PWM占空比
void UpdateUCAPCoplingPWM (内部双循环)

fDutyCycle =双周期/ 100.0 ;
浮点周期=(浮点)(ePWM_getTimeBasePeriod (U_PWM_BASE));
float cmpVal = fDutyCycle * Period;

ePWM_setCounterCompareValue (U_PWM_BASE,ePWM_counter_compare_B,cmpVal);
}

这是否能在EPWM2 A和EPWM2 B上输出不同的占空比? 我是否错过了某些内容?

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

    所有这些都基于 ePWM_AQ_OUTPT_A/ePWM_AQ_OUTPUT B,您可以为A和B设置不同的操作。 如果 您希望它们完全独立,则它们可以完全独立。

    然后对于A与B,我要尝试设置 ePWM_counter_wm_compare [_bwm]  

    计数器比较A/B与输出A和输出B没有关系

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

    您是否看过此视频系列?

    training.ti.com/c2000-enhanced-pulse-width-modulator-epwm-overview

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

    如果我这样做的话

    ePWM_setActionQualifierAction (T_PWM_BASE,ePWM_AQ_OUTPUT A,ePWM_AQ_OUTPUT高,ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMPA);
    ePWM_setActionQualifierAction (T_PWM_BASE,ePWM_AQ_OUTPT_A,ePWM_AQ_OUTPT_HIGH,ePWM_AQ_OUTPT_ON_TIMEBASE期间);
    ePWM_setActionQualifierAction (T_PWM_BASE,ePWM_AQ_OUTPUT A,ePWM_AQ_OUTPUT低,ePWM_AQ_OUTPT_ON_TIMEBASE向下_CMPA);
    ePWM_setActionQualifierAction (T_PWM_BASE,ePWM_AQ_OUTPUT A,ePWM_AQ_OUTPUT低,ePWM_AQ_OUTPT_ON_TIMEBASE _ZERO);


     ePWM_setActionQualifierAction (U_PWM_BASE,ePWM_AQ_OUTPUT B,ePWM_AQ_OUTPUT _HIGH,ePWM_AQ_OUTPT_ON_TIMEBASE _UP _CMBB);
    ePWM_setActionQualifierAction (U_PWM_BASE,ePWM_AQ_OUTPUT B,ePWM_AQ_OUTPUT _HIGH,ePWM_AQ_OUTPT_ON_TIMEBASE期间);
    ePWM_setActionQualifierAction (U_PWM_BASE,ePWM_AQ_OUTPUT B,ePWM_AQ_OUTPUT低,ePWM_AQ_OUTPT_ON_TIMEBASE向下_CMBB);
    ePWM_setActionQualifierAction (U_PWM_BASE,ePWM_AQ_OUTPUT B,ePWM_AQ_OUTPUT低,ePWM_AQ_OUTPT_ON_TIMEBASE _ZERO);

    这意味着EPWM2 A将在计数器比较A上输出,EPWM2将在计数器比较B上输出?  

    然后如果我设置了计数器比较B,那么将设置EPWM2 B占空比,然后如果我设置了计数器比较A,将设置EPWM2占空比。  

    我回顾了培训系列,但它没有显示如何单独控制EPWM2 A/B。 它只是说这是可能的。 我没有看到它在哪里展示了如何独立控制A/B?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    109.7284万 -of-ePWM/4064317#4064317]这28.0039万这意味406.4317万意味着406.4317万着EPWM2上的输出A和A将进行对比?  [/引述]

    正确!

    但没有具体提到独立控制。 它描述了ePWM的工作方式。

    NIMA

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

    谢谢Nima! 如果我还有其他问题,我会通知您!

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

    听起来不错!