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: 求大神指点,我想设定上下数模式但一直无法让马达转动有什么设定是我没注意到的吗?

Other Parts Discussed in Thread: C2000WARE

#include "F2837xD_device.h"
#include "F2837xD_Examples.h"

#define duty 4999//max 1800, set 3600--->now *0.5=1800
#define DeadTime 100//0xAF=175
//ETSEL ZERO=0xA09  PRD=0xA0A ZERO&PRD=0xA0B CAU=0xA0C CAD=0xA0D CBU=0xA0E CBD=0xA0F

//-------------------------------------------------------------------
void ePWM(void) // 設定ePWM
{
//  EALLOW;                     // Enable EALLOW protected register access
//  SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
//  EDIS;                       // Disable EALLOW protected register access

    //-----ePWM1設定--------

    EPwm1Regs.TBCTL.all = 0x4031; //初始化Time base counter 的設w
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm1Regs.TBCTL.bit.CLKDIV = 1;
    EPwm1Regs.TBCTR = 0x0000;               // Clear timer counter
    EPwm1Regs.TBPRD = duty;     // Set timer period
    EPwm1Regs.TBPHS.bit.TBPHS = 0x0000; // Set timer phase

    //*****************************************
    EPwm1Regs.CMPA.bit.CMPA = duty;
    EPwm1Regs.CMPB.bit.CMPB = 0;

    //*****************************************
    EPwm1Regs.CMPCTL.all = 0x0; //計數器比較器的存取設定 0x50=1010000
    //01:CLR 10:SET 00:do nothing
    EPwm1Regs.AQCTLA.bit.ZRO = 0x0;
    EPwm1Regs.AQCTLA.bit.CAD = 0x8;
    EPwm1Regs.AQCTLA.bit.CBD = 0x4;
    //EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
    EPwm1Regs.AQCTLB.bit.ZRO = 0x0;
    EPwm1Regs.AQCTLB.bit.CAD = 0x8;
    EPwm1Regs.AQCTLB.bit.CBD = 0x4;
    //EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;
    EPwm1Regs.AQSFRC.all = 0x0000;      // Action-qualifier s/w force register
    EPwm1Regs.AQCSFRC.all = 0x0000;     // Action-qualifier continuous s/w force register
    EPwm1Regs.DBCTL.all = 0x002B;           // 決定上升下降延遲方式
    EPwm1Regs.DBRED.all = DeadTime;         // rising edge delay
    EPwm1Regs.DBFED.all = DeadTime;         // falling edge delay
    EPwm1Regs.PCCTL.bit.CHPEN = 0;      // PWM chopper unit disabled
    EALLOW;
    EPwm1Regs.TZCLR.all = 0x0007;
    EPwm1Regs.TZSEL.all = 0x0008;     //指定使用TZ4為觸發源
    EPwm1Regs.TZCTL.all = 0x000A;     //以觸發TZ4使ePWM強制關閉之AB位置 0xA=1010
    EDIS;
    //EPwm1Regs.ETCLR.all = 0x004;      //
    EPwm1Regs.ETSEL.all = 0xA09;
    EPwm1Regs.ETPS.all = 0x0005;
    //EPwm1Regs.TBCTL.bit.CTRMODE = 0x2;  //上下數模式

    //-----ePWM1設定--------

    EPwm2Regs.TBCTL.all = 0xC031; //初始化Time base counter 的設w
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm2Regs.TBCTL.bit.CLKDIV = 1;
    EPwm2Regs.TBCTR = 0x0000;               // Clear timer counter
    EPwm2Regs.TBPRD = duty;     // Set timer period
    EPwm2Regs.TBPHS.bit.TBPHS = 0x0000; // Set timer phase

    //*****************************************
    EPwm2Regs.CMPA.bit.CMPA = duty;
    EPwm2Regs.CMPB.bit.CMPB = 0;

    //*****************************************
    EPwm2Regs.CMPCTL.all = 0x0; //計數器比較器的存取設定
    //01:CLR 10:SET 00:do nothing
    EPwm2Regs.AQCTLA.bit.ZRO = 0x0;
    EPwm2Regs.AQCTLA.bit.CAD = 0x8;
    EPwm2Regs.AQCTLA.bit.CBD = 0x4;
    //EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
    EPwm2Regs.AQCTLB.bit.ZRO = 0x0;
    EPwm2Regs.AQCTLB.bit.CAD = 0x8;
    EPwm2Regs.AQCTLB.bit.CBD = 0x4;
    //EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;
    EPwm2Regs.AQSFRC.all = 0x0000;      // Action-qualifier s/w force register
    EPwm2Regs.AQCSFRC.all = 0x0000;     // Action-qualifier continuous s/w force register
    EPwm2Regs.DBCTL.all = 0x002B;           // 決定上升下降延遲方式
    EPwm2Regs.DBRED.all = DeadTime;         // rising edge delay
    EPwm2Regs.DBFED.all = DeadTime;         // falling edge delay
    EPwm2Regs.PCCTL.bit.CHPEN = 0;      // PWM chopper unit disabled
    EALLOW;
    EPwm2Regs.TZCLR.all = 0x0007;
    EPwm2Regs.TZSEL.all = 0x0008;     //指定使用TZ4為觸發源
    EPwm2Regs.TZCTL.all = 0x000A;     //以觸發TZ4使ePWM強制關閉
    EDIS;
    //EPwm1Regs.ETCLR.all = 0x004;      //
    EPwm2Regs.ETSEL.all = 0xA09;
    EPwm2Regs.ETPS.all = 0x0005;
    //EPwm1Regs.TBCTL.bit.CTRMODE = 0x2;  //上下數模式
    //-----ePWM1設定--------

    EPwm3Regs.TBCTL.all = 0xC031; //初始化Time base counter 的設w
    EPwm3Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm3Regs.TBCTL.bit.CLKDIV = 1;
    EPwm3Regs.TBCTR = 0x0000;               // Clear timer counter
    EPwm3Regs.TBPRD = duty;     // Set timer period
    EPwm3Regs.TBPHS.bit.TBPHS = 0x0000; // Set timer phase

    //*****************************************
    EPwm3Regs.CMPA.bit.CMPA = duty;
    EPwm3Regs.CMPB.bit.CMPB = 0;

    //*****************************************
    EPwm3Regs.CMPCTL.all = 0x0; //計數器比較器的存取設定
    //01:CLR 10:SET 00:do nothing
    EPwm3Regs.AQCTLA.bit.ZRO = 0x0;
    EPwm3Regs.AQCTLA.bit.CAD = 0x8;
    EPwm3Regs.AQCTLA.bit.CBD = 0x4;
    //EPwm3Regs.AQCTLA.bit.CAD = AQ_CLEAR;
    EPwm3Regs.AQCTLB.bit.ZRO = 0x0;
    EPwm3Regs.AQCTLB.bit.CAD = 0x8;
    EPwm3Regs.AQCTLB.bit.CBD = 0x4;
    //EPwm3Regs.AQCTLB.bit.CBD = AQ_CLEAR;
    EPwm3Regs.AQSFRC.all = 0x0000;      // Action-qualifier s/w force register
    EPwm3Regs.AQCSFRC.all = 0x0000;     // Action-qualifier continuous s/w force register
    EPwm3Regs.DBCTL.all = 0x002B;           // 決定上升下降延遲方式
    EPwm3Regs.DBRED.all = DeadTime;         // rising edge delay
    EPwm3Regs.DBFED.all = DeadTime;         // falling edge delay
    EPwm3Regs.PCCTL.bit.CHPEN = 0;      // PWM chopper unit disabled
    EALLOW;
    EPwm3Regs.TZCLR.all = 0x0007;
    EPwm3Regs.TZSEL.all = 0x0008;     //指定使用TZ4為觸發源
    EPwm3Regs.TZCTL.all = 0x000A;     //以觸發TZ4使ePWM強制關閉
    EDIS;
    //EPwm3Regs.ETCLR.all = 0x004;      //
    EPwm3Regs.ETSEL.all = 0x0A09;
    EPwm3Regs.ETPS.all = 0x0005;
    //EPwm3Regs.TBCTL.bit.CTRMODE = 0x2;  //上下數模式


    EPwm4Regs.TBCTL.all = 0xC031; //初始化Time base counter 的設w
    EPwm4Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm4Regs.TBCTL.bit.CLKDIV = 1;
    EPwm4Regs.TBCTR = 0x0000;               // Clear timer counter
    EPwm4Regs.TBPRD = duty;     // Set timer period
    EPwm4Regs.TBPHS.bit.TBPHS = 0x0000; // Set timer phase

    //*****************************************
    EPwm4Regs.CMPA.bit.CMPA = duty;
    EPwm4Regs.CMPB.bit.CMPB = 0;

    //*****************************************
    EPwm4Regs.CMPCTL.all = 0x0; //計數器比較器的存取設定
    //01:CLR 10:SET 00:do nothing
    EPwm4Regs.AQCTLA.bit.ZRO = 0x0;
    EPwm4Regs.AQCTLA.bit.CAD = 0x8;
    EPwm4Regs.AQCTLA.bit.CBD = 0x4;
    //EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
    EPwm4Regs.AQCTLB.bit.ZRO = 0x0;
    EPwm4Regs.AQCTLB.bit.CAD = 0x8;
    EPwm4Regs.AQCTLB.bit.CBD = 0x4;
    //EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;
    EPwm4Regs.AQSFRC.all = 0x0000;      // Action-qualifier s/w force register
    EPwm4Regs.AQCSFRC.all = 0x0000;     // Action-qualifier continuous s/w force register
    EPwm4Regs.DBCTL.all = 0x002B;           // 決定上升下降延遲方式
    EPwm4Regs.DBRED.all = DeadTime;         // rising edge delay
    EPwm4Regs.DBFED.all = DeadTime;         // falling edge delay
    EPwm4Regs.PCCTL.bit.CHPEN = 0;      // PWM chopper unit disabled
    EALLOW;
    EPwm4Regs.TZCLR.all = 0x0007;
    EPwm4Regs.TZSEL.all = 0x0008;     //指定使用TZ4為觸發源
    EPwm4Regs.TZCTL.all = 0x000A;     //以觸發TZ4使ePWM強制關閉
    EDIS;
    //EPwm1Regs.ETCLR.all = 0x004;      //
    //ETSEL ZERO=0xA09  PRD=0xA0A ZERO&PRD=0xA0B CAU=0xA0C CAD=0xA0D CBU=0xA0E CBD=0xA0F
    EPwm4Regs.ETSEL.all = 0x0A0C;
    EPwm4Regs.ETPS.all = 0x0005;
    //EPwm1Regs.TBCTL.bit.CTRMODE = 0x2;  //上下數模式

    //-----ePWM1設定--------

    EPwm5Regs.TBCTL.all = 0x4031; //初始化Time base counter 的設w
    EPwm5Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm5Regs.TBCTL.bit.CLKDIV = 1;
    EPwm5Regs.TBCTR = 0x0000;               // Clear timer counter
    EPwm5Regs.TBPRD = duty;     // Set timer period
    EPwm5Regs.TBPHS.bit.TBPHS = 0x0000; // Set timer phase

    //*****************************************
    EPwm5Regs.CMPA.bit.CMPA = duty;
    EPwm5Regs.CMPB.bit.CMPB = 0;

    //*****************************************
    EPwm5Regs.CMPCTL.all = 0x0; //計數器比較器的存取設定
    //01:CLR 10:SET 00:do nothing
    EPwm5Regs.AQCTLA.bit.ZRO = 0x0;
    EPwm5Regs.AQCTLA.bit.CAD = 0x8;
    EPwm5Regs.AQCTLA.bit.CBD = 0x4;
    //EPwm5Regs.AQCTLA.bit.CAD = AQ_CLEAR;
    EPwm5Regs.AQCTLB.bit.ZRO = 0x0;
    EPwm5Regs.AQCTLB.bit.CAD = 0x8;
    EPwm5Regs.AQCTLB.bit.CBD = 0x4;
    //EPwm5Regs.AQCTLB.bit.CBD = AQ_CLEAR;
    EPwm5Regs.AQSFRC.all = 0x0000;      // Action-qualifier s/w force register
    EPwm5Regs.AQCSFRC.all = 0x0000;     // Action-qualifier continuous s/w force register
    EPwm5Regs.DBCTL.all = 0x002B;           // 決定上升下降延遲方式
    EPwm5Regs.DBRED.all = DeadTime;         // rising edge delay
    EPwm5Regs.DBFED.all = DeadTime;         // falling edge delay
    EPwm5Regs.PCCTL.bit.CHPEN = 0;      // PWM chopper unit disabled
    EALLOW;
    EPwm5Regs.TZCLR.all = 0x0007;
    EPwm5Regs.TZSEL.all = 0x0008;     //指定使用TZ4為觸發源
    EPwm5Regs.TZCTL.all = 0x000A;     //以觸發TZ4使ePWM強制關閉
    EDIS;
    //EPwm5Regs.ETCLR.all = 0x004;      //
    //ETSEL ZERO=0xA09  PRD=0xA0A ZERO&PRD=0xA0B CAU=0xA0C CAD=0xA0D CBU=0xA0E CBD=0xA0F
    EPwm5Regs.ETSEL.all = 0x0A0E;
    EPwm5Regs.ETPS.all = 0x0005;
    //EPwm5Regs.TBCTL.bit.CTRMODE = 0x2;  //上下數模式
    //-----ePWM1設定--------

    EPwm6Regs.TBCTL.all = 0x4031; //初始化Time base counter 的設w
    EPwm6Regs.TBCTL.bit.HSPCLKDIV = 0;
    EPwm6Regs.TBCTL.bit.CLKDIV = 1;
    EPwm6Regs.TBCTR = 0x0000;               // Clear timer counter
    EPwm6Regs.TBPRD = duty;     // Set timer period
    EPwm6Regs.TBPHS.bit.TBPHS = 0x0000;    // Set timer phase


    EPwm6Regs.CMPA.bit.CMPA = duty;
    EPwm6Regs.CMPB.bit.CMPB = 0;


    EPwm6Regs.CMPCTL.all = 0x0; //計數器比較器的存取設定
    //01:CLR 10:SET 00:do nothing
    EPwm6Regs.AQCTLA.bit.ZRO = 0x0;
    EPwm6Regs.AQCTLA.bit.CAD = 0x8;
    EPwm6Regs.AQCTLA.bit.CBD = 0x4;
    //EPwm6Regs.AQCTLA.bit.CAD = AQ_CLEAR;
    EPwm6Regs.AQCTLB.bit.ZRO = 0x0;
    EPwm6Regs.AQCTLB.bit.CAD = 0x8;
    EPwm6Regs.AQCTLB.bit.CBD = 0x4;
    //EPwm6Regs.AQCTLB.bit.CBD = AQ_CLEAR;
    EPwm6Regs.AQSFRC.all = 0x0000;      // Action-qualifier s/w force register
    EPwm6Regs.AQCSFRC.all = 0x0000;     // Action-qualifier continuous s/w force register
    EPwm6Regs.DBCTL.all = 0x002B;           // 決定上升下降延遲方式
    EPwm6Regs.DBRED.all = DeadTime;         // rising edge delay
    EPwm6Regs.DBFED.all = DeadTime;         // falling edge delay
    EPwm6Regs.PCCTL.bit.CHPEN = 0;      // PWM chopper unit disabled
    EALLOW;
    EPwm6Regs.TZCLR.all = 0x0007;
    EPwm6Regs.TZSEL.all = 0x0008;     //指定使用TZ4為觸發源
    EPwm6Regs.TZCTL.all = 0x000A;     //以觸發TZ4使ePWM強制關閉
    EDIS;
    //EPwm6Regs.ETCLR.all = 0x004;      //
    //ETSEL ZERO=0xA09  PRD=0xA0A ZERO&PRD=0xA0B CAU=0xA0C CAD=0xA0D CBU=0xA0E CBD=0xA0F
    EPwm6Regs.ETSEL.all = 0x0A0E;
    EPwm6Regs.ETPS.all = 0x0005;
    //EPwm6Regs.TBCTL.bit.CTRMODE = 0x2;  //上下數模式

//  EALLOW;                         // Enable EALLOW protected register access
//  SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;  // HSPCLK to ePWM modules enabled
//  EDIS;                           // Disable EALLOW protected register access

    //-----------
}