⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acad_cal.c

📁 电力系统交流采样算法,积分算法 ,有功,无功,有效值,功率因素等
💻 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 + -