Browse Source

new InvenSense IMU drivers review temperature sensitivities and offsets

sbg
Daniel Agar 5 years ago committed by GitHub
parent
commit
0860a61fa6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/drivers/imu/invensense/icm20602/ICM20602.cpp
  2. 2
      src/drivers/imu/invensense/icm20602/InvenSense_ICM20602_registers.hpp
  3. 2
      src/drivers/imu/invensense/icm20608g/ICM20608G.cpp
  4. 2
      src/drivers/imu/invensense/icm20608g/InvenSense_ICM20608G_registers.hpp
  5. 2
      src/drivers/imu/invensense/icm20689/ICM20689.cpp
  6. 2
      src/drivers/imu/invensense/icm20689/InvenSense_ICM20689_registers.hpp
  7. 4
      src/drivers/imu/invensense/icm40609d/ICM40609D.cpp
  8. 3
      src/drivers/imu/invensense/icm40609d/InvenSense_ICM40609D_registers.hpp
  9. 4
      src/drivers/imu/invensense/icm42688p/ICM42688P.cpp
  10. 2
      src/drivers/imu/invensense/icm42688p/InvenSense_ICM42688P_registers.hpp
  11. 4
      src/drivers/imu/invensense/mpu6000/InvenSense_MPU6000_registers.hpp
  12. 2
      src/drivers/imu/invensense/mpu6000/MPU6000.cpp
  13. 4
      src/drivers/imu/invensense/mpu6500/InvenSense_MPU6500_registers.hpp
  14. 2
      src/drivers/imu/invensense/mpu6500/MPU6500.cpp
  15. 4
      src/drivers/imu/invensense/mpu9250/InvenSense_MPU9250_registers.hpp
  16. 2
      src/drivers/imu/invensense/mpu9250/MPU9250.cpp

2
src/drivers/imu/invensense/icm20602/ICM20602.cpp

