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

📄 ade7758.c

📁 ADI公司的ADE7758全部使用原代码(包括校验)
💻 C
📖 第 1 页 / 共 5 页
字号:
		IO1SET = ADECS_SET;
		adecmdwrite(aderegaddr[CVAHR_R16U]);
		DelayAdeNS(2);				
		*pcva++=adereadvalue();
		*pcva++=adereadvalue();
		IO1SET = ADECS_SET;		
		
		booleint3=FALSE;	
	    ReadAde3byte(aderegaddr[RSTATUS_R24U],(uint32 *)&(runaderegval.RSTATUS_VAL_R24U));
	}
	pawat=&tempawathr[2];
	pbwat=&tempbwathr[2];
	pcwat=&tempcwathr[2];
	pavar=&tempavarhr[2];
	pbvar=&tempbvarhr[2];
	pcvar=&tempcvarhr[2];
	pava=&tempavahr[2];
	pbva=&tempbvahr[2];
	pcva=&tempcvahr[2];
	awathr=0;
	bwathr=0;
	cwathr=0;
	avarhr=0;
	bvarhr=0;
	cvarhr=0;
	avahr=0;
	bvahr=0;
	cvahr=0;
	freqval=0;
	for(i=1;i<10;i++){
		uitemp1=*pfreq++;
		uitemp2=*pfreq++;
		uitemp3=(uitemp1<<8)|(uitemp2);
		uitemp4=uitemp3;
		freqval=freqval+uitemp4;	
		uitemp1=*pawat++;
		uitemp2=*pawat++;
		uitemp3=(uitemp1<<8)|(uitemp2);
		uitemp4=uitemp3;
		awathr=awathr+uitemp4;		
		uitemp1=*pbwat++;
		uitemp2=*pbwat++;
		uitemp3=(uitemp1<<8)|(uitemp2);
		uitemp4=uitemp3;
		bwathr=bwathr+uitemp4;		
		uitemp1=*pcwat++;
		uitemp2=*pcwat++;
		uitemp3=(uitemp1<<8)|(uitemp2);
		uitemp4=uitemp3;
		cwathr=cwathr+uitemp4;		
		uitemp1=*pavar++;
		uitemp2=*pavar++;
		uitemp3=(uitemp1<<8)|(uitemp2);
		uitemp4=uitemp3;
		avarhr=avarhr+uitemp4;		
		uitemp1=*pbvar++;
		uitemp2=*pbvar++;
		uitemp3=(uitemp1<<8)|(uitemp2);
		uitemp4=uitemp3;
		bvarhr=bvarhr+uitemp4;		
		uitemp1=*pcvar++;
		uitemp2=*pcvar++;
		uitemp3=(uitemp1<<8)|(uitemp2);
		uitemp4=uitemp3;
		cvarhr=cvarhr+uitemp4;		

		uhrtemp1=*pava++;
		uhrtemp2=*pava++;
		uhrtemp3=(uhrtemp1<<8)|(uhrtemp2);
		uhrtemp4=uhrtemp3;
		avahr=avahr+uhrtemp4;		
		uhrtemp1=*pbva++;
		uhrtemp2=*pbva++;
		uhrtemp3=(uhrtemp1<<8)|(uhrtemp2);
		uhrtemp4=uhrtemp3;
		bvahr=bvahr+uhrtemp4;	
		uhrtemp1=*pcva++;
		uhrtemp2=*pcva++;
		uhrtemp3=(uhrtemp1<<8)|(uhrtemp2);
		uhrtemp4=uhrtemp3;
		cvahr=cvahr+uhrtemp4;	
	}		
	watvarvaval.FREQ_VAL=freqval/9;
	watvarvaval.AW_VAL=awathr/9;
	watvarvaval.BW_VAL=bwathr/9;
	watvarvaval.CW_VAL=cwathr/9;
	watvarvaval.AVAR_VAL=avarhr/9;
	watvarvaval.BVAR_VAL=bvarhr/9;
	watvarvaval.CVAR_VAL=cvarhr/9;
	watvarvaval.AVA_VAL=avahr/9;
	watvarvaval.BVA_VAL=bvahr/9;
	watvarvaval.CVA_VAL=cvahr/9;
}
void ClearWatVa_Gain(void)//清有功视在功率增益
{
	WriteAde2byte((aderegaddr[AWG_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[BWG_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[CWG_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[AVAG_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[BVAG_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[CVAG_RW12S])|0x80,0x0);
}
void ClearVar_Gain(void)//清无功增益
{
	WriteAde2byte((aderegaddr[AVARG_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[BVARG_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[CVARG_RW12S])|0x80,0x0);
}
void ClearWatVarVa_Ph(void)//清相角
{
	WriteAde1byte((aderegaddr[APHCAL_RW7S])|0x80,0x0);
	WriteAde1byte((aderegaddr[BPHCAL_RW7S])|0x80,0x0);
	WriteAde1byte((aderegaddr[CPHCAL_RW7S])|0x80,0x0);
}
void ClearWat_Os(void)//清有功偏移
{
	WriteAde2byte((aderegaddr[AWATTOS_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[BWATTOS_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[CWATTOS_RW12S])|0x80,0x0);
}
void ClearVar_Os(void)//清无功偏移
{
	WriteAde2byte((aderegaddr[AVAROS_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[BVAROS_RW12S])|0x80,0x0);
	WriteAde2byte((aderegaddr[CVAROS_RW12S])|0x80,0x0);
}
void WriteWatVa_Gain(void)//设置有功视在功率增益
{
	runaderegval.AWG_VAL_RW12S=adeburnparm.AWAT_GAIN;
	runaderegval.BWG_VAL_RW12S=adeburnparm.BWAT_GAIN;
	runaderegval.CWG_VAL_RW12S=adeburnparm.CWAT_GAIN;
	runaderegval.AVAG_VAL_RW12S=adeburnparm.AVA_GAIN;
	runaderegval.BVAG_VAL_RW12S=adeburnparm.BVA_GAIN;
	runaderegval.CVAG_VAL_RW12S=adeburnparm.CVA_GAIN;
	WriteAde2byte((aderegaddr[AWG_RW12S])|0x80,runaderegval.AWG_VAL_RW12S);
	WriteAde2byte((aderegaddr[BWG_RW12S])|0x80,runaderegval.BWG_VAL_RW12S);
	WriteAde2byte((aderegaddr[CWG_RW12S])|0x80,runaderegval.CWG_VAL_RW12S);
	WriteAde2byte((aderegaddr[AVAG_RW12S])|0x80,runaderegval.AVAG_VAL_RW12S);
	WriteAde2byte((aderegaddr[BVAG_RW12S])|0x80,runaderegval.BVAG_VAL_RW12S);
	WriteAde2byte((aderegaddr[CVAG_RW12S])|0x80,runaderegval.CVAG_VAL_RW12S);	
}
void WriteVar_Gain(void)//设置无功增益
{
	runaderegval.AVARG_VAL_RW12S=adeburnparm.AVAR_GAIN;
	runaderegval.BVARG_VAL_RW12S=adeburnparm.BVAR_GAIN;
	runaderegval.CVARG_VAL_RW12S=adeburnparm.CVAR_GAIN;
	WriteAde2byte((aderegaddr[AVARG_RW12S])|0x80,runaderegval.AVARG_VAL_RW12S);
	WriteAde2byte((aderegaddr[BVARG_RW12S])|0x80,runaderegval.BVARG_VAL_RW12S);
	WriteAde2byte((aderegaddr[CVARG_RW12S])|0x80,runaderegval.CVARG_VAL_RW12S);
}
void WriteWatVarVa_Ph(void)//设置相角
{
	runaderegval.APHCAL_VAL_RW7S=adeburnparm.AWATVARVA_PH;
	runaderegval.BPHCAL_VAL_RW7S=adeburnparm.BWATVARVA_PH;
	runaderegval.CPHCAL_VAL_RW7S=adeburnparm.CWATVARVA_PH;
	WriteAde1byte((aderegaddr[APHCAL_RW7S])|0x80,runaderegval.APHCAL_VAL_RW7S);
	WriteAde1byte((aderegaddr[BPHCAL_RW7S])|0x80,runaderegval.BPHCAL_VAL_RW7S);
	WriteAde1byte((aderegaddr[CPHCAL_RW7S])|0x80,runaderegval.CPHCAL_VAL_RW7S);
}	
void WriteWatVar_Os(void)//设置WAT/VAR偏移量到ADE7758
{
	runaderegval.AWATTOS_VAL_RW12S=adeburnparm.AWAT_OS;
	runaderegval.BWATTOS_VAL_RW12S=adeburnparm.BWAT_OS;
	runaderegval.CWATTOS_VAL_RW12S=adeburnparm.CWAT_OS;
	runaderegval.AVAROS_VAL_RW12S=adeburnparm.AVAR_OS;
	runaderegval.BVAROS_VAL_RW12S=adeburnparm.BVAR_OS;
	runaderegval.CVAROS_VAL_RW12S=adeburnparm.CVAR_OS;
	WriteAde2byte((aderegaddr[AWATTOS_RW12S])|0x80,runaderegval.AWATTOS_VAL_RW12S);
	WriteAde2byte((aderegaddr[BWATTOS_RW12S])|0x80,runaderegval.BWATTOS_VAL_RW12S);
	WriteAde2byte((aderegaddr[CWATTOS_RW12S])|0x80,runaderegval.CWATTOS_VAL_RW12S);
	WriteAde2byte((aderegaddr[AVAROS_RW12S])|0x80,runaderegval.AVAROS_VAL_RW12S);
	WriteAde2byte((aderegaddr[BVAROS_RW12S])|0x80,runaderegval.BVAROS_VAL_RW12S);
	WriteAde2byte((aderegaddr[CVAROS_RW12S])|0x80,runaderegval.CVAROS_VAL_RW12S);
}
void WriteWat_Os(void)//设置WAT/VAR偏移量到ADE7758
{
	runaderegval.AWATTOS_VAL_RW12S=adeburnparm.AWAT_OS;
	runaderegval.BWATTOS_VAL_RW12S=adeburnparm.BWAT_OS;
	runaderegval.CWATTOS_VAL_RW12S=adeburnparm.CWAT_OS;
	WriteAde2byte((aderegaddr[AWATTOS_RW12S])|0x80,runaderegval.AWATTOS_VAL_RW12S);
	WriteAde2byte((aderegaddr[BWATTOS_RW12S])|0x80,runaderegval.BWATTOS_VAL_RW12S);
	WriteAde2byte((aderegaddr[CWATTOS_RW12S])|0x80,runaderegval.CWATTOS_VAL_RW12S);
}	
void WriteVar_Os(void)//设置WAT/VAR偏移量到ADE7758
{
	runaderegval.AVAROS_VAL_RW12S=adeburnparm.AVAR_OS;
	runaderegval.BVAROS_VAL_RW12S=adeburnparm.BVAR_OS;
	runaderegval.CVAROS_VAL_RW12S=adeburnparm.CVAR_OS;
	WriteAde2byte((aderegaddr[AVAROS_RW12S])|0x80,runaderegval.AVAROS_VAL_RW12S);
	WriteAde2byte((aderegaddr[BVAROS_RW12S])|0x80,runaderegval.BVAROS_VAL_RW12S);
	WriteAde2byte((aderegaddr[CVAROS_RW12S])|0x80,runaderegval.CVAROS_VAL_RW12S);
}	
void GetVal_WatVarVa_Test(void)//取得标准校准电量
{
	watvarvavaltest.AW_VAL_TEST=watvarvaval.AW_VAL;
	watvarvavaltest.BW_VAL_TEST=watvarvaval.BW_VAL;
	watvarvavaltest.CW_VAL_TEST=watvarvaval.CW_VAL;
	watvarvavaltest.AVAR_VAL_TEST=watvarvaval.AVAR_VAL;
	watvarvavaltest.BVAR_VAL_TEST=watvarvaval.BVAR_VAL;
	watvarvavaltest.CVAR_VAL_TEST=watvarvaval.CVAR_VAL;
	watvarvavaltest.AVA_VAL_TEST=watvarvaval.AVA_VAL;
	watvarvavaltest.BVA_VAL_TEST=watvarvaval.BVA_VAL;
	watvarvavaltest.CVA_VAL_TEST=watvarvaval.CVA_VAL;
}
void GetVal_WatVarVa_Test_PF05(void)//取得标准校准电量 PF=0.5
{
	watvarvavaltestpf05.AW_VAL_TEST_PF05=watvarvaval.AW_VAL;
	watvarvavaltestpf05.BW_VAL_TEST_PF05=watvarvaval.BW_VAL;
	watvarvavaltestpf05.CW_VAL_TEST_PF05=watvarvaval.CW_VAL;
	watvarvavaltestpf05.AVAR_VAL_TEST_PF05=watvarvaval.AVAR_VAL;
	watvarvavaltestpf05.BVAR_VAL_TEST_PF05=watvarvaval.BVAR_VAL;
	watvarvavaltestpf05.CVAR_VAL_TEST_PF05=watvarvaval.CVAR_VAL;
	watvarvavaltestpf05.AVA_VAL_TEST_PF05=watvarvaval.AVA_VAL;
	watvarvavaltestpf05.BVA_VAL_TEST_PF05=watvarvaval.BVA_VAL;
	watvarvavaltestpf05.CVA_VAL_TEST_PF05=watvarvaval.CVA_VAL;
}
void GetVal_WatVarVa_MIN(void)//取得最小输入量下电量
{
	watvarvavalmin.AW_VAL_MIN=watvarvaval.AW_VAL;
	watvarvavalmin.BW_VAL_MIN=watvarvaval.BW_VAL;
	watvarvavalmin.CW_VAL_MIN=watvarvaval.CW_VAL;
	watvarvavalmin.AVAR_VAL_MIN=watvarvaval.AVAR_VAL;
	watvarvavalmin.BVAR_VAL_MIN=watvarvaval.BVAR_VAL;
	watvarvavalmin.CVAR_VAL_MIN=watvarvaval.CVAR_VAL;
	watvarvavalmin.AVA_VAL_MIN=watvarvaval.AVA_VAL;
	watvarvavalmin.BVA_VAL_MIN=watvarvaval.BVA_VAL;
	watvarvavalmin.CVA_VAL_MIN=watvarvaval.CVA_VAL;
}
void MakeWatVa_Gain(void)//获取WAT/VA增益量
{
	uint32 tempa;
	int32 temp1,temp2;
	float fz1,fz2,fz,fm;

	//100V,5A
	if((wpd800_cfg.Wpd_Param.bURating==0x00)&&(wpd800_cfg.Wpd_Param.bIRating==0x00))
	{
		fz=18032.445;
	}
	//400V 5A
	else if((wpd800_cfg.Wpd_Param.bURating==0x01)&&(wpd800_cfg.Wpd_Param.bIRating==0x00))
	{
		fz=17080.199;	
	}
	//100V,1A
	else if((wpd800_cfg.Wpd_Param.bURating==0x00)&&(wpd800_cfg.Wpd_Param.bIRating==0x01))
	{
		fz=1277.152;	
	}	
	//400V,1A
	else if((wpd800_cfg.Wpd_Param.bURating==0x01)&&(wpd800_cfg.Wpd_Param.bIRating==0x01))
	{
		fz=14517.63;	
	}			
	//100V,5A
	else
	{
		fz=18032.445;
	}		
	temp1=watvarvavaltest.AW_VAL_TEST;
	fz2=(float)temp1;
	fz1=fz-fz2;
	fz1=fz1*4096;
	fm=(float)temp1;
	temp2=fz1/fm;
	tempa=temp2&0x00000fff;
	adeburnparm.AWAT_GAIN=tempa;
	temp1=watvarvavaltest.BW_VAL_TEST;
	fz2=(float)temp1;
	fz1=fz-fz2;
	fz1=fz1*4096;
	fm=(float)temp1;
	temp2=fz1/fm;
	tempa=temp2&0x00000fff;
	adeburnparm.BWAT_GAIN=tempa;
	temp1=watvarvavaltest.CW_VAL_TEST;
	fz2=(float)temp1;
	fz1=fz-fz2;
	fz1=fz1*4096;
	fm=(float)temp1;
	temp2=fz1/fm;
	tempa=temp2&0x00000fff;
	adeburnparm.CWAT_GAIN=tempa;
	temp1=watvarvavaltest.AVA_VAL_TEST;
	fz2=(float)temp1;
	fz1=fz-fz2;
	fz1=fz1*4096;
	fm=(float)temp1;
	temp2=fz1/fm;
	tempa=temp2&0x00000fff;
	adeburnparm.AVA_GAIN=tempa;
	temp1=watvarvavaltest.BVA_VAL_TEST;
	fz2=(float)temp1;
	fz1=fz-fz2;
	fz1=fz1*4096;
	fm=(float)temp1;
	temp2=fz1/fm;
	tempa=temp2&0x00000fff;
	adeburnparm.BVA_GAIN=tempa;
	temp1=watvarvavaltest.CVA_VAL_TEST;
	fz2=(float)temp1;
	fz1=fz-fz2;
	fz1=fz1*4096;
	fm=(float)temp1;
	temp2=fz1/fm;
	tempa=temp2&0x00000fff;
	adeburnparm.CVA_GAIN=tempa;
}
void MakeVar_Gain(void)//获取VAR增益量
{
	uint32 tempa;
	int32 temp1,temp2;
	float fz1,fz2,fz,fm;

	//100V,5A
	if((wpd800_cfg.Wpd_Param.bURating==0x00)&&(wpd800_cfg.Wpd_Param.bIRating==0x00))
	{
		fz=18032.445;
	}
	//400V 5A
	else if((wpd800_cfg.Wpd_Param.bURating==0x01)&&(wpd800_cfg.Wpd_Param.bIRating==0x00))
	{
		fz=17080.199;	
	}
	//100V,1A
	else if((wpd800_cfg.Wpd_Param.bURating==0x00)&&(wpd800_cfg.Wpd_Param.bIRating==0x01))
	{
		fz=1277.152;	
	}	
	//400V,1A
	else if((wpd800_cfg.Wpd_Param.bURating==0x01)&&(wpd800_cfg.Wpd_Param.bIRating==0x01))
	{
		fz=14517.63;	
	}			
	//100V,5A
	else
	{
		fz=18032.445;
	}		
	temp1=watvarvavaltest.AVAR_VAL_TEST;
	fz2=(float)temp1;
	fz1=fz-fz2;
	fz1=fz1*4096;
	fm=(float)temp1;
	temp2=fz1/fm;
	tempa=temp2&0x00000fff;
	adeburnparm.AVAR_GAIN=tempa;
	temp1=watvarvavaltest.BVAR_VAL_TEST;
	fz2=(float)temp1;
	fz1=fz-fz2;
	fz1=fz1*4096;
	fm=(float)temp1;
	temp2=fz1/fm;
	tempa=temp2&0x00000fff;
	adeburnparm.BVAR_GAIN=tempa;
	temp1=watvarvavaltest.CVAR_VAL_TEST;
	fz2=(float)temp1;
	fz1=fz-fz2;
	fz1=fz1*4096;
	fm=(float)temp1;
	temp2=fz1/fm;
	tempa=temp2&0x00000fff;
	adeburnparm.CVAR_GAIN=tempa;
}
void MakePh_Os(void)
{
	uint32 temp1,temp2;
	int32 temp3;
	float fz1,fz2,fm;
	double acsinval;

	temp1=watvarvavaltestpf05.AW_VAL_TEST_PF05;
	temp2=temp1*2;	
	temp1=watvarvavaltest.AW_VAL_TEST;
	temp3=temp2-temp1;
	if(temp3<0)
	{
		temp3=0-temp3;
		fz1=(float)temp3;
		fm=1.732;
		fm=fm*temp1;
		fz2=fz1/fm;
		acsinval=asin(fz2);
		acsinval=acsinval*2654.71;
		temp3=acsinval;
		temp3=temp3&0x0000007f;
		adeburnparm.AWATVARVA_PH=temp3;
	}
	else
	{
		fz1=(float)temp3;
		fm=1.732;
		fm=fm*temp1;
		fz2=fz1/fm;
		acsinval=asin(fz2);
		acsinval=acsinval*1327.35;
		temp3=acsinval;
		temp3=0-temp3;
		temp3=temp3&0x0000007f;
		adeburnparm.AWATVARVA_PH=temp3;		
	}

	temp1=watvarvavaltestpf05.BW_VAL_TEST_PF05;
	temp2=temp1*2;	
	temp1=watvarvavaltest.BW_VAL_TEST;
	temp3=temp2-temp1;
	if(temp3<0)
	{
		temp3=0-temp3;
		fz1=(float)temp3;
		fm=1.732;
		fm=fm*temp1;
		fz2=fz1/fm;
		acsinval=asin(fz2);
		acsinval=acsinval*2654.71;
		temp3=acsinval;
		temp3=temp3&0x0000007f;
		adeburnparm.BWATVARVA_PH=temp3;
	}
	else
	{
		fz1=(float)temp3;
		fm=1.732;
		fm=fm*temp1;
		fz2=fz1/fm;
		acsinval=asin(fz2);
		acsinval=acsinval*1327.35;
		temp3=acsinval;
		temp3=0-temp3;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -