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.

[参考译文] TMS320F280049C:两个脉冲之间的相移

Guru**** 2578945 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1234264/tms320f280049c-phase-shift-between-two-pulses

器件型号:TMS320F280049C

我正在使用 Code Composer Studio 生成 两个脉冲之间的相移、使用 MATLAB C2000 VLOCKSET 我能够获得脉冲中的相移和死区。 但在 Code Composer Studio 中、我无法这样做。 我在下面给出了我所做的编码。 求你帮我。

进行编程


*作者: Deepti
*/

#ifndef PWM_H_
#define PWM_H_
#include "driverlib.h"
#include "device.h"
//#include "board.h"

//声明
#define EPWM4_TIMER_TBPRD 5000UL
#define EPWM5_TIMER_TBPRD 5000UL
#define EPWM6_TIMER_TBPRD 5000UL
#define EPWM7_TIMER_TBPRD 5000UL


//函数原型
void initEPWM4 (void);
void initEPWM5 (void);
void initEPWM6 (void);
void initEPWM7 (void);

//调用 PWM4函数
void initEPWM4()

//设置 TBCLK

ePWM_setTimeBasePeriod (EPWM4_BASE、EPWM4_TIMER_TBPRD);

//同步输出事件

EPWM_setSyncOutPulseMode (EPWM4_BASE、EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
EPWM_setPhaseShift (EPWM4_BASE、0u);
EPWM_setTimeBaseCounter (EPWM4_BASE、0U);


//同步事件
//ePWM_setCountModeAfterSync (EPWM4_BASE、ePWM_COUNT_MODE_DOWN_AFTER_SYNC);

//设置比较值
EPWM_setCounterCompareValue (EPWM4_base、EPWM_COUNTER_COMPARE_A、2500);
EPWM_setCounterCompareValue (EPWM4_base、EPWM_COUNTER_COMPARE_B、0);

//设置计数器模式

EPWM_setTimeBaseCounterMode (EPWM4_BASE、EPWM_COUNTER_MODE_UP_DOWN);
EPWM_disablePhaseShiftLoad (EPWM4_BASE);
EPWM_setClockPrescaler (EPWM4_base、EPWM_CLOCK_DIVIDER_1、EPWM_HSCLOCK_DIVIDER_1);

//设置隐藏

EPWM_setCounterCompareShadowLoadMode (EPWM4_base、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode (EPWM4_base、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);

//设置操作

EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);

}

//调用 PWM5函数
void initEPWM5()

//设置 TBCLK

ePWM_setTimeBasePeriod (EPWM5_base、EPWM5_TIMER_TBPRD);
EPWM_setTimeBaseCounter (EPWM5_base、0u);

//同步事件
ePWM_setCountModeAfterSync (EPWM5_base、ePWM_COUNT_MODE_DOWN_AFTER_SYNC);

//相移值

EPWM_setPhaseShift (EPWM5_base、2000u);

//
ePWM_setSyncOutPulseMode (EPWM5_base、EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);

//设置比较值

EPWM_setCounterCompareValue (EPWM5_base、EPWM_COUNTER_COMPARE_A、2500U);
EPWM_setCounterCompareValue (EPWM5_base、EPWM_COUNTER_COMPARE_B、0U);

//设置计数器模式

EPWM_setTimeBaseCounterMode (EPWM5_base、EPWM_COUNTER_MODE_UP_DOWN);
ePWM_setClockPrescaler (EPWM5_base、ePWM_CLOCK_DIVIDER_1、ePWM_HSCLOCK_DIVIDER_1);

//设置隐藏

EPWM_setCounterCompareShadowLoadMode (EPWM5_base、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode (EPWM5_base、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);

//设置操作

EPWM_setActionQualifierAction (EPWM5_base、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
EPWM_setActionQualifierAction (EPWM5_base、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
}

//调用 PWM6函数

/*void initEPWM6()

//设置 TBCLK

ePWM_setTimeBasePeriod (EPWM6_BASE、EPWM6_TIMER_TBPRD);
EPWM_setPhaseShift (EPWM6_BASE、0u);
EPWM_setTimeBaseCounter (EPWM6_BASE、0u);

//设置比较值

EPWM_setCounterCompareValue (EPWM6_BASE、EPWM_COUNTER_COMPARE_A、2500);
EPWM_setCounterCompareValue (EPWM6_BASE、EPWM_COUNTER_COMPARE_B、0);

//设置计数器模式

EPWM_setTimeBaseCounterMode (EPWM6_BASE、EPWM_COUNTER_MODE_UP_DOWN);
EPWM_disablePhaseShiftLoad (EPWM6_BASE);
ePWM_setClockPrescaler (EPWM6_BASE、ePWM_CLOCK_DIVIDER_1、ePWM_HSCLOCK_DIVIDER_1);

//设置隐藏

EPWM_setCounterCompareShadowLoadMode (EPWM6_BASE、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode (EPWM6_BASE、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);

//设置操作

EPWM_setActionQualifierAction (EPWM6_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction (EPWM6_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);

}

//调用 PWM7函数
void initEPWM7()

//设置 TBCLK

ePWM_setTimeBasePeriod (EPWM7_BASE、EPWM7_TIMER_TBPRD);
EPWM_setPhaseShift (EPWM7_BASE、2000u);
EPWM_setTimeBaseCounter (EPWM7_BASE、0u);

//设置比较值

EPWM_setCounterCompareValue (EPWM7_BASE、EPWM_COUNTER_COMPARE_A、2500);
EPWM_setCounterCompareValue (EPWM7_BASE、EPWM_COUNTER_COMPARE_B、0);

//设置计数器模式

EPWM_setTimeBaseCounterMode (EPWM7_BASE、EPWM_COUNTER_MODE_UP_DOWN);
// ePWM_disablePhaseShiftLoad (EPWM6_BASE);
EPWM_setClockPrescaler (EPWM7_BASE、EPWM_CLOCK_DIVIDER_1、EPWM_HSCLOCK_DIVIDER_1);

//设置隐藏

EPWM_setCounterCompareShadowLoadMode (EPWM7_BASE、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode (EPWM7_BASE、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);

//设置操作

EPWM_setActionQualifierAction (EPWM7_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
EPWM_setActionQualifierAction (EPWM7_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);

}

*/
#endif PWM_H_

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

    您好!

    您需要使用 EPWM_enablePhaseShiftLoad 函数启用相移、以使用相移。

    我在您的代码中没有看到任何可配置死区的东西、您是否想在 ePWM 输出上使用死区?

    谢谢!

    Luke

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

    /*
     * pwm.h
     *
     *  Created on: 03-Jun-2023
     *      Author: Deepti
     */
    
    #ifndef PWM_H_
    #define PWM_H_
    #include "driverlib.h"
    #include "device.h"
    //#include "board.h"
    
    // Declaration
    #define EPWM4_TIMER_TBPRD    5000UL
    #define EPWM5_TIMER_TBPRD    5000UL
    #define EPWM6_TIMER_TBPRD    5000UL
    #define EPWM8_TIMER_TBPRD    5000UL
    
    
    // function prototype
    void initEPWM4(void);
    void initEPWM5(void);
    void initEPWM6(void);
    void initEPWM8(void);
    
    // PWM4 FUNCTION CALLED
    void initEPWM4()
    {
        // Set-up TBCLK
    
        EPWM_setTimeBasePeriod(EPWM4_BASE, EPWM4_TIMER_TBPRD);
    
        // SYNC OUT EVENT
    
       EPWM_setSyncOutPulseMode(EPWM4_BASE,EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
        //EPWM_setPhaseShift(EPWM4_BASE, 0U);
        EPWM_setTimeBaseCounter(EPWM4_BASE, 0U);
    
    
        // SYNC EVENT
        //EPWM_setCountModeAfterSync(EPWM4_BASE, EPWM_COUNT_MODE_DOWN_AFTER_SYNC);
    
            // Set Compare values
            EPWM_setCounterCompareValue(EPWM4_BASE,EPWM_COUNTER_COMPARE_A,2500);
            EPWM_setCounterCompareValue(EPWM4_BASE, EPWM_COUNTER_COMPARE_B,0);
    
        // Set up counter mode
    
        EPWM_setTimeBaseCounterMode(EPWM4_BASE, EPWM_COUNTER_MODE_UP_DOWN);
        EPWM_disablePhaseShiftLoad(EPWM4_BASE);
        EPWM_setClockPrescaler(EPWM4_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    
            // Set up shadowing
    
        EPWM_setCounterCompareShadowLoadMode(EPWM4_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
        EPWM_setCounterCompareShadowLoadMode(EPWM4_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
           // Set actions
    
        EPWM_setActionQualifierAction(EPWM4_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM4_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    
    }
    
          // PWM5 FUNCTION CALLED
    void initEPWM5()
    {
          // Set-up TBCLK
    
        EPWM_setTimeBasePeriod(EPWM5_BASE, EPWM5_TIMER_TBPRD);
        EPWM_setTimeBaseCounter(EPWM5_BASE, 0U);
    
        // SYNC EVENT
        EPWM_setCountModeAfterSync(EPWM5_BASE, EPWM_COUNT_MODE_DOWN_AFTER_SYNC);
    
        // PHASE SHIFT VALUE
    
        EPWM_setPhaseShift(EPWM5_BASE, 2000U);
        EPWM_enablePhaseShiftLoad(EPWM5_BASE);
    
        //
      //  EPWM_setSyncOutPulseMode(EPWM5_BASE,EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
    
         // Set Compare values
    
        EPWM_setCounterCompareValue(EPWM5_BASE,EPWM_COUNTER_COMPARE_A,2500U);
        EPWM_setCounterCompareValue(EPWM5_BASE, EPWM_COUNTER_COMPARE_B,0U);
    
        // Set up counter mode
    
        EPWM_setTimeBaseCounterMode(EPWM5_BASE, EPWM_COUNTER_MODE_UP_DOWN);
        EPWM_setClockPrescaler(EPWM5_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    
       // Set up shadowing
    
        EPWM_setCounterCompareShadowLoadMode(EPWM5_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
        EPWM_setCounterCompareShadowLoadMode(EPWM5_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
       // Set actions
    
        EPWM_setActionQualifierAction(EPWM5_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM5_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    }
    
       // PWM6 FUNCTION CALLED
    
    void initEPWM6()
    {
    
        // Set-up TBCLK
    
        EPWM_setTimeBasePeriod(EPWM6_BASE, EPWM6_TIMER_TBPRD);
    
        // SYNC OUT EVENT
    
        EPWM_setSyncOutPulseMode(EPWM4_BASE,EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
        //EPWM_setPhaseShift(EPWM6_BASE, 0U);
        EPWM_setTimeBaseCounter(EPWM6_BASE, 0U);
    
        // Set Compare values
    
        EPWM_setCounterCompareValue(EPWM6_BASE,EPWM_COUNTER_COMPARE_A,2500);
        EPWM_setCounterCompareValue(EPWM6_BASE, EPWM_COUNTER_COMPARE_B,0);
    
        // Set up counter mode
    
        EPWM_setTimeBaseCounterMode(EPWM6_BASE, EPWM_COUNTER_MODE_UP_DOWN);
        EPWM_disablePhaseShiftLoad(EPWM6_BASE);
        EPWM_setClockPrescaler(EPWM6_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    
        // Set up shadowing
    
        EPWM_setCounterCompareShadowLoadMode(EPWM6_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
        EPWM_setCounterCompareShadowLoadMode(EPWM6_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
        // Set actions
    
        EPWM_setActionQualifierAction(EPWM6_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM6_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    
    }
    
       // PWM7 FUNCTION CALLED
    void initEPWM8()
    {
          // Set-up TBCLK
    
        EPWM_setTimeBasePeriod(EPWM8_BASE, EPWM8_TIMER_TBPRD);
        EPWM_setTimeBaseCounter(EPWM8_BASE, 0U);
    
        // SYNC EVENT
        EPWM_setCountModeAfterSync(EPWM8_BASE, EPWM_COUNT_MODE_DOWN_AFTER_SYNC);
    
        // PHASE SHIFT VALUE
    
        EPWM_setPhaseShift(EPWM8_BASE, 2000U);
        EPWM_enablePhaseShiftLoad(EPWM8_BASE);
    
        //
      //  EPWM_setSyncOutPulseMode(EPWM5_BASE,EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
    
         // Set Compare values
    
        EPWM_setCounterCompareValue(EPWM8_BASE,EPWM_COUNTER_COMPARE_A,2500U);
        EPWM_setCounterCompareValue(EPWM8_BASE, EPWM_COUNTER_COMPARE_B,0U);
    
        // Set up counter mode
    
        EPWM_setTimeBaseCounterMode(EPWM8_BASE, EPWM_COUNTER_MODE_UP_DOWN);
        EPWM_setClockPrescaler(EPWM8_BASE,EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    
       // Set up shadowing
    
        EPWM_setCounterCompareShadowLoadMode(EPWM8_BASE, EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
        EPWM_setCounterCompareShadowLoadMode(EPWM8_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
       // Set actions
    
        EPWM_setActionQualifierAction(EPWM8_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM8_BASE,EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
    }
    
    
    #endif  PWM_H_
    

    根据该程序、我将得到 EPWM5的相移、但 ePWM 8与 EPWM4、6同相、即使给定了相移函数。 我在后面附上了同样的代码。

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

    EPWM8将始终通过 EPWM7同步。 请参阅 ePWM 章节中的此图:

    如果未从 EPWM7生成 SYNCOUT 脉冲、EPWM8将不会接收任何 SYNCIN 信号、但可以将 EPWM7配置为选择 EPWM4 SyncOut 作为其 SYNCIN 信号、然后配置 EPWM7在使用 TBCTL 寄存器接收 SYNCIN 脉冲时生成 SYNCOUT 脉冲。 这将有效地导致 EPWM8由 EPWM4同步。