[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Paparazzi-devel] Critical behaviour of baro_ms5611_i2c
From: |
Rolf Nöllenburg |
Subject: |
[Paparazzi-devel] Critical behaviour of baro_ms5611_i2c |
Date: |
Sat, 02 Feb 2013 14:08:00 +0100 |
Hi
I just discovered a severe problem (luckily on the desk) with the module
baro_ms5611_i2c: the communication via i2c can get faulty which leeds to
estimator_z = nan and it DOES NOT RECOVER!!!
This happens not very often, approx. once in 20 min.
I think that the problem is starts with a zero in D2. This leads to messages in
the log-file like the following:
2174.155 11 ESTIMATOR 1.195065 0.513844
2174.174 11 BARO_MS5611 7803588 8440836 1001.38 38.9
2174.269 11 BARO_MS5611 7803430 0 -2230.73 -242.71
2174.369 11 BARO_MS5611 7803606 8440764 1001.38 38.89
2174.397 11 ESTIMATOR nan nan
2174.465 11 BARO_MS5611 7803424 8440874 1001.34 38.9
2174.566 11 BARO_MS5611 7803488 8440640 1001.34 38.89
2174.684 11 ESTIMATOR nan nan
A pressure of -2230.73 is obviously too much (or little) for the hight
calculation...
My system:
- Paparazzi version v4.2.0_stable-5-gc3a1496-dirty
- YAPA 2
- Drotek IMU (mpu6050, hms5883, ms5611) on i2c1
- PERIODIC_FREQUENCY=AHRS_PROPAGATE_FREQUENCY=AHRS_CORRECT_FREQUENCY=60Hz
- baro_ms5611_periodic=baro_ms5611_d1=baro_ms5611_d2=10Hz
I am working on a fix via something like this starting in line 211 of
baro_ms5611_i2c.c:
/* avoid glitches in d2
if (ms5611_d2 < 1000000) {
ms5611_d2 = ms5611_d2_prev;
} else {
ms5611_d2_prev = ms5611_d2;
}
I tried this with a fixed replacement-value of 7000000 instead of
ms5611_d2_prev and it looks promising (estimator_z jumps to about 200m and
recovers within 1 second). I just need some testing ...