Hello,
I am working on a rocket altimeter project based on Attiny1616 and BMP390. I have a commercial altimeter for comparison.
Problem: The difference between the commercial altimeter and my measurements starts around 10 m, but then continues with irregular and absurd differences like 30, 60, 15.
In my code, I use BMP390 oversampling, IIR filter, and a Kalman filter:
bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_4X);
bmp.setPressureOversampling(BMP3_OVERSAMPLING_32X);
bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_15);
bmp.setOutputDataRate(BMP3_ODR_50_HZ); const int SKIP_COUNT = 30;
const int N = 15;
double pSum = 0;
for (int i = 0; i < SKIP_COUNT; i++) {
if (!bmp.performReading()) {
i--;
delay(40);
continue;
}
bmp.readPressure();
delay(50);
bmp.readAltitude(bmp.readPressure());
delay(50);
bmp.readTemperature();
delay(200);
}
for (int i = 0; i < N; i++) {
if (!bmp.performReading()) {
i--;
delay(40);
continue;
}
pSum += bmp.readPressure() / 100.0f;
delay(400);
}
baselinePressure = pSum / N;
baselineAlt = 0.0;
tempC = bmp.readTemperature();
baselineLocked = true;
kalman.reset(baselineAlt, 1.0);
blinker(2, 120, 128);
}
I believe this discrepancy is almost entirely caused by a software issue. The calibration method, filter parameters, and measurement sequence may be causing inaccurate altitude readings during flight.
I would greatly appreciate any suggestions or ideas.