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.

f28027的移相寄存器怎么配置才有用?我一直移不了相



void InitEPwm1Example(void)
{
    EALLOW;
    //PWM_setSyncMode(myPwm1, PWM_SyncMode_EPWMxSYNC);
    //CLK_enablePwmClock(myClk, PWM_Number_1);
    //PWM_enableSocAPulse(myPwm1);
    //EPwm1Regs.TBSTS.bit.SYNCI = 1;
    //EPwm1Regs.TBCTL.bit.SWFSYNC = 1;
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
    EPwm1Regs.TBCTL.bit.PHSEN = 0;
    PWM_setCounterMode(myPwm1, PWM_CounterMode_Up);         // Count up
   PWM_setPeriod(myPwm1, 2000);               // Set timer period
            PWM_setPhase(myPwm1, 0x0000);                           // Phase is 0
 PWM_setCount(myPwm1, 100);                           // Clear counter


 EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE;

 PWM_setHighSpeedClkDiv(myPwm1, PWM_HspClkDiv_by_1);     // Clock ratio to SYSCLKOUT
            PWM_setClkDiv(myPwm1, PWM_ClkDiv_by_1);
            PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow);
            PWM_setShadowMode_CmpB(myPwm1, PWM_ShadowMode_Shadow);
            PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);
            PWM_setLoadMode_CmpB(myPwm1, PWM_LoadMode_Zero);
            PWM_setCmpA(myPwm1, 1000);    // Set compare A value
            PWM_setCmpB(myPwm1, 1000);    // Set Compare B value
            PWM_setActionQual_Zero_PwmA(myPwm1, PWM_ActionQual_Set);            // Set PWM1A on Zero
            PWM_setActionQual_CntUp_CmpA_PwmA(myPwm1, PWM_ActionQual_Clear);    // Clear PWM1A on event A, up count
            PWM_setActionQual_Zero_PwmB(myPwm1, PWM_ActionQual_Set);            // Set PWM1B on Zero
            PWM_setActionQual_CntUp_CmpB_PwmB(myPwm1, PWM_ActionQual_Clear);    // Clear PWM1B on event B, up count


            EDIS;
    }

void InitEPwm2Example()
{EALLOW;
    //PWM_setSyncMode(myPwm2, PWM_SyncMode_EPWMxSYNC);
    //CLK_enablePwmClock(myClk, PWM_Number_2);
    //PWM_enableSocAPulse(myPwm2);

    //EPwm2Regs.TBSTS.bit.SYNCI = 1;
    //EPwm2Regs.TBCTL.bit.SWFSYNC = 1;
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
    EPwm2Regs.TBCTL.bit.PHSEN = 1;

    PWM_setCounterMode(myPwm2, PWM_CounterMode_Up);     // Count up
    PWM_setPeriod(myPwm2, 2000);           // Set timer period
    //PWM_disableCounterLoad(myPwm2);                     // Disable phase loading
    //PWM_enableCounterLoad(myPwm2);

    EPwm2Regs.TBPHS.half.TBPHS = 500;

    PWM_setCount(myPwm2, 100);                       // Clear counter
    PWM_setHighSpeedClkDiv(myPwm2, PWM_HspClkDiv_by_1); // Clock ratio to SYSCLKOUT
    PWM_setClkDiv(myPwm2, PWM_ClkDiv_by_1);

    EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;


    // Setup shadow register load on ZERO
    PWM_setShadowMode_CmpA(myPwm2, PWM_ShadowMode_Shadow);
    PWM_setShadowMode_CmpB(myPwm2, PWM_ShadowMode_Shadow);
    PWM_setLoadMode_CmpA(myPwm2, PWM_LoadMode_Zero);
    PWM_setLoadMode_CmpB(myPwm2, PWM_LoadMode_Zero);

    // Set Compare values
    PWM_setCmpA(myPwm2, 1000);    // Set compare A value
    PWM_setCmpB(myPwm2, 1000);    // Set Compare B value


    // Set actions
    PWM_setActionQual_Period_PwmA(myPwm2, PWM_ActionQual_Set);    // Clear PWM2A on Period
    PWM_setActionQual_CntUp_CmpA_PwmA(myPwm2, PWM_ActionQual_Clear);  // Set PWM2A on event A, up count

    PWM_setActionQual_Period_PwmB(myPwm2, PWM_ActionQual_Set);    // Clear PWM2B on Period
    PWM_setActionQual_CntUp_CmpB_PwmB(myPwm2, PWM_ActionQual_Clear);  // Set PWM2B on event B, up count

    EDIS;
}

