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

Revision:
0:c0bdc272d5da
Child:
1:2314fd8959b2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ntc.h	Fri Apr 07 00:30:39 2017 +0000
@@ -0,0 +1,154 @@
+/*
+ * mbed library for NTC analog pin that translates an A:D input
+ *     voltage to a temperature value
+ *     topology:  Vref -> SeriesRes -> A:D -> NTC -> GND
+*/
+
+#ifndef        MBED_NTC
+#define        MBED_NTC
+
+    /** 
+     * Private data structure for NTC data values.
+     * 
+    **/
+    typedef struct {
+        float vref;         /*!< Referense voltage*/
+        float ad_resolution; /*!< A:D resolution*/
+        int ntc_res;        /*!< NTC resistance value at 25C*/
+        int ntc_tol;        /*!< NTC initial tolerance %*/
+        int ntc_beta_2550;  /*!< NTC Beta, B25/50*/
+        int ntc_beta_2580;  /*!< NTC Beta, B25/80*/
+        int ntc_beta_2585;  /*!< NTC Beta, B25/85*/
+        int ntc_beta_25100; /*!< NTC Beta, B25/100*/
+        int ntc_beta_tol;   /*!< NTC Beta tolerance %*/
+        int sres_res;       /*!< Series resistor value*/
+        int sres_tol;       /*!< Series resistor tolerance %*/
+        int sres_ppm;       /*!< Series resistor tempco in ppm*/
+    } NTC_TypeDef;
+
+    /** 
+     * Default values for data structure above
+     * 
+    **/
+    const NTC_TypeDef ntc_std_paramtr = {
+        // Vref
+        3.0f,               // Vref
+        16384.0f,           // A:D resolution
+        // muRata NCP15XH103J03RC
+        20000,              // NTC resistance
+        3,                  // NTC initial tolerance
+        3300,               // NTC B25/50
+        3322,               // NTC B25/80
+        3333,               // NTC B25/85
+        3344,               // NTC B25/100
+        2,                  // NTC beta tolerance
+        // 3.32k 1% 100ppm
+        4750,               // Series resistor value
+        5,                  // Series resistor tolerance
+        300                 // Series Resistor tempco ppm
+    };
+
+    /** OpAmp A:D 
+     *
+     * @code
+     *      //
+     *      //
+     * @endcode
+     */
+ 
+class NTC
+{
+public:
+    /** 
+     * NTC Beta curves to choose from for Temperature calculations
+     * 
+    **/
+    enum ntcBetaCurve {
+        B25_50,  /*!<  use B25/50 curve */
+        B25_80,  /*!<  use B25/80 curve */
+        B25_85,  /*!<  use B25/85 curve */
+        B25_100, /*!<  use B25/100 curve */
+    };
+
+    /** Configure gpio pin
+      * @param A:D I/O pin
+      * @param parameters for NTC (NTC_TypeDef)
+      */
+    NTC(PinName p_ana, const NTC_TypeDef *ntc_parameter);
+    
+    /** Configure gpio pin
+      * @param A:D I/O pin
+      * uses default parameters
+      */
+    NTC(PinName p_ana);
+    
+    /** Read A:D register value
+      * @param none
+      * @return A:D value from 0-65535
+      */
+    uint16_t read_ad_reg();
+    
+    /** Get the NTC resistance value
+      * @param none
+      * @return resistance of NTC at 25C
+      */
+    int get_ntc_res();
+    
+    /** Get the NTC beta value B25/50
+      * @param none
+      * @return beta
+      */
+    int get_ntc_beta_2550();
+        
+    /** Get the NTC beta value B25/80
+      * @param none
+      * @return beta
+      */
+    int get_ntc_beta_2580();
+        
+    /** Get the NTC beta value B25/85
+      * @param none
+      * @return beta
+      */
+    int get_ntc_beta_2585();
+              
+    /** Get the NTC beta value B25/100
+      * @param none
+      * @return beta
+      */
+    int get_ntc_beta_25100();
+        
+    /** Get the resistance value for the series resistor
+      * @param none
+      * @return resistance of series resistor
+      */
+    int get_series_res();
+    
+    /** calculate NTC resistance based on A:D reading
+      * @param none
+      * @param din optional read from read_ad_reg().
+      * @param din if missing or 0, read_ad_reg() is executed first.
+      * @param din if != 0, then local value of rawdata is used.
+      * @return resistance of NTC
+      */
+    float get_ntc_res_viaAD(uint16_t din = NULL);
+      
+    /** calculate NTC temperaure
+      * @param curve Beta curve to use. See ntcBetaCurve {};
+      * @param din optional read from read_ad_reg().
+      * @param din if missing or 0, read_ad_reg() is executed first.
+      * @param din if != 0, then local value of rawdata is used.
+      * @return temperature of NTC
+      */
+    float get_ntc_temp(int curve, uint16_t din = NULL);
+    
+protected:
+    AnalogIn  _ana;
+
+private:
+    NTC_TypeDef ntc_set_data;
+    uint16_t rawdata;
+
+};
+
+#endif  //  MBED_NTC
\ No newline at end of file