A collection of Analog Devices drivers for the mbed platform

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Thermocouple.h Source File

Thermocouple.h

00001 #include "mbed.h"
00002 #ifndef _THERMOCOUPLE_H_
00003 #define _THERMOCOUPLE_H_
00004 
00005 #define DEFINE_LOOKUP_TABLES
00006 #ifdef DEFINE_LOOKUP_TABLES
00007 #define TYPE_B_LUT
00008 #define TYPE_E_LUT
00009 #define TYPE_J_LUT
00010 #define TYPE_K_LUT
00011 #define TYPE_N_LUT
00012 #define TYPE_R_LUT
00013 #define TYPE_S_LUT
00014 #define TYPE_T_LUT
00015 #endif
00016 
00017 class Thermocouple
00018 {
00019 private:
00020 
00021 public:
00022     typedef struct {
00023         float min_voltage_range;
00024         float max_voltage_range;
00025         float coef[16];
00026         float power[16];
00027         int n;
00028     } thermocouple_poly_subrange;
00029     Thermocouple();
00030     virtual ~Thermocouple();
00031     static float convert(float voltage, const thermocouple_poly_subrange range[], const int n);
00032     static float lookup(const int32_t *lut, float voltage, uint16_t size, int16_t offset);
00033     virtual float convert(float voltage) = 0;
00034     virtual float convert_inv(float temp) = 0;
00035     virtual float lookup(float voltage) = 0;
00036     virtual float lookup_inv(float temp) = 0;
00037 
00038 };
00039 
00040 
00041 
00042 
00043 class Thermocouple_Type_B : public Thermocouple
00044 {
00045 public:
00046     ~Thermocouple_Type_B();
00047     static const thermocouple_poly_subrange inv_poly[2];
00048     static const int inv_poly_size;
00049     float convert_inv(float temp);
00050 
00051     static const thermocouple_poly_subrange poly[2];
00052     static const int poly_size;
00053     float convert(float voltage);
00054 #ifdef TYPE_B_LUT
00055     static const int32_t lut[];
00056     static const int16_t lut_offset;
00057     static const uint16_t lut_size;
00058     float lookup(float voltage);
00059     float lookup_inv(float temp);
00060 #endif
00061 };
00062 
00063 
00064 class Thermocouple_Type_E : public Thermocouple
00065 {
00066 public:
00067     ~Thermocouple_Type_E();
00068     static const thermocouple_poly_subrange inv_poly[2];
00069     static const int inv_poly_size;
00070     float convert_inv(float temp);
00071 
00072     static const thermocouple_poly_subrange poly[2];
00073     static const int poly_size;
00074     float convert(float voltage);
00075 #ifdef TYPE_E_LUT
00076     static const int32_t lut[];
00077     static const int16_t lut_offset;
00078     static const uint16_t lut_size;
00079     float lookup(float voltage);
00080     float lookup_inv(float temp);
00081 #endif
00082 };
00083 
00084 
00085 class Thermocouple_Type_J : public Thermocouple
00086 {
00087 public:
00088     ~Thermocouple_Type_J();
00089     static const thermocouple_poly_subrange inv_poly[2];
00090     static const int inv_poly_size;
00091     float convert_inv(float temp);
00092 
00093     static const thermocouple_poly_subrange poly[3];
00094     static const int poly_size;
00095     float convert(float voltage);
00096 #ifdef TYPE_J_LUT
00097     static const int32_t lut[];
00098     static const int16_t lut_offset;
00099     static const uint16_t lut_size;
00100     float lookup(float voltage);
00101     float lookup_inv(float temp);
00102 #endif
00103 };
00104 
00105 
00106 class Thermocouple_Type_K : public Thermocouple
00107 {
00108 public:
00109     ~Thermocouple_Type_K();
00110     static const thermocouple_poly_subrange inv_poly[2];
00111     static const int inv_poly_size;
00112     float convert_inv(float temp);
00113 
00114     static const thermocouple_poly_subrange poly[3];
00115     static const int poly_size;
00116     float convert(float voltage);
00117 #ifdef TYPE_K_LUT
00118     static const int32_t lut[];
00119     static const int16_t lut_offset;
00120     static const uint16_t lut_size;
00121     float lookup(float voltage);
00122     float lookup_inv(float temp);
00123 #endif
00124 };
00125 
00126 
00127 class Thermocouple_Type_N : public Thermocouple
00128 {
00129 public:
00130     ~Thermocouple_Type_N();
00131     static const thermocouple_poly_subrange inv_poly[2];
00132     static const int inv_poly_size;
00133     float convert_inv(float temp);
00134 
00135     static const thermocouple_poly_subrange poly[3];
00136     static const int poly_size;
00137     float convert(float voltage);
00138 #ifdef TYPE_N_LUT
00139     static const int32_t lut[];
00140     static const int16_t lut_offset;
00141     static const uint16_t lut_size;
00142     float lookup(float voltage);
00143     float lookup_inv(float temp);
00144 #endif
00145 };
00146 
00147 
00148 class Thermocouple_Type_R : public Thermocouple
00149 {
00150 public:
00151     ~Thermocouple_Type_R();
00152     static const thermocouple_poly_subrange inv_poly[3];
00153     static const int inv_poly_size;
00154     float convert_inv(float temp);
00155 
00156     static const thermocouple_poly_subrange poly[4];
00157     static const int poly_size;
00158     float convert(float voltage);
00159 #ifdef TYPE_R_LUT
00160     static const int32_t lut[];
00161     static const int16_t lut_offset;
00162     static const uint16_t lut_size;
00163     float lookup(float voltage);
00164     float lookup_inv(float temp);
00165 #endif
00166 };
00167 
00168 
00169 class Thermocouple_Type_S : public Thermocouple
00170 {
00171 public:
00172     ~Thermocouple_Type_S();
00173     static const thermocouple_poly_subrange inv_poly[3];
00174     static const int inv_poly_size;
00175     float convert_inv(float temp);
00176 
00177     static const thermocouple_poly_subrange poly[4];
00178     static const int poly_size;
00179     float convert(float voltage);
00180 #ifdef TYPE_S_LUT
00181     static const int32_t lut[];
00182     static const int16_t lut_offset;
00183     static const uint16_t lut_size;
00184     float lookup(float voltage);
00185     float lookup_inv(float temp);
00186 #endif
00187 };
00188 
00189 
00190 class Thermocouple_Type_T : public Thermocouple
00191 {
00192 public:
00193     ~Thermocouple_Type_T();
00194     static const thermocouple_poly_subrange inv_poly[2];
00195     static const int inv_poly_size;
00196     float convert_inv(float temp);
00197 
00198     static const thermocouple_poly_subrange poly[2];
00199     static const int poly_size;
00200     float convert(float voltage);
00201 #ifdef TYPE_T_LUT
00202     static const int32_t lut[];
00203     static const int16_t lut_offset;
00204     static const uint16_t lut_size;
00205     float lookup(float voltage);
00206     float lookup_inv(float temp);
00207 #endif
00208 };
00209 
00210 
00211 
00212 #endif