检查了接线和电压换算是对的
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输出相反值。