TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049C: EPWM没有波形

Part Number:TMS320F280049C

这里代码逻辑是这样的,外部硬件电路检测尖峰,送到cpmss,然后比较器输出高电平送到Epwm中DC模块,经过事件滤除后,触发TZ模块。

{

CMPSS_enableModule(ZVS_LOSS_DETECT_CMPSS_BASE);
CMPSS_configHighComparator(ZVS_LOSS_DETECT_CMPSS_BASE, CMPSS_INSRC_DAC);

ASysCtl_selectCMPHPMux(ZVS_LOSS_DETECT_CMPSS_ASYSCTRL_CMPHPMUX,
ZVS_LOSS_DETECT_CMPSS_ASYSCTRL_MUX_VALUE);

CMPSS_configDAC(ZVS_LOSS_DETECT_CMPSS_BASE, CMPSS_DACREF_VDDA |
CMPSS_DACVAL_SYSCLK | CMPSS_DACSRC_SHDW);
CMPSS_setDACValueHigh(ZVS_LOSS_DETECT_CMPSS_BASE, 1240);

CMPSS_configOutputsHigh(ZVS_LOSS_DETECT_CMPSS_BASE, CMPSS_TRIP_SYNC_COMP |
CMPSS_TRIPOUT_ASYNC_COMP);

XBAR_setEPWMMuxConfig(XBAR_TRIP7, XBAR_EPWM_MUX06_CMPSS4_CTRIPH);
XBAR_enableEPWMMux(XBAR_TRIP7, XBAR_MUX06);

EPWM_selectDigitalCompareTripInput(ACTIVE_PWM_DUPLICATE_PWM_BASE,
EPWM_DC_TRIP_TRIPIN7, EPWM_DC_TYPE_DCAH);
EPWM_setTripZoneDigitalCompareEventCondition(ACTIVE_PWM_DUPLICATE_PWM_BASE,
EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH);
EPWM_setDigitalCompareEventSource(ACTIVE_PWM_DUPLICATE_PWM_BASE,
EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
EPWM_setDigitalCompareFilterInput(ACTIVE_PWM_DUPLICATE_PWM_BASE,
EPWM_DC_WINDOW_SOURCE_DCAEVT1);

EPWM_enableDigitalCompareBlankingWindow(ACTIVE_PWM_DUPLICATE_PWM_BASE);
EPWM_setDigitalCompareBlankingEvent(ACTIVE_PWM_DUPLICATE_PWM_BASE,
EPWM_DC_WINDOW_START_TBCTR_ZERO);

EPWM_enableDigitalCompareWindowInverseMode(ACTIVE_PWM_DUPLICATE_PWM_BASE);
EPWM_setDigitalCompareWindowOffset(ACTIVE_PWM_DUPLICATE_PWM_BASE,
(PFC_DEADBAND_PWM_LS_COUNT-5));
EPWM_setDigitalCompareWindowLength(ACTIVE_PWM_DUPLICATE_PWM_BASE, 10);

EPWM_setActionQualifierT1TriggerSource(ACTIVE_PWM_DUPLICATE_PWM_BASE, 8);

HWREGH(ACTIVE_PWM_DUPLICATE_PWM_BASE + EPWM_O_AQCTLA) =0 ;
// CTR = ZERO , set to 0
EPWM_setActionQualifierAction(ACTIVE_PWM_DUPLICATE_PWM_BASE,
EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
// CTR = T1@UP , set to 1 on T1 event
EPWM_setActionQualifierAction(ACTIVE_PWM_DUPLICATE_PWM_BASE,
EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_T1_COUNT_UP);
EPWM_setDeadBandDelayMode(ACTIVE_PWM_DUPLICATE_PWM_BASE,EPWM_DB_RED,false);
EPWM_setDeadBandDelayMode(ACTIVE_PWM_DUPLICATE_PWM_BASE,EPWM_DB_FED,false);

EPWM_setTripZoneAction(ACTIVE_PWM_DUPLICATE_PWM_BASE,
EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_DISABLE);
EPWM_setTripZoneAction(ACTIVE_PWM_DUPLICATE_PWM_BASE,
EPWM_TZ_ACTION_EVENT_DCAEVT1, EPWM_TZ_ACTION_DISABLE);

EPWM_enableTripZoneSignals(ACTIVE_PWM_DUPLICATE_PWM_BASE,
EPWM_TZ_SIGNAL_DCAEVT1);
}

对epwm的初始化是这样的:

EPWM_setPeriodLoadMode(base1,EPWM_PERIOD_SHADOW_LOAD);
EPWM_setTimeBasePeriod(base1,pwm_period_ticks);
EPWM_setTimeBaseCounter(base1,0);
EPWM_setPhaseShift(base1,0);
EPWM_setTimeBaseCounterMode(base1,EPWM_COUNTER_MODE_UP);
EPWM_setClockPrescaler(base1,EPWM_CLOCK_DIVIDER_1,EPWM_HSCLOCK_DIVIDER_1);

// Counter Compare Submodule Registers
EPWM_setCounterCompareValue(base1,EPWM_COUNTER_COMPARE_A,0);
EPWM_setCounterCompareShadowLoadMode(base1,EPWM_COUNTER_COMPARE_A,
EPWM_COMP_LOAD_ON_CNTR_ZERO);

// Action Qualifier SubModule Registers

// to start don't configure the PWM to do anything
HWREGH(base1 + EPWM_O_AQCTLA) =0 ;

// CTR = ZERO , set to 1 // Not needed – HN 06052017
EPWM_setActionQualifierAction(base1, EPWM_AQ_OUTPUT_A ,
EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);

// CTR = CMPA@UP , set to 0
EPWM_setActionQualifierAction(base1, EPWM_AQ_OUTPUT_A ,
EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);

// EPWM_DB_COUNTER_CLOCK_HALF_CYCLE to enable HR DB
EPWM_setDeadBandCounterClock(base1,EPWM_DB_COUNTER_CLOCK_HALF_CYCLE);
EPWM_setRisingEdgeDelayCountShadowLoadMode(base1,
EPWM_RED_LOAD_ON_CNTR_ZERO);
EPWM_setFallingEdgeDelayCountShadowLoadMode(base1,
EPWM_FED_LOAD_ON_CNTR_ZERO);
EPWM_setRisingEdgeDelayCount(base1,pwm_db_ticks_hs);
EPWM_setFallingEdgeDelayCount(base1,pwm_db_ticks_ls);
EPWM_setDeadBandDelayMode(base1,EPWM_DB_RED,true);
EPWM_setDeadBandDelayMode(base1,EPWM_DB_FED,true);
EPWM_setRisingEdgeDeadBandDelayInput(base1,EPWM_DB_INPUT_EPWMA);
EPWM_setDeadBandDelayPolarity(base1,EPWM_DB_RED,
EPWM_DB_POLARITY_ACTIVE_HIGH);

EPWM_enableGlobalLoadRegisters(base1, EPWM_GL_REGISTER_CMPA_CMPAHR|
EPWM_GL_REGISTER_TBPRD_TBPRDHR|EPWM_GL_REGISTER_DBRED_DBREDHR|
EPWM_GL_REGISTER_DBFED_DBFEDHR);
EPWM_setGlobalLoadTrigger(base1, EPWM_GL_LOAD_PULSE_CNTR_PERIOD);
EPWM_enableGlobalLoadOneShotMode(base1);
EPWM_enableGlobalLoad(base1);
EPWM_setupEPWMLinks(base1,EPWM_LINK_WITH_EPWM_2,EPWM_LINK_GLDCTL2);

EPWM_setFallingEdgeDeadBandDelayInput(base1,EPWM_DB_INPUT_EPWMA);
EPWM_setDeadBandDelayPolarity(base1,EPWM_DB_FED,
EPWM_DB_POLARITY_ACTIVE_LOW);
EPWM_enablePhaseShiftLoad(base1);
EPWM_setPhaseShift(base1,2);
EPWM_setCountModeAfterSync(base1, EPWM_COUNT_MODE_UP_AFTER_SYNC);

EPWM_setActionQualifierContSWForceShadowMode(base1,
EPWM_AQ_SW_IMMEDIATE_LOAD);

}

现在问题就是存在检测不准的情况,我怀疑是事件滤除的window不到位,所以我想看一下这个epwm的波形,但是不知道为什么没有波形。

Green Deng:

额,你的问题里面环节比较多啊,有没有分析过是PWM本身没有发波,还是发波后被TZ模块封波了?

或者你有没有比对过检测的硬件引脚是否正确?有些工程师经常会搞错引脚

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049C: EPWM没有波形
分享到: 更多 (0)