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:
Thu Apr 27 18:38:49 2017 +0000
Revision:
8:781d00449dd7
Parent:
6:8e6bd0f9877b
Changed NULL to 0, this time in the .cpp file for os5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:c0bdc272d5da 1 /*
loopsva 0:c0bdc272d5da 2 * mbed library program
loopsva 0:c0bdc272d5da 3 */
loopsva 0:c0bdc272d5da 4
loopsva 0:c0bdc272d5da 5 #include "mbed.h"
loopsva 0:c0bdc272d5da 6 #include "ntc.h"
loopsva 0:c0bdc272d5da 7
loopsva 0:c0bdc272d5da 8 NTC::NTC(PinName p_ana, const NTC_TypeDef *ntc_parameter) :
loopsva 0:c0bdc272d5da 9 _ana(p_ana)
loopsva 0:c0bdc272d5da 10 {
loopsva 0:c0bdc272d5da 11 ntc_set_data = *ntc_parameter;
loopsva 8:781d00449dd7 12 rawdata = 0;
loopsva 0:c0bdc272d5da 13 }
loopsva 0:c0bdc272d5da 14
loopsva 0:c0bdc272d5da 15 NTC::NTC(PinName p_ana) :
loopsva 0:c0bdc272d5da 16 _ana(p_ana)
loopsva 0:c0bdc272d5da 17 {
loopsva 0:c0bdc272d5da 18 ntc_set_data = ntc_std_paramtr;
loopsva 8:781d00449dd7 19 rawdata = 0;
loopsva 0:c0bdc272d5da 20 }
loopsva 0:c0bdc272d5da 21
loopsva 0:c0bdc272d5da 22 uint16_t NTC::read_ad_reg() {
loopsva 0:c0bdc272d5da 23 rawdata = _ana.read_u16();
loopsva 0:c0bdc272d5da 24 return rawdata;
loopsva 0:c0bdc272d5da 25 //return 19918; //85.00c * ntc=10k, b=3434, rser=3320
loopsva 0:c0bdc272d5da 26 }
loopsva 0:c0bdc272d5da 27
loopsva 0:c0bdc272d5da 28 int NTC::get_ntc_res() {
loopsva 0:c0bdc272d5da 29 return ntc_set_data.ntc_res;
loopsva 0:c0bdc272d5da 30 }
loopsva 0:c0bdc272d5da 31
loopsva 6:8e6bd0f9877b 32 int NTC::get_ntc_beta(int curve) {
loopsva 0:c0bdc272d5da 33 int beta = 0;
loopsva 0:c0bdc272d5da 34 switch (curve) {
loopsva 5:9655397ba539 35 case B0_50:
loopsva 5:9655397ba539 36 beta = ntc_set_data.ntc_beta_0050;
loopsva 5:9655397ba539 37 break;
loopsva 0:c0bdc272d5da 38 case B25_50:
loopsva 0:c0bdc272d5da 39 beta = ntc_set_data.ntc_beta_2550;
loopsva 0:c0bdc272d5da 40 break;
loopsva 0:c0bdc272d5da 41 case B25_80:
loopsva 0:c0bdc272d5da 42 beta = ntc_set_data.ntc_beta_2580;
loopsva 0:c0bdc272d5da 43 break;
loopsva 0:c0bdc272d5da 44 case B25_85:
loopsva 0:c0bdc272d5da 45 beta = ntc_set_data.ntc_beta_2585;
loopsva 0:c0bdc272d5da 46 break;
loopsva 0:c0bdc272d5da 47 case B25_100:
loopsva 0:c0bdc272d5da 48 beta = ntc_set_data.ntc_beta_25100;
loopsva 0:c0bdc272d5da 49 break;
loopsva 5:9655397ba539 50 case B_OTHER:
loopsva 5:9655397ba539 51 beta = ntc_set_data.ntc_beta_other;
loopsva 5:9655397ba539 52 break;
loopsva 0:c0bdc272d5da 53 default:
loopsva 6:8e6bd0f9877b 54 beta = ntc_set_data.ntc_beta_2585;
loopsva 0:c0bdc272d5da 55 break;
loopsva 0:c0bdc272d5da 56 }
loopsva 6:8e6bd0f9877b 57 return beta;
loopsva 6:8e6bd0f9877b 58 }
loopsva 6:8e6bd0f9877b 59
loopsva 6:8e6bd0f9877b 60 int NTC::get_series_res() {
loopsva 6:8e6bd0f9877b 61 return ntc_set_data.sres_res;
loopsva 6:8e6bd0f9877b 62 }
loopsva 6:8e6bd0f9877b 63
loopsva 6:8e6bd0f9877b 64 float NTC::get_ntc_res_viaAD(uint16_t din) {
loopsva 6:8e6bd0f9877b 65 uint16_t ad = din;
loopsva 6:8e6bd0f9877b 66 if(din == 0) {
loopsva 6:8e6bd0f9877b 67 ad = NTC::read_ad_reg();
loopsva 6:8e6bd0f9877b 68 }
loopsva 6:8e6bd0f9877b 69 float adv = ntc_set_data.vref / ntc_set_data.ad_resolution * (float)ad;
loopsva 6:8e6bd0f9877b 70 return (ntc_set_data.vref / ((ntc_set_data.vref - adv) / ntc_set_data.sres_res) - ntc_set_data.sres_res);
loopsva 6:8e6bd0f9877b 71 }
loopsva 6:8e6bd0f9877b 72
loopsva 6:8e6bd0f9877b 73 float NTC::get_ntc_temp(int curve, uint16_t din) {
loopsva 6:8e6bd0f9877b 74 int beta = NTC::get_ntc_beta(curve);
loopsva 0:c0bdc272d5da 75 float ntc_res = 0.0f;
loopsva 0:c0bdc272d5da 76 if(din == 0) {
loopsva 0:c0bdc272d5da 77 ntc_res = NTC::get_ntc_res_viaAD();
loopsva 0:c0bdc272d5da 78 } else {
loopsva 0:c0bdc272d5da 79 ntc_res = NTC::get_ntc_res_viaAD(din);
loopsva 0:c0bdc272d5da 80 }
loopsva 5:9655397ba539 81 if(beta == 0) return -100.0f;
loopsva 0:c0bdc272d5da 82 return (beta / (log(ntc_res / (ntc_set_data.ntc_res * exp(-beta / 298.0f)))) - 273.0f);
loopsva 0:c0bdc272d5da 83 }
loopsva 0:c0bdc272d5da 84
loopsva 6:8e6bd0f9877b 85