초보의 아웅다웅 설계하기/STM32

NTC(10k) 수식

로망와니 2022. 7. 7. 15:12

NTC의 특성 값이나 회로 부분은  변경하여 사용하여야 합니다.

 

 

 

#define REF_RESIST 10000
#define VREF 3.3f
/*******************************************************************************
* Function Name : 
* Parameters    : None
* Return        : None
* Description   : 
3.3 : 4096 = x : ADC
Vout= (x/(x+10000)) * 3.3

*******************************************************************************/
float Calculation_Vout(u16 a_nhADCValue, u8 a_chComp)
{
float Vout, Resistor;

a_nhADCValue += a_chComp;
Vout = (a_nhADCValue * VREF);
Vout /= 4095;
// DEBUGPRINT("ADC Vout %f, ", Vout);
Resistor = Vout *(REF_RESIST/(VREF-Vout));
// DEBUGPRINT("Resistor %f\r\n", Resistor);

return Resistor;
}

#define REF_LDTEMP_BETA 3477
#define REF_LDTEMP_BETA_REVERSE 0.000288 //1/REF_LDTEMP_BETA
#define REF_LDTEMP_25 298.15f
#define REF_LDTEMP_K 273.15f
#define REF_LDTEMP_UPPERRESIS 10000
/*******************************************************************************
* Function Name : 
* Description   : 
* Parameters    : None
* Return        : None
 0 Degree
Resistor = 10000*exp((REF_LDTEMP_BETA*((1/REF_LDTEMP_K)-(1/REF_LDTEMP_25))));
  Resistor = 290776.77 Ohm
*******************************************************************************/
u16 ADC_LDTemperature_Calc(u16 ADC_Batt, u8 ADC_Compensation)
{
float Resistor, Celsius;

Resistor = Calculation_Vout(ADC_Batt, 0);

Celsius = (REF_LDTEMP_BETA_REVERSE*log(Resistor/REF_LDTEMP_UPPERRESIS));
// DEBUGPRINT("Celsius %f\r\n", Celsius);
Celsius += (1/REF_LDTEMP_25);
// DEBUGPRINT("Celsius %f\r\n", Celsius);
Celsius = pow(Celsius, -1);
// DEBUGPRINT("Celsius %f\r\n", Celsius);
Celsius -= 273.15f;
// DEBUGPRINT("Celsius %f\r\n", Celsius);
if(Celsius < 0)
Celsius = 0;

return (u16)Celsius;
}