//-------------------------------------------------------// // Project Code : CodeLibrary // File Name : Ntc.cpp // Created on : 2022. 11. 5. // Description : 테이블 방식의 NTC 온도계산 프로그램 // Author : KimJeongWoo // Last modified Date : //-------------------------------------------------------// #include "CodeLibMath.h" #include "Ntc.h" void NtcTableReadTemp(float *NtcTemp, int *AdcData, struct sNTCTABLE *NtcTable) { if (*NtcTemp <= 0) { if (*AdcData <= NtcTable->Table[0]) *NtcTemp = 0; else *NtcTemp = 1; } else if (*NtcTemp >= NtcTable->Size) { if (*AdcData > NtcTable->Table[NtcTable->Size]) *NtcTemp = NtcTable->Size - 1; else *NtcTemp = NtcTable->Size; } else { if (*AdcData < NtcTable->Table[(Uint16) *NtcTemp - 1]) *NtcTemp = *NtcTemp - 1; else if (*AdcData >= NtcTable->Table[(Uint16) *NtcTemp]) *NtcTemp = *NtcTemp + 1; } } //--------------------------Table 생성코드---------------------------------// //todo Beta 값 기반인데 나중에 Stain-Heart Heart 방정식으로 변경하면 좋을 듯? // void NtcTableGen(struct sNTCTABLE *Ntc) { int i = 0.; float Rntc = 0.; float Vntc = 0.; for ( i = 0; i < Ntc->Size; i++) { Rntc = (Ntc->R25 * expf(Ntc->Beta * (1. / (273.15 + (float)i) - 1. / 298.15))); Vntc = (Ntc->Vset * (Ntc->Rset / (Rntc + Ntc->Rset))); //ADC 12bit, 3Vref Ntc->Table[i] = 4095. * (Vntc / 3.); } } //----------------------------------------------------------------------------------------------------//