Browse Source

mpu6000 use new PX4Accelerometer and PX4Gyroscope classes

sbg
Daniel Agar 6 years ago
parent
commit
d299d439c6
  1. 4
      src/drivers/imu/mpu6000/CMakeLists.txt
  2. 1081
      src/drivers/imu/mpu6000/mpu6000.cpp
  3. 56
      src/drivers/imu/mpu6000/mpu6000.h
  4. 3
      src/drivers/imu/mpu6000/mpu6000_i2c.cpp
  5. 25
      src/drivers/imu/mpu6000/mpu6000_spi.cpp

4
src/drivers/imu/mpu6000/CMakeLists.txt

@ -38,5 +38,7 @@ px4_add_module(
mpu6000.cpp mpu6000.cpp
mpu6000_i2c.cpp mpu6000_i2c.cpp
mpu6000_spi.cpp mpu6000_spi.cpp
DEPENDS
drivers_accelerometer
drivers_gyroscope
) )

1081
src/drivers/imu/mpu6000/mpu6000.cpp

File diff suppressed because it is too large Load Diff

56
src/drivers/imu/mpu6000/mpu6000.h

@ -45,41 +45,34 @@
# define USE_I2C # define USE_I2C
#endif #endif
enum MPU_DEVICE_TYPE {
MPU_DEVICE_TYPE_MPU6000 = 6000,
MPU_DEVICE_TYPE_ICM20602 = 20602,
MPU_DEVICE_TYPE_ICM20608 = 20608,
MPU_DEVICE_TYPE_ICM20689 = 20689
};
#define DIR_READ 0x80 #define DIR_READ 0x80
#define DIR_WRITE 0x00 #define DIR_WRITE 0x00
#define MPU_DEVICE_PATH_ACCEL "/dev/mpu6000_accel" #define MPU_DEVICE_PATH "/dev/mpu6000"
#define MPU_DEVICE_PATH_GYRO "/dev/mpu6000_gyro" #define MPU_DEVICE_PATH1 "/dev/mpu6000_1"
#define MPU_DEVICE_PATH_ACCEL1 "/dev/mpu6000_accel1" #define MPU_DEVICE_PATH_EXT "/dev/mpu6000_ext"
#define MPU_DEVICE_PATH_GYRO1 "/dev/mpu6000_gyro1" #define MPU_DEVICE_PATH_EXT1 "/dev/mpu6000_ext1"
#define MPU_DEVICE_PATH_ACCEL_EXT "/dev/mpu6000_accel_ext" #define MPU_DEVICE_PATH_EXT2 "/dev/mpu6000_ext2"
#define MPU_DEVICE_PATH_GYRO_EXT "/dev/mpu6000_gyro_ext"
#define MPU_DEVICE_PATH_ACCEL_EXT1 "/dev/mpu6000_accel_ext1"
#define MPU_DEVICE_PATH_GYRO_EXT1 "/dev/mpu6000_gyro_ext1"
#define MPU_DEVICE_PATH_ACCEL_EXT2 "/dev/mpu6000_accel_ext2"
#define MPU_DEVICE_PATH_GYRO_EXT2 "/dev/mpu6000_gyro_ext2"
#define ICM20602_DEVICE_PATH_ACCEL "/dev/icm20602_accel" #define ICM20602_DEVICE_PATH "/dev/icm20602"
#define ICM20602_DEVICE_PATH_GYRO "/dev/icm20602_gyro" #define ICM20602_DEVICE_PATH1 "/dev/icm20602_1"
#define ICM20602_DEVICE_PATH_ACCEL1 "/dev/icm20602_accel1" #define ICM20602_DEVICE_PATH_EXT "/dev/icm20602_ext"
#define ICM20602_DEVICE_PATH_GYRO1 "/dev/icm20602_gyro1" #define ICM20602_DEVICE_PATH_EXT1 "/dev/icm20602_ext1"
#define ICM20602_DEVICE_PATH_ACCEL_EXT "/dev/icm20602_accel_ext"
#define ICM20602_DEVICE_PATH_GYRO_EXT "/dev/icm20602_gyro_ext"
#define ICM20602_DEVICE_PATH_ACCEL_EXT1 "/dev/icm20602_accel_ext1"
#define ICM20602_DEVICE_PATH_GYRO_EXT1 "/dev/icm20602_gyro_ext1"
#define ICM20608_DEVICE_PATH_ACCEL "/dev/icm20608_accel" #define ICM20608_DEVICE_PATH "/dev/icm20608"
#define ICM20608_DEVICE_PATH_GYRO "/dev/icm20608_gyro" #define ICM20608_DEVICE_PATH1 "/dev/icm20608_1"
#define ICM20608_DEVICE_PATH_ACCEL1 "/dev/icm20608_accel1" #define ICM20608_DEVICE_PATH_EXT "/dev/icm20608_ext"
#define ICM20608_DEVICE_PATH_GYRO1 "/dev/icm20608_gyro1" #define ICM20608_DEVICE_PATH_EXT1 "/dev/icm20608_ext1"
#define ICM20608_DEVICE_PATH_ACCEL_EXT "/dev/icm20608_accel_ext"
#define ICM20608_DEVICE_PATH_GYRO_EXT "/dev/icm20608_gyro_ext"
#define ICM20608_DEVICE_PATH_ACCEL_EXT1 "/dev/icm20608_accel_ext1"
#define ICM20608_DEVICE_PATH_GYRO_EXT1 "/dev/icm20608_gyro_ext1"
#define ICM20689_DEVICE_PATH_ACCEL "/dev/icm20689_accel" #define ICM20689_DEVICE_PATH "/dev/icm20689"
#define ICM20689_DEVICE_PATH_GYRO "/dev/icm20689_gyro"
// MPU 6000 registers // MPU 6000 registers
#define MPUREG_WHOAMI 0x75 #define MPUREG_WHOAMI 0x75
@ -202,15 +195,10 @@
#define MPU6050_REV_D8 0x28 // TODO:Need verification #define MPU6050_REV_D8 0x28 // TODO:Need verification
#define MPU6000_ACCEL_DEFAULT_RANGE_G 16 #define MPU6000_ACCEL_DEFAULT_RANGE_G 16
#define MPU6000_ACCEL_DEFAULT_RATE 1000
#define MPU6000_ACCEL_MAX_OUTPUT_RATE 280
#define MPU6000_ACCEL_DEFAULT_DRIVER_FILTER_FREQ 30
#define MPU6000_GYRO_DEFAULT_RANGE_G 8 #define MPU6000_GYRO_DEFAULT_RANGE_G 8
#define MPU6000_GYRO_DEFAULT_RATE 1000 #define MPU6000_GYRO_DEFAULT_RATE 1000
/* rates need to be the same between accel and gyro */
#define MPU6000_GYRO_MAX_OUTPUT_RATE MPU6000_ACCEL_MAX_OUTPUT_RATE
#define MPU6000_GYRO_DEFAULT_DRIVER_FILTER_FREQ 30
#define MPU6000_DEFAULT_ONCHIP_FILTER_FREQ 98 #define MPU6000_DEFAULT_ONCHIP_FILTER_FREQ 98

