//计算电压电流
void Mea_Pq(int *addr1,int *addr2,uint abc)
{
float temp_ur,temp_ui,temp_ir,temp_ii;
float bianbi[6];
uint i;
temp_ur=0;
temp_ui=0;
temp_ir=0;
temp_ii=0;
for(i=0;i<6;i++)
{
if(bl_xishu>1100||bl_xishu<900)bl_xishu=1000;
bianbi=bl_xishu;
bianbi/=1000;
}
for(i=0;i<36;i++)
{
temp_ur+=*(addr1+i)*cs0; //cs0,cs1是sin 和 cos的值,相当于Ir(i)*sin(i) Ii(i)*cos(i)
temp_ui+=*(addr1+i)*cs1;
}
temp_ur/=FOUR_D; //FOUR_D 65535
temp_ui/=FOUR_D;
temp_ur*=ui_xishu; //ui_xishu 0.0330682171858 /* 2/(36*2*sin5)*87/1024 */
temp_ui*=ui_xishu;
temp_ur*=bianbi[abc];
temp_ui*=bianbi[abc];
u_abc[abc][mea_count]=sqrt(temp_ur*temp_ur+temp_ui*temp_ui);
for(i=0;i<36;i++)
{
temp_ir+=*(addr2+i)*cs0;
temp_ii+=*(addr2+i)*cs1;
}
temp_ir/=FOUR_D;
temp_ii/=FOUR_D;
temp_ir*=ci_xishu; /* 2/(36*2*sin5)*2.1/1024 */
temp_ii*=ci_xishu;
temp_ir*=bianbi[abc+3];
temp_ii*=bianbi[abc+3];
// i_abc[abc][mea_count]=sqrt(temp_ir*temp_ir+temp_ii*temp_ii)*ct_array[SET_CT]/5;
i_abc[abc][mea_count]=sqrt(temp_ir*temp_ir+temp_ii*temp_ii);
//if(i_abc[abc][mea_count]<0.03)i_abc[abc][mea_count]=0; /*30MA*/
// else i_abc[abc][mea_count]=i_abc[abc][mea_count]*ct_array[SET_CT]/5;
p_abc[abc][mea_count]=(temp_ur*temp_ir+temp_ui*temp_ii)*ct_array[SET_CT]/500;
q_abc[abc][mea_count]=(temp_ui*temp_ir-temp_ur*temp_ii)*ct_array[SET_CT]/500;
c_abc[abc][mea_count]=p_abc[abc][mea_count]/sqrt((p_abc[abc][mea_count]*p_abc[abc][mea_count]+q_abc[abc][mea_count]*q_abc[abc][mea_count]));//功率因数
}
//计算谐波FFT
float Xiebo_Fft(int * PP,uint i)
{
float Valr,Vali,Max,Min,Value;
int j,k;
Valr=0;
Vali=0;
Value=0;
k=0;
for (j=0;j<36;j++)
{
Valr=Valr+(*(PP+j))*cs0[k];
Vali=Vali+(*(PP+j))*cs1[k];
k=k+i;
if (k>=36) k=k-36;
}
Valr=Valr/FOUR_D;
Vali=Vali/FOUR_D;
Value=sqrt(Valr*Valr+Vali*Vali);
return(Value);
}
这程序是我程序员联合开发网上下载的。是关于无功补偿控制器的采样后的计算部分中的一块。我想问的问题是采回的AD值乘以相应的sin或cos之后,再乘的那个系数是怎么得到的,依据什么计算出来的,这两个系数是ui_xishu,ci_xishu这两个变量。我不知道这段程序是否正确,我是想了解无功控制补偿器处理数据的方法 |