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 00:30:39 2017 +0000
Revision:
0:c0bdc272d5da
Child:
1:2314fd8959b2
Initial release of NTC temperature sensor going to A:D input

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 0:c0bdc272d5da 51 /** OpAmp A:D
loopsva 0:c0bdc272d5da 52 *
loopsva 0:c0bdc272d5da 53 * @code
loopsva 0:c0bdc272d5da 54 * //
loopsva 0:c0bdc272d5da 55 * //
loopsva 0:c0bdc272d5da 56 * @endcode
loopsva 0:c0bdc272d5da 57 */
loopsva 0:c0bdc272d5da 58
loopsva 0:c0bdc272d5da 59 class NTC
loopsva 0:c0bdc272d5da 60 {
loopsva 0:c0bdc272d5da 61 public:
loopsva 0:c0bdc272d5da 62 /**
loopsva 0:c0bdc272d5da 63 * NTC Beta curves to choose from for Temperature calculations
loopsva 0:c0bdc272d5da 64 *
loopsva 0:c0bdc272d5da 65 **/
loopsva 0:c0bdc272d5da 66 enum ntcBetaCurve {
loopsva 0:c0bdc272d5da 67 B25_50, /*!< use B25/50 curve */
loopsva 0:c0bdc272d5da 68 B25_80, /*!< use B25/80 curve */
loopsva 0:c0bdc272d5da 69 B25_85, /*!< use B25/85 curve */
loopsva 0:c0bdc272d5da 70 B25_100, /*!< use B25/100 curve */
loopsva 0:c0bdc272d5da 71 };
loopsva 0:c0bdc272d5da 72
loopsva 0:c0bdc272d5da 73 /** Configure gpio pin
loopsva 0:c0bdc272d5da 74 * @param A:D I/O pin
loopsva 0:c0bdc272d5da 75 * @param parameters for NTC (NTC_TypeDef)
loopsva 0:c0bdc272d5da 76 */
loopsva 0:c0bdc272d5da 77 NTC(PinName p_ana, const NTC_TypeDef *ntc_parameter);
loopsva 0:c0bdc272d5da 78
loopsva 0:c0bdc272d5da 79 /** Configure gpio pin
loopsva 0:c0bdc272d5da 80 * @param A:D I/O pin
loopsva 0:c0bdc272d5da 81 * uses default parameters
loopsva 0:c0bdc272d5da 82 */
loopsva 0:c0bdc272d5da 83 NTC(PinName p_ana);
loopsva 0:c0bdc272d5da 84
loopsva 0:c0bdc272d5da 85 /** Read A:D register value
loopsva 0:c0bdc272d5da 86 * @param none
loopsva 0:c0bdc272d5da 87 * @return A:D value from 0-65535
loopsva 0:c0bdc272d5da 88 */
loopsva 0:c0bdc272d5da 89 uint16_t read_ad_reg();
loopsva 0:c0bdc272d5da 90
loopsva 0:c0bdc272d5da 91 /** Get the NTC resistance value
loopsva 0:c0bdc272d5da 92 * @param none
loopsva 0:c0bdc272d5da 93 * @return resistance of NTC at 25C
loopsva 0:c0bdc272d5da 94 */
loopsva 0:c0bdc272d5da 95 int get_ntc_res();
loopsva 0:c0bdc272d5da 96
loopsva 0:c0bdc272d5da 97 /** Get the NTC beta value B25/50
loopsva 0:c0bdc272d5da 98 * @param none
loopsva 0:c0bdc272d5da 99 * @return beta
loopsva 0:c0bdc272d5da 100 */
loopsva 0:c0bdc272d5da 101 int get_ntc_beta_2550();
loopsva 0:c0bdc272d5da 102
loopsva 0:c0bdc272d5da 103 /** Get the NTC beta value B25/80
loopsva 0:c0bdc272d5da 104 * @param none
loopsva 0:c0bdc272d5da 105 * @return beta
loopsva 0:c0bdc272d5da 106 */
loopsva 0:c0bdc272d5da 107 int get_ntc_beta_2580();
loopsva 0:c0bdc272d5da 108
loopsva 0:c0bdc272d5da 109 /** Get the NTC beta value B25/85
loopsva 0:c0bdc272d5da 110 * @param none
loopsva 0:c0bdc272d5da 111 * @return beta
loopsva 0:c0bdc272d5da 112 */
loopsva 0:c0bdc272d5da 113 int get_ntc_beta_2585();
loopsva 0:c0bdc272d5da 114
loopsva 0:c0bdc272d5da 115 /** Get the NTC beta value B25/100
loopsva 0:c0bdc272d5da 116 * @param none
loopsva 0:c0bdc272d5da 117 * @return beta
loopsva 0:c0bdc272d5da 118 */
loopsva 0:c0bdc272d5da 119 int get_ntc_beta_25100();
loopsva 0:c0bdc272d5da 120
loopsva 0:c0bdc272d5da 121 /** Get the resistance value for the series resistor
loopsva 0:c0bdc272d5da 122 * @param none
loopsva 0:c0bdc272d5da 123 * @return resistance of series resistor
loopsva 0:c0bdc272d5da 124 */
loopsva 0:c0bdc272d5da 125 int get_series_res();
loopsva 0:c0bdc272d5da 126
loopsva 0:c0bdc272d5da 127 /** calculate NTC resistance based on A:D reading
loopsva 0:c0bdc272d5da 128 * @param none
loopsva 0:c0bdc272d5da 129 * @param din optional read from read_ad_reg().
loopsva 0:c0bdc272d5da 130 * @param din if missing or 0, read_ad_reg() is executed first.
loopsva 0:c0bdc272d5da 131 * @param din if != 0, then local value of rawdata is used.
loopsva 0:c0bdc272d5da 132 * @return resistance of NTC
loopsva 0:c0bdc272d5da 133 */
loopsva 0:c0bdc272d5da 134 float get_ntc_res_viaAD(uint16_t din = NULL);
loopsva 0:c0bdc272d5da 135
loopsva 0:c0bdc272d5da 136 /** calculate NTC temperaure
loopsva 0:c0bdc272d5da 137 * @param curve Beta curve to use. See ntcBetaCurve {};
loopsva 0:c0bdc272d5da 138 * @param din optional read from read_ad_reg().
loopsva 0:c0bdc272d5da 139 * @param din if missing or 0, read_ad_reg() is executed first.
loopsva 0:c0bdc272d5da 140 * @param din if != 0, then local value of rawdata is used.
loopsva 0:c0bdc272d5da 141 * @return temperature of NTC
loopsva 0:c0bdc272d5da 142 */
loopsva 0:c0bdc272d5da 143 float get_ntc_temp(int curve, uint16_t din = NULL);
loopsva 0:c0bdc272d5da 144
loopsva 0:c0bdc272d5da 145 protected:
loopsva 0:c0bdc272d5da 146 AnalogIn _ana;
loopsva 0:c0bdc272d5da 147
loopsva 0:c0bdc272d5da 148 private:
loopsva 0:c0bdc272d5da 149 NTC_TypeDef ntc_set_data;
loopsva 0:c0bdc272d5da 150 uint16_t rawdata;
loopsva 0:c0bdc272d5da 151
loopsva 0:c0bdc272d5da 152 };
loopsva 0:c0bdc272d5da 153
loopsva 0:c0bdc272d5da 154 #endif // MBED_NTC