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.

TMS320F28335: AD采样电网电压瞬时值,再通过PWM输出采样值,结果与电网电压相差半个周期(180度),可能是什么原因?

Part Number: TMS320F28335

检查了接线和电压换算是对的

PWM设置

    EPwm1Regs.TBPRD             = EPWM_TBPRD;
    EPwm1Regs.TBCTR             = 0x0000;
    EPwm1Regs.TBPHS.half.TBPHS     = 0;
    EPwm1Regs.CMPA.half.CMPA    = 0;
    EPwm1Regs.TBCTL.bit.CLKDIV        = TB_DIV1;
    EPwm1Regs.TBCTL.bit.HSPCLKDIV    = TB_DIV2;    //TBCLK=SYSCLK/(CLKDIV*HSPCLKDIV)
    EPwm1Regs.TBCTL.bit.SYNCOSEL    = TB_CTR_ZERO;
    EPwm1Regs.TBCTL.bit.PRDLD        = 1;
    EPwm1Regs.TBCTL.bit.CTRMODE        = 0x2;    //=2,up-down count mode
    EPwm1Regs.TBCTL.bit.PHSEN        = TB_DISABLE;

    EPwm1Regs.CMPCTL.bit.SHDWAMODE     = TB_SHADOW;        //0,shadow mode
    EPwm1Regs.CMPCTL.bit.LOADAMODE     = CC_CTR_ZERO;  

    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;    //active high mode,
    EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
    
    EPwm1Regs.DBCTL.bit.IN_MODE        = DBA_ALL;        //EPWM1A IN
    EPwm1Regs.DBCTL.bit.POLSEL        = DB_ACTV_LOC;        //AHC mode,b invert
    EPwm1Regs.DBCTL.bit.OUT_MODE    = DB_FULL_ENABLE;        //full enable
    
    EPwm1Regs.DBRED = dead_band;
    EPwm1Regs.DBFED = dead_band;

PWM中断程序:

    PieCtrlRegs.PIEACK.all = 0x0004;
    ReadAd();
    EA=Uga/Udc*2;  //SPWM计算及更新寄存器
    EB=Ugb/Udc*2;
    EC=Ugc/Udc*2;
    EPwm1Regs.CMPA.half.CMPA=EPWM_TBPRD*(EA+1)/2;
    EPwm2Regs.CMPA.half.CMPA=EPWM_TBPRD*(EB+1)/2;
    EPwm3Regs.CMPA.half.CMPA=EPWM_TBPRD*(EC+1)/2;
    EPwm1Regs.ETCLR.bit.INT = 1;//clear ETFLG[INT]

更新:

1.更换AD转换通道也是相差半个周期;

2.不采样电网电压,dsp自己生成电压再采集回来也是相差半个周期;

再更新:

DSP生成带直流偏置的三相电压,通过示波器观察波形中的直流量是否与理论值相同,结果表明实际输出的直流分量和理论值互为相反数,因此基本定位到PWM输出相反值。