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.cpp
- Committer:
- loopsva
- Date:
- 2017-04-08
- Revision:
- 3:1eb4f5296281
- Parent:
- 2:c843c06cc651
- Child:
- 5:9655397ba539
File content as of revision 3:1eb4f5296281:
/* * 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 = din; 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); }