Solving for Two Point Model Constants for NTC Thermistor



/* Therm_1.C (Flashlite V25)
**
** Routine to calculate a and b constants (2-point model) for an
** NTC thermistor where;
**
** T_K = 1/(a + b*ln(R_therm))
**
** Prompts user for two sets of temperature - resistor points and
** solves equations for a and b.
**
**  a + b * ln(r_therm1) = 1/T_K1
**  a + b * ln(r_therm2) = 1/T_K2
**
** Writes results to text file "therm.dta".  This may later be read
** when performing a temperature measurement.
**
** To test, you might use;
**
** T_C1 = 27.9    r_therm_1 = 8.87e3
** T_C2 = -1.0    r_therm_2 = 29.1e3
**
** The result is a=0.000623, b=0.000297
**
** copyright, Peter H. Anderson, Baltimore, MD, Sept, '00
*/

#include <stdio.h>
#include <math.h>

void calibrate(void);

void main(void)
{
    calibrate();
}

void calibrate(void)
{
    FILE *f;
    float R_therm1, R_therm2, T_C1, T_C2, T_K1, T_K2, denom, num;
    float a, b;

    printf("Enter T_C and RTherm at one point: ");
    scanf("%f %f", &T_C1, &R_therm1);
    printf("Enter T_C and RTherm at second point: ");
    scanf("%f %f", &T_C2, &R_therm2);


    T_K1 = T_C1 + 273.15;
    T_K2 = T_C2 + 273.15;

    /* solve the two simultaneous equations */
    denom = log(R_therm2) - log(R_therm1);

    num = 1.0/T_K1 * log(R_therm2) - 1.0/T_K2 * log(R_therm1);

    a = num / denom;

    num = 1.0/T_K2 - 1.0/T_K1;

    b = num / denom;

    f = fopen("therm.dta", "wt");
    printf("%f %f\n", a, b);     /* print to console and file */
    fprintf(f, "%f %f\n", a, b);
    fclose(f);
}