AD4130 Mbed IIO Firmware

Dependencies:   tempsensors sdp_k1_sdram

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?

UserRevisionLine numberNew 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 }