3
src/drivers/imu/mpu6000/mpu6000_i2c.cpp

@ -76,7 +76,6 @@ MPU6000_I2C::MPU6000_I2C(int bus, int device_type) :
I2C("MPU6000_I2C", nullptr, bus, PX4_I2C_MPU6050_ADDR, 400000), I2C("MPU6000_I2C", nullptr, bus, PX4_I2C_MPU6050_ADDR, 400000),
_device_type(device_type) _device_type(device_type)
{ {
_device_id.devid_s.devtype = DRV_ACC_DEVTYPE_MPU6000;
} }
int int
@ -112,7 +111,7 @@ int
MPU6000_I2C::probe() MPU6000_I2C::probe()
{ {
uint8_t whoami = 0; uint8_t whoami = 0;
uint8_t expected = _device_type == 6000 ? MPU_WHOAMI_6000 : ICM_WHOAMI_20608; uint8_t expected = _device_type == MPU_DEVICE_TYPE_MPU6000 ? MPU_WHOAMI_6000 : ICM_WHOAMI_20608;
return (read(MPUREG_WHOAMI, &whoami, 1) > 0 && (whoami == expected)) ? 0 : -EIO; return (read(MPUREG_WHOAMI, &whoami, 1) > 0 && (whoami == expected)) ? 0 : -EIO;
} }

25
src/drivers/imu/mpu6000/mpu6000_spi.cpp

