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.

[参考译文] TMS320F280039C:CrM Boost EPWM 设置

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1444358/tms320f280039c-crm-boost-epwm-setup

器件型号:TMS320F280039C
Thread 中讨论的其他器件:C2000WARE

工具与软件:

尊敬的专家:

我将使用280039C 来实现 CrM Boost 控制。

CMPSS 信号已设置、并发送到 EPWMXbar。 然后、我使用 DCBECT1.SYNC 将数字比较设置为这样、以复位 EPWM4的计数器。

但无法在 CMPSS 高电平时将 TBCTR 复位。

代码如下:

CMPSS 设置:
CMPSS_enableModule (base1);
CMPSS_CONFIGDAC (base1、CMPSS_DACVAL_SYSCLK | CMPSS_DACREF_VDDA | CMPSS_DACSRC_Shdw);
CMPSS_setDACValueHigh (base12048 +(int16_t)((float32_t) current_limit*(float32_t) 2048.0/(float32_t) current_max_sense);
CMPSS_setDACValueLow (base12048 -(int16_t)((float32_t) current_limit *(float32_t) 2048.0 /(float32_t) current_max_sense);
CMPSS_configHighComparator (base1、CMPSS_INSRC_DAC);
CMPSS_configLowComparator (base1、CMPSS_INSRC_DAC | CMPSS_INV_REVERTED);
CMPSS_configFilterHigh (base1、2、10、7);
CMPSS_configFilterLow (base1、2、10、7);
CMPSS_initFilterHigh (base1);
CMPSS_configOutputsHigh (base1、CMPSS_TRIPOUT_ASYNC_COMP | CMPSS_TRIP_FILTER);
CMPSS_configOutputsLow (base1、CMPSS_TRIPOUT_ASYNC_COMP | CMPSS_TRIP_FILTER);
CMPSS_clearFilterLatchHigh (base1);
CMPSS_clearFilterLatchLow (base1);

ePWM 设置:

EPWM_setClockPrescaler (myEPWM2_BASE、EPWM_CLOCK_DIVIDER_1、EPWM_HSCLOCK_DIVIDER_1);
EPWM_setTimeBasePeriod (myEPWM2_BASE、400);
EPWM_setupEPWMLinks (myEPWM2_BASE、EPWM_LINK_WITH_EPWM_4、EPWM_LINK_TBPRD);
EPWM_setTimeBaseCounter (myEPWM2_BASE、0);
EPWM_setTimeBaseCounterMode (myEPWM2_BASE、EPWM_COUNTER_MODE_UP);
EPWM_enablePhaseShiftLoad (myEPWM2_BASE);
EPWM_setPhaseShift (myEPWM2_BASE、1);
EPWM_setSyncInPulseSource (myEPWM2_BASE、EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM4);
EPWM_setCounterCompareValue (myEPWM2_BASE、EPWM_COUNTER_COMPARE_A、0);
EPWM_setCounterCompareShadowLoadMode (myEPWM2_BASE、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareValue (myEPWM2_BASE、EPWM_COUNTER_COMPARE_B、0);
EPWM_setCounterCompareShadowLoadMode (myEPWM2_BASE、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareValue (myEPWM2_BASE、EPWM_COUNTER_COMPARE_C、110);
EPWM_setActionQualifierAction (myEPWM2_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction (myEPWM2_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
EPWM_setDeadBandDelayMode (myEPWM2_BASE、EPWM_DB_RED、TRUE);
EPWM_setRisingEdgeDelayCountShadowLoadMode (myEPWM2_BASE、EPWM_RED_LOAD_ON_CNTR_ZERO);
EPWM_setDeadBandDelayMode (myEPWM2_BASE、EPWM_DB_FED、TRUE);
EPWM_setFallingEdgeDelayCountShadowLoadMode (myEPWM2_BASE、EPWM_FED_LOAD_ON_CNTR_ZERO);
ePWM_enableADCTrigger (myEPWM2_BASE、EPWM_SOC_A);
EPWM_setADCTriggerSource (myEPWM2_BASE、EPWM_SOC_A、EPWM_SOC_TBCTR_PERIOD);
ePWM_enableADCTrigger (myEPWM2_BASE、EPWM_SOC_B);
EPWM_setADCTriggerSource (myEPWM2_BASE、EPWM_SOC_B、EPWM_SOC_TBCTR_PERIOD);

EPWM_setClockPrescaler (myEPWM4_BASE、EPWM_CLOCK_DIVIDER_1、EPWM_HSCLOCK_DIVIDER_1);
EPWM_setTimeBasePeriod (myEPWM4_BASE、400);
EPWM_setupEPWMLinks (myEPWM4_BASE、EPWM_LINK_WITH_EPWM_4、EPWM_LINK_TBPRD);
EPWM_setTimeBaseCounter (myEPWM4_BASE、0);
EPWM_setTimeBaseCounterMode (myEPWM4_BASE、EPWM_COUNTER_MODE_UP);
EPWM_disablePhaseShiftLoad (myEPWM4_BASE);
EPWM_setPhaseShift (myEPWM4_BASE、0);
EPWM_setSyncInPulseSource (myEPWM4_BASE、EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM4);
EPWM_setCounterCompareValue (myEPWM4_BASE、EPWM_COUNTER_COMPARE_A、75);
EPWM_setCounterCompareShadowLoadMode (myEPWM4_BASE、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareValue (myEPWM4_BASE、EPWM_COUNTER_COMPARE_B、0);
EPWM_setCounterCompareShadowLoadMode (myEPWM4_BASE、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setActionQualifierAction (myEPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction (myEPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction (myEPWM4_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction (myEPWM4_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
EPWM_setFallingEdgeDeadBandDelayInput (myEPWM4_BASE、EPWM_DB_INPUT_EPWMB);
EPWM_setDeadBandDelayMode (myEPWM4_BASE、EPWM_DB_RED、TRUE);
EPWM_setRisingEdgeDelayCountShadowLoadMode (myEPWM4_BASE、EPWM_RED_LOAD_ON_CNTR_ZERO);
EPWM_setDeadBandDelayMode (myEPWM4_BASE、EPWM_DB_FED、TRUE);
EPWM_setFallingEdgeDelayCountShadowLoadMode (myEPWM4_BASE、EPWM_FED_LOAD_ON_CNTR_ZERO);
EPWM_selectDigitalCompareTripInput (myEPWM4_BASE、EPWM_DC_TRIPIN5、EPWM_DC_TYPE_DCBH);
EPWM_setTripZoneDigitalCompanyEventCondition (myEPWM4_BASE、EPWM_TZ_DC_OUTPUT_B1、EPWM_TZ_EVENT_DCXH_HIGH);
EPWM_enableDigitalCompareSyncEvent (myEPWM4_BASE、EPWM_DC_MODULE_B);
EPWM_setDigitalCompareEventSyncMode (myEPWM4_BASE、EPWM_DC_MODULE_B、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_NOT_SYNCK);
EPWM_enableADCTrigger (myEPWM4_BASE、EPWM_SOC_A);
EPWM_enableADCTrigger (myEPWM4_BASE、EPWM_SOC_B);

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

    您好!

    我认为您的 CMPSS 配置没有任何问题。

    要将 CMPSS 的输出路由到 EPWM、您需要使用 EPWM-XBAR。 C2000 ware 中有一个示例展示如何配置 EPWM-XBAR。 您可以在以下位置找到它(示例1):\ti\c2000\C2000Ware_5_02_00_00\driverlib\f28003x\examples\cmpss

    此致、

    哈迪