📄 fft.c
字号:
}
else
{
temp_r = Ia_base_r - ((Ib_base_r + Ic_base_r) >> 1)
+((Ib_base_i - Ic_base_i) >> 1) + ((Ib_base_i - Ic_base_i) >> 2) + ((Ib_base_i - Ic_base_i) >> 3) - ((Ib_base_i - Ic_base_i) >> 7);
temp_i = Ia_base_i - ((Ib_base_i + Ic_base_i) >> 1)
+((Ic_base_r - Ib_base_r )>> 1) + ((Ic_base_r - Ib_base_r) >> 2) + ((Ic_base_r - Ib_base_r) >> 3) - ((Ic_base_r - Ib_base_r) >> 7);
BD_data.UnbalRateofI = 1000 * sqrt((unsigned long ) temp_r * temp_r + (unsigned long) temp_i * temp_i)/ltemp;
if(BD_data.UnbalRateofI >1000) BD_data.UnbalRateofI =1000;
}
}
if(i==2)
{
// 零序电流计算
temp_r=Ia_base_r + Ib_base_r + Ic_base_r ;
temp_i = Ia_base_i + Ib_base_i + Ic_base_i ;
ltemp= sqrt((unsigned long ) temp_r * temp_r + (unsigned long) temp_i * temp_i);
if((P1OUT & (BIT5 +BIT6+BIT7)) ==(BIT5 +BIT6+BIT7) )
ltemp= ltemp* TTU_RunParam.KI_A1>>10;
else ltemp= ltemp* TTU_RunParam.KI_A0>>10;
BD_data.I0= ltemp;
}
}
void CalPowerpara(void)
{
static int Ua[4],Ub[4],Uc[4];
static int Ia[4],Ib[4],Ic[4];
static long Pasum=0 , Pbsum=0, Pcsum=0;
static long Qasum=0, Qbsum=0, Qcsum=0;
static BYTE nCounter = 0;
unsigned long ltemp;
long sum;
int i;
BYTE mode;
// unsigned int UsumNew=0;
Calc(Ua_Data,Ia_Data); //计算A相的电度量值
//计算系数
sum=(unsigned long)U*TTU_RunParam.KV_A;
sum >>=10;
Uabc.Ua=(int)sum;
mode=P1OUT & BIT5 ;
if( mode== 0)
{
sum= (unsigned long)I * TTU_RunParam.KI_A0>>10; // Ia[nCounter] = (unsigned long)I * TTU_RunParam.KI_A0>>4;
if( sum< I_THRESHOLD_LOW ) //I_THRESHOLD_LOW
P1OUT |= BIT5;
Pasum += (Ps * KP_A0)>>8;
Qasum += (Qs * KP_A0)>>9;
}
else
{
sum = (unsigned long)I * TTU_RunParam.KI_A1>>10;
if(sum >= I_THRESHOLD_HIGH ) //; Ia[nCounter] >= I_THRESHOLD_HIGH
P1OUT &= ~BIT5;
Pasum += (Ps * KP_A1)>>8;
Qasum += (Qs * KP_A1)>>9;
}
Ia[nCounter] = (int)sum;
for(i=0, sum=0;i<4;i++)
{
if(MCUState &BIT7) sum += Ia[i];
else sum += Ia[nCounter];
}
sum >>= 2;
BD_data.Ia = (int)sum;
Ua[nCounter]=U;
for(i=0, sum=0;i<4;i++)
{
if(MCUState &BIT7) sum += Ua[i];
else sum +=U;
}
sum *= TTU_RunParam.KV_A;
sum >>= 12;
BD_data.Ua = (int)sum;
Ua_base = U_base; Ia_base = I_base; Uan = Un; Ian = In;
Ua_base_r = U1R; Ua_base_i = U1I; Ia_base_r = I1R; Ia_base_i = I1I;
// UsumNew +=U;
if(U<50) BD_data.Ua=0;
//计算B相
Calc(Ub_Data,Ib_Data);
sum=(unsigned long)U*TTU_RunParam.KV_B;
sum >>=10;
Uabc.Ub=(int)sum;
mode=P1OUT & BIT6 ;
if( mode== 0)
{ sum = (unsigned long)I * TTU_RunParam.KI_B0>>10;
if( sum < I_THRESHOLD_LOW ) //I_THRESHOLD_LOW
P1OUT |= BIT6;
Pbsum += (Ps * KP_B0)>>8;
Qbsum += (Qs * KP_B0)>>9;
}
else
{
sum= (unsigned long)I * TTU_RunParam.KI_B1>>10;
if(sum >= I_THRESHOLD_HIGH ) //; Ia[nCounter] >= I_THRESHOLD_HIGH
P1OUT &= ~BIT6;
Pbsum += (Ps * KP_B1)>>8;
Qbsum += (Qs * KP_B1)>>9;
}
Ib[nCounter] = (int)sum;
for(i=0, sum=0;i<4;i++)
{
if(MCUState &BIT7) sum += Ib[i];
else sum += Ib[nCounter];
}
sum >>= 2;
BD_data.Ib = (int)sum;
Ub[nCounter]=U;
for(i=0, sum=0;i<4;i++)
{ if(MCUState &BIT7) sum += Ub[i];
else sum += U;
}
sum *= TTU_RunParam.KV_B;
sum >>= 12;
BD_data.Ub = (int)sum;
Ub_base = U_base; Ib_base = I_base; Ubn = Un; Ibn = In;
Ub_base_r = U1R; Ub_base_i = U1I; Ib_base_r = I1R; Ib_base_i = I1I;
// if( UsumNew <U ) UsumNew =U ;
if(U<50) BD_data.Ub=0;
Calc(Uc_Data,Ic_Data);
sum=(unsigned long)U*TTU_RunParam.KV_C;
sum >>=10;
Uabc.Uc=(int)sum;
// if( UsumNew <U ) UsumNew =U ;
/* if( (UsumNew<50)&& (Usumold >100))
{
doSavePowerOff=1;
}*/
// Usumold=UsumNew;
//计算C相
mode=P1OUT & BIT7 ;
if( mode== 0)
{
sum=(unsigned long)I * TTU_RunParam.KI_C0>>10;
if( sum < I_THRESHOLD_LOW ) //I_THRESHOLD_LOW
P1OUT |= BIT7;
Pcsum += (Ps * KP_C0)>>8;
Qcsum += (Qs * KP_C0)>>9;
}
else
{
sum=(unsigned long)I * TTU_RunParam.KI_C1>>10;
if(sum >= I_THRESHOLD_HIGH ) //; Ia[nCounter] >= I_THRESHOLD_HIGH
P1OUT &= ~BIT7;
Pcsum += (Ps * KP_C1)>>8;
Qcsum += (Qs * KP_C1)>>9;
}
Ic[nCounter] = (int)sum;
for(i=0, sum=0;i<4;i++)
{ if(MCUState &BIT7) sum += Ic[i];
else sum += Ic[nCounter] ;
}
sum >>= 2;
BD_data.Ic = (int)sum;
Uc[nCounter]=U;
for(i=0, sum=0;i<4;i++)
{
if(MCUState &BIT7) sum += Uc[i];
else sum +=U;
}
sum *= TTU_RunParam.KV_C;
sum >>= 12;
BD_data.Uc = (int)sum;
if(U<50) BD_data.Uc=0;
Uc_base = U_base; Ic_base = I_base; Ucn = Un; Icn = In;
Uc_base_r = U1R; Uc_base_i = U1I; Ic_base_r = I1R; Ic_base_i = I1I;
nCounter++;
if(nCounter >=4)
{ nCounter=0;
MCUState |= BIT7;
BD_data.Pa= (Pasum>>10);
BD_data.Qa= (Qasum>>10);
ltemp = (long)BD_data.Pa*BD_data.Pa +(long)BD_data.Qa*BD_data.Qa ;
ltemp = sqrt(ltemp);
if(ltemp > 50)
{
BD_data.COSA = (long)BD_data.Pa *1000 /(int)ltemp;
}
else
BD_data.COSA = 1000;
BD_data.Pb= (Pbsum>>10);
BD_data.Qb= (Qbsum>>10);
ltemp = (long)BD_data.Pb*BD_data.Pb +(long)BD_data.Qb*BD_data.Qb ;
ltemp = sqrt(ltemp);
if(ltemp > 50)
{
BD_data.COSB = (long)BD_data.Pb *1000 /(int)ltemp;
}
else
BD_data.COSB = 1000;
BD_data.Pc= (Pcsum>>10);
BD_data.Qc= (Qcsum>>10);
ltemp = (long)BD_data.Pc*BD_data.Pc +(long)BD_data.Qc*BD_data.Qc ;
ltemp = sqrt(ltemp);
if(ltemp > 50)
{
BD_data.COSC = (long)BD_data.Pc *1000 /(int)ltemp;
}
else
BD_data.COSC = 1000;
Psum = (Pasum + Pbsum + Pcsum)>>10;
Qsum = (Qasum + Qbsum + Qcsum)>>10 ;
BD_data.P = Psum/10;
BD_data.Q = Qsum/10;
ltemp = (long)BD_data.P*BD_data.P +(long)BD_data.Q*BD_data.Q ;
ltemp = sqrt(ltemp);
if(ltemp > 50)
{
BD_data.COS = (long)BD_data.P *1000 /(int)ltemp;
}
else
BD_data.COS = 1000;
Pasum = 0; Pbsum = 0; Pcsum = 0;
Qasum = 0; Qbsum =0; Qcsum = 0;
}
CalUnballrate(nCounter);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -