//控制8路PWM
__interrupt void ePWM7_ISR(void)
{
//因为是同步所以放一个中断里 8路PWM:ePWM1A ~ ePWM7A 、eCAP2的APWM
EPwm1Regs.CMPA.bit.CMPA = EPwm1Regs.TBPRD * Inverter_DATA[PV1_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm2Regs.CMPA.bit.CMPA = EPwm2Regs.TBPRD * Inverter_DATA[PV1_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm3Regs.CMPA.bit.CMPA = EPwm3Regs.TBPRD * Inverter_DATA[PV2_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm4Regs.CMPA.bit.CMPA = EPwm4Regs.TBPRD * Inverter_DATA[PV2_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm5Regs.CMPA.bit.CMPA = EPwm5Regs.TBPRD * Inverter_DATA[PV3_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm6Regs.CMPA.bit.CMPA = EPwm6Regs.TBPRD * Inverter_DATA[PV3_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm7Regs.CMPA.bit.CMPA = EPwm7Regs.TBPRD * Inverter_DATA[PV4_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
ECap2Regs.CAP2 = ECap2Regs.CAP1 * Inverter_DATA[PV4_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
Inverter_Flag[FlagX_sin_Number]++;
if(Inverter_Flag[FlagX_sin_Number] >= Sin_sampling_Number){Inverter_Flag[FlagX_sin_Number] = 0;}
EPwm7Regs.ETCLR.bit.INT = 1;//写1对ETFLG[INT]状态标志位清零才能进行下一次中断
PieCtrlRegs.PIEACK.all=PIEACK_GROUP3; //确认组3中断
}
我屏蔽掉
EPwm1Regs.CMPA.bit.CMPA = EPwm1Regs.TBPRD * Inverter_DATA[PV1_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm2Regs.CMPA.bit.CMPA = EPwm2Regs.TBPRD * Inverter_DATA[PV1_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm3Regs.CMPA.bit.CMPA = EPwm3Regs.TBPRD * Inverter_DATA[PV2_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm4Regs.CMPA.bit.CMPA = EPwm4Regs.TBPRD * Inverter_DATA[PV2_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm5Regs.CMPA.bit.CMPA = EPwm5Regs.TBPRD * Inverter_DATA[PV3_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm6Regs.CMPA.bit.CMPA = EPwm6Regs.TBPRD * Inverter_DATA[PV3_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
EPwm7Regs.CMPA.bit.CMPA = EPwm7Regs.TBPRD * Inverter_DATA[PV4_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
ECap2Regs.CAP2 = ECap2Regs.CAP1 * Inverter_DATA[PV4_PWM_control] * sina[ Inverter_Flag[FlagX_sin_Number] ]; //按照sin变化占空比
这几个之后他就不会有波形但是没有屏蔽他就会有
我在主函数中有禁用ePWM 时钟
EALLOW;
CpuSysRegs.PCLKCR2.bit.EPWM1 = 0; // 禁用ePWM1时钟
CpuSysRegs.PCLKCR2.bit.EPWM2 = 0; // 禁用ePWM2时钟
CpuSysRegs.PCLKCR2.bit.EPWM3 = 0; // 禁用ePWM3时钟
CpuSysRegs.PCLKCR2.bit.EPWM4 = 0; // 禁用ePWM4时钟
CpuSysRegs.PCLKCR2.bit.EPWM5 = 0; // 禁用ePWM5时钟
CpuSysRegs.PCLKCR2.bit.EPWM6 = 0; // 禁用ePWM6时钟
CpuSysRegs.PCLKCR2.bit.EPWM7 = 0; // 禁用ePWM7时钟
ECap2Regs.ECCTL2.bit.TSCTRSTOP = 0; //禁用eCAP2计数器开始计数 APWM
EDIS;