AD4130 Mbed IIO Firmware
Dependencies: tempsensors sdp_k1_sdram
app/ad4130_temperature_sensor.cpp@2:871d585d96ee, 2022-07-15 (annotated)
- Committer:
- MPhalke@MPHALKE-L02.ad.analog.com
- Date:
- Fri Jul 15 17:47:44 2022 +0530
- Revision:
- 2:871d585d96ee
AD4130 firmware - initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1 | /***************************************************************************//* |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 2 | * @file ad4130_temperature_sensor.cpp |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 3 | * @brief AD4130 temperature sensor measurement functionality |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 4 | ****************************************************************************** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 5 | * Copyright (c) 2022 Analog Devices, Inc. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 6 | * All Rights Reserved. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 7 | * |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 8 | * This software is proprietary to Analog Devices, Inc. and its licensors. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 9 | * By using this software you agree to the terms of the associated |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 10 | * Analog Devices Software License Agreement. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 11 | ******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 12 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 13 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 14 | /***************************** Include Files **********************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 15 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 16 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 17 | #include <stdint.h> |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 18 | #include <math.h> |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 19 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 20 | #include <thermocouple.h> |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 21 | #include <ntc_10k_44031.h> |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 22 | #include <ptxxx.h> |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 23 | #include "ad4130_temperature_sensor.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 24 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 25 | #ifdef __cplusplus |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 26 | extern "C" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 27 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 28 | #endif // _cplusplus |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 29 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 30 | #include "app_config.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 31 | #include "ad4130_support.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 32 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 33 | #ifdef __cplusplus // Closing extern c |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 34 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 35 | #endif // _cplusplus |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 36 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 37 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 38 | /********************* Macros and Constants Definitions ***********************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 39 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 40 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 41 | /* NTC thermistor Rsense value (in ohms) */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 42 | #define NTC_RSENSE 10000U |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 43 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 44 | /* RTD Rref Resistance value (in ohms) */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 45 | #define RTD_RREF 5110U |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 46 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 47 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 48 | /******************** Variables and User Defined Data Types *******************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 49 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 50 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 51 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 52 | /************************** Functions Definitions *****************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 53 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 54 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 55 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 56 | * @brief Convert the NTC thermistor voltage into equivalent resistance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 57 | * @param ntc_voltage[in] - NTC Thermistor voltage |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 58 | * @return NTC Thermistor resistance value |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 59 | * @note The NTC is biased with constant ADC reference voltage. Below formula |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 60 | * is based on ratiometric measurement, where fixed value of ADC REF |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 61 | * and gain is taken into account |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 62 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 63 | static float convert_ntc_voltage_into_resistance(float ntc_voltage) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 64 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 65 | return ((ntc_voltage * NTC_RSENSE) / (AD4170_1_25V_INT_REF_VOLTAGE - |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 66 | ntc_voltage)); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 67 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 68 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 69 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 70 | * @brief Convert ADC raw value into equivalent NTC temperature |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 71 | * @param dev[in] - Device instance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 72 | * @param ntc_sample[in] - Raw ADC sample for NTC sensor |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 73 | * @param chn[in] - ADC channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 74 | * @return NTC temperature |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 75 | * @note Fixed NTC 10K 44031RC sensor is used |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 76 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 77 | float get_ntc_thermistor_temperature(void *dev, uint32_t ntc_sample, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 78 | uint8_t chn) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 79 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 80 | ntc_10k_44031rc ntc_thermistor; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 81 | float ntc_voltage; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 82 | float ntc_resistance; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 83 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 84 | ntc_voltage = convert_adc_sample_into_voltage(dev, ntc_sample, chn); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 85 | ntc_resistance = convert_ntc_voltage_into_resistance(ntc_voltage); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 86 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 87 | return ntc_thermistor.convert(ntc_resistance); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 88 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 89 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 90 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 91 | * @brief Convert ADC raw value into equivalent RTD temperature |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 92 | * @param dev[in] - Device instance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 93 | * @param rtd_sample[in] - Raw ADC sample for RTD sensor |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 94 | * @pram chn[in] - ADC channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 95 | * @return RTD temperature |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 96 | * @note Fixed PT100 RTD sensor is used |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 97 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 98 | float get_rtd_temperature(void *dev, uint32_t rtd_sample, uint8_t chn) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 99 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 100 | PT100 rtd_sensor; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 101 | float rtd_resistance; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 102 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 103 | rtd_resistance = convert_adc_raw_into_rtd_resistance(dev, rtd_sample, RTD_RREF, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 104 | chn); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 105 | return rtd_sensor.convertResistanceToTemperature(rtd_resistance); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 106 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 107 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 108 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 109 | * @brief Convert ADC raw value into TC temperature |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 110 | * @param dev[in] - Device instance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 111 | * @param tc_sample[in] - Raw TC sample |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 112 | * @param cjc_sample[in] - Raw CJC sample |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 113 | * @param tc_chn[in] - TC ADC channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 114 | * @param cjc_chn[in] - CJC ADC channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 115 | * @param cjc_temp[in, out] - CJC temperature value |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 116 | * @return TC temperature |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 117 | * @note T type thermocouple is used as default. For CJC, PT1000 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 118 | * RTD sensor is used as default. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 119 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 120 | float get_tc_temperature(void *dev, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 121 | uint32_t tc_sample, uint32_t cjc_sample, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 122 | uint8_t tc_chn, uint8_t cjc_chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 123 | float *cjc_temp) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 124 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 125 | Thermocouple_Type_T tcSensor; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 126 | float tc_mv; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 127 | float tc_temperature; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 128 | float cjc_temperature; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 129 | PT1000 rtd_sensor; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 130 | float rtd_resistance; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 131 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 132 | tc_mv = convert_adc_sample_into_voltage(dev, tc_sample, tc_chn) * 1000; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 133 | tc_temperature = tcSensor.convert(tc_mv); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 134 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 135 | #if defined(USE_CJC_AS_RTD) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 136 | rtd_resistance = convert_adc_raw_into_rtd_resistance(dev, cjc_sample, RTD_RREF, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 137 | cjc_chn); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 138 | cjc_temperature = rtd_sensor.convertResistanceToTemperature(rtd_resistance); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 139 | #else |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 140 | cjc_temperature = get_ntc_thermistor_temperature(dev, cjc_sample, cjc_chn); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 141 | #endif |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 142 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 143 | /* Get the CJC temperature */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 144 | *cjc_temp = cjc_temperature; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 145 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 146 | /* NOTE The simplest approach of adding the CJC temperature to TC temperature is taken here. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 147 | * A better method is to convert RTD back to thermocouple mV, and add that to TC value |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 148 | * then do the thermocouple to degC conversion. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 149 | * */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 150 | return (tc_temperature + cjc_temperature); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 151 | } |