//-------------------------------------------------------// // Project Code : ALE300K03-21-LGE-GEN2.0-BE-CPU1 // File Name : SensingScale.cpp // Created on : 2022. 11. 8. // Description : // Author : KimJeongWoo // Last modified Date : //-------------------------------------------------------// #include "CommonLib.h" unsigned int MuxSel = 0; struct sMesureList Scale; struct sMesureList ScaleDefault; struct sMesureList ScaleDelt; //struct sMesureList Offset; //struct sMesureList OffsetDefault; //struct sMesureList OffsetSum; //struct sMesureList OffsetDelt; //------------------------------------------------------------------------// float CH1_UV = 0, CH1_VIS = 0, CH1_IR = 0; float CH2_UV = 0, CH2_VIS = 0, CH2_IR = 0; float CH3_UV = 0, CH3_VIS = 0, CH3_IR = 0; float CH4_UV = 0, CH4_VIS = 0, CH4_IR = 0; float DAC_1 = 0, DAC_2 = 0, DAC_3 = 0; void InitScale() { // memset(&Offset, 0, (sizeof(Offset) / sizeof(int))); // memset(&OffsetDefault, 0, (sizeof(OffsetDefault) / sizeof(int))); // memset(&OffsetSum, 0, (sizeof(OffsetSum) / sizeof(int))); // memset(&OffsetDelt, 0, (sizeof(OffsetDelt) / sizeof(int))); memset(&Scale, 0, (sizeof(Scale) / sizeof(int))); memset(&ScaleDefault, 0, (sizeof(ScaleDefault) / sizeof(int))); memset(&ScaleDelt, 0, (sizeof(ScaleDelt) / sizeof(int))); ScaleDefaultCal(); ReadScaleDelt(); ScaleUpdate(); OffsetDefaultCal(); ReadOffsetDelt(); OffsetUpdate(); } void OffsetDefaultCal() { Adc.OffsetDefault[0] = ADC_OFFSET1V5; //Vbat Adc.OffsetDefault[1] = ADC_OFFSET1V5; //Ibat Adc.OffsetDefault[2] = ADC_OFFSET1V5; //Vboost Adc.OffsetDefault[3] = ADC_OFFSET1V5; //Vdab Adc.OffsetDefault[4] = ADC_OFFSET1V5; //GFD Adc.OffsetDefault[5] = ADC_OFFSET1V5; //VdcH Adc.OffsetDefault[6] = ADC_OFFSET1V5; //IuGrid Adc.OffsetDefault[7] = ADC_OFFSET1V5; //IwGrid Adc.OffsetDefault[8] = ADC_OFFSET1V5; //VdcL Adc.OffsetDefault[9] = ADC_OFFSET1V5; //VunGrid Adc.OffsetDefault[10] = ADC_OFFSET1V5; //VnwGrid Adc.OffsetDefault[11] = ADC_OFFSET1V5; //IuInv Adc.OffsetDefault[12] = ADC_OFFSET1V5; //IwInv // Adc.OffsetDefault[13] = ADC_OFFSET1V5; //Izct // Adc.OffsetDefault[14] = ADC_OFFSET1V5; //reserved // Adc.OffsetDefault[15] = ADC_OFFSET1V5; //reserved // Adc.OffsetDefault[16] = ADC_OFFSET1V5; //reserved // Adc.OffsetDefault[17] = ADC_OFFSET1V5; //reserved // Adc.OffsetDefault[18] = ADC_OFFSET1V5; //IuGridExt // Adc.OffsetDefault[19] = ADC_OFFSET1V5; //IuGridExt // Adc.OffsetDefault[20] = ADC_OFFSET1V5; //VntcBoost // Adc.OffsetDefault[21] = ADC_OFFSET1V5; //VntcLvDab // Adc.OffsetDefault[22] = ADC_OFFSET1V5; //reserved // Adc.OffsetDefault[23] = ADC_OFFSET1V5; //reserved // Adc.OffsetDefault[24] = ADC_OFFSET1V5; //VntcHvDab // Adc.OffsetDefault[25] = ADC_OFFSET1V5; //VntcInv // Adc.OffsetDefault[26] = ADC_OFFSET1V5; //Vntc5 // Adc.OffsetDefault[27] = ADC_OFFSET1V5; //Vntc6 // Adc.OffsetDefault[28] = ADC_OFFSET1V5; //VunInv // Adc.OffsetDefault[29] = ADC_OFFSET1V5; //VnwInv // Adc.OffsetDefault[30] = ADC_OFFSET1V5; //reserved // Adc.OffsetDefault[31] = ADC_OFFSET1V5; //reserved //임시 EEPROM 올때까지만 Adc.OffsetDelt[0] = 0.; //Vbat Adc.OffsetDelt[1] = 0.; //Ibat Adc.OffsetDelt[2] = 0.; //Vboost Adc.OffsetDelt[3] = 0.; //Vdab Adc.OffsetDelt[4] = 0.; //GFD Adc.OffsetDelt[5] = 0.; //VdcH Adc.OffsetDelt[6] = 0.; //IuGrid Adc.OffsetDelt[7] = 0.; //IwGrid Adc.OffsetDelt[8] = 0.; //VdcL Adc.OffsetDelt[9] = 0.; //VunGrid Adc.OffsetDelt[10] = 0.; //VnwGrid Adc.OffsetDelt[11] = 0.; //IuInv Adc.OffsetDelt[12] = 0.; //IwInv // Adc.OffsetDelt[13] = 0.; //Izct // Adc.OffsetDelt[14] = 0.; //reserved // Adc.OffsetDelt[15] = 0.; //reserved // Adc.OffsetDelt[16] = 0.; //reserved // Adc.OffsetDelt[17] = 0.; //reserved // Adc.OffsetDelt[18] = 0.; //IuGridExt // Adc.OffsetDelt[19] = 0.; //IuGridExt // Adc.OffsetDelt[20] = 0.; //VntcBoost // Adc.OffsetDelt[21] = 0.; //VntcLvDab // Adc.OffsetDelt[22] = 0.; //reserved // Adc.OffsetDelt[23] = 0.; //reserved // Adc.OffsetDelt[24] = 0.; //VntcHvDab // Adc.OffsetDelt[25] = 0.; //VntcInv // Adc.OffsetDelt[26] = 0.; //Vntc5 // Adc.OffsetDelt[27] = 0.; //Vntc6 // Adc.OffsetDelt[28] = 0.; //VunInv // Adc.OffsetDelt[29] = 0.; //VnwInv // Adc.OffsetDelt[30] = 0.; //reserved // Adc.OffsetDelt[31] = 0.; //reserved } void OffsetUpdate() { Adc.Offset[0] = Adc.OffsetDefault[0] + Adc.OffsetDelt[0]; //Vbat Adc.Offset[1] = Adc.OffsetDefault[1] + Adc.OffsetDelt[1]; //Ibat Adc.Offset[2] = Adc.OffsetDefault[2] + Adc.OffsetDelt[2]; //Vboost Adc.Offset[3] = Adc.OffsetDefault[3] + Adc.OffsetDelt[3]; //Vdab Adc.Offset[4] = Adc.OffsetDefault[4] + Adc.OffsetDelt[4]; //GFD Adc.Offset[5] = Adc.OffsetDefault[5] + Adc.OffsetDelt[5]; //VdcH Adc.Offset[6] = Adc.OffsetDefault[6] + Adc.OffsetDelt[6]; //IuGrid Adc.Offset[7] = Adc.OffsetDefault[7] + Adc.OffsetDelt[7]; //IwGrid Adc.Offset[8] = Adc.OffsetDefault[8] + Adc.OffsetDelt[8]; //VdcL Adc.Offset[9] = Adc.OffsetDefault[9] + Adc.OffsetDelt[9]; //VunGrid Adc.Offset[10] = Adc.OffsetDefault[10] + Adc.OffsetDelt[10]; //VnwGrid Adc.Offset[11] = Adc.OffsetDefault[11] + Adc.OffsetDelt[11]; //IuInv Adc.Offset[12] = Adc.OffsetDefault[12] + Adc.OffsetDelt[12]; //IwInv // Adc.Offset[13] = Adc.OffsetDefault[13] + Adc.OffsetDelt[13]; //Izct // Adc.Offset[14] = Adc.OffsetDefault[14] + Adc.OffsetDelt[14]; //reserved // Adc.Offset[15] = Adc.OffsetDefault[15] + Adc.OffsetDelt[15]; //reserved // Adc.Offset[16] = Adc.OffsetDefault[16] + Adc.OffsetDelt[16]; //reserved // Adc.Offset[17] = Adc.OffsetDefault[17] + Adc.OffsetDelt[17]; //reserved // Adc.Offset[18] = Adc.OffsetDefault[18] + Adc.OffsetDelt[18]; //IuGridExt // Adc.Offset[19] = Adc.OffsetDefault[19] + Adc.OffsetDelt[19]; //IuGridExt // Adc.Offset[20] = Adc.OffsetDefault[20] + Adc.OffsetDelt[20]; //VntcBoost // Adc.Offset[21] = Adc.OffsetDefault[21] + Adc.OffsetDelt[21]; //VntcLvDab // Adc.Offset[22] = Adc.OffsetDefault[22] + Adc.OffsetDelt[22]; //reserved // Adc.Offset[23] = Adc.OffsetDefault[23] + Adc.OffsetDelt[23]; //reserved // Adc.Offset[24] = Adc.OffsetDefault[24] + Adc.OffsetDelt[24]; //VntcHvDab // Adc.Offset[25] = Adc.OffsetDefault[25] + Adc.OffsetDelt[25]; //VntcInv // Adc.Offset[26] = Adc.OffsetDefault[26] + Adc.OffsetDelt[26]; //Vntc5 // Adc.Offset[27] = Adc.OffsetDefault[27] + Adc.OffsetDelt[27]; //Vntc6 // Adc.Offset[28] = Adc.OffsetDefault[28] + Adc.OffsetDelt[28]; //VunInv // Adc.Offset[29] = Adc.OffsetDefault[29] + Adc.OffsetDelt[29]; //VnwInv // Adc.Offset[30] = Adc.OffsetDefault[30] + Adc.OffsetDelt[30]; //reserved // Adc.Offset[31] = Adc.OffsetDefault[31] + Adc.OffsetDelt[31]; //reserved } void ScaleDefaultCal() { // ScaleDefault.VunInv = INV_AC_PT_GAIN; //Adc21 인버터 출력 전압 UN // ScaleDefault.VnwInv = INV_AC_PT_GAIN; //Adc22 인버터 출력 전압 UN // ScaleDefault.IuGrid = -INV_AC_CT_GAIN; //Adc23 계통 전류 U // ScaleDefault.IwGrid = -INV_AC_CT_GAIN; //Adc24 계통 전류 W //임시 EEPROM 올때까지만 ScaleDelt.ADC_CH1_UV = 1.; ScaleDelt.ADC_CH1_VIS = 1.; ScaleDelt.ADC_CH1_IR = 1.; ScaleDelt.ADC_CH2_UV = 1.; ScaleDelt.ADC_CH2_VIS = 1.; ScaleDelt.ADC_CH2_IR = 1.; ScaleDelt.ADC_CH3_UV = 1.; ScaleDelt.ADC_CH3_VIS = 1.; ScaleDelt.ADC_CH3_IR = 1.; ScaleDelt.ADC_CH4_UV = 1.; ScaleDelt.ADC_CH4_VIS = 1.; ScaleDelt.ADC_CH4_IR = 1.; } //AMC3330 // Input Offset Current -10nA, 0.8nA, 10nA(Min, Typ, Max) // Input Bias Current -10nA, 2.5nA, 10nA(Min, Typ, Max) // 계산 다시 할것 void ScaleUpdate() { Scale.ADC_CH1_UV = ScaleDefault.ADC_CH1_UV + ScaleDelt.ADC_CH1_UV; Scale.ADC_CH1_VIS = ScaleDefault.ADC_CH1_VIS + ScaleDelt.ADC_CH1_VIS; Scale.ADC_CH1_IR = ScaleDefault.ADC_CH1_IR + ScaleDelt.ADC_CH1_IR; Scale.ADC_CH2_UV = ScaleDefault.ADC_CH2_UV + ScaleDelt.ADC_CH2_UV; Scale.ADC_CH2_VIS = ScaleDefault.ADC_CH2_VIS + ScaleDelt.ADC_CH2_VIS; Scale.ADC_CH2_IR = ScaleDefault.ADC_CH2_IR + ScaleDelt.ADC_CH2_IR; Scale.ADC_CH3_UV = ScaleDefault.ADC_CH3_UV + ScaleDelt.ADC_CH3_UV; Scale.ADC_CH3_VIS = ScaleDefault.ADC_CH3_VIS + ScaleDelt.ADC_CH3_VIS; Scale.ADC_CH3_IR = ScaleDefault.ADC_CH3_IR + ScaleDelt.ADC_CH3_IR; Scale.ADC_CH4_UV = ScaleDefault.ADC_CH4_UV + ScaleDelt.ADC_CH4_UV; Scale.ADC_CH4_VIS = ScaleDefault.ADC_CH4_VIS + ScaleDelt.ADC_CH4_VIS; Scale.ADC_CH4_IR = ScaleDefault.ADC_CH4_IR + ScaleDelt.ADC_CH4_IR; } unsigned int TestAdcData = 4029; float AdcOffset = 4095./2. ; float VbatTestVar = 0.; void AdcResult(void) { int AdcCnt = 0; for (AdcCnt = 0; AdcCnt < 32; AdcCnt++) { Adc.Data[AdcCnt] = (float)Adc.RawData[AdcCnt] - Adc.Offset[AdcCnt]; } CH1_UV = Adc.Data[2] * Scale.ADC_CH1_UV; CH1_VIS = Adc.Data[3] * Scale.ADC_CH1_VIS; CH1_IR = Adc.Data[4] * Scale.ADC_CH1_IR; CH2_UV = Adc.Data[5] * Scale.ADC_CH2_UV; CH2_VIS = Adc.Data[8] * Scale.ADC_CH2_VIS; CH2_IR = Adc.Data[10] * Scale.ADC_CH2_IR; CH3_UV = Adc.Data[11] * Scale.ADC_CH3_UV; CH3_VIS = Adc.Data[12] * Scale.ADC_CH3_VIS; CH3_IR = Adc.Data[13] * Scale.ADC_CH3_IR; CH4_UV = Adc.Data[20] * Scale.ADC_CH4_UV; CH4_VIS = Adc.Data[19] * Scale.ADC_CH4_VIS; CH4_IR = Adc.Data[18] * Scale.ADC_CH4_IR; DAC_1 = Adc.Data[0]; DAC_2 = Adc.Data[1]; DAC_3 = Adc.Data[9]; } void ReadScaleDelt(void) { } void WriteScaleDelt(void) { // NV.Adc.ScaleDelt.AdcExtBUTTON = ScaleDelt.AdcExtBUTTON; } void ResetScaleDelt(void) { memset(&ScaleDelt, 0, (sizeof(ScaleDelt) / sizeof(int))); } void ReadOffsetDelt(void) { } void WriteOffsetDelt(void) { // NV.Adc.ScaleDelt.AdcExtBUTTON = ScaleDelt.AdcExtBUTTON; } void ResetOffsetDelt(void) { memset(&ScaleDelt, 0, (sizeof(ScaleDelt) / sizeof(int))); }