@ -623,7 +623,7 @@ bool ICM20602::ProcessTemperature(const FIFOTransferBuffer &buffer, const uint8_ @@ -623,7 +623,7 @@ bool ICM20602::ProcessTemperature(const FIFOTransferBuffer &buffer, const uint8_
}
// use average temperature reading
const float temperature_C = temperature_avg / TEMPERATURE_SENSITIVITY + ROOM_TEMPERATURE_OFFSET;
const float temperature_C = (temperature_avg / TEMPERATURE_SENSITIVITY) + TEMPERATURE_OFFSET;
_px4_accel.set_temperature(temperature_C);
_px4_gyro.set_temperature(temperature_C);

2
src/drivers/imu/invensense/icm20602/InvenSense_ICM20602_registers.hpp

@ -60,7 +60,7 @@ static constexpr uint8_t DIR_READ = 0x80; @@ -60,7 +60,7 @@ static constexpr uint8_t DIR_READ = 0x80;
static constexpr uint8_t WHOAMI = 0x12;
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
static constexpr float TEMPERATURE_OFFSET = 25.f; // C
enum class Register : uint8_t {
CONFIG = 0x1A,

2
src/drivers/imu/invensense/icm20608g/ICM20608G.cpp

@ -628,7 +628,7 @@ void ICM20608G::UpdateTemperature() @@ -628,7 +628,7 @@ void ICM20608G::UpdateTemperature()
}
const int16_t TEMP_OUT = combine(temperature_buf[1], temperature_buf[2]);
const float TEMP_degC = ((TEMP_OUT - ROOM_TEMPERATURE_OFFSET) / TEMPERATURE_SENSITIVITY) + ROOM_TEMPERATURE_OFFSET;
const float TEMP_degC = (TEMP_OUT / TEMPERATURE_SENSITIVITY) + TEMPERATURE_OFFSET;
if (PX4_ISFINITE(TEMP_degC)) {
_px4_accel.set_temperature(TEMP_degC);

2
src/drivers/imu/invensense/icm20608g/InvenSense_ICM20608G_registers.hpp

@ -60,7 +60,7 @@ static constexpr uint8_t DIR_READ = 0x80; @@ -60,7 +60,7 @@ static constexpr uint8_t DIR_READ = 0x80;
static constexpr uint8_t WHOAMI = 0xAF;
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
static constexpr float TEMPERATURE_OFFSET = 25.f; // C
enum class Register : uint8_t {
CONFIG = 0x1A,

2
src/drivers/imu/invensense/icm20689/ICM20689.cpp

@ -627,7 +627,7 @@ void ICM20689::UpdateTemperature() @@ -627,7 +627,7 @@ void ICM20689::UpdateTemperature()
}
const int16_t TEMP_OUT = combine(temperature_buf[1], temperature_buf[2]);
const float TEMP_degC = ((TEMP_OUT - ROOM_TEMPERATURE_OFFSET) / TEMPERATURE_SENSITIVITY) + ROOM_TEMPERATURE_OFFSET;
const float TEMP_degC = (TEMP_OUT / TEMPERATURE_SENSITIVITY) + TEMPERATURE_OFFSET;
if (PX4_ISFINITE(TEMP_degC)) {
_px4_accel.set_temperature(TEMP_degC);

2
src/drivers/imu/invensense/icm20689/InvenSense_ICM20689_registers.hpp

@ -60,7 +60,7 @@ static constexpr uint8_t DIR_READ = 0x80; @@ -60,7 +60,7 @@ static constexpr uint8_t DIR_READ = 0x80;
static constexpr uint8_t WHOAMI = 0x98;
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
static constexpr float TEMPERATURE_OFFSET = 25.f; // C
enum class Register : uint8_t {
CONFIG = 0x1A,

4
src/drivers/imu/invensense/icm40609d/ICM40609D.cpp

@ -618,8 +618,8 @@ void ICM40609D::UpdateTemperature() @@ -618,8 +618,8 @@ void ICM40609D::UpdateTemperature()
const int16_t TEMP_DATA = combine(temperature_buf[1], temperature_buf[2]);
// Temperature in Degrees Centigrade = (TEMP_DATA / 132.48) + 25
const float TEMP_degC = (TEMP_DATA / TEMPERATURE_SENSITIVITY) + ROOM_TEMPERATURE_OFFSET;
// Temperature in Degrees Centigrade
const float TEMP_degC = (TEMP_DATA / TEMPERATURE_SENSITIVITY) + TEMPERATURE_OFFSET;
if (PX4_ISFINITE(TEMP_degC)) {
_px4_accel.set_temperature(TEMP_degC);

3
src/drivers/imu/invensense/icm40609d/InvenSense_ICM40609D_registers.hpp

@ -60,7 +60,7 @@ static constexpr uint8_t DIR_READ = 0x80; @@ -60,7 +60,7 @@ static constexpr uint8_t DIR_READ = 0x80;
static constexpr uint8_t WHOAMI = 0x3B;
static constexpr float TEMPERATURE_SENSITIVITY = 132.48f; // LSB/C
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
static constexpr float TEMPERATURE_OFFSET = 25.f; // C
namespace Register
{
@ -221,7 +221,6 @@ struct DATA { @@ -221,7 +221,6 @@ struct DATA {
uint8_t timestamp_l;
uint8_t timestamp_h;
};
static_assert(sizeof(DATA) == 16, "FIFO packet 16 bytes");
// With FIFO_ACCEL_EN and FIFO_GYRO_EN header should be 8’b_0110_10xx
enum FIFO_HEADER_BIT : uint8_t {

4
src/drivers/imu/invensense/icm42688p/ICM42688P.cpp

@ -620,8 +620,8 @@ void ICM42688P::UpdateTemperature() @@ -620,8 +620,8 @@ void ICM42688P::UpdateTemperature()
const int16_t TEMP_DATA = combine(temperature_buf[1], temperature_buf[2]);
// Temperature in Degrees Centigrade = (TEMP_DATA / 132.48) + 25
const float TEMP_degC = (TEMP_DATA / TEMPERATURE_SENSITIVITY) + ROOM_TEMPERATURE_OFFSET;
// Temperature in Degrees Centigrade
const float TEMP_degC = (TEMP_DATA / TEMPERATURE_SENSITIVITY) + TEMPERATURE_OFFSET;
if (PX4_ISFINITE(TEMP_degC)) {
_px4_accel.set_temperature(TEMP_degC);

2
src/drivers/imu/invensense/icm42688p/InvenSense_ICM42688P_registers.hpp

@ -60,7 +60,7 @@ static constexpr uint8_t DIR_READ = 0x80; @@ -60,7 +60,7 @@ static constexpr uint8_t DIR_READ = 0x80;
static constexpr uint8_t WHOAMI = 0x47;
static constexpr float TEMPERATURE_SENSITIVITY = 132.48f; // LSB/C
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
static constexpr float TEMPERATURE_OFFSET = 25.f; // C
namespace Register
{

4
src/drivers/imu/invensense/mpu6000/InvenSense_MPU6000_registers.hpp

@ -60,8 +60,8 @@ static constexpr uint8_t DIR_READ = 0x80; @@ -60,8 +60,8 @@ static constexpr uint8_t DIR_READ = 0x80;
static constexpr uint8_t WHOAMI = 0x68;
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
static constexpr float TEMPERATURE_SENSITIVITY = 340.f; // LSB/C
static constexpr float TEMPERATURE_OFFSET = 36.53f; // C
enum class Register : uint8_t {
CONFIG = 0x1A,

2
src/drivers/imu/invensense/mpu6000/MPU6000.cpp

@ -567,7 +567,7 @@ void MPU6000::UpdateTemperature() @@ -567,7 +567,7 @@ void MPU6000::UpdateTemperature()
}
const int16_t TEMP_OUT = combine(temperature_buf[1], temperature_buf[2]);
const float TEMP_degC = ((TEMP_OUT - ROOM_TEMPERATURE_OFFSET) / TEMPERATURE_SENSITIVITY) + ROOM_TEMPERATURE_OFFSET;
const float TEMP_degC = (TEMP_OUT / TEMPERATURE_SENSITIVITY) + TEMPERATURE_OFFSET;
if (PX4_ISFINITE(TEMP_degC)) {
_px4_accel.set_temperature(TEMP_degC);

4
src/drivers/imu/invensense/mpu6500/InvenSense_MPU6500_registers.hpp

@ -60,8 +60,8 @@ static constexpr uint8_t DIR_READ = 0x80; @@ -60,8 +60,8 @@ static constexpr uint8_t DIR_READ = 0x80;
static constexpr uint8_t WHOAMI = 0x70;
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
static constexpr float TEMPERATURE_SENSITIVITY = 333.87f; // LSB/C
static constexpr float TEMPERATURE_OFFSET = 21.f; // C
enum class Register : uint8_t {
CONFIG = 0x1A,

2
src/drivers/imu/invensense/mpu6500/MPU6500.cpp

@ -591,7 +591,7 @@ void MPU6500::UpdateTemperature() @@ -591,7 +591,7 @@ void MPU6500::UpdateTemperature()
}
const int16_t TEMP_OUT = combine(temperature_buf[1], temperature_buf[2]);
const float TEMP_degC = ((TEMP_OUT - ROOM_TEMPERATURE_OFFSET) / TEMPERATURE_SENSITIVITY) + ROOM_TEMPERATURE_OFFSET;
const float TEMP_degC = (TEMP_OUT / TEMPERATURE_SENSITIVITY) + TEMPERATURE_OFFSET;
if (PX4_ISFINITE(TEMP_degC)) {
_px4_accel.set_temperature(TEMP_degC);

4
src/drivers/imu/invensense/mpu9250/InvenSense_MPU9250_registers.hpp

@ -61,8 +61,8 @@ static constexpr uint8_t DIR_READ = 0x80; @@ -61,8 +61,8 @@ static constexpr uint8_t DIR_READ = 0x80;
static constexpr uint8_t WHOAMI = 0x71;
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
static constexpr float TEMPERATURE_SENSITIVITY = 333.87f; // LSB/C
static constexpr float TEMPERATURE_OFFSET = 21.f; // C
enum class Register : uint8_t {
CONFIG = 0x1A,

2
src/drivers/imu/invensense/mpu9250/MPU9250.cpp

@ -624,7 +624,7 @@ void MPU9250::UpdateTemperature() @@ -624,7 +624,7 @@ void MPU9250::UpdateTemperature()
}
const int16_t TEMP_OUT = combine(temperature_buf[1], temperature_buf[2]);
const float TEMP_degC = ((TEMP_OUT - ROOM_TEMPERATURE_OFFSET) / TEMPERATURE_SENSITIVITY) + ROOM_TEMPERATURE_OFFSET;
const float TEMP_degC = (TEMP_OUT / TEMPERATURE_SENSITIVITY) + TEMPERATURE_OFFSET;
if (PX4_ISFINITE(TEMP_degC)) {
_px4_accel.set_temperature(TEMP_degC);

Loading…
Cancel
Save