mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-24 07:09:48 +08:00
new InvenSense IMU drivers review temperature sensitivities and offsets
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user