Thermocouple mV conversion library

Dependents:   CN0391

Thermocouple.h

Committer:
adisuciu
Date:
2016-11-07
Revision:
1:5421fc992678
Parent:
0:a878bf59a337

File content as of revision 1:5421fc992678:

#include "mbed.h"
#ifndef _THERMOCOUPLE_H_
#define _THERMOCOUPLE_H_

#define DEFINE_LOOKUP_TABLES
#ifdef DEFINE_LOOKUP_TABLES
#define TYPE_B_LUT
#define TYPE_E_LUT
#define TYPE_J_LUT
#define TYPE_K_LUT
#define TYPE_N_LUT
#define TYPE_R_LUT
#define TYPE_S_LUT
#define TYPE_T_LUT
#endif

class Thermocouple
{
private:

public:
    typedef struct {
        float min_voltage_range;
        float max_voltage_range;
        float coef[16];
        float power[16];
        int n;
    } thermocouple_poly_subrange;
    Thermocouple();
    virtual ~Thermocouple();
    static float convert(float voltage, const thermocouple_poly_subrange range[], const int n);
    static float lookup(const int32_t *lut, float voltage, uint16_t size, int16_t offset);
    virtual float convert(float voltage) = 0;
    virtual float convert_inv(float temp) = 0;
    virtual float lookup(float voltage) = 0;
    virtual float lookup_inv(float temp) = 0;

};




class Thermocouple_Type_B : public Thermocouple
{
public:
    ~Thermocouple_Type_B();
    static const thermocouple_poly_subrange inv_poly[2];
    static const int inv_poly_size;
    float convert_inv(float temp);

    static const thermocouple_poly_subrange poly[2];
    static const int poly_size;
    float convert(float voltage);
#ifdef TYPE_B_LUT
    static const int32_t lut[];
    static const int16_t lut_offset;
    static const uint16_t lut_size;
    float lookup(float voltage);
    float lookup_inv(float temp);
#endif
};


class Thermocouple_Type_E : public Thermocouple
{
public:
    ~Thermocouple_Type_E();
    static const thermocouple_poly_subrange inv_poly[2];
    static const int inv_poly_size;
    float convert_inv(float temp);

    static const thermocouple_poly_subrange poly[2];
    static const int poly_size;
    float convert(float voltage);
#ifdef TYPE_E_LUT
    static const int32_t lut[];
    static const int16_t lut_offset;
    static const uint16_t lut_size;
    float lookup(float voltage);
    float lookup_inv(float temp);
#endif
};


class Thermocouple_Type_J : public Thermocouple
{
public:
    ~Thermocouple_Type_J();
    static const thermocouple_poly_subrange inv_poly[2];
    static const int inv_poly_size;
    float convert_inv(float temp);

    static const thermocouple_poly_subrange poly[3];
    static const int poly_size;
    float convert(float voltage);
#ifdef TYPE_J_LUT
    static const int32_t lut[];
    static const int16_t lut_offset;
    static const uint16_t lut_size;
    float lookup(float voltage);
    float lookup_inv(float temp);
#endif
};


class Thermocouple_Type_K : public Thermocouple
{
public:
    ~Thermocouple_Type_K();
    static const thermocouple_poly_subrange inv_poly[2];
    static const int inv_poly_size;
    float convert_inv(float temp);

    static const thermocouple_poly_subrange poly[3];
    static const int poly_size;
    float convert(float voltage);
#ifdef TYPE_K_LUT
    static const int32_t lut[];
    static const int16_t lut_offset;
    static const uint16_t lut_size;
    float lookup(float voltage);
    float lookup_inv(float temp);
#endif
};


class Thermocouple_Type_N : public Thermocouple
{
public:
    ~Thermocouple_Type_N();
    static const thermocouple_poly_subrange inv_poly[2];
    static const int inv_poly_size;
    float convert_inv(float temp);

    static const thermocouple_poly_subrange poly[3];
    static const int poly_size;
    float convert(float voltage);
#ifdef TYPE_N_LUT
    static const int32_t lut[];
    static const int16_t lut_offset;
    static const uint16_t lut_size;
    float lookup(float voltage);
    float lookup_inv(float temp);
#endif
};


class Thermocouple_Type_R : public Thermocouple
{
public:
    ~Thermocouple_Type_R();
    static const thermocouple_poly_subrange inv_poly[3];
    static const int inv_poly_size;
    float convert_inv(float temp);

    static const thermocouple_poly_subrange poly[4];
    static const int poly_size;
    float convert(float voltage);
#ifdef TYPE_R_LUT
    static const int32_t lut[];
    static const int16_t lut_offset;
    static const uint16_t lut_size;
    float lookup(float voltage);
    float lookup_inv(float temp);
#endif
};


class Thermocouple_Type_S : public Thermocouple
{
public:
    ~Thermocouple_Type_S();
    static const thermocouple_poly_subrange inv_poly[3];
    static const int inv_poly_size;
    float convert_inv(float temp);

    static const thermocouple_poly_subrange poly[4];
    static const int poly_size;
    float convert(float voltage);
#ifdef TYPE_S_LUT
    static const int32_t lut[];
    static const int16_t lut_offset;
    static const uint16_t lut_size;
    float lookup(float voltage);
    float lookup_inv(float temp);
#endif
};


class Thermocouple_Type_T : public Thermocouple
{
public:
    ~Thermocouple_Type_T();
    static const thermocouple_poly_subrange inv_poly[2];
    static const int inv_poly_size;
    float convert_inv(float temp);

    static const thermocouple_poly_subrange poly[2];
    static const int poly_size;
    float convert(float voltage);
#ifdef TYPE_T_LUT
    static const int32_t lut[];
    static const int16_t lut_offset;
    static const uint16_t lut_size;
    float lookup(float voltage);
    float lookup_inv(float temp);
#endif
};



#endif