//-------------------------------------------------------// // Project Code : V2H6K01-23-ENEMAN // File Name : OffsetProcess.cpp // Created on : 2023. 08. 08. // Description : // Author : KimJeongWoo // Last modified Date : //-------------------------------------------------------// #include "Cpu1DeviceDefine.h" unsigned int FlagOffset = 0; int CntAdcOffsetWait = 20000; int SetAdcOffsetWait = 20000; int CntOffsetWait = 400; int SetOffsetWait = 400; unsigned int CntOffsetAvg = 0; unsigned int SetOffsetAvg = 16384; unsigned int CntAdcOffsetSum = 0; unsigned int SetAdcOffsetSum = 16384; int SetFaultAdcOffset = 32767 * 0.01; void OffsetProcess() { // WatchdogRun(); AdcResult(); PllRun(); Lpf1stRun(); // InvVdc = 1. / (CH3_UV_Flt + 1.e-32); RmsAvgSum(); // FaultChecker(); if (FaultReset == 0) { if (FlagOffset == 0) { --CntAdcOffsetWait; if (CntAdcOffsetWait <= 0) { // Adc.Offset[1] = ADC_OFFSET1V5; //Ibat // Adc.Offset[6] = ADC_OFFSET1V5; //IuGrid // Adc.Offset[7] = ADC_OFFSET1V5; //IwGrid // // Adc.Offset[11] = ADC_OFFSET1V5; //IuInv // Adc.Offset[12] = ADC_OFFSET1V5; //IwInv // // Adc.Offset[18] = ADC_OFFSET1V5; //IuGridExt // Adc.Offset[19] = ADC_OFFSET1V5; //IwGridExt // // // Adc.OffsetSum[1] = 0.; //Ibat // Adc.OffsetSum[6] = 0.; //IuGrid // Adc.OffsetSum[7] = 0.; //IwGrid // // Adc.OffsetSum[11] = 0.; //IuInv // Adc.OffsetSum[12] = 0.; //IwInv // // Adc.OffsetSum[18] = 0.; //IuGridExt // Adc.OffsetSum[19] = 0.; //IwGridExt // // Adc.OffsetDelt[1] = 0.; //Ibat // Adc.OffsetDelt[6] = 0.; //IuGrid // Adc.OffsetDelt[7] = 0.; //IwGrid // // Adc.OffsetDelt[11] = 0.; //IuInv // Adc.OffsetDelt[12] = 0.; //IwInv // // Adc.OffsetDelt[18] = 0.; //IuGridExt // Adc.OffsetDelt[19] = 0.; //IwGridExt FlagOffset = 1; CntAdcOffsetWait = SetAdcOffsetWait; } } else if (FlagOffset == 1) { Adc.OffsetSum[2] += Adc.RawData[2] - ADC_OFFSET1V5; //Ibat Adc.OffsetSum[3] += Adc.RawData[3] - ADC_OFFSET1V5; //IuGrid Adc.OffsetSum[4] += Adc.RawData[4] - ADC_OFFSET1V5; //IwGrid Adc.OffsetSum[5] += Adc.RawData[5] - ADC_OFFSET1V5; //IuInv Adc.OffsetSum[8] += Adc.RawData[8] - ADC_OFFSET1V5; //IwInv Adc.OffsetSum[10] += Adc.RawData[10] - ADC_OFFSET1V5; //IwInv Adc.OffsetSum[11] += Adc.RawData[11] - ADC_OFFSET1V5; //Ibat Adc.OffsetSum[12] += Adc.RawData[12] - ADC_OFFSET1V5; //IuGrid Adc.OffsetSum[13] += Adc.RawData[13] - ADC_OFFSET1V5; //IwGrid Adc.OffsetSum[18] += Adc.RawData[18] - ADC_OFFSET1V5; //IuInv Adc.OffsetSum[19] += Adc.RawData[19] - ADC_OFFSET1V5; //IwInv Adc.OffsetSum[20] += Adc.RawData[20] - ADC_OFFSET1V5; //IwInv if (++CntOffsetAvg >= SetOffsetAvg) { //todo 나중에 최적화 할 것. Adc.OffsetDelt[2] = Adc.OffsetSum[2] / SetOffsetAvg; Adc.OffsetDelt[3] = Adc.OffsetSum[3] / SetOffsetAvg; Adc.OffsetDelt[4] = Adc.OffsetSum[4] / SetOffsetAvg; Adc.OffsetDelt[5] = Adc.OffsetSum[5] / SetOffsetAvg; Adc.OffsetDelt[8] = Adc.OffsetSum[8] / SetOffsetAvg; Adc.OffsetDelt[10] = Adc.OffsetSum[10] / SetOffsetAvg; Adc.OffsetDelt[11] = Adc.OffsetSum[11] / SetOffsetAvg; Adc.OffsetDelt[12] = Adc.OffsetSum[12] / SetOffsetAvg; Adc.OffsetDelt[13] = Adc.OffsetSum[13] / SetOffsetAvg; Adc.OffsetDelt[18] = Adc.OffsetSum[18] / SetOffsetAvg; Adc.OffsetDelt[19] = Adc.OffsetSum[19] / SetOffsetAvg; Adc.OffsetDelt[20] = Adc.OffsetSum[20] / SetOffsetAvg; // if (fabs(AdcExt.Offset[18]) > SetFaultAdcOffset) Fault.Sw3.bit.Offset_IL |= 1; // if (fabs(AdcExt.Offset[19]) > SetFaultAdcOffset) Fault.Sw3.bit.Offset_IL |= 1; // if (fabs(AdcExt.Offset[20]) > SetFaultAdcOffset) Fault.Sw3.bit.Offset_IL |= 1; // if (fabs(AdcExt.Offset[21]) > SetFaultAdcOffset) Fault.Sw3.bit.Offset_Iabc |= 1; // if (fabs(AdcExt.Offset[22]) > SetFaultAdcOffset) Fault.Sw3.bit.Offset_Iabc |= 1; // if (fabs(AdcExt.Offset[23]) > SetFaultAdcOffset) Fault.Sw3.bit.Offset_Iabc |= 1; // if (fabs(AdcExt.Offset[24]) > SetFaultAdcOffset) Fault.Sw3.bit.Offset_Ibe |= 1; CntOffsetAvg = 0; FlagOffset = 3; CntOffsetWait = SetOffsetWait; } } } } unsigned int AutoOffsetCnt = 0; unsigned int AutoOffsetSet = 16384; unsigned int FlagAutoOffset = 0; unsigned int AdcOffsetCalCh = 0; unsigned int OffsetCalSeq = 0; void AutoOffsetCal(int AdcCh) { if (FlagAutoOffset == 1) { if(OffsetCalSeq == 0) { Adc.OffsetSum[AdcCh] = 0; OffsetCalSeq = 1; } else { if (AutoOffsetCnt++ < AutoOffsetSet) { Adc.OffsetSum[AdcCh] += Adc.RawData[AdcCh] - Adc.OffsetDefault[AdcCh]; } else { Adc.OffsetDelt[AdcCh] = Adc.OffsetSum[AdcCh] / AutoOffsetCnt; AutoOffsetCnt = 0; FlagAutoOffset = 0; OffsetCalSeq = 0; } } } }