fix(ms5837): correct timestamp_sample to integration midpoint

Same fix as MS5611: the MS5837 ADC conversion at OSR 1024 takes
~2.28ms, but the data is read after a 10ms scheduling delay. Correct
timestamp_sample by subtracting (CONVERSION_INTERVAL - CONVERSION_TIME/2)
from the read time.
This commit is contained in:
Jacob Dahl 2026-03-31 14:48:41 -08:00 committed by Jacob Dahl
parent c149bad4f2
commit e253c1e20c
2 changed files with 8 additions and 2 deletions

View File

@ -269,8 +269,13 @@ int MS5837::_collect()
perf_begin(_sample_perf);
/* read the most recent measurement - read offset/size are hardcoded in the interface */
const hrt_abstime timestamp_sample = hrt_absolute_time();
/* Correct for measurement integration delay: the conversion was
* started CONVERSION_INTERVAL ago and took OSR1024_CONVERSION_TIME
* to integrate, so the effective sample midpoint is
* (CONVERSION_INTERVAL - OSR1024_CONVERSION_TIME/2) before now. */
const hrt_abstime now = hrt_absolute_time();
static constexpr hrt_abstime correction = MS5837_CONVERSION_INTERVAL - MS5837_OSR1024_CONVERSION_TIME / 2;
const hrt_abstime timestamp_sample = (now > correction) ? (now - correction) : now;
int ret = read(0, (void *)&raw, 0);
if (ret < 0) {

View File

@ -83,6 +83,7 @@
* conversion finished
*/
#define MS5837_CONVERSION_INTERVAL 10000 /* microseconds */
#define MS5837_OSR1024_CONVERSION_TIME 2280 /* max ADC conversion time at OSR 1024, microseconds */
#define MS5837_MEASUREMENT_RATIO 3 /* pressure measurements per temperature measurement */
namespace ms5837