mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-31 18:47:21 +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
|
// 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_accel.set_temperature(temperature_C);
|
||||||
_px4_gyro.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 uint8_t WHOAMI = 0x12;
|
||||||
|
|
||||||
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
|
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 {
|
enum class Register : uint8_t {
|
||||||
CONFIG = 0x1A,
|
CONFIG = 0x1A,
|
||||||
|
|||||||
@@ -628,7 +628,7 @@ void ICM20608G::UpdateTemperature()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const int16_t TEMP_OUT = combine(temperature_buf[1], temperature_buf[2]);
|
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)) {
|
if (PX4_ISFINITE(TEMP_degC)) {
|
||||||
_px4_accel.set_temperature(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 uint8_t WHOAMI = 0xAF;
|
||||||
|
|
||||||
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
|
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 {
|
enum class Register : uint8_t {
|
||||||
CONFIG = 0x1A,
|
CONFIG = 0x1A,
|
||||||
|
|||||||
@@ -627,7 +627,7 @@ void ICM20689::UpdateTemperature()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const int16_t TEMP_OUT = combine(temperature_buf[1], temperature_buf[2]);
|
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)) {
|
if (PX4_ISFINITE(TEMP_degC)) {
|
||||||
_px4_accel.set_temperature(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 uint8_t WHOAMI = 0x98;
|
||||||
|
|
||||||
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
|
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 {
|
enum class Register : uint8_t {
|
||||||
CONFIG = 0x1A,
|
CONFIG = 0x1A,
|
||||||
|
|||||||
@@ -618,8 +618,8 @@ void ICM40609D::UpdateTemperature()
|
|||||||
|
|
||||||
const int16_t TEMP_DATA = combine(temperature_buf[1], temperature_buf[2]);
|
const int16_t TEMP_DATA = combine(temperature_buf[1], temperature_buf[2]);
|
||||||
|
|
||||||
// Temperature in Degrees Centigrade = (TEMP_DATA / 132.48) + 25
|
// Temperature in Degrees Centigrade
|
||||||
const float TEMP_degC = (TEMP_DATA / TEMPERATURE_SENSITIVITY) + ROOM_TEMPERATURE_OFFSET;
|
const float TEMP_degC = (TEMP_DATA / TEMPERATURE_SENSITIVITY) + TEMPERATURE_OFFSET;
|
||||||
|
|
||||||
if (PX4_ISFINITE(TEMP_degC)) {
|
if (PX4_ISFINITE(TEMP_degC)) {
|
||||||
_px4_accel.set_temperature(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 uint8_t WHOAMI = 0x3B;
|
||||||
|
|
||||||
static constexpr float TEMPERATURE_SENSITIVITY = 132.48f; // LSB/C
|
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
|
namespace Register
|
||||||
{
|
{
|
||||||
@@ -221,7 +221,6 @@ struct DATA {
|
|||||||
uint8_t timestamp_l;
|
uint8_t timestamp_l;
|
||||||
uint8_t timestamp_h;
|
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
|
// With FIFO_ACCEL_EN and FIFO_GYRO_EN header should be 8’b_0110_10xx
|
||||||
enum FIFO_HEADER_BIT : uint8_t {
|
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]);
|
const int16_t TEMP_DATA = combine(temperature_buf[1], temperature_buf[2]);
|
||||||
|
|
||||||
// Temperature in Degrees Centigrade = (TEMP_DATA / 132.48) + 25
|
// Temperature in Degrees Centigrade
|
||||||
const float TEMP_degC = (TEMP_DATA / TEMPERATURE_SENSITIVITY) + ROOM_TEMPERATURE_OFFSET;
|
const float TEMP_degC = (TEMP_DATA / TEMPERATURE_SENSITIVITY) + TEMPERATURE_OFFSET;
|
||||||
|
|
||||||
if (PX4_ISFINITE(TEMP_degC)) {
|
if (PX4_ISFINITE(TEMP_degC)) {
|
||||||
_px4_accel.set_temperature(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 uint8_t WHOAMI = 0x47;
|
||||||
|
|
||||||
static constexpr float TEMPERATURE_SENSITIVITY = 132.48f; // LSB/C
|
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
|
namespace Register
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -60,8 +60,8 @@ static constexpr uint8_t DIR_READ = 0x80;
|
|||||||
|
|
||||||
static constexpr uint8_t WHOAMI = 0x68;
|
static constexpr uint8_t WHOAMI = 0x68;
|
||||||
|
|
||||||
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
|
static constexpr float TEMPERATURE_SENSITIVITY = 340.f; // LSB/C
|
||||||
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
|
static constexpr float TEMPERATURE_OFFSET = 36.53f; // C
|
||||||
|
|
||||||
enum class Register : uint8_t {
|
enum class Register : uint8_t {
|
||||||
CONFIG = 0x1A,
|
CONFIG = 0x1A,
|
||||||
|
|||||||
@@ -567,7 +567,7 @@ void MPU6000::UpdateTemperature()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const int16_t TEMP_OUT = combine(temperature_buf[1], temperature_buf[2]);
|
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)) {
|
if (PX4_ISFINITE(TEMP_degC)) {
|
||||||
_px4_accel.set_temperature(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 uint8_t WHOAMI = 0x70;
|
||||||
|
|
||||||
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
|
static constexpr float TEMPERATURE_SENSITIVITY = 333.87f; // LSB/C
|
||||||
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
|
static constexpr float TEMPERATURE_OFFSET = 21.f; // C
|
||||||
|
|
||||||
enum class Register : uint8_t {
|
enum class Register : uint8_t {
|
||||||
CONFIG = 0x1A,
|
CONFIG = 0x1A,
|
||||||
|
|||||||
@@ -591,7 +591,7 @@ void MPU6500::UpdateTemperature()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const int16_t TEMP_OUT = combine(temperature_buf[1], temperature_buf[2]);
|
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)) {
|
if (PX4_ISFINITE(TEMP_degC)) {
|
||||||
_px4_accel.set_temperature(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 uint8_t WHOAMI = 0x71;
|
||||||
|
|
||||||
static constexpr float TEMPERATURE_SENSITIVITY = 326.8f; // LSB/C
|
static constexpr float TEMPERATURE_SENSITIVITY = 333.87f; // LSB/C
|
||||||
static constexpr float ROOM_TEMPERATURE_OFFSET = 25.f; // C
|
static constexpr float TEMPERATURE_OFFSET = 21.f; // C
|
||||||
|
|
||||||
enum class Register : uint8_t {
|
enum class Register : uint8_t {
|
||||||
CONFIG = 0x1A,
|
CONFIG = 0x1A,
|
||||||
|
|||||||
@@ -624,7 +624,7 @@ void MPU9250::UpdateTemperature()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const int16_t TEMP_OUT = combine(temperature_buf[1], temperature_buf[2]);
|
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)) {
|
if (PX4_ISFINITE(TEMP_degC)) {
|
||||||
_px4_accel.set_temperature(TEMP_degC);
|
_px4_accel.set_temperature(TEMP_degC);
|
||||||
|
|||||||
Reference in New Issue
Block a user