bmp390 measurement error

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.

2 replies