Fixed temperature measurement
This commit is contained in:
parent
df3211333e
commit
add925bba0
|
@ -17,20 +17,23 @@ static fxp_t calibration_factors[ADC_NUM_CHANNELS-1]; // all except temperature;
|
|||
/* Temperature sensor calibration value address */
|
||||
#define TEMP110_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7C2))
|
||||
#define TEMP30_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7B8))
|
||||
#define VDD_CALIB ((uint16_t) (330)) /* calibration voltage = 3,30V - DO NOT CHANGE */
|
||||
#define VDD_APPLI ((uint16_t) (330)) /* actual supply voltage */
|
||||
#define VDD_CALIB ((int32_t) (330)) /* calibration voltage = 3,30V - DO NOT CHANGE */
|
||||
#define VDD_APPLI ((int32_t) (330)) /* actual supply voltage */
|
||||
|
||||
/* function for temperature conversion */
|
||||
static fxp_t calc_temperature(uint16_t adc_val)
|
||||
{
|
||||
fxp_t temperature = FXP_FROM_INT(
|
||||
((int32_t)adc_val * VDD_APPLI / VDD_CALIB) -
|
||||
(int32_t)*TEMP30_CAL_ADDR);
|
||||
int32_t temperature_raw = ((int32_t)adc_val * VDD_APPLI / VDD_CALIB)
|
||||
- (int32_t)(*TEMP30_CAL_ADDR);
|
||||
|
||||
temperature = fxp_mult(temperature, FXP_FROM_INT(110 - 30));
|
||||
temperature = fxp_div(temperature, FXP_FROM_INT(*TEMP110_CAL_ADDR - *TEMP30_CAL_ADDR));
|
||||
fxp_t temperature = FXP_FROM_INT(temperature_raw);
|
||||
|
||||
return fxp_add(temperature, FXP_FROM_INT(30));
|
||||
fxp_t scale_dividend = FXP_FROM_INT(110 - 30);
|
||||
fxp_t scale_divisor = FXP_FROM_INT((int32_t)(*TEMP110_CAL_ADDR - *TEMP30_CAL_ADDR));
|
||||
|
||||
fxp_t scale = fxp_div(scale_dividend, scale_divisor);
|
||||
|
||||
return fxp_add(fxp_mult(temperature, scale), FXP_FROM_INT(30));
|
||||
}
|
||||
|
||||
|
||||
|
@ -71,7 +74,7 @@ void measurement_init(void)
|
|||
ANALOG_INPUT_U_SW, // U_SW
|
||||
ANALOG_INPUT_I_SOLAR, // I_Solar
|
||||
ANALOG_INPUT_I_LOAD, // I_Load
|
||||
16 // Temperature sensor
|
||||
ADC_CHANNEL_TEMP // Temperature sensor
|
||||
};
|
||||
|
||||
// Convert calibration factors to fixed-point numbers for direct use
|
||||
|
|
Loading…
Reference in a new issue