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
ntc.h@0:c0bdc272d5da, 2017-04-07 (annotated)
- 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?
User | Revision | Line number | New 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 |