08-23-2022 10:35 AM
Hi, we are using the BMP388 Temperature and pressure sensor and although the pressure reading seems fine, the temperature sensor reading is consistently about 6 degrees too high. For example I put our unit in a refrigerator at about 4 degrees and the reported temperature immediately on removal was 10.5. I am aware that the temperature is the die temperature but would you expect that sort of offset? I have tried running in forced mode so that the device sleeps between reads in order to limit self-heating but this had no effect. I have 5 units which behave the same. Hope you can help / advise.
BMP388_CalData NewCal;
void ReadBMP388CalibrationValues ( void )
{
ReadBoschChip(GetBoschI2Chandle(), 0x31, (uint8_t *)&NewCal.NVM_PAR_T1, 2);
ReadBoschChip(GetBoschI2Chandle(), 0x33, (uint8_t *)&NewCal.NVM_PAR_T2, 2);
ReadBoschChip(GetBoschI2Chandle(), 0x35, (uint8_t *)&NewCal.NVM_PAR_T3, 1);
ReadBoschChip(GetBoschI2Chandle(), 0x36, (uint8_t *)&NewCal.NVM_PAR_P1, 2);
ReadBoschChip(GetBoschI2Chandle(), 0x38, (uint8_t *)&NewCal.NVM_PAR_P2, 2);
ReadBoschChip(GetBoschI2Chandle(), 0x3a, (uint8_t *)&NewCal.NVM_PAR_P3, 1);
ReadBoschChip(GetBoschI2Chandle(), 0x3b, (uint8_t *)&NewCal.NVM_PAR_P4, 1);
ReadBoschChip(GetBoschI2Chandle(), 0x3c, (uint8_t *)&NewCal.NVM_PAR_P5, 2);
ReadBoschChip(GetBoschI2Chandle(), 0x3e, (uint8_t *)&NewCal.NVM_PAR_P6, 2);
ReadBoschChip(GetBoschI2Chandle(), 0x40, (uint8_t *)&NewCal.NVM_PAR_P7, 1);
ReadBoschChip(GetBoschI2Chandle(), 0x41, (uint8_t *)&NewCal.NVM_PAR_P8, 1);
ReadBoschChip(GetBoschI2Chandle(), 0x42, (uint8_t *)&NewCal.NVM_PAR_P9, 2);
ReadBoschChip(GetBoschI2Chandle(), 0x44, (uint8_t *)&NewCal.NVM_PAR_P10, 1);
ReadBoschChip(GetBoschI2Chandle(), 0x45, (uint8_t *)&NewCal.NVM_PAR_P11, 1);
}
double GetTrueTemperature ( uint32_t Temperature )
{
double RealTemperature;
double Parameter_T1, Parameter_T2, Parameter_T3;
double PartialData1, PartialData2;
Parameter_T1 = (double)(NewCal.NVM_PAR_T1) / pow(2.0, -8.0);
Parameter_T2 = (double)(NewCal.NVM_PAR_T2) / pow(2.0, 30.0);
Parameter_T3 = (double)(NewCal.NVM_PAR_T3) / pow(2.0, 48.0);
PartialData1 = (double)(Temperature - Parameter_T1);
PartialData2 = PartialData1 * Parameter_T2;
RealTemperature = PartialData2 + (PartialData1 * PartialData1) * Parameter_T3;
t_lin = RealTemperature;
return RealTemperature;
}
08-23-2022 12:35 PM
Hi gsewell,
It is recommended that you use the BMP3 sensor API to read the sensor data and see the test result. The attachment is the example code on STM32 for your reference, which uses BMP3 sensor API on github.
https://github.com/BoschSensortec/BMP3-Sensor-API
08-23-2022 01:22 PM
Many thanks, I'll give that a try
Regards
Graham
09-23-2022 09:19 AM
Welcome, gsewell.
Did it work well?