📄 calibration.c
字号:
void Calibration(void)
{
float fvalue;
unsigned int uiFactTemp;
#ifdef TAMPER_DETECTION
unsigned int uiTemp;
#endif
WDTCTL = WDT_ARST_1000;
switch(DM.ucCalibrationMode)
{
#ifndef TAMPER_DETECTION
case 1:
{
fvalue = ENERGY_CALC/DM.EspRs.lActEnergy1*SM.Cfg.EspPar.uiGainCorr1+0.5;
fvalue = fvalue*1.0033;
SM.Cfg.EspPar.uiGainCorr1 = (int) fvalue;
DM.ucCalibrationMode = 0;
DM.ulLastActP = 0;
DM.ulReActP = 0;
fvalue = (float)V_CAL*VOL_SHOW_TIMES*POW_2_15/(float)DM.EspRs.uiV1Rms+0.5;
SM.Cfg.EspPar.uiV1Gain = (int) fvalue;
DM.EspRs.ulIRms = DM.EspRs.ulIRms>>14;
fvalue = (float)Ib_CAL*CURRENT_SHOW_TIMES*POW_2_18/DM.EspRs.ulIRms+0.5;
SM.Cfg.EspPar.ulIGain = (unsigned long) fvalue;
fvalue = (float)STARTCURRENT_INIT*KICOM_10000*POW_2_16/SM.Cfg.EspPar.ulIGain;
SM.Cfg.EspPar.ulStartCurrent = (unsigned long) fvalue;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
case 2:
{
//fvalue = (float)((((float)DM.EspRs.lActEnergy1)/ENERGY_CALC_Phi));
//fvalue = fvalue/2;
uiFactTemp = (float)POWERFCT;
if(uiFactTemp>0x8000)
{
if(uiFactTemp>0xC000)
{
uiFactTemp=0xFFFF-uiFactTemp+1;
}
else
{
uiFactTemp = uiFactTemp-0x8000;
}
}
else
{
if(uiFactTemp>0x4000)
{
uiFactTemp=0x8000-uiFactTemp;
}
}
fvalue = (float)((((float)uiFactTemp)/POW_2_14));
fvalue = acos(fvalue);
fvalue = fvalue*180/__PI;
fvalue = defCalPhi + fvalue;
fvalue = fvalue * (POW_2_20 / (360ul * defCalFreq));
SM.Cfg.EspPar.iPhaseCorr1= SM.Cfg.EspPar.iPhaseCorr1 - (int) fvalue;
_NOP();
DM.ucCalibrationMode = 0;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
case 3:
{
DM.lI1HImeas = DM.EspRs.lActEnergy1;
DM.ucCalibrationMode = 0;
}break;
case 4:
{
DM.lI1LOmeas = DM.EspRs.lActEnergy1;
fvalue = (nHIcalc - nLOcalc)/(float)((DM.lI1HImeas - DM.lI1LOmeas))*SM.Cfg.EspPar.uiGainCorr1;
SM.Cfg.EspPar.uiGainCorr1 = (int) fvalue;
fvalue = ((float)DM.lI1HImeas*nLOcalc - (float)DM.lI1LOmeas*nHIcalc)/((float)DM.lI1HImeas-(float)DM.lI1LOmeas);
SM.Cfg.EspPar.lPowerOffset1 = (long)fvalue;
DM.ucCalibrationMode = 0;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
case 5:
{
fvalue = (float)V_CAL*VOL_SHOW_TIMES*POW_2_15/(float)DM.EspRs.uiV1Rms+0.5;
SM.Cfg.EspPar.uiV1Gain = (int) fvalue;
DM.EspRs.ulIRms = DM.EspRs.ulIRms>>14;
fvalue = (float)Ib_CAL*CURRENT_SHOW_TIMES*POW_2_18/DM.EspRs.ulIRms+0.5;
SM.Cfg.EspPar.ulIGain = (unsigned long) fvalue;
//fvalue = (float)defSET_STARTCURR*CURRENT_SHOW_TIMES*POW_2_16*POW_2_16/SM.Cfg.EspPar.ulIGain;
fvalue = (float)STARTCURRENT_INIT*KICOM_10000*POW_2_16/SM.Cfg.EspPar.ulIGain;
SM.Cfg.EspPar.ulStartCurrent = (unsigned long) fvalue;
uiFactTemp = (float)POWERFCT;
if(uiFactTemp>0x8000)
{
if(uiFactTemp>0xC000)
{
uiFactTemp=0xFFFF-uiFactTemp+1;
}
else
{
uiFactTemp = uiFactTemp-0x8000;
}
}
else
{
if(uiFactTemp>0x4000)
{
uiFactTemp=0x8000-uiFactTemp;
}
}
fvalue = (float)((((float)uiFactTemp)/POW_2_14));
//fvalue = (float)((((float)POWERFCT)/POW_2_14));
fvalue = acos(fvalue);
fvalue = fvalue*180/__PI;
fvalue = defCalPhi + fvalue;
fvalue = fvalue * (POW_2_19 / (360ul * defCalFreq));
SM.Cfg.EspPar.iPhaseCorr1= SM.Cfg.EspPar.iPhaseCorr1 - (int) fvalue;
_NOP();
DM.ucCalibrationMode = 0;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
#else
case 1:
{
if(DM.EspRs.lActEnergy1<DM.EspRs.lActEnergy2)
{
SM.Cfg.EspPar.uiAdaptI1
=(unsigned long long)SM.Cfg.EspPar.uiAdaptI1*DM.EspRs.lActEnergy2/DM.EspRs.lActEnergy1;
}
else
{
uiTemp =(unsigned long long)SM.Cfg.EspPar.uiAdaptI2*DM.EspRs.lActEnergy1/DM.EspRs.lActEnergy2;
if(uiTemp<0x7FFF)
{
SM.Cfg.EspPar.uiAdaptI2 = uiTemp;
}
else
{
SM.Cfg.EspPar.uiAdaptI1
=(unsigned long long)SM.Cfg.EspPar.uiAdaptI1*DM.EspRs.lActEnergy2/DM.EspRs.lActEnergy1;
}
}
DM.ucCalibrationMode = 0;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
case 2:
{
DM.lI1HImeas = DM.EspRs.lActEnergy1;
DM.lI2HImeas = DM.EspRs.lActEnergy2;
DM.ucCalibrationMode = 0;
}break;
case 3:
{
DM.lI1LOmeas = DM.EspRs.lActEnergy1;
DM.lI2LOmeas = DM.EspRs.lActEnergy2;
//fvalue = (nHIcalc - nLOcalc)/(float)((DM.lI1HImeas - DM.lI1LOmeas))*SM.Cfg.EspPar.uiGainCorr1;
//SM.Cfg.EspPar.uiGainCorr1 = (int) fvalue;
//fvalue = ((float)DM.lI1HImeas*nLOcalc - (float)DM.lI1LOmeas*nHIcalc)/((float)DM.lI1HImeas-(float)DM.lI1LOmeas);
//SM.Cfg.EspPar.lPowerOffset1 = (long)fvalue;
fvalue = nHIcalc/DM.lI1HImeas*SM.Cfg.EspPar.uiGainCorr1+0.5;
SM.Cfg.EspPar.uiGainCorr1 = (int) fvalue; //根据设定的能量校正值和读出的有功电能原值及功率通道的增益修正值得到新的增益修正值
fvalue = (nHIcalc - nLOcalc)/(float)((DM.lI2HImeas - DM.lI2LOmeas))*SM.Cfg.EspPar.uiGainCorr2;
SM.Cfg.EspPar.uiGainCorr2 = (int) fvalue;
fvalue = ((float)DM.lI2HImeas*nLOcalc - (float)DM.lI2LOmeas*nHIcalc)/((float)DM.lI2HImeas-(float)DM.lI2LOmeas);
SM.Cfg.EspPar.lPowerOffset2 = (long)fvalue;
DM.ucCalibrationMode = 0;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
case 4:
{
fvalue = (float)V_CAL*VOL_SHOW_TIMES*POW_2_15/(float)DM.EspRs.uiV1Rms+0.5;
SM.Cfg.EspPar.uiV1Gain = (int) fvalue;
DM.EspRs.ulIRms = DM.EspRs.ulIRms>>14;
fvalue = (float)Ib_CAL*CURRENT_SHOW_TIMES*POW_2_18/DM.EspRs.ulIRms+0.5;
SM.Cfg.EspPar.ulIGain = (unsigned long) fvalue;
//fvalue = (float)defSET_STARTCURR*CURRENT_SHOW_TIMES*POW_2_16*POW_2_16/SM.Cfg.EspPar.ulIGain;
fvalue = (float)STARTCURRENT_INIT*KICOM_10000*POW_2_16/SM.Cfg.EspPar.ulIGain;
SM.Cfg.EspPar.ulStartCurrent = (unsigned long) fvalue;
//fvalue = (float)((((float)POWERFCT)/POW_2_14));
//fvalue = acos(fvalue);
//fvalue = fvalue*180/__PI;
//fvalue = defCalPhi + fvalue;
//fvalue = fvalue * (POW_2_19 / (360ul * defCalFreq));
//SM.Cfg.EspPar.iPhaseCorr1= SM.Cfg.EspPar.iPhaseCorr1 - (int) fvalue;
fvalue = (float)DM.EspRs.lActEnergy1/ENERGY_CALC;
fvalue = acos(fvalue);
fvalue = fvalue*180/__PI;
fvalue = defCalPhi + fvalue;
fvalue = fvalue * (POW_2_20 / (360ul * defCalFreq));
SM.Cfg.EspPar.iPhaseCorr1= SM.Cfg.EspPar.iPhaseCorr1 - (int) fvalue;
fvalue = (float)DM.EspRs.lActEnergy2/ENERGY_CALC;
fvalue = acos(fvalue);
fvalue = fvalue*180/__PI;
fvalue = defCalPhi + fvalue;
fvalue = fvalue * (POW_2_20 / (360ul * defCalFreq));
SM.Cfg.EspPar.iPhaseCorr2= SM.Cfg.EspPar.iPhaseCorr2 - (int) fvalue;
_NOP();
DM.ucCalibrationMode = 0;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
case 5:
{
fvalue = ENERGY_CALC/DM.EspRs.lActEnergy1*SM.Cfg.EspPar.uiGainCorr1+0.5;
SM.Cfg.EspPar.uiGainCorr1 = (int) fvalue;
DM.ucCalibrationMode = 0;
DM.ulLastActP = 0;
DM.ulReActP = 0;
fvalue = (float)V_CAL*VOL_SHOW_TIMES*POW_2_15/(float)DM.EspRs.uiV1Rms+0.5;
SM.Cfg.EspPar.uiV1Gain = (int) fvalue;
DM.EspRs.ulIRms = DM.EspRs.ulIRms>>14;
fvalue = (float)Ib_CAL*CURRENT_SHOW_TIMES*POW_2_18/DM.EspRs.ulIRms+0.5;
SM.Cfg.EspPar.ulIGain = (unsigned long) fvalue;
//fvalue = (float)defSET_STARTCURR*CURRENT_SHOW_TIMES*POW_2_16*POW_2_16/SM.Cfg.EspPar.ulIGain;
fvalue = (float)STARTCURRENT_INIT*KICOM_10000*POW_2_16/SM.Cfg.EspPar.ulIGain;
SM.Cfg.EspPar.ulStartCurrent = (unsigned long) fvalue;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
case 6:
{
//fvalue = (float)DM.EspRs.lActEnergy1/ENERGY_CALC;
//fvalue = (float)((((float)DM.EspRs.lActEnergy1)/ENERGY_CALC));
uiFactTemp = (float)POWERFCT;
if(uiFactTemp>0x8000)
{
if(uiFactTemp>0xC000)
{
uiFactTemp=0xFFFF-uiFactTemp+1;
}
else
{
uiFactTemp = uiFactTemp-0x8000;
}
}
else
{
if(uiFactTemp>0x4000)
{
uiFactTemp=0x8000-uiFactTemp;
}
}
fvalue = (float)((((float)uiFactTemp)/POW_2_14));
fvalue = acos(fvalue);
fvalue = fvalue*180/__PI;
fvalue = defCalPhi + fvalue;
fvalue = fvalue * (POW_2_20 / (360ul * defCalFreq));
SM.Cfg.EspPar.iPhaseCorr1= SM.Cfg.EspPar.iPhaseCorr1 - (int) fvalue;
DM.ucCalibrationMode = 0;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
case 7:
{
DM.lI2HImeas = DM.EspRs.lActEnergy2;
DM.ucCalibrationMode = 0;
}break;
case 8:
{
DM.lI2LOmeas = DM.EspRs.lActEnergy2;
fvalue = (nHIcalc - nLOcalc)/(float)((DM.lI2HImeas - DM.lI2LOmeas))*SM.Cfg.EspPar.uiGainCorr2;
SM.Cfg.EspPar.uiGainCorr2 = (int) fvalue;
fvalue = ((float)DM.lI2HImeas*nLOcalc - (float)DM.lI2LOmeas*nHIcalc)/((float)DM.lI2HImeas-(float)DM.lI2LOmeas);
SM.Cfg.EspPar.lPowerOffset2 = (long)fvalue;
DM.ucCalibrationMode = 0;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
case 9:
{
fvalue = (float)DM.EspRs.lActEnergy2/ENERGY_CALC;
fvalue = acos(fvalue);
fvalue = fvalue*180/__PI;
fvalue = defCalPhi + fvalue;
fvalue = fvalue * (POW_2_20 / (360ul * defCalFreq));
SM.Cfg.EspPar.iPhaseCorr2= SM.Cfg.EspPar.iPhaseCorr2 - (int) fvalue;
DM.ucCalibrationMode = 0;
SystemEventFlag |= SYSTEM_ESPPARAM_FLAG;
}break;
#endif
}
//Set_IdleMode();
//Init_ESP_Parameter();
//Start_Measurement();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -