📄 acad_cal.c
字号:
#include"acad_cal.h"
#include"math.h"
#include"global_data.h"
#define N 32
//函数功能:有效值计算
//参数:a--电流或者电压采样结果,n--采样点数
//返回值:有效值
static long acad_virtual_value_calculation( long *a ,int n)
{
int i;
long temp=0;
for(i=0;i<n;i++)
temp+=*a*(*a++);
temp= temp/n;
return(sqrt(temp));
}
//函数功能:有功功率计算
//参数:u--电压采样结果,i-电流采样结果,n--采样点数
//返回值:有功功率
static long acad_virtual_power_calculation(long *u, long *i,int n)
{
int t;
long temp=0;
for(t=0;t<n:t++)
temp+=*(u++)*(*(i++));
return(temp/n);
}
//函数功能:无功功率计算
//参数:u--电压采样结果,i-电流采样结果,n--采样点数
//返回值:无功功率
static long acad_invirtual_power_calculation(long *u, long *i,int n)
{
int t;
long temp=0;
for(t=0;t<n:t++)
temp+=(*(u+t))*(i+(t+N-N/4)%N);
return(temp/n);
}
//函数功能:功率因素计算
//参数:p--有功功率,q-无功功率
//返回值:功率因素
static float acad_cosaph_calculation(long p,long q)
{
long temp;
long a;
long b;
a=p>>16;
b=q>>16;
a=a*a;
b=b*b;
a=a+b;
a=sqrt(a);
return((float)p/(float)a);
}
//函数功能:ad通道校准
//参数:sample--该通道采样值,scale--采样值
//返回值:无
void acad_adjust(long *sample,int *scale)
{
long temp1,temp2;
temp1=acad_virtual_value_calculation(u_a1,32);
temp2=temp1>>14;
*scale=(1<<14)/temp2;
}
//函数功能:交流计算总程序,将所有的计算值计算一遍
//参数:无
//返回值:无
void acad_calculation(void)
{
unsigned int *p;
p=&(param_ram.ad_scaling[0])
ac_value1.u_a=(acad_virtual_value_calculation(u_a1,32)*p[0])>>14;
ac_value1.u_b=(acad_virtual_value_calculation(u_b1,32)*p[1])>>14;
ac_value1.u_c=(acad_virtual_value_calculation(u_c1,32)*p[2])>>14;
ac_value1.u_ab=acad_virtual_value_calculation(u_ab1,32);
ac_value1.u_bc=acad_virtual_value_calculation(u_bc1,32);
ac_value1.u_ca=acad_virtual_value_calculation(u_ca1,32);
ac_value1.i_a=(acad_virtual_value_calculation(i_a1,32)*p[3])>>14;
ac_value1.i_b=(acad_virtual_value_calculation(i_b1,32)*p[4])>>14;
ac_value1.i_c=(acad_virtual_value_calculation(i_c1,32)*p[5])>>14;
ac_value1.p=acad_virtual_power_calculation(u_a1, i_a1,32)+acad_virtual_power_calculation(u_b1, i_b1,32)+acad_virtual_power_calculation(u_c1, i_c1,32);
ac_value1.q=acad_invirtual_power_calculation(u_a1, i_a1,32)+acad_invirtual_power_calculation(u_b1, i_b1,32)+acad_invirtual_power_calculation(u_c1, i_c1,32);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -