Thermocouple mV conversion library
Thermocouple.h@1:5421fc992678, 2016-11-07 (annotated)
- 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?
User | Revision | Line number | New 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 |