@ -114,19 +114,19 @@ MPU6000_SPI_interface(int bus, int device_type, bool external_bus)
switch (device_type) { switch (device_type) {
case 6000: case MPU_DEVICE_TYPE_MPU6000:
# if defined(PX4_SPIDEV_EXT_MPU) # if defined(PX4_SPIDEV_EXT_MPU)
cs = PX4_SPIDEV_EXT_MPU; cs = PX4_SPIDEV_EXT_MPU;
# endif # endif
break; break;
case 20602: case MPU_DEVICE_TYPE_ICM20602:
# if defined(PX4_SPIDEV_ICM_20602_EXT) # if defined(PX4_SPIDEV_ICM_20602_EXT)
cs = PX4_SPIDEV_ICM_20602_EXT; cs = PX4_SPIDEV_ICM_20602_EXT;
# endif # endif
break; break;
case 20608: case MPU_DEVICE_TYPE_ICM20608:
# if defined(PX4_SPIDEV_EXT_ICM) # if defined(PX4_SPIDEV_EXT_ICM)
cs = PX4_SPIDEV_EXT_ICM; cs = PX4_SPIDEV_EXT_ICM;
# elif defined(PX4_SPIDEV_ICM_20608_EXT) # elif defined(PX4_SPIDEV_ICM_20608_EXT)
@ -134,7 +134,7 @@ MPU6000_SPI_interface(int bus, int device_type, bool external_bus)
# endif # endif
break; break;
case 20689: case MPU_DEVICE_TYPE_ICM20689:
# if defined(PX4_SPIDEV_ICM_20689_EXT) # if defined(PX4_SPIDEV_ICM_20689_EXT)
cs = PX4_SPIDEV_ICM_20689_EXT; cs = PX4_SPIDEV_ICM_20689_EXT;
# endif # endif
@ -150,19 +150,19 @@ MPU6000_SPI_interface(int bus, int device_type, bool external_bus)
switch (device_type) { switch (device_type) {
case 6000: case MPU_DEVICE_TYPE_MPU6000:
#if defined(PX4_SPIDEV_MPU) #if defined(PX4_SPIDEV_MPU)
cs = PX4_SPIDEV_MPU; cs = PX4_SPIDEV_MPU;
#endif #endif
break; break;
case 20602: case MPU_DEVICE_TYPE_ICM20602:
#if defined(PX4_SPIDEV_ICM_20602) #if defined(PX4_SPIDEV_ICM_20602)
cs = PX4_SPIDEV_ICM_20602; cs = PX4_SPIDEV_ICM_20602;
#endif #endif
break; break;
case 20608: case MPU_DEVICE_TYPE_ICM20608:
#if defined(PX4_SPIDEV_ICM) #if defined(PX4_SPIDEV_ICM)
cs = PX4_SPIDEV_ICM; cs = PX4_SPIDEV_ICM;
#elif defined(PX4_SPIDEV_ICM_20608) #elif defined(PX4_SPIDEV_ICM_20608)
@ -170,7 +170,7 @@ MPU6000_SPI_interface(int bus, int device_type, bool external_bus)
#endif #endif
break; break;
case 20689: case MPU_DEVICE_TYPE_ICM20689:
# if defined(PX4_SPIDEV_ICM_20689) # if defined(PX4_SPIDEV_ICM_20689)
cs = PX4_SPIDEV_ICM_20689; cs = PX4_SPIDEV_ICM_20689;
# endif # endif
@ -191,7 +191,6 @@ MPU6000_SPI::MPU6000_SPI(int bus, uint32_t device, int device_type) :
SPI("MPU6000", nullptr, bus, device, SPIDEV_MODE3, MPU6000_LOW_SPI_BUS_SPEED), SPI("MPU6000", nullptr, bus, device, SPIDEV_MODE3, MPU6000_LOW_SPI_BUS_SPEED),
_device_type(device_type) _device_type(device_type)
{ {
_device_id.devid_s.devtype = DRV_ACC_DEVTYPE_MPU6000;
} }
void void
@ -270,21 +269,21 @@ MPU6000_SPI::probe()
switch (_device_type) { switch (_device_type) {
default: default:
case 6000: case MPU_DEVICE_TYPE_MPU6000:
_max_frequency = MPU6000_HIGH_SPI_BUS_SPEED; _max_frequency = MPU6000_HIGH_SPI_BUS_SPEED;
break; break;
case 20602: case MPU_DEVICE_TYPE_ICM20602:
expected = ICM_WHOAMI_20602; expected = ICM_WHOAMI_20602;
_max_frequency = ICM20602_HIGH_SPI_BUS_SPEED; _max_frequency = ICM20602_HIGH_SPI_BUS_SPEED;
break; break;
case 20608: case MPU_DEVICE_TYPE_ICM20608:
expected = ICM_WHOAMI_20608; expected = ICM_WHOAMI_20608;
_max_frequency = ICM20608_HIGH_SPI_BUS_SPEED; _max_frequency = ICM20608_HIGH_SPI_BUS_SPEED;
break; break;
case 20689: case MPU_DEVICE_TYPE_ICM20689:
expected = ICM_WHOAMI_20689; expected = ICM_WHOAMI_20689;
_max_frequency = ICM20689_HIGH_SPI_BUS_SPEED; _max_frequency = ICM20689_HIGH_SPI_BUS_SPEED;
break; break;

Loading…
Cancel
Save