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
Diff: ntc.cpp
- Revision:
- 0:c0bdc272d5da
- Child:
- 2:c843c06cc651
diff -r 000000000000 -r c0bdc272d5da ntc.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ntc.cpp Fri Apr 07 00:30:39 2017 +0000 @@ -0,0 +1,88 @@ +/* + * mbed library program + */ + +#include "mbed.h" +#include "ntc.h" + +NTC::NTC(PinName p_ana, const NTC_TypeDef *ntc_parameter) : + _ana(p_ana) +{ + ntc_set_data = *ntc_parameter; + rawdata = NULL; +} + +NTC::NTC(PinName p_ana) : + _ana(p_ana) +{ + ntc_set_data = ntc_std_paramtr; + rawdata = NULL; +} + +uint16_t NTC::read_ad_reg() { + rawdata = _ana.read_u16(); + return rawdata; + //return 19918; //85.00c * ntc=10k, b=3434, rser=3320 +} + +int NTC::get_ntc_res() { + return ntc_set_data.ntc_res; +} + +int NTC::get_ntc_beta_2550() { + return ntc_set_data.ntc_beta_2550; +} + +int NTC::get_ntc_beta_2580() { + return ntc_set_data.ntc_beta_2580; +} + +int NTC::get_ntc_beta_2585() { + return ntc_set_data.ntc_beta_2585; +} + +int NTC::get_ntc_beta_25100() { + return ntc_set_data.ntc_beta_25100; +} + +int NTC::get_series_res() { + return ntc_set_data.sres_res; +} + +float NTC::get_ntc_res_viaAD(uint16_t din) { + uint16_t ad = rawdata; + if(din == 0) { + ad = NTC::read_ad_reg(); + } + float adv = ntc_set_data.vref / ntc_set_data.ad_resolution * (float)ad; + return (ntc_set_data.vref / ((ntc_set_data.vref - adv) / ntc_set_data.sres_res) - ntc_set_data.sres_res); +} + +float NTC::get_ntc_temp(int curve, uint16_t din) { + int beta = 0; + switch (curve) { + case B25_50: + beta = ntc_set_data.ntc_beta_2550; + break; + case B25_80: + beta = ntc_set_data.ntc_beta_2580; + break; + case B25_85: + beta = ntc_set_data.ntc_beta_2585; + break; + case B25_100: + beta = ntc_set_data.ntc_beta_25100; + break; + default: + beta = ntc_set_data.ntc_beta_2550; + break; + } + float ntc_res = 0.0f; + if(din == 0) { + ntc_res = NTC::get_ntc_res_viaAD(); + } else { + ntc_res = NTC::get_ntc_res_viaAD(din); + } + return (beta / (log(ntc_res / (ntc_set_data.ntc_res * exp(-beta / 298.0f)))) - 273.0f); +} +