📄 inv_isr.c
字号:
switch (PhaseSector.ulRegion)
{
case 0:
EPwm1Regs.CMPA.half.CMPA = PhaseSector.uiV01;
EPwm1Regs.CMPB = PhaseSector.uiV01;
EPwm3Regs.CMPA.half.CMPA = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
EPwm3Regs.CMPB = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
EPwm2Regs.CMPA.half.CMPA = PhaseSector.uiTi + PhaseSector.uiV01 ;
EPwm2Regs.CMPB = PhaseSector.uiTi + PhaseSector.uiV01;
break;
case 1:
EPwm1Regs.CMPA.half.CMPA = PhaseSector.uiTj + PhaseSector.uiV01;
EPwm1Regs.CMPB = PhaseSector.uiTj + PhaseSector.uiV01;
EPwm2Regs.CMPA.half.CMPA = PhaseSector.uiV01;
EPwm2Regs.CMPB = PhaseSector.uiV01;
EPwm3Regs.CMPA.half.CMPA = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
EPwm3Regs.CMPB = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
break;
case 2:
EPwm2Regs.CMPA.half.CMPA = PhaseSector.uiV01;
EPwm2Regs.CMPB = PhaseSector.uiV01;
EPwm1Regs.CMPA.half.CMPA = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
EPwm1Regs.CMPB = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
EPwm3Regs.CMPA.half.CMPA = PhaseSector.uiTi + PhaseSector.uiV01;
EPwm3Regs.CMPB = PhaseSector.uiTi + PhaseSector.uiV01;
break;
case 3:
EPwm2Regs.CMPA.half.CMPA = PhaseSector.uiTj + PhaseSector.uiV01;
EPwm2Regs.CMPB = PhaseSector.uiTj + PhaseSector.uiV01;
EPwm3Regs.CMPA.half.CMPA = PhaseSector.uiV01;
EPwm3Regs.CMPB = PhaseSector.uiV01;
EPwm1Regs.CMPA.half.CMPA = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
EPwm1Regs.CMPB = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
break;
case 4:
EPwm3Regs.CMPA.half.CMPA = PhaseSector.uiV01;
EPwm3Regs.CMPB = PhaseSector.uiV01;
EPwm2Regs.CMPA.half.CMPA = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
EPwm2Regs.CMPB = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
EPwm1Regs.CMPA.half.CMPA = PhaseSector.uiTi + PhaseSector.uiV01;
EPwm1Regs.CMPB = PhaseSector.uiTi+ PhaseSector.uiV01;
break;
case 5:
EPwm3Regs.CMPA.half.CMPA = PhaseSector.uiTj + PhaseSector.uiV01;
EPwm3Regs.CMPB = PhaseSector.uiTj + PhaseSector.uiV01;
EPwm1Regs.CMPA.half.CMPA = PhaseSector.uiV01;
EPwm1Regs.CMPB = PhaseSector.uiV01;
EPwm2Regs.CMPA.half.CMPA = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
EPwm2Regs.CMPB = PhaseSector.uiTi + PhaseSector.uiTj + PhaseSector.uiV01;
break;
default:
break;
}
}
// Clear INT flag for this timer
EPwm1Regs.ETCLR.bit.INT = 1;
// Acknowledge this interrupt to receive more interrupts from group 3
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
interrupt void ecap4_isr(void)
{
Gpio8_toggle;
//-------------------------------------------------------------------------
//同频同相子程序
//----------------------------------------------
if(uiECapTime1 == 0)
{
uiECapTime1 = uiFacSDCnt;
uiECapTime2 = uiFacSDCnt;
//PhaseSector.ulPhaseSum = 0;
ulECapCnt1 = ECap4Regs.CAP1;
}
else
{
uiECapTime = (Uint32)(uiFacSDCnt) - uiECapTime2;
ulECapCnt = ECap4Regs.CAP1 - ulECapCnt1 ;
ulECapCnt1 = ECap4Regs.CAP1;
if((ulECapCnt > ECAP48HZ)||( ulECapCnt < ECAP52HZ )||(!uiPhaseOk))//旁路频率超限
{
uiPhaseOK = 0;
//PhaseSector.ulPhaseSum = 0;
OutputVar.uiTargetFreq = 5000; //旁路频率回到5000HZ
vInvCon();
} //调节逆变频率到5000HZ
else if(((PhaseSector.ulPhaseSum < 0xE100000) && (PhaseSector.ulPhaseSum >= 0xE060000))||(PhaseSector.ulPhaseSum < 0xA0000))//2度以内
// else if(((PhaseSector.ulPhaseSum < 0xD920000) && (PhaseSector.ulPhaseSum >= 0xD7E0000))||((PhaseSector.ulPhaseSum >0xD980000)&&(PhaseSector.ulPhaseSum < 0xDAC0000)))//2度以内
{
OutputVar.uiTargetFreq = 10000000000 / ulECapCnt ;
uiPhaseOK = 1;
//PhaseSector.ulPhaseSum = 0x480000;
PhaseSector.ulPhaseSum = 0;
vInvCon();
}
else
{
if((PhaseSector.ulPhaseSum < 0xE060000) && (PhaseSector.ulPhaseSum >=0xC4E0000))//// 旁路频率更新时,逆变频率滞后(逆变频率比市电频率小),则立即停止再发这一周期波形,而是发下一周期的波形,且将逆变频率往市电频率的趋势方向调整
{
uiPhaseOK = 1;
//PhaseSector.ulPhaseSum = 0x480000;
PhaseSector.ulPhaseSum = 0;
OutputVar.uiTargetFreq = 10000000000 / ulECapCnt ;
//vInvCon();
OutputVar.uiCurrFreq +=2;
if(OutputVar.uiCurrFreq >= 5200)
{
OutputVar.uiCurrFreq = 5200;
}
PhaseSector.ulPhaseNew = (Uint32)OutputVar.uiCurrFreq * (Uint32)PhaseSector.uiCalDat / 4;
}
else if((PhaseSector.ulPhaseSum < 0x1C20000) && (PhaseSector.ulPhaseSum >= 0xA0000))// 逆变频率超前(逆变频率比市电频率大),将逆变频率往市电频率的趋势方向调整
{
uiPhaseOK = 1;
// PhaseSector.ulPhaseSum = 0;
OutputVar.uiTargetFreq = 10000000000 / ulECapCnt;
//vInvCon();
OutputVar.uiCurrFreq -=2;
if(OutputVar.uiCurrFreq <= 4800)
{
OutputVar.uiCurrFreq = 4800;
}
PhaseSector.ulPhaseNew = (Uint32)OutputVar.uiCurrFreq * (Uint32)PhaseSector.uiCalDat / 4;
}
else
{
uiPhaseOK = 0;
}
}
uiECapFlag++;
if((uiECapFlag == 2)&&(ulECapCnt < ECAP48HZ)&&( ulECapCnt > ECAP52HZ )) //求市电有效值
{
uiAvgSDW = (Uint16)(uiAddSDW / (Uint32)uiECapTime );
uiAvgSDV = (Uint16)(uiAddSDV / (Uint32)uiECapTime );
uiAvgSDU = (Uint16)(uiAddSDU / (Uint32)uiECapTime );
uiRmsSDW = (Uint16)((uiAvgSDW * 75)>>7);
uiRmsSDV = (Uint16)((uiAvgSDV * 75)>>7);
uiRmsSDU = (Uint16)((uiAvgSDU * 75)>>7);
uiRmsSDAvg = (Uint16)((((uiRmsSDV+ uiRmsSDW +uiRmsSDU) * 6)>>4)-10);
uiAddSDW = 0;
uiAddSDV = 0;
uiAddSDU= 0;
uiECapFlag = 1;
uiFacSDCnt = 0;
uiECapTime2 = 0;
}
}
ECap4Regs.ECCLR.bit.CEVT1 = 1;
ECap4Regs.ECCLR.bit.INT = 1;
ECap4Regs.ECCTL2.bit.REARM = 1;
// Acknowledge this interrupt to receive more interrupts from group 4
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
}
/*interrupt void ecap4_isr(void)
{
//DelayUs(2);
// delay 2uS
//GpioDataRegs.GPATOGGLE.bit.GPIO30 = 1;
Gpio8_toggle;
//-------------------------------------------------------------------------
//同频同相子程序
//----------------------------------------------
if(uiECapTime1 == 0)
{
uiECapTime1 = uiFacSDCnt;
uiECapTime2 = uiFacSDCnt;
//PhaseSector.ulPhaseSum = 0x00;
}
else
{
uiECapTime = (Uint32)(uiFacSDCnt) - uiECapTime2;
if(307 < uiECapTime < 334) //307*62.5/100000 =1/52;
{
// uiPhaseCnt++;
uiTmpC1 = (Uint16)((Uint32)(1600000) / uiECapTime); //市电频率4800~5200
OutputVar.uiTargetFreq = uiTmpC1;
//if(uiPhaseCnt >= 20)
// {
// uiPhaseCnt = 0;
if(((PhaseSector.ulPhaseSum < 0xE100000) && (PhaseSector.ulPhaseSum >= 0xDFC0000))||(PhaseSector.ulPhaseSum < 0x140000))
{
//PhaseSector.ulPhaseSum = 0x00;
uiPhaseOk = 0;
//旁路频率更新时,逆变在过零点附近,可以免调同频同相
}
else if((PhaseSector.ulPhaseSum < 0xDFC0000) && (PhaseSector.ulPhaseSum >= 0xC4E0000)) //逆变秃螅
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -