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.

[参考译文] TMS320F28379D:TI F28379D 触发区 CBC 问题

Guru**** 2524550 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1196605/tms320f28379d-ti-f28379d-trip-zone-cbc-problem

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

如下图所示、我们使用跳闸区 CBC 来关闭 PWM。 发生 CBC 事件时、PWMA 输出确实已关闭、但当 PWMB 接近 TBCTR=ZERO 时、将出现波形。 如何解决错误的波形?

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

    您好!

    您能否分享您如何配置 ePWM? 您要使用任何 C2000Ware EPWM 示例、还是您的自定义项目?

    此致、Santosh

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

    大家好、Santosh:

       以下代码是 PWM DAC CMPSS 设置。
      我的应用程序如下所示:

          DAC -> CMP+(/w 斜坡发生器)-> ePWM x-bar -> dc -> CBC 跳变区

    void EPWM_init(){
        EPWM_setEmulationMode(myEPWM7_BASE, EPWM_EMULATION_FREE_RUN);	
        EPWM_setClockPrescaler(myEPWM7_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);	
        EPWM_setTimeBasePeriod(myEPWM7_BASE, 600);	
        EPWM_setTimeBaseCounter(myEPWM7_BASE, 0);	
        EPWM_setTimeBaseCounterMode(myEPWM7_BASE, EPWM_COUNTER_MODE_UP);	
        EPWM_disablePhaseShiftLoad(myEPWM7_BASE);	
        EPWM_setPhaseShift(myEPWM7_BASE, 0);	
        EPWM_setSyncOutPulseMode(myEPWM7_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_A, 400);	
        EPWM_setCounterCompareShadowLoadMode(myEPWM7_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_B, 0);	
        EPWM_setCounterCompareShadowLoadMode(myEPWM7_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_C, 181);	
        EPWM_setCounterCompareValue(myEPWM7_BASE, EPWM_COUNTER_COMPARE_D, 550);	
        EPWM_setActionQualifierT1TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_2);	
        EPWM_setActionQualifierT2TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_2);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_T1_COUNT_UP);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_T2_COUNT_UP);	
        EPWM_setActionQualifierT1TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCB_2);	
        EPWM_setActionQualifierT2TriggerSource(myEPWM7_BASE, EPWM_AQ_TRIGGER_EVENT_TRIG_DCB_2);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_T1_COUNT_UP);	
        EPWM_setActionQualifierAction(myEPWM7_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_T2_COUNT_UP);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_LOW);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_LOW);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCAEVT1, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCAEVT2, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCBEVT1, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM7_BASE, EPWM_TZ_ACTION_EVENT_DCBEVT2, EPWM_TZ_ACTION_DISABLE);	
        EPWM_enableTripZoneSignals(myEPWM7_BASE, EPWM_TZ_SIGNAL_DCAEVT2 | EPWM_TZ_SIGNAL_DCBEVT2);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCAH);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCAL);	
        EPWM_setTripZoneDigitalCompareEventCondition(myEPWM7_BASE, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH);	
        EPWM_setTripZoneDigitalCompareEventCondition(myEPWM7_BASE, EPWM_TZ_DC_OUTPUT_A2, EPWM_TZ_EVENT_DCXH_HIGH);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCBH);	
        EPWM_selectDigitalCompareTripInput(myEPWM7_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCBL);	
        EPWM_setTripZoneDigitalCompareEventCondition(myEPWM7_BASE, EPWM_TZ_DC_OUTPUT_B1, EPWM_TZ_EVENT_DCXH_HIGH);	
        EPWM_setTripZoneDigitalCompareEventCondition(myEPWM7_BASE, EPWM_TZ_DC_OUTPUT_B2, EPWM_TZ_EVENT_DCXH_HIGH);	
        EPWM_enableDigitalCompareCounterCapture(myEPWM7_BASE);	
        EPWM_setDeadBandDelayPolarity(myEPWM7_BASE, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW);	
        EPWM_enableInterrupt(myEPWM7_BASE);	
        EPWM_setInterruptSource(myEPWM7_BASE, EPWM_INT_TBCTR_ZERO);	
        EPWM_setInterruptEventCount(myEPWM7_BASE, 1);	
        EPWM_enableADCTrigger(myEPWM7_BASE, EPWM_SOC_A);	
        EPWM_setADCTriggerSource(myEPWM7_BASE, EPWM_SOC_A, EPWM_SOC_TBCTR_U_CMPC);	
        EPWM_setADCTriggerEventPrescale(myEPWM7_BASE, EPWM_SOC_A, 1);	
    }
    void CMPSS_init(){
    
    	//myCMPSS0 initialization
    	// Sets the configuration for the high comparator.
    	CMPSS_configHighComparator(myCMPSS0_BASE,(CMPSS_INSRC_DAC));
    	// Sets the configuration for the high comparator.
    	CMPSS_configLowComparator(myCMPSS0_BASE,(CMPSS_INSRC_DAC));
    	// Sets the configuration for the internal comparator DACs.
    	//  - ePWM module must be configured before using here.
    	CMPSS_configDAC(myCMPSS0_BASE,(CMPSS_DACVAL_PWMSYNC | CMPSS_DACREF_VDDA | CMPSS_DACSRC_RAMP));
    	// Sets the value of the internal DAC of the high comparator.
    	CMPSS_setDACValueHigh(myCMPSS0_BASE,3847U);
    	// Sets the value of the internal DAC of the low comparator.
    	CMPSS_setDACValueLow(myCMPSS0_BASE,4095U);
    	//  Configures the digital filter of the high comparator.
    	CMPSS_configFilterHigh(myCMPSS0_BASE, 2U, 10U, 10U);
    	// Configures the digital filter of the low comparator.
    	CMPSS_configFilterLow(myCMPSS0_BASE, 2U, 10U, 10U);
    	// Sets the output signal configuration for the high comparator.
    	CMPSS_configOutputsHigh(myCMPSS0_BASE,(CMPSS_TRIPOUT_ASYNC_COMP | CMPSS_TRIP_ASYNC_COMP));
    	// Sets the output signal configuration for the low comparator.
    	CMPSS_configOutputsLow(myCMPSS0_BASE,(CMPSS_TRIPOUT_ASYNC_COMP | CMPSS_TRIP_ASYNC_COMP));
    	// Sets the comparator hysteresis settings.
    	CMPSS_setHysteresis(myCMPSS0_BASE,4U);
    	// Configures the comparator subsystem's ramp generator.
    	CMPSS_configRamp(myCMPSS0_BASE,38400U,16U,0U,7U,true);
    	// Disables reset of HIGH comparator digital filter output latch on PWMSYNC
    	CMPSS_disableLatchResetOnPWMSYNCHigh(myCMPSS0_BASE);
    	// Disables reset of LOW comparator digital filter output latch on PWMSYNC
    	CMPSS_disableLatchResetOnPWMSYNCLow(myCMPSS0_BASE);
    	// Configures whether or not the digital filter latches are reset by PWMSYNC
    	CMPSS_configLatchOnPWMSYNC(myCMPSS0_BASE,false,false);
    	// Enables the CMPSS module.
    	CMPSS_enableModule(myCMPSS0_BASE);
    }
    void DAC_init(){
    	// myDAC0 initialization
    	// Set DAC reference voltage.
    	DAC_setReferenceVoltage(myDAC0_BASE, DAC_REF_ADC_VREFHI);
    	// Set DAC load mode.
    	DAC_setLoadMode(myDAC0_BASE, DAC_LOAD_PWMSYNC);
    	// Set DAC ePWMSYNC signal.
    	//  - ePWM module must be configured before using here.
    	DAC_setPWMSyncSignal(myDAC0_BASE, 7U);
    	// Enable the DAC output
    	DAC_enableOutput(myDAC0_BASE);
    	// Set the DAC shadow output
    	DAC_setShadowValue(myDAC0_BASE, 2048U);
    	// Lock write-access to DAC Register
    	DAC_lockRegister(myDAC0_BASE, (DAC_LOCK_SHADOW));
    
    	// Delay for buffered DAC to power up.
    	DEVICE_DELAY_US(500);
    
    }
    void EPWMXBAR_init(){
    	//myEPWMXBAR0 initialization
    		
    	XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX00_CMPSS1_CTRIPH);
    	XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX01_CMPSS1_CTRIPL);
    	XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX00 | XBAR_MUX01);
    }

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

    尊敬的 Poyi:

    我正在联系系统 专家、了解如何使用  DAC -> CMP+(/w 斜坡发生器)。 请在明天之前回复。

    此致、Santosh

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

    尊敬的 Poyi:

    抱歉、我没有完全回答您的问题。 你所说的波是什么意思? 您能否提供一个展示您希望实现的信号链的图片? 比如说下面这一个?  

    此致、

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

    您好:

      Pic 下面是需要 PWM 波形。 THX

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

    尊敬的 Poyi:

    感谢您的照片。 如何使用 CMPSS 控制 PWM? 它是否类似于峰值电流模式控制? 您是否还可以按照我之前发送的内容添加 CMPSS 斜坡 DAC 和反馈信号。 我提出这个问题的原因是、我想知道这是与 CMPSS 有关、还是仅与 PWM 模块设置有关。

    此致、

    陈