📄 ade7758.c
字号:
temp3=temp3&0x0000007f;
adeburnparm.BWATVARVA_PH=temp3;
}
temp1=watvarvavaltestpf05.CW_VAL_TEST_PF05;
temp2=temp1*2;
temp1=watvarvavaltest.CW_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.CWATVARVA_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.CWATVARVA_PH=temp3;
}
}
void MakeWat_Os(void)//获取WAT偏移量
{
int32 temp1,temp2;
uint32 tempa;
float fzItest,fzImin,fz,fz1,fz2;
//5A
if(wpd800_cfg.Wpd_Param.bIRating==0x00)
{
fzItest=2;
fzImin=0.32;
fz=-2.005;
}
//1A
else
{
fzItest=0.5;
fzImin=0.08;
fz=-8.0184;
}
temp1=watvarvavalmin.AW_VAL_MIN;
fz1=fzItest*temp1;
temp2=watvarvavaltest.AW_VAL_TEST;
fz2=fzImin*temp2;
fz1=fz1-fz2;
fz1=fz1*fz;
temp1=fz1;
tempa=temp1&0x00000fff;
adeburnparm.AWAT_OS=tempa;
temp1=watvarvavalmin.BW_VAL_MIN;
fz1=fzItest*temp1;
temp2=watvarvavaltest.BW_VAL_TEST;
fz2=fzImin*temp2;
fz1=fz1-fz2;
fz1=fz1*fz;
temp1=fz1;
tempa=temp1&0x00000fff;
adeburnparm.BWAT_OS=tempa;
temp1=watvarvavalmin.CW_VAL_MIN;
fz1=fzItest*temp1;
temp2=watvarvavaltest.CW_VAL_TEST;
fz2=fzImin*temp2;
fz1=fz1-fz2;
fz1=fz1*fz;
temp1=fz1;
tempa=temp1&0x00000fff;
adeburnparm.CWAT_OS=tempa;
}
void MakeVar_Os(void)//获取VAR偏移量
{
int32 temp1,temp2;
uint32 tempa;
float fzItest,fzImin,fz,fz1,fz2;
//5A
if(wpd800_cfg.Wpd_Param.bIRating==0x00)
{
fzItest=2;
fzImin=0.32;
fz=-2.5864;
}
//1A
else
{
fzItest=0.5;
fzImin=0.08;
fz=-10.3455;
}
temp1=watvarvavalmin.AVAR_VAL_MIN;
fz1=fzItest*temp1;
temp2=watvarvavaltest.AVAR_VAL_TEST;
fz2=fzImin*temp2;
fz1=fz1-fz2;
fz1=fz1*fz;
temp1=fz1;
tempa=temp1&0x00000fff;
adeburnparm.AVAR_OS=tempa;
temp1=watvarvavalmin.BVAR_VAL_MIN;
fz1=fzItest*temp1;
temp2=watvarvavaltest.BVAR_VAL_TEST;
fz2=fzImin*temp2;
fz1=fz1-fz2;
fz1=fz1*fz;
temp1=fz1;
tempa=temp1&0x00000fff;
adeburnparm.BVAR_OS=tempa;
temp1=watvarvavalmin.CVAR_VAL_MIN;
fz1=fzItest*temp1;
temp2=watvarvavaltest.CVAR_VAL_TEST;
fz2=fzImin*temp2;
fz1=fz1-fz2;
fz1=fz1*fz;
temp1=fz1;
tempa=temp1&0x00000fff;
adeburnparm.CVAR_OS=tempa;
}
void ReadVal_Rms(void)//读取效验用UI有效值的平均值
{
uint8 tempia[32],tempib[32],tempic[32],tempua[32],tempub[32],tempuc[32];
uint8 *pia,*pib,*pic,*pua,*pub,*puc,i;
uint32 uitemp1,uitemp2,uitemp3,uitemp4,ia,ib,ic,ua,ub,uc;
pia=&tempia[0];
pib=&tempib[0];
pic=&tempic[0];
pua=&tempua[0];
pub=&tempub[0];
puc=&tempuc[0];
ReadAde3byte(aderegaddr[RSTATUS_R24U],(uint32 *)&(runaderegval.RSTATUS_VAL_R24U));
runaderegval.LCYCMODE_VAL_RW8U=0x38;
runaderegval.MASK_VAL_RW24U=0x000e00;
WriteAde1byte((aderegaddr[LCYCMODE_RW8U])|0x80,runaderegval.LCYCMODE_VAL_RW8U);//0x38
WriteAde3byte((aderegaddr[MASK_RW24U])|0x80,runaderegval.MASK_VAL_RW24U);//0x000e00
while(booleint3==FALSE);
booleint3=FALSE;
ReadAde3byte(aderegaddr[RSTATUS_R24U],(uint32 *)&(runaderegval.RSTATUS_VAL_R24U));
for(i=0;i<10;i++)
{
DelayAdeNS(2);
DelayAdeNS(2);
while(booleint3==FALSE);
adecmdwrite(aderegaddr[AIRMS_R24U]);
DelayAdeNS(2);
*pia++=adereadvalue();
*pia++=adereadvalue();
*pia++=adereadvalue();
IO1SET = ADECS_SET;
adecmdwrite(aderegaddr[BIRMS_R24U]);
DelayAdeNS(2);
*pib++=adereadvalue();
*pib++=adereadvalue();
*pib++=adereadvalue();
IO1SET = ADECS_SET;
adecmdwrite(aderegaddr[CIRMS_R24U]);
DelayAdeNS(2);
*pic++=adereadvalue();
*pic++=adereadvalue();
*pic++=adereadvalue();
IO1SET = ADECS_SET;
adecmdwrite(aderegaddr[AVRMS_R24U]);
DelayAdeNS(2);
*pua++=adereadvalue();
*pua++=adereadvalue();
*pua++=adereadvalue();
IO1SET = ADECS_SET;
adecmdwrite(aderegaddr[BVRMS_R24U]);
DelayAdeNS(2);
*pub++=adereadvalue();
*pub++=adereadvalue();
*pub++=adereadvalue();
IO1SET = ADECS_SET;
adecmdwrite(aderegaddr[CVRMS_R24U]);
DelayAdeNS(2);
*puc++=adereadvalue();
*puc++=adereadvalue();
*puc++=adereadvalue();
IO1SET = ADECS_SET;
DelayAdeNS(2);
DelayAdeNS(2);
booleint3=FALSE;
ReadAde3byte(aderegaddr[RSTATUS_R24U],(uint32 *)&(runaderegval.RSTATUS_VAL_R24U));
}
WriteAde3byte((aderegaddr[MASK_RW24U])|0x80,0x00);
booleint3=FALSE;
ReadAde3byte(aderegaddr[RSTATUS_R24U],(uint32 *)&(runaderegval.RSTATUS_VAL_R24U));
pia=&tempia[0];
pib=&tempib[0];
pic=&tempic[0];
pua=&tempua[0];
pub=&tempub[0];
puc=&tempuc[0];
ia=0;
ib=0;
ic=0;
ua=0;
ub=0;
uc=0;
for(i=0;i<10;i++){
uitemp1=*pia++;
uitemp2=*pia++;
uitemp3=*pia++;
uitemp4=(uitemp1<<16)|(uitemp2<<8)|(uitemp3);
ia=ia+uitemp4;
uitemp1=*pib++;
uitemp2=*pib++;
uitemp3=*pib++;
uitemp4=(uitemp1<<16)|(uitemp2<<8)|(uitemp3);
ib=ib+uitemp4;
uitemp1=*pic++;
uitemp2=*pic++;
uitemp3=*pic++;
uitemp4=(uitemp1<<16)|(uitemp2<<8)|(uitemp3);
ic=ic+uitemp4;
uitemp1=*pua++;
uitemp2=*pua++;
uitemp3=*pua++;
uitemp4=(uitemp1<<16)|(uitemp2<<8)|(uitemp3);
ua=ua+uitemp4;
uitemp1=*pub++;
uitemp2=*pub++;
uitemp3=*pub++;
uitemp4=(uitemp1<<16)|(uitemp2<<8)|(uitemp3);
ub=ub+uitemp4;
uitemp1=*puc++;
uitemp2=*puc++;
uitemp3=*puc++;
uitemp4=(uitemp1<<16)|(uitemp2<<8)|(uitemp3);
uc=uc+uitemp4;
}
uirmsval.IA_RMS=ia/10;
uirmsval.IB_RMS=ib/10;
uirmsval.IC_RMS=ic/10;
uirmsval.UA_RMS=ua/10;
uirmsval.UB_RMS=ub/10;
uirmsval.UC_RMS=uc/10;
}
void WriteUI_Os(void)//从参数区写UI偏移量到ADE7758
{
runaderegval.AIRMSOS_VAL_RW12S=adeburnparm.IA_RMS_OS;
runaderegval.BIRMSOS_VAL_RW12S=adeburnparm.IB_RMS_OS;
runaderegval.CIRMSOS_VAL_RW12S=adeburnparm.IC_RMS_OS;
runaderegval.AVRMSOS_VAL_RW12S=adeburnparm.UA_RMS_OS;
runaderegval.BVRMSOS_VAL_RW12S=adeburnparm.UB_RMS_OS;
runaderegval.CVRMSOS_VAL_RW12S=adeburnparm.UC_RMS_OS;
WriteAde2byte((aderegaddr[AIRMSOS_RW12S])|0x80,runaderegval.AIRMSOS_VAL_RW12S);
WriteAde2byte((aderegaddr[BIRMSOS_RW12S])|0x80,runaderegval.BIRMSOS_VAL_RW12S);
WriteAde2byte((aderegaddr[CIRMSOS_RW12S])|0x80,runaderegval.CIRMSOS_VAL_RW12S);
WriteAde2byte((aderegaddr[AVRMSOS_RW12S])|0x80,runaderegval.AVRMSOS_VAL_RW12S);
WriteAde2byte((aderegaddr[BVRMSOS_RW12S])|0x80,runaderegval.BVRMSOS_VAL_RW12S);
WriteAde2byte((aderegaddr[CVRMSOS_RW12S])|0x80,runaderegval.CVRMSOS_VAL_RW12S);
}
void WriteUI_Gain(void)//从参数区写UI增益到ADE7758
{
runaderegval.AIGAIN_VAL_RW12S=adeburnparm.IA_RMS_GAIN;
runaderegval.BIGAIN_VAL_RW12S=adeburnparm.IB_RMS_GAIN;
runaderegval.CIGAIN_VAL_RW12S=adeburnparm.IC_RMS_GAIN;
runaderegval.AVRMSGAIN_VAL_RW12S=adeburnparm.UA_RMS_GAIN;
runaderegval.BVRMSGAIN_VAL_RW12S=adeburnparm.UB_RMS_GAIN;
runaderegval.CVRMSGAIN_VAL_RW12S=adeburnparm.UC_RMS_GAIN;
WriteAde2byte((aderegaddr[AIGAIN_RW12S])|0x80,runaderegval.AIGAIN_VAL_RW12S);
WriteAde2byte((aderegaddr[BIGAIN_RW12S])|0x80,runaderegval.BIGAIN_VAL_RW12S);
WriteAde2byte((aderegaddr[CIGAIN_RW12S])|0x80,runaderegval.CIGAIN_VAL_RW12S);
WriteAde2byte((aderegaddr[AVRMSGAIN_RW12S])|0x80,runaderegval.AVRMSGAIN_VAL_RW12S);
WriteAde2byte((aderegaddr[BVRMSGAIN_RW12S])|0x80,runaderegval.BVRMSGAIN_VAL_RW12S);
WriteAde2byte((aderegaddr[CVRMSGAIN_RW12S])|0x80,runaderegval.CVRMSGAIN_VAL_RW12S);
}
void ClaerUI_Gain(void)
{
WriteAde2byte((aderegaddr[AIGAIN_RW12S])|0x80,0x00);
WriteAde2byte((aderegaddr[BIGAIN_RW12S])|0x80,0x00);
WriteAde2byte((aderegaddr[CIGAIN_RW12S])|0x80,0x00);
WriteAde2byte((aderegaddr[AVRMSGAIN_RW12S])|0x80,0x00);
WriteAde2byte((aderegaddr[BVRMSGAIN_RW12S])|0x80,0x00);
WriteAde2byte((aderegaddr[CVRMSGAIN_RW12S])|0x80,0x00);
}
void ClaerUI_Os(void)
{
WriteAde2byte((aderegaddr[AIRMSOS_RW12S])|0x80,0x00);
WriteAde2byte((aderegaddr[BIRMSOS_RW12S])|0x80,0x00);
WriteAde2byte((aderegaddr[CIRMSOS_RW12S])|0x80,0x00);
WriteAde2byte((aderegaddr[AVRMSOS_RW12S])|0x80,0x00);
WriteAde2byte((aderegaddr[BVRMSOS_RW12S])|0x80,0x00);
WriteAde2byte((aderegaddr[CVRMSOS_RW12S])|0x80,0x00);
}
void GetUI_Rms_Test(void)//取得UI标准输入量下的UI有效值
{
uirmsvaltest.IA_RMS_TEST=uirmsval.IA_RMS;
uirmsvaltest.IB_RMS_TEST=uirmsval.IB_RMS;
uirmsvaltest.IC_RMS_TEST=uirmsval.IC_RMS;
uirmsvaltest.UA_RMS_TEST=uirmsval.UA_RMS;
uirmsvaltest.UB_RMS_TEST=uirmsval.UB_RMS;
uirmsvaltest.UC_RMS_TEST=uirmsval.UC_RMS;
}
void GetUI_Rms_Min(void)//取得UI最小输入量下的UI有效值
{
uirmsvalmin.IA_RMS_MIN=uirmsval.IA_RMS;
uirmsvalmin.IB_RMS_MIN=uirmsval.IB_RMS;
uirmsvalmin.IC_RMS_MIN=uirmsval.IC_RMS;
uirmsvalmin.UA_RMS_MIN=uirmsval.UA_RMS;
uirmsvalmin.UB_RMS_MIN=uirmsval.UB_RMS;
uirmsvalmin.UC_RMS_MIN=uirmsval.UC_RMS;
}
void MakeUI_Gain(void)//获取UI增益量
{
float fz,fm;
int32 temp1,temp2;
uint32 tempa,tempIexp,tempUexp;
//5A
if(wpd800_cfg.Wpd_Param.bIRating==0x00) tempIexp=177372;
//1A
if(wpd800_cfg.Wpd_Param.bIRating==0x01) tempIexp=150822;
//100V
if(wpd800_cfg.Wpd_Param.bURating==0x00) tempUexp=749591;
//400V
if(wpd800_cfg.Wpd_Param.bURating==0x01) tempUexp=710012;
temp1=uirmsvaltest.IA_RMS_TEST;
temp2=tempIexp-temp1;
fz=(float)temp2;
fz=fz*4096;
fm=(float)temp1;
fz=fz/fm;
temp1=fz;
tempa=temp1&0x00000fff;
adeburnparm.IA_RMS_GAIN=tempa;
temp1=uirmsvaltest.IB_RMS_TEST;
temp2=tempIexp-temp1;
fz=(float)temp2;
fz=fz*4096;
fm=(float)temp1;
fz=fz/fm;
temp1=fz;
tempa=temp1&0x00000fff;
adeburnparm.IB_RMS_GAIN=tempa;
temp1=uirmsvaltest.IC_RMS_TEST;
temp2=tempIexp-temp1;
fz=(float)temp2;
fz=fz*4096;
fm=(float)temp1;
fz=fz/fm;
temp1=fz;
tempa=temp1&0x00000fff;
adeburnparm.IC_RMS_GAIN=tempa;
temp1=uirmsvaltest.UA_RMS_TEST;
temp2=tempUexp-temp1;
fz=(float)temp2;
fz=fz*4096;
fm=(float)temp1;
fz=fz/fm;
temp1=fz;
tempa=temp1&0x00000fff;
adeburnparm.UA_RMS_GAIN=tempa;
temp1=uirmsvaltest.UB_RMS_TEST;
temp2=tempUexp-temp1;
fz=(float)temp2;
fz=fz*4096;
fm=(float)temp1;
fz=fz/fm;
temp1=fz;
tempa=temp1&0x00000fff;
adeburnparm.UB_RMS_GAIN=tempa;
temp1=uirmsvaltest.UC_RMS_TEST;
temp2=tempUexp-temp1;
fz=(float)temp2;
fz=fz*4096;
fm=(float)temp1;
fz=fz/fm;
temp1=fz;
tempa=temp1&0x00000fff;
adeburnparm.UC_RMS_GAIN=tempa;
}
void MakeUI_Os(void)//获取UI偏移量
{
float fz1,fz2,fm;
uint32 temp1,temp2;
int32 tempa;
uint16 tempItest,tempImin,tempUtest,tempUmin;
if(wpd800_cfg.Wpd_Param.bIRating==0x00)
{
tempItest=20;
tempImin=4;
fm=-65510;
}
else
{
tempItest=5;
tempImin=1;
fm=-4094.36;
}
temp1=uirmsvalmin.IA_RMS_MIN;
temp2=temp1*tempItest;
fz1=(float)temp2;
fz1=fz1*temp2;
fz1=fz1/100;
temp1=uirmsvaltest.IA_RMS_TEST;
temp2=temp1*tempImin;
fz2=(float)temp2;
fz2=fz2*temp2;
fz2=fz2/10000;
fz1=fz1-fz2;
fz1=fz1/fm;
tempa=fz1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -