NTC temperature sensor going to A:D input. Topology is: (Vref or 3.3V) -> Series_resistor -> A:D_input -> NTC -> GND. Easy modification of NTC parameters w/o recompile of library

Dependents:   ntc_helloworld

Committer:
loopsva
Date:
Fri Apr 07 16:36:47 2017 +0000
Revision:
2:c843c06cc651
Parent:
1:2314fd8959b2
Child:
3:1eb4f5296281
Used external input data "din" for NTC resistance and temperature calculations if din != 0. Updated docs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:c0bdc272d5da 1 /*
loopsva 0:c0bdc272d5da 2 * mbed library for NTC analog pin that translates an A:D input
loopsva 0:c0bdc272d5da 3 * voltage to a temperature value
loopsva 0:c0bdc272d5da 4 * topology: Vref -> SeriesRes -> A:D -> NTC -> GND
loopsva 0:c0bdc272d5da 5 */
loopsva 0:c0bdc272d5da 6
loopsva 0:c0bdc272d5da 7 #ifndef MBED_NTC
loopsva 0:c0bdc272d5da 8 #define MBED_NTC
loopsva 0:c0bdc272d5da 9
loopsva 0:c0bdc272d5da 10 /**
loopsva 0:c0bdc272d5da 11 * Private data structure for NTC data values.
loopsva 0:c0bdc272d5da 12 *
loopsva 0:c0bdc272d5da 13 **/
loopsva 0:c0bdc272d5da 14 typedef struct {
loopsva 0:c0bdc272d5da 15 float vref; /*!< Referense voltage*/
loopsva 0:c0bdc272d5da 16 float ad_resolution; /*!< A:D resolution*/
loopsva 0:c0bdc272d5da 17 int ntc_res; /*!< NTC resistance value at 25C*/
loopsva 0:c0bdc272d5da 18 int ntc_tol; /*!< NTC initial tolerance %*/
loopsva 0:c0bdc272d5da 19 int ntc_beta_2550; /*!< NTC Beta, B25/50*/
loopsva 0:c0bdc272d5da 20 int ntc_beta_2580; /*!< NTC Beta, B25/80*/
loopsva 0:c0bdc272d5da 21 int ntc_beta_2585; /*!< NTC Beta, B25/85*/
loopsva 0:c0bdc272d5da 22 int ntc_beta_25100; /*!< NTC Beta, B25/100*/
loopsva 0:c0bdc272d5da 23 int ntc_beta_tol; /*!< NTC Beta tolerance %*/
loopsva 0:c0bdc272d5da 24 int sres_res; /*!< Series resistor value*/
loopsva 0:c0bdc272d5da 25 int sres_tol; /*!< Series resistor tolerance %*/
loopsva 0:c0bdc272d5da 26 int sres_ppm; /*!< Series resistor tempco in ppm*/
loopsva 0:c0bdc272d5da 27 } NTC_TypeDef;
loopsva 0:c0bdc272d5da 28
loopsva 0:c0bdc272d5da 29 /**
loopsva 0:c0bdc272d5da 30 * Default values for data structure above
loopsva 0:c0bdc272d5da 31 *
loopsva 0:c0bdc272d5da 32 **/
loopsva 0:c0bdc272d5da 33 const NTC_TypeDef ntc_std_paramtr = {
loopsva 0:c0bdc272d5da 34 // Vref
loopsva 0:c0bdc272d5da 35 3.0f, // Vref
loopsva 0:c0bdc272d5da 36 16384.0f, // A:D resolution
loopsva 0:c0bdc272d5da 37 // muRata NCP15XH103J03RC
loopsva 0:c0bdc272d5da 38 20000, // NTC resistance
loopsva 0:c0bdc272d5da 39 3, // NTC initial tolerance
loopsva 0:c0bdc272d5da 40 3300, // NTC B25/50
loopsva 0:c0bdc272d5da 41 3322, // NTC B25/80
loopsva 0:c0bdc272d5da 42 3333, // NTC B25/85
loopsva 0:c0bdc272d5da 43 3344, // NTC B25/100
loopsva 0:c0bdc272d5da 44 2, // NTC beta tolerance
loopsva 0:c0bdc272d5da 45 // 3.32k 1% 100ppm
loopsva 0:c0bdc272d5da 46 4750, // Series resistor value
loopsva 0:c0bdc272d5da 47 5, // Series resistor tolerance
loopsva 0:c0bdc272d5da 48 300 // Series Resistor tempco ppm
loopsva 0:c0bdc272d5da 49 };
loopsva 0:c0bdc272d5da 50
loopsva 1:2314fd8959b2 51 /** NTC temperature A:D conversion
loopsva 0:c0bdc272d5da 52 *
loopsva 0:c0bdc272d5da 53 * @code
loopsva 2:c843c06cc651 54 * #include "mbed.h"
loopsva 2:c843c06cc651 55 * #include "ntc.h"
loopsva 2:c843c06cc651 56 *
loopsva 2:c843c06cc651 57 *
loopsva 2:c843c06cc651 58 * const NTC_TypeDef ntc_my_paramtr = {
loopsva 2:c843c06cc651 59 * // Vref
loopsva 2:c843c06cc651 60 * 3.3f, // Vref
loopsva 2:c843c06cc651 61 * 65535.0f, // A:D 16-bit resolution
loopsva 2:c843c06cc651 62 * // muRata NCP15XH103J03RC
loopsva 2:c843c06cc651 63 * 10000, // NTC resistance
loopsva 2:c843c06cc651 64 * 5, // NTC initial tolerance
loopsva 2:c843c06cc651 65 * 3380, // NTC B25/50
loopsva 2:c843c06cc651 66 * 3428, // NTC B25/80
loopsva 2:c843c06cc651 67 * 3434, // NTC B25/85
loopsva 2:c843c06cc651 68 * 3355, // NTC B25/100
loopsva 2:c843c06cc651 69 * 1, // NTC beta tolerance
loopsva 2:c843c06cc651 70 * // 3.32k 1% 100ppm
loopsva 2:c843c06cc651 71 * 3320, // Series resistor value
loopsva 2:c843c06cc651 72 * 1, // Series resistor tolerance
loopsva 2:c843c06cc651 73 * 100 // Series Resistor tempco ppm
loopsva 2:c843c06cc651 74 * };
loopsva 2:c843c06cc651 75 *
loopsva 2:c843c06cc651 76 * NTC ntc(A1, &ntc_my_paramtr); //initialize NTC temperature A:D
loopsva 2:c843c06cc651 77 *
loopsva 2:c843c06cc651 78 * main() {
loopsva 2:c843c06cc651 79 * printf("\r\n\r\n-------------------------------------------\r\n");
loopsva 2:c843c06cc651 80 * printf("NTC Res: %5d B25/50: %4d B25/80: %4d B25/85: %4d B25/100: %4d SeriesR: %d\r\n",
loopsva 2:c843c06cc651 81 * ntc.get_ntc_res(), ntc.get_ntc_beta_2550(), ntc.get_ntc_beta_2580(), ntc.get_ntc_beta_2585(), ntc.get_ntc_beta_25100(), ntc.get_series_res());
loopsva 2:c843c06cc651 82 * uint16_t ad = ntc.read_ad_reg();
loopsva 2:c843c06cc651 83 * printf("NTC A:D Val: %5d Volt A:D: %.6f NTC-R_now: %7.1f Temp: %+.2f\r\n", ad, 3.3f / 65536.0f * (float)ad, ntc.get_ntc_res_viaAD(ad), ntc.get_ntc_temp(NTC::B25_85, ad));
loopsva 2:c843c06cc651 84 *
loopsva 2:c843c06cc651 85 * while(1) {
loopsva 2:c843c06cc651 86 * printf("Temp: %+.2f\r\n", ntc.get_ntc_temp(NTC::B25_85));
loopsva 2:c843c06cc651 87 * wait(2.0);
loopsva 2:c843c06cc651 88 * }
loopsva 2:c843c06cc651 89 *
loopsva 2:c843c06cc651 90 * }
loopsva 0:c0bdc272d5da 91 * @endcode
loopsva 0:c0bdc272d5da 92 */
loopsva 0:c0bdc272d5da 93
loopsva 0:c0bdc272d5da 94 class NTC
loopsva 0:c0bdc272d5da 95 {
loopsva 0:c0bdc272d5da 96 public:
loopsva 0:c0bdc272d5da 97 /**
loopsva 0:c0bdc272d5da 98 * NTC Beta curves to choose from for Temperature calculations
loopsva 0:c0bdc272d5da 99 *
loopsva 0:c0bdc272d5da 100 **/
loopsva 0:c0bdc272d5da 101 enum ntcBetaCurve {
loopsva 0:c0bdc272d5da 102 B25_50, /*!< use B25/50 curve */
loopsva 0:c0bdc272d5da 103 B25_80, /*!< use B25/80 curve */
loopsva 0:c0bdc272d5da 104 B25_85, /*!< use B25/85 curve */
loopsva 0:c0bdc272d5da 105 B25_100, /*!< use B25/100 curve */
loopsva 0:c0bdc272d5da 106 };
loopsva 0:c0bdc272d5da 107
loopsva 0:c0bdc272d5da 108 /** Configure gpio pin
loopsva 0:c0bdc272d5da 109 * @param A:D I/O pin
loopsva 0:c0bdc272d5da 110 * @param parameters for NTC (NTC_TypeDef)
loopsva 0:c0bdc272d5da 111 */
loopsva 0:c0bdc272d5da 112 NTC(PinName p_ana, const NTC_TypeDef *ntc_parameter);
loopsva 0:c0bdc272d5da 113
loopsva 0:c0bdc272d5da 114 /** Configure gpio pin
loopsva 0:c0bdc272d5da 115 * @param A:D I/O pin
loopsva 0:c0bdc272d5da 116 * uses default parameters
loopsva 0:c0bdc272d5da 117 */
loopsva 0:c0bdc272d5da 118 NTC(PinName p_ana);
loopsva 0:c0bdc272d5da 119
loopsva 0:c0bdc272d5da 120 /** Read A:D register value
loopsva 0:c0bdc272d5da 121 * @param none
loopsva 0:c0bdc272d5da 122 * @return A:D value from 0-65535
loopsva 0:c0bdc272d5da 123 */
loopsva 0:c0bdc272d5da 124 uint16_t read_ad_reg();
loopsva 0:c0bdc272d5da 125
loopsva 0:c0bdc272d5da 126 /** Get the NTC resistance value
loopsva 0:c0bdc272d5da 127 * @param none
loopsva 0:c0bdc272d5da 128 * @return resistance of NTC at 25C
loopsva 0:c0bdc272d5da 129 */
loopsva 0:c0bdc272d5da 130 int get_ntc_res();
loopsva 0:c0bdc272d5da 131
loopsva 0:c0bdc272d5da 132 /** Get the NTC beta value B25/50
loopsva 0:c0bdc272d5da 133 * @param none
loopsva 0:c0bdc272d5da 134 * @return beta
loopsva 0:c0bdc272d5da 135 */
loopsva 0:c0bdc272d5da 136 int get_ntc_beta_2550();
loopsva 0:c0bdc272d5da 137
loopsva 0:c0bdc272d5da 138 /** Get the NTC beta value B25/80
loopsva 0:c0bdc272d5da 139 * @param none
loopsva 0:c0bdc272d5da 140 * @return beta
loopsva 0:c0bdc272d5da 141 */
loopsva 0:c0bdc272d5da 142 int get_ntc_beta_2580();
loopsva 0:c0bdc272d5da 143
loopsva 0:c0bdc272d5da 144 /** Get the NTC beta value B25/85
loopsva 0:c0bdc272d5da 145 * @param none
loopsva 0:c0bdc272d5da 146 * @return beta
loopsva 0:c0bdc272d5da 147 */
loopsva 0:c0bdc272d5da 148 int get_ntc_beta_2585();
loopsva 0:c0bdc272d5da 149
loopsva 0:c0bdc272d5da 150 /** Get the NTC beta value B25/100
loopsva 0:c0bdc272d5da 151 * @param none
loopsva 0:c0bdc272d5da 152 * @return beta
loopsva 0:c0bdc272d5da 153 */
loopsva 0:c0bdc272d5da 154 int get_ntc_beta_25100();
loopsva 0:c0bdc272d5da 155
loopsva 0:c0bdc272d5da 156 /** Get the resistance value for the series resistor
loopsva 0:c0bdc272d5da 157 * @param none
loopsva 0:c0bdc272d5da 158 * @return resistance of series resistor
loopsva 0:c0bdc272d5da 159 */
loopsva 0:c0bdc272d5da 160 int get_series_res();
loopsva 0:c0bdc272d5da 161
loopsva 0:c0bdc272d5da 162 /** calculate NTC resistance based on A:D reading
loopsva 0:c0bdc272d5da 163 * @param none
loopsva 0:c0bdc272d5da 164 * @param din optional read from read_ad_reg().
loopsva 0:c0bdc272d5da 165 * @param din if missing or 0, read_ad_reg() is executed first.
loopsva 2:c843c06cc651 166 * @param din if != 0, then local value of din is used.
loopsva 0:c0bdc272d5da 167 * @return resistance of NTC
loopsva 0:c0bdc272d5da 168 */
loopsva 0:c0bdc272d5da 169 float get_ntc_res_viaAD(uint16_t din = NULL);
loopsva 0:c0bdc272d5da 170
loopsva 0:c0bdc272d5da 171 /** calculate NTC temperaure
loopsva 0:c0bdc272d5da 172 * @param curve Beta curve to use. See ntcBetaCurve {};
loopsva 0:c0bdc272d5da 173 * @param din optional read from read_ad_reg().
loopsva 0:c0bdc272d5da 174 * @param din if missing or 0, read_ad_reg() is executed first.
loopsva 2:c843c06cc651 175 * @param din if != 0, then local value of din is used.
loopsva 0:c0bdc272d5da 176 * @return temperature of NTC
loopsva 0:c0bdc272d5da 177 */
loopsva 0:c0bdc272d5da 178 float get_ntc_temp(int curve, uint16_t din = NULL);
loopsva 0:c0bdc272d5da 179
loopsva 0:c0bdc272d5da 180 protected:
loopsva 0:c0bdc272d5da 181 AnalogIn _ana;
loopsva 0:c0bdc272d5da 182
loopsva 0:c0bdc272d5da 183 private:
loopsva 0:c0bdc272d5da 184 NTC_TypeDef ntc_set_data;
loopsva 0:c0bdc272d5da 185 uint16_t rawdata;
loopsva 0:c0bdc272d5da 186
loopsva 0:c0bdc272d5da 187 };
loopsva 0:c0bdc272d5da 188
loopsva 0:c0bdc272d5da 189 #endif // MBED_NTC