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@5:9655397ba539, 2017-04-11 (annotated)
- Committer:
- loopsva
- Date:
- Tue Apr 11 20:30:30 2017 +0000
- Revision:
- 5:9655397ba539
- Parent:
- 3:1eb4f5296281
- Child:
- 6:8e6bd0f9877b
Added a couple more Beta options.
; If beta selected = 0, -100 is returned for temperature.
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:c0bdc272d5da | 12 | rawdata = NULL; |
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 | 0:c0bdc272d5da | 19 | rawdata = NULL; |
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 | 5:9655397ba539 | 32 | int NTC::get_ntc_beta_0050() { |
loopsva | 5:9655397ba539 | 33 | return ntc_set_data.ntc_beta_0050; |
loopsva | 5:9655397ba539 | 34 | } |
loopsva | 5:9655397ba539 | 35 | |
loopsva | 0:c0bdc272d5da | 36 | int NTC::get_ntc_beta_2550() { |
loopsva | 0:c0bdc272d5da | 37 | return ntc_set_data.ntc_beta_2550; |
loopsva | 0:c0bdc272d5da | 38 | } |
loopsva | 0:c0bdc272d5da | 39 | |
loopsva | 0:c0bdc272d5da | 40 | int NTC::get_ntc_beta_2580() { |
loopsva | 0:c0bdc272d5da | 41 | return ntc_set_data.ntc_beta_2580; |
loopsva | 0:c0bdc272d5da | 42 | } |
loopsva | 0:c0bdc272d5da | 43 | |
loopsva | 0:c0bdc272d5da | 44 | int NTC::get_ntc_beta_2585() { |
loopsva | 0:c0bdc272d5da | 45 | return ntc_set_data.ntc_beta_2585; |
loopsva | 0:c0bdc272d5da | 46 | } |
loopsva | 0:c0bdc272d5da | 47 | |
loopsva | 0:c0bdc272d5da | 48 | int NTC::get_ntc_beta_25100() { |
loopsva | 0:c0bdc272d5da | 49 | return ntc_set_data.ntc_beta_25100; |
loopsva | 0:c0bdc272d5da | 50 | } |
loopsva | 0:c0bdc272d5da | 51 | |
loopsva | 5:9655397ba539 | 52 | int NTC::get_ntc_beta_other() { |
loopsva | 5:9655397ba539 | 53 | return ntc_set_data.ntc_beta_other; |
loopsva | 5:9655397ba539 | 54 | } |
loopsva | 5:9655397ba539 | 55 | |
loopsva | 0:c0bdc272d5da | 56 | int NTC::get_series_res() { |
loopsva | 0:c0bdc272d5da | 57 | return ntc_set_data.sres_res; |
loopsva | 0:c0bdc272d5da | 58 | } |
loopsva | 0:c0bdc272d5da | 59 | |
loopsva | 0:c0bdc272d5da | 60 | float NTC::get_ntc_res_viaAD(uint16_t din) { |
loopsva | 2:c843c06cc651 | 61 | uint16_t ad = din; |
loopsva | 0:c0bdc272d5da | 62 | if(din == 0) { |
loopsva | 0:c0bdc272d5da | 63 | ad = NTC::read_ad_reg(); |
loopsva | 0:c0bdc272d5da | 64 | } |
loopsva | 0:c0bdc272d5da | 65 | float adv = ntc_set_data.vref / ntc_set_data.ad_resolution * (float)ad; |
loopsva | 0:c0bdc272d5da | 66 | return (ntc_set_data.vref / ((ntc_set_data.vref - adv) / ntc_set_data.sres_res) - ntc_set_data.sres_res); |
loopsva | 0:c0bdc272d5da | 67 | } |
loopsva | 0:c0bdc272d5da | 68 | |
loopsva | 0:c0bdc272d5da | 69 | float NTC::get_ntc_temp(int curve, uint16_t din) { |
loopsva | 0:c0bdc272d5da | 70 | int beta = 0; |
loopsva | 0:c0bdc272d5da | 71 | switch (curve) { |
loopsva | 5:9655397ba539 | 72 | case B0_50: |
loopsva | 5:9655397ba539 | 73 | beta = ntc_set_data.ntc_beta_0050; |
loopsva | 5:9655397ba539 | 74 | break; |
loopsva | 0:c0bdc272d5da | 75 | case B25_50: |
loopsva | 0:c0bdc272d5da | 76 | beta = ntc_set_data.ntc_beta_2550; |
loopsva | 0:c0bdc272d5da | 77 | break; |
loopsva | 0:c0bdc272d5da | 78 | case B25_80: |
loopsva | 0:c0bdc272d5da | 79 | beta = ntc_set_data.ntc_beta_2580; |
loopsva | 0:c0bdc272d5da | 80 | break; |
loopsva | 0:c0bdc272d5da | 81 | case B25_85: |
loopsva | 0:c0bdc272d5da | 82 | beta = ntc_set_data.ntc_beta_2585; |
loopsva | 0:c0bdc272d5da | 83 | break; |
loopsva | 0:c0bdc272d5da | 84 | case B25_100: |
loopsva | 0:c0bdc272d5da | 85 | beta = ntc_set_data.ntc_beta_25100; |
loopsva | 0:c0bdc272d5da | 86 | break; |
loopsva | 5:9655397ba539 | 87 | case B_OTHER: |
loopsva | 5:9655397ba539 | 88 | beta = ntc_set_data.ntc_beta_other; |
loopsva | 5:9655397ba539 | 89 | break; |
loopsva | 0:c0bdc272d5da | 90 | default: |
loopsva | 0:c0bdc272d5da | 91 | beta = ntc_set_data.ntc_beta_2550; |
loopsva | 0:c0bdc272d5da | 92 | break; |
loopsva | 0:c0bdc272d5da | 93 | } |
loopsva | 0:c0bdc272d5da | 94 | float ntc_res = 0.0f; |
loopsva | 0:c0bdc272d5da | 95 | if(din == 0) { |
loopsva | 0:c0bdc272d5da | 96 | ntc_res = NTC::get_ntc_res_viaAD(); |
loopsva | 0:c0bdc272d5da | 97 | } else { |
loopsva | 0:c0bdc272d5da | 98 | ntc_res = NTC::get_ntc_res_viaAD(din); |
loopsva | 0:c0bdc272d5da | 99 | } |
loopsva | 5:9655397ba539 | 100 | if(beta == 0) return -100.0f; |
loopsva | 0:c0bdc272d5da | 101 | return (beta / (log(ntc_res / (ntc_set_data.ntc_res * exp(-beta / 298.0f)))) - 273.0f); |
loopsva | 0:c0bdc272d5da | 102 | } |
loopsva | 0:c0bdc272d5da | 103 |