fix(bmp280): correct timestamp_sample to integration midpoint

The BMP280 pressure measurement is integrated over _measure_interval
(~43ms at 16x pressure / 2x temperature oversampling). The read time
corresponds to the end of the integration window, introducing a
systematic timing bias. Correct timestamp_sample to the midpoint by
subtracting measurement_time / 2.
This commit is contained in:
Jacob Dahl
2026-03-31 14:47:54 -08:00
committed by Jacob Dahl
parent b2a75fcc0f
commit 7f59e5dc16
+6 -2
View File
@@ -144,8 +144,12 @@ BMP280::collect()
_collect_phase = false;
// this should be fairly close to the end of the conversion, so the best approximation of the time
const hrt_abstime timestamp_sample = hrt_absolute_time();
/* Correct for measurement integration delay: the pressure was
* integrated over the preceding _measure_interval window, so the
* effective sample midpoint is half the measurement time before now. */
const hrt_abstime now = hrt_absolute_time();
const hrt_abstime half_meas = _measure_interval / 2;
const hrt_abstime timestamp_sample = (now > half_meas) ? (now - half_meas) : now;
bmp280::data_s *data = _interface->get_data(BMP280_ADDR_DATA);
if (data == nullptr) {