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.

[参考译文] TMS320F28388D:如何在 PWM 中设置 DCS?

Guru**** 2551180 points
Other Parts Discussed in Thread: TMS320F28388D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1254912/tms320f28388d-how-to-set-up-dcs-in-pwm

器件型号:TMS320F28388D

下午好。
我使用 TMS320F28388D。

我对 PWM 感兴趣

处理器的文档中有一个图表。

显示 DCS 可以生成中断。

我有一个来自外部电路的信号连接到 PWM。 转向 DCS。

有可能从这个信号获得一个中断吗? 如图所示。

这里是初始化代码。

void PinMux_init()
{
	//
	// EPWM2 -> SYSTEM_PWM Pinmux
	//
	GPIO_setPinConfig(GPIO_2_EPWM2A);
	GPIO_setPinConfig(GPIO_148_EPWM2B);
	// GPIO0 -> myGPIOInputInterrupt0 Pinmux
	GPIO_setPinConfig(GPIO_0_GPIO0);
	// GPIO1 -> myGPIOOutput0 Pinmux
	GPIO_setPinConfig(GPIO_1_GPIO1);
	// GPIO40 -> KEY_A Pinmux
	GPIO_setPinConfig(GPIO_40_GPIO40);
	// GPIO44 -> KEY_B Pinmux
	GPIO_setPinConfig(GPIO_44_GPIO44);
	// GPIO45 -> KEY_C Pinmux
	GPIO_setPinConfig(GPIO_45_GPIO45);
	// GPIO151 -> GPIO_SYNC_INTERRUPT Pinmux
	GPIO_setPinConfig(GPIO_151_GPIO151);
	// GPIO149 -> TZ_RISEN_IN Pinmux
	GPIO_setPinConfig(GPIO_149_GPIO149);
	//
	// OUTPUTXBAR3 -> OUTPUTXBAR Pinmux
	//
	GPIO_setPinConfig(GPIO_5_OUTPUTXBAR3);
	//
	// SCIA -> SCI_DBG Pinmux
	//
	GPIO_setPinConfig(GPIO_43_SCIA_RX);
	GPIO_setPinConfig(GPIO_42_SCIA_TX);

}

void EPWM_init(){
    EPWM_setClockPrescaler(SYSTEM_PWM_BASE, EPWM_CLOCK_DIVIDER_4, EPWM_HSCLOCK_DIVIDER_4);	
    EPWM_setTimeBasePeriod(SYSTEM_PWM_BASE, 15600);	
    EPWM_setPeriodLoadMode(SYSTEM_PWM_BASE, EPWM_PERIOD_DIRECT_LOAD);	
    EPWM_setTimeBaseCounter(SYSTEM_PWM_BASE, 0);	
    EPWM_setTimeBaseCounterMode(SYSTEM_PWM_BASE, EPWM_COUNTER_MODE_UP_DOWN);	
    EPWM_setCountModeAfterSync(SYSTEM_PWM_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);	
    EPWM_enablePhaseShiftLoad(SYSTEM_PWM_BASE);	
    EPWM_setPhaseShift(SYSTEM_PWM_BASE, 0);	
    EPWM_enableSyncOutPulseSource(SYSTEM_PWM_BASE, EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);	
    EPWM_setOneShotSyncOutTrigger(SYSTEM_PWM_BASE, EPWM_OSHT_SYNC_OUT_TRIG_RELOAD);	
    EPWM_setCounterCompareValue(SYSTEM_PWM_BASE, EPWM_COUNTER_COMPARE_A, 12600);	
    EPWM_setCounterCompareShadowLoadMode(SYSTEM_PWM_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
    EPWM_setCounterCompareValue(SYSTEM_PWM_BASE, EPWM_COUNTER_COMPARE_B, 0);	
    EPWM_setCounterCompareShadowLoadMode(SYSTEM_PWM_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);	
    EPWM_setActionQualifierAction(SYSTEM_PWM_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);	
    EPWM_enableTripZoneInterrupt(SYSTEM_PWM_BASE, EPWM_TZ_INTERRUPT_DCAEVT1);	
    EPWM_selectDigitalCompareTripInput(SYSTEM_PWM_BASE, EPWM_DC_TRIP_TRIPIN6, EPWM_DC_TYPE_DCAH);	
    EPWM_selectDigitalCompareTripInput(SYSTEM_PWM_BASE, EPWM_DC_TRIP_TRIPIN5, EPWM_DC_TYPE_DCAL);	
    EPWM_setTripZoneDigitalCompareEventCondition(SYSTEM_PWM_BASE, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH);	
    EPWM_enableDigitalCompareSyncEvent(SYSTEM_PWM_BASE, EPWM_DC_MODULE_A);	
    EPWM_setDigitalCompareEventSyncMode(SYSTEM_PWM_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_INPUT_NOT_SYNCED);	
    EPWM_selectDigitalCompareCBCLatchClearEvent(SYSTEM_PWM_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_CBC_LATCH_CLR_ON_CNTR_ZERO_PERIOD);	
    EPWM_setDigitalCompareFilterInput(SYSTEM_PWM_BASE, EPWM_DC_WINDOW_SOURCE_DCBEVT2);	
    EPWM_enableInterrupt(SYSTEM_PWM_BASE);	
    EPWM_setInterruptSource(SYSTEM_PWM_BASE, EPWM_INT_TBCTR_ZERO);	
    EPWM_setInterruptEventCount(SYSTEM_PWM_BASE, 1);	
}

我应该添加什么直接从 DCS 而不是通过 TZ ?

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

    您好、Sergey:

    我无法打开您共享的图像。  

    但是、根据我的理解、您希望驱动除 TZ 之外的数字比较子模块。 可以、使用此功能可以实现这一点

    EPWM_setActionQualifierT2TriggerSource (uint32_t base、EPWM_ActionQualifierTriggerSource 触发器) 此时、您的触发源可以是其中之一、

    此函数用于设置动作限定器事件 T2的源。
    //! 触发条件的有效值为:
    //! - EPWM_AQ_TRIGG_EVENT_TRIG_DCA_1 -数字比较事件 A 1
    //! - EPWM_AQ_TRIGG_EVENT_TRIG_DCA_2 -数字比较事件 A 2
    //! - EPWM_AQ_TRIGG_EVENT_TRIG_DCB_1 -数字比较事件 B 1
    //! - EPWM_AQ_TRIGG_EVENT_TRIG_DCB_2 -数字比较事件 B 2
    //! - EPWM_AQ_TRIGG_EVENT_TRIG_TZ_1 -跳闸区域1
    //! - EPWM_AQ_TRIGG_EVENT_TRIG_TZ_2 -跳闸区域2
    //! - EPWM_AQ_TRIGG_EVENT_TRIG_TZ_3 -跳闸区域3
    //! - EPWM_AQ_TRIGG_EVENT_TRIG_EPWM_SYNCIN - EPWM 同步
    //! - EPWM_AQ_TRIGGER_EVENT_TRIGG_DC_EVTFILT -数字比较滤波器事件
    //!
    //! \无返回。

    如果这是您要找的内容、请告诉我。

    此致、

    乌坦姆

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

    该图像是否可见?

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

    还是那个?

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

    尊敬的 Sergey:

    遗憾的是、对于具有4类 ePWM 的 F28388D、我们没有该特性。 而新的5类(F28P65器件)可以生成您的要求、即 DCS 可以在事件触发时直接生成中断、而无需使用 TZEINT。  

    此致!

    乌坦姆