Thermocouple mV conversion library

Dependents:   CN0391

Committer:
adisuciu
Date:
Mon Nov 07 16:04:51 2016 +0000
Revision:
1:5421fc992678
Parent:
0:a878bf59a337
Updated include filename case

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adisuciu 0:a878bf59a337 1 #include "mbed.h"
adisuciu 0:a878bf59a337 2 #ifndef _THERMOCOUPLE_H_
adisuciu 0:a878bf59a337 3 #define _THERMOCOUPLE_H_
adisuciu 0:a878bf59a337 4
adisuciu 0:a878bf59a337 5 #define DEFINE_LOOKUP_TABLES
adisuciu 0:a878bf59a337 6 #ifdef DEFINE_LOOKUP_TABLES
adisuciu 0:a878bf59a337 7 #define TYPE_B_LUT
adisuciu 0:a878bf59a337 8 #define TYPE_E_LUT
adisuciu 0:a878bf59a337 9 #define TYPE_J_LUT
adisuciu 0:a878bf59a337 10 #define TYPE_K_LUT
adisuciu 0:a878bf59a337 11 #define TYPE_N_LUT
adisuciu 0:a878bf59a337 12 #define TYPE_R_LUT
adisuciu 0:a878bf59a337 13 #define TYPE_S_LUT
adisuciu 0:a878bf59a337 14 #define TYPE_T_LUT
adisuciu 0:a878bf59a337 15 #endif
adisuciu 0:a878bf59a337 16
adisuciu 0:a878bf59a337 17 class Thermocouple
adisuciu 0:a878bf59a337 18 {
adisuciu 0:a878bf59a337 19 private:
adisuciu 0:a878bf59a337 20
adisuciu 0:a878bf59a337 21 public:
adisuciu 0:a878bf59a337 22 typedef struct {
adisuciu 0:a878bf59a337 23 float min_voltage_range;
adisuciu 0:a878bf59a337 24 float max_voltage_range;
adisuciu 0:a878bf59a337 25 float coef[16];
adisuciu 0:a878bf59a337 26 float power[16];
adisuciu 0:a878bf59a337 27 int n;
adisuciu 0:a878bf59a337 28 } thermocouple_poly_subrange;
adisuciu 0:a878bf59a337 29 Thermocouple();
adisuciu 0:a878bf59a337 30 virtual ~Thermocouple();
adisuciu 0:a878bf59a337 31 static float convert(float voltage, const thermocouple_poly_subrange range[], const int n);
adisuciu 0:a878bf59a337 32 static float lookup(const int32_t *lut, float voltage, uint16_t size, int16_t offset);
adisuciu 0:a878bf59a337 33 virtual float convert(float voltage) = 0;
adisuciu 0:a878bf59a337 34 virtual float convert_inv(float temp) = 0;
adisuciu 0:a878bf59a337 35 virtual float lookup(float voltage) = 0;
adisuciu 0:a878bf59a337 36 virtual float lookup_inv(float temp) = 0;
adisuciu 0:a878bf59a337 37
adisuciu 0:a878bf59a337 38 };
adisuciu 0:a878bf59a337 39
adisuciu 0:a878bf59a337 40
adisuciu 0:a878bf59a337 41
adisuciu 0:a878bf59a337 42
adisuciu 0:a878bf59a337 43 class Thermocouple_Type_B : public Thermocouple
adisuciu 0:a878bf59a337 44 {
adisuciu 0:a878bf59a337 45 public:
adisuciu 0:a878bf59a337 46 ~Thermocouple_Type_B();
adisuciu 0:a878bf59a337 47 static const thermocouple_poly_subrange inv_poly[2];
adisuciu 0:a878bf59a337 48 static const int inv_poly_size;
adisuciu 0:a878bf59a337 49 float convert_inv(float temp);
adisuciu 0:a878bf59a337 50
adisuciu 0:a878bf59a337 51 static const thermocouple_poly_subrange poly[2];
adisuciu 0:a878bf59a337 52 static const int poly_size;
adisuciu 0:a878bf59a337 53 float convert(float voltage);
adisuciu 0:a878bf59a337 54 #ifdef TYPE_B_LUT
adisuciu 0:a878bf59a337 55 static const int32_t lut[];
adisuciu 0:a878bf59a337 56 static const int16_t lut_offset;
adisuciu 0:a878bf59a337 57 static const uint16_t lut_size;
adisuciu 0:a878bf59a337 58 float lookup(float voltage);
adisuciu 0:a878bf59a337 59 float lookup_inv(float temp);
adisuciu 0:a878bf59a337 60 #endif
adisuciu 0:a878bf59a337 61 };
adisuciu 0:a878bf59a337 62
adisuciu 0:a878bf59a337 63
adisuciu 0:a878bf59a337 64 class Thermocouple_Type_E : public Thermocouple
adisuciu 0:a878bf59a337 65 {
adisuciu 0:a878bf59a337 66 public:
adisuciu 0:a878bf59a337 67 ~Thermocouple_Type_E();
adisuciu 0:a878bf59a337 68 static const thermocouple_poly_subrange inv_poly[2];
adisuciu 0:a878bf59a337 69 static const int inv_poly_size;
adisuciu 0:a878bf59a337 70 float convert_inv(float temp);
adisuciu 0:a878bf59a337 71
adisuciu 0:a878bf59a337 72 static const thermocouple_poly_subrange poly[2];
adisuciu 0:a878bf59a337 73 static const int poly_size;
adisuciu 0:a878bf59a337 74 float convert(float voltage);
adisuciu 0:a878bf59a337 75 #ifdef TYPE_E_LUT
adisuciu 0:a878bf59a337 76 static const int32_t lut[];
adisuciu 0:a878bf59a337 77 static const int16_t lut_offset;
adisuciu 0:a878bf59a337 78 static const uint16_t lut_size;
adisuciu 0:a878bf59a337 79 float lookup(float voltage);
adisuciu 0:a878bf59a337 80 float lookup_inv(float temp);
adisuciu 0:a878bf59a337 81 #endif
adisuciu 0:a878bf59a337 82 };
adisuciu 0:a878bf59a337 83
adisuciu 0:a878bf59a337 84
adisuciu 0:a878bf59a337 85 class Thermocouple_Type_J : public Thermocouple
adisuciu 0:a878bf59a337 86 {
adisuciu 0:a878bf59a337 87 public:
adisuciu 0:a878bf59a337 88 ~Thermocouple_Type_J();
adisuciu 0:a878bf59a337 89 static const thermocouple_poly_subrange inv_poly[2];
adisuciu 0:a878bf59a337 90 static const int inv_poly_size;
adisuciu 0:a878bf59a337 91 float convert_inv(float temp);
adisuciu 0:a878bf59a337 92
adisuciu 0:a878bf59a337 93 static const thermocouple_poly_subrange poly[3];
adisuciu 0:a878bf59a337 94 static const int poly_size;
adisuciu 0:a878bf59a337 95 float convert(float voltage);
adisuciu 0:a878bf59a337 96 #ifdef TYPE_J_LUT
adisuciu 0:a878bf59a337 97 static const int32_t lut[];
adisuciu 0:a878bf59a337 98 static const int16_t lut_offset;
adisuciu 0:a878bf59a337 99 static const uint16_t lut_size;
adisuciu 0:a878bf59a337 100 float lookup(float voltage);
adisuciu 0:a878bf59a337 101 float lookup_inv(float temp);
adisuciu 0:a878bf59a337 102 #endif
adisuciu 0:a878bf59a337 103 };
adisuciu 0:a878bf59a337 104
adisuciu 0:a878bf59a337 105
adisuciu 0:a878bf59a337 106 class Thermocouple_Type_K : public Thermocouple
adisuciu 0:a878bf59a337 107 {
adisuciu 0:a878bf59a337 108 public:
adisuciu 0:a878bf59a337 109 ~Thermocouple_Type_K();
adisuciu 0:a878bf59a337 110 static const thermocouple_poly_subrange inv_poly[2];
adisuciu 0:a878bf59a337 111 static const int inv_poly_size;
adisuciu 0:a878bf59a337 112 float convert_inv(float temp);
adisuciu 0:a878bf59a337 113
adisuciu 0:a878bf59a337 114 static const thermocouple_poly_subrange poly[3];
adisuciu 0:a878bf59a337 115 static const int poly_size;
adisuciu 0:a878bf59a337 116 float convert(float voltage);
adisuciu 0:a878bf59a337 117 #ifdef TYPE_K_LUT
adisuciu 0:a878bf59a337 118 static const int32_t lut[];
adisuciu 0:a878bf59a337 119 static const int16_t lut_offset;
adisuciu 0:a878bf59a337 120 static const uint16_t lut_size;
adisuciu 0:a878bf59a337 121 float lookup(float voltage);
adisuciu 0:a878bf59a337 122 float lookup_inv(float temp);
adisuciu 0:a878bf59a337 123 #endif
adisuciu 0:a878bf59a337 124 };
adisuciu 0:a878bf59a337 125
adisuciu 0:a878bf59a337 126
adisuciu 0:a878bf59a337 127 class Thermocouple_Type_N : public Thermocouple
adisuciu 0:a878bf59a337 128 {
adisuciu 0:a878bf59a337 129 public:
adisuciu 0:a878bf59a337 130 ~Thermocouple_Type_N();
adisuciu 0:a878bf59a337 131 static const thermocouple_poly_subrange inv_poly[2];
adisuciu 0:a878bf59a337 132 static const int inv_poly_size;
adisuciu 0:a878bf59a337 133 float convert_inv(float temp);
adisuciu 0:a878bf59a337 134
adisuciu 0:a878bf59a337 135 static const thermocouple_poly_subrange poly[3];
adisuciu 0:a878bf59a337 136 static const int poly_size;
adisuciu 0:a878bf59a337 137 float convert(float voltage);
adisuciu 0:a878bf59a337 138 #ifdef TYPE_N_LUT
adisuciu 0:a878bf59a337 139 static const int32_t lut[];
adisuciu 0:a878bf59a337 140 static const int16_t lut_offset;
adisuciu 0:a878bf59a337 141 static const uint16_t lut_size;
adisuciu 0:a878bf59a337 142 float lookup(float voltage);
adisuciu 0:a878bf59a337 143 float lookup_inv(float temp);
adisuciu 0:a878bf59a337 144 #endif
adisuciu 0:a878bf59a337 145 };
adisuciu 0:a878bf59a337 146
adisuciu 0:a878bf59a337 147
adisuciu 0:a878bf59a337 148 class Thermocouple_Type_R : public Thermocouple
adisuciu 0:a878bf59a337 149 {
adisuciu 0:a878bf59a337 150 public:
adisuciu 0:a878bf59a337 151 ~Thermocouple_Type_R();
adisuciu 0:a878bf59a337 152 static const thermocouple_poly_subrange inv_poly[3];
adisuciu 0:a878bf59a337 153 static const int inv_poly_size;
adisuciu 0:a878bf59a337 154 float convert_inv(float temp);
adisuciu 0:a878bf59a337 155
adisuciu 0:a878bf59a337 156 static const thermocouple_poly_subrange poly[4];
adisuciu 0:a878bf59a337 157 static const int poly_size;
adisuciu 0:a878bf59a337 158 float convert(float voltage);
adisuciu 0:a878bf59a337 159 #ifdef TYPE_R_LUT
adisuciu 0:a878bf59a337 160 static const int32_t lut[];
adisuciu 0:a878bf59a337 161 static const int16_t lut_offset;
adisuciu 0:a878bf59a337 162 static const uint16_t lut_size;
adisuciu 0:a878bf59a337 163 float lookup(float voltage);
adisuciu 0:a878bf59a337 164 float lookup_inv(float temp);
adisuciu 0:a878bf59a337 165 #endif
adisuciu 0:a878bf59a337 166 };
adisuciu 0:a878bf59a337 167
adisuciu 0:a878bf59a337 168
adisuciu 0:a878bf59a337 169 class Thermocouple_Type_S : public Thermocouple
adisuciu 0:a878bf59a337 170 {
adisuciu 0:a878bf59a337 171 public:
adisuciu 0:a878bf59a337 172 ~Thermocouple_Type_S();
adisuciu 0:a878bf59a337 173 static const thermocouple_poly_subrange inv_poly[3];
adisuciu 0:a878bf59a337 174 static const int inv_poly_size;
adisuciu 0:a878bf59a337 175 float convert_inv(float temp);
adisuciu 0:a878bf59a337 176
adisuciu 0:a878bf59a337 177 static const thermocouple_poly_subrange poly[4];
adisuciu 0:a878bf59a337 178 static const int poly_size;
adisuciu 0:a878bf59a337 179 float convert(float voltage);
adisuciu 0:a878bf59a337 180 #ifdef TYPE_S_LUT
adisuciu 0:a878bf59a337 181 static const int32_t lut[];
adisuciu 0:a878bf59a337 182 static const int16_t lut_offset;
adisuciu 0:a878bf59a337 183 static const uint16_t lut_size;
adisuciu 0:a878bf59a337 184 float lookup(float voltage);
adisuciu 0:a878bf59a337 185 float lookup_inv(float temp);
adisuciu 0:a878bf59a337 186 #endif
adisuciu 0:a878bf59a337 187 };
adisuciu 0:a878bf59a337 188
adisuciu 0:a878bf59a337 189
adisuciu 0:a878bf59a337 190 class Thermocouple_Type_T : public Thermocouple
adisuciu 0:a878bf59a337 191 {
adisuciu 0:a878bf59a337 192 public:
adisuciu 0:a878bf59a337 193 ~Thermocouple_Type_T();
adisuciu 0:a878bf59a337 194 static const thermocouple_poly_subrange inv_poly[2];
adisuciu 0:a878bf59a337 195 static const int inv_poly_size;
adisuciu 0:a878bf59a337 196 float convert_inv(float temp);
adisuciu 0:a878bf59a337 197
adisuciu 0:a878bf59a337 198 static const thermocouple_poly_subrange poly[2];
adisuciu 0:a878bf59a337 199 static const int poly_size;
adisuciu 0:a878bf59a337 200 float convert(float voltage);
adisuciu 0:a878bf59a337 201 #ifdef TYPE_T_LUT
adisuciu 0:a878bf59a337 202 static const int32_t lut[];
adisuciu 0:a878bf59a337 203 static const int16_t lut_offset;
adisuciu 0:a878bf59a337 204 static const uint16_t lut_size;
adisuciu 0:a878bf59a337 205 float lookup(float voltage);
adisuciu 0:a878bf59a337 206 float lookup_inv(float temp);
adisuciu 0:a878bf59a337 207 #endif
adisuciu 0:a878bf59a337 208 };
adisuciu 0:a878bf59a337 209
adisuciu 0:a878bf59a337 210
adisuciu 0:a878bf59a337 211
adisuciu 0:a878bf59a337 212 #endif