void InitEPwm3Example()
{EALLOW;
    //PWM_setSyncMode(myPwm3, PWM_SyncMode_EPWMxSYNC);
   // CLK_enablePwmClock(myClk, PWM_Number_3);
    //PWM_enableSocAPulse(myPwm3);

    //EPwm3Regs.TBSTS.bit.SYNCI = 1;
    //EPwm3Regs.TBCTL.bit.SWFSYNC = 1;
    EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
    EPwm3Regs.TBCTL.bit.PHSEN = 1;

    PWM_setCounterMode(myPwm3, PWM_CounterMode_Up);     // Count up
    PWM_setPeriod(myPwm3, 2000);           // Set timer period
    //PWM_disableCounterLoad(myPwm3);                     // Disable phase loading
    //PWM_enableCounterLoad(myPwm3);

    EPwm3Regs.TBPHS.half.TBPHS = 99;

    PWM_setCount(myPwm3, 100);                       // Clear counter
    PWM_setHighSpeedClkDiv(myPwm3, PWM_HspClkDiv_by_1); // Clock ratio to SYSCLKOUT
    PWM_setClkDiv(myPwm3, PWM_ClkDiv_by_1);

    EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;


    // Setup shadow register load on ZERO
    PWM_setShadowMode_CmpA(myPwm3, PWM_ShadowMode_Shadow);
    PWM_setShadowMode_CmpB(myPwm3, PWM_ShadowMode_Shadow);
    PWM_setLoadMode_CmpA(myPwm3, PWM_LoadMode_Zero);
    PWM_setLoadMode_CmpB(myPwm3, PWM_LoadMode_Zero);

    // Set Compare values
    PWM_setCmpA(myPwm3, 1000);    // Set compare A value
    PWM_setCmpB(myPwm3, 1000);    // Set Compare B value


    // Set actions
    PWM_setActionQual_Period_PwmA(myPwm3, PWM_ActionQual_Set);    // Clear PWM2A on Period
    PWM_setActionQual_CntUp_CmpA_PwmA(myPwm3, PWM_ActionQual_Clear);  // Set PWM2A on event A, up count

    PWM_setActionQual_Period_PwmB(myPwm3, PWM_ActionQual_Set);    // Clear PWM2B on Period
    PWM_setActionQual_CntUp_CmpB_PwmB(myPwm3, PWM_ActionQual_Clear);  // Set PWM2B on event B, up count

    EDIS;
}

代码有点乱 我简单说下 我是把epwm1配置成master  同步设置成 TB_CTR_ZERO  关闭PHSEN开关  

把 epwm2 和 epwm3设置成slave 同步设置成TB_SYNC_IN  打开PHSEN开关  并设置一个相位值 (随便设置的) 

这些都是按照手册 、论坛里其他人的代码设置的,   但是测试的波形并没有移相

因为我找到的  都是epwm模块的配置例程  我想知道 是不是main函数里也需要设置些什么  但是我没设置到  所以就移不了相

  • void InitEPwm1Example(void)
    {
        EALLOW;
        //PWM_setSyncMode(myPwm1, PWM_SyncMode_EPWMxSYNC);
        //CLK_enablePwmClock(myClk, PWM_Number_1);
        //PWM_enableSocAPulse(myPwm1);
        //EPwm1Regs.TBSTS.bit.SYNCI = 1;
        //EPwm1Regs.TBCTL.bit.SWFSYNC = 1;
        EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
        EPwm1Regs.TBCTL.bit.PHSEN = 0;
        PWM_setCounterMode(myPwm1, PWM_CounterMode_Up);         // Count up
       PWM_setPeriod(myPwm1, 2000);               // Set timer period
                PWM_setPhase(myPwm1, 0x0000);                           // Phase is 0
     PWM_setCount(myPwm1, 100);                           // Clear counter
    
    
     EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE;
    
     PWM_setHighSpeedClkDiv(myPwm1, PWM_HspClkDiv_by_1);     // Clock ratio to SYSCLKOUT
                PWM_setClkDiv(myPwm1, PWM_ClkDiv_by_1);
                PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow);
                PWM_setShadowMode_CmpB(myPwm1, PWM_ShadowMode_Shadow);
                PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);
                PWM_setLoadMode_CmpB(myPwm1, PWM_LoadMode_Zero);
                PWM_setCmpA(myPwm1, 1000);    // Set compare A value
                PWM_setCmpB(myPwm1, 1000);    // Set Compare B value
                PWM_setActionQual_Zero_PwmA(myPwm1, PWM_ActionQual_Set);            // Set PWM1A on Zero
                PWM_setActionQual_CntUp_CmpA_PwmA(myPwm1, PWM_ActionQual_Clear);    // Clear PWM1A on event A, up count
                PWM_setActionQual_Zero_PwmB(myPwm1, PWM_ActionQual_Set);            // Set PWM1B on Zero
                PWM_setActionQual_CntUp_CmpB_PwmB(myPwm1, PWM_ActionQual_Clear);    // Clear PWM1B on event B, up count
    
    
                EDIS;
        }
    
    void InitEPwm2Example()
    {EALLOW;
        //PWM_setSyncMode(myPwm2, PWM_SyncMode_EPWMxSYNC);
        //CLK_enablePwmClock(myClk, PWM_Number_2);
        //PWM_enableSocAPulse(myPwm2);
    
        //EPwm2Regs.TBSTS.bit.SYNCI = 1;
        //EPwm2Regs.TBCTL.bit.SWFSYNC = 1;
        EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
        EPwm2Regs.TBCTL.bit.PHSEN = 1;
    
        PWM_setCounterMode(myPwm2, PWM_CounterMode_Up);     // Count up
        PWM_setPeriod(myPwm2, 2000);           // Set timer period
        //PWM_disableCounterLoad(myPwm2);                     // Disable phase loading
        //PWM_enableCounterLoad(myPwm2);
    
        EPwm2Regs.TBPHS.half.TBPHS = 500;
    
        PWM_setCount(myPwm2, 100);                       // Clear counter
        PWM_setHighSpeedClkDiv(myPwm2, PWM_HspClkDiv_by_1); // Clock ratio to SYSCLKOUT
        PWM_setClkDiv(myPwm2, PWM_ClkDiv_by_1);
    
        EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    
    
        // Setup shadow register load on ZERO
        PWM_setShadowMode_CmpA(myPwm2, PWM_ShadowMode_Shadow);
        PWM_setShadowMode_CmpB(myPwm2, PWM_ShadowMode_Shadow);
        PWM_setLoadMode_CmpA(myPwm2, PWM_LoadMode_Zero);
        PWM_setLoadMode_CmpB(myPwm2, PWM_LoadMode_Zero);
    
        // Set Compare values
        PWM_setCmpA(myPwm2, 1000);    // Set compare A value
        PWM_setCmpB(myPwm2, 1000);    // Set Compare B value
    
    
        // Set actions
        PWM_setActionQual_Period_PwmA(myPwm2, PWM_ActionQual_Set);    // Clear PWM2A on Period
        PWM_setActionQual_CntUp_CmpA_PwmA(myPwm2, PWM_ActionQual_Clear);  // Set PWM2A on event A, up count
    
        PWM_setActionQual_Period_PwmB(myPwm2, PWM_ActionQual_Set);    // Clear PWM2B on Period
        PWM_setActionQual_CntUp_CmpB_PwmB(myPwm2, PWM_ActionQual_Clear);  // Set PWM2B on event B, up count
    
        EDIS;
    }
    
    void InitEPwm3Example()
    {EALLOW;
        //PWM_setSyncMode(myPwm3, PWM_SyncMode_EPWMxSYNC);
       // CLK_enablePwmClock(myClk, PWM_Number_3);
        //PWM_enableSocAPulse(myPwm3);
    
        //EPwm3Regs.TBSTS.bit.SYNCI = 1;
        //EPwm3Regs.TBCTL.bit.SWFSYNC = 1;
        EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
        EPwm3Regs.TBCTL.bit.PHSEN = 1;
    
        PWM_setCounterMode(myPwm3, PWM_CounterMode_Up);     // Count up
        PWM_setPeriod(myPwm3, 2000);           // Set timer period
        //PWM_disableCounterLoad(myPwm3);                     // Disable phase loading
        //PWM_enableCounterLoad(myPwm3);
    
        EPwm3Regs.TBPHS.half.TBPHS = 99;
    
        PWM_setCount(myPwm3, 100);                       // Clear counter
        PWM_setHighSpeedClkDiv(myPwm3, PWM_HspClkDiv_by_1); // Clock ratio to SYSCLKOUT
        PWM_setClkDiv(myPwm3, PWM_ClkDiv_by_1);
    
        EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    
    
        // Setup shadow register load on ZERO
        PWM_setShadowMode_CmpA(myPwm3, PWM_ShadowMode_Shadow);
        PWM_setShadowMode_CmpB(myPwm3, PWM_ShadowMode_Shadow);
        PWM_setLoadMode_CmpA(myPwm3, PWM_LoadMode_Zero);
        PWM_setLoadMode_CmpB(myPwm3, PWM_LoadMode_Zero);
    
        // Set Compare values
        PWM_setCmpA(myPwm3, 1000);    // Set compare A value
        PWM_setCmpB(myPwm3, 1000);    // Set Compare B value
    
    
        // Set actions
        PWM_setActionQual_Period_PwmA(myPwm3, PWM_ActionQual_Set);    // Clear PWM2A on Period
        PWM_setActionQual_CntUp_CmpA_PwmA(myPwm3, PWM_ActionQual_Clear);  // Set PWM2A on event A, up count
    
        PWM_setActionQual_Period_PwmB(myPwm3, PWM_ActionQual_Set);    // Clear PWM2B on Period
        PWM_setActionQual_CntUp_CmpB_PwmB(myPwm3, PWM_ActionQual_Clear);  // Set PWM2B on event B, up count
    
        EDIS;
    }
    

    代码有点乱 我简单说下 我是把epwm1配置成master  同步设置成 TB_CTR_ZERO  关闭PHSEN开关  

    把 epwm2 和 epwm3设置成slave 同步设置成TB_SYNC_IN  打开PHSEN开关  并设置一个相位值 (随便设置的) 

    这些都是按照手册 、论坛里其他人的代码设置的,   但是测试的波形并没有移相

    因为我找到的  都是epwm模块的配置例程  我想知道 是不是main函数里也需要设置些什么  但是我没设置到  所以就移不了相