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( @@ -38,5 +38,7 @@ px4_add_module(
mpu6000.cpp
mpu6000_i2c.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 @@ @@ -45,41 +45,34 @@
# define USE_I2C
#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_WRITE 0x00
#define MPU_DEVICE_PATH_ACCEL "/dev/mpu6000_accel"
#define MPU_DEVICE_PATH_GYRO "/dev/mpu6000_gyro"
#define MPU_DEVICE_PATH_ACCEL1 "/dev/mpu6000_accel1"
#define MPU_DEVICE_PATH_GYRO1 "/dev/mpu6000_gyro1"
#define MPU_DEVICE_PATH_ACCEL_EXT "/dev/mpu6000_accel_ext"
#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 MPU_DEVICE_PATH "/dev/mpu6000"
#define MPU_DEVICE_PATH1 "/dev/mpu6000_1"
#define MPU_DEVICE_PATH_EXT "/dev/mpu6000_ext"
#define MPU_DEVICE_PATH_EXT1 "/dev/mpu6000_ext1"
#define MPU_DEVICE_PATH_EXT2 "/dev/mpu6000_ext2"
#define ICM20602_DEVICE_PATH_ACCEL "/dev/icm20602_accel"
#define ICM20602_DEVICE_PATH_GYRO "/dev/icm20602_gyro"
#define ICM20602_DEVICE_PATH_ACCEL1 "/dev/icm20602_accel1"
#define ICM20602_DEVICE_PATH_GYRO1 "/dev/icm20602_gyro1"
#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 ICM20602_DEVICE_PATH "/dev/icm20602"
#define ICM20602_DEVICE_PATH1 "/dev/icm20602_1"
#define ICM20602_DEVICE_PATH_EXT "/dev/icm20602_ext"
#define ICM20602_DEVICE_PATH_EXT1 "/dev/icm20602_ext1"
#define ICM20608_DEVICE_PATH_ACCEL "/dev/icm20608_accel"
#define ICM20608_DEVICE_PATH_GYRO "/dev/icm20608_gyro"
#define ICM20608_DEVICE_PATH_ACCEL1 "/dev/icm20608_accel1"
#define ICM20608_DEVICE_PATH_GYRO1 "/dev/icm20608_gyro1"
#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 ICM20608_DEVICE_PATH "/dev/icm20608"
#define ICM20608_DEVICE_PATH1 "/dev/icm20608_1"
#define ICM20608_DEVICE_PATH_EXT "/dev/icm20608_ext"
#define ICM20608_DEVICE_PATH_EXT1 "/dev/icm20608_ext1"
#define ICM20689_DEVICE_PATH_ACCEL "/dev/icm20689_accel"
#define ICM20689_DEVICE_PATH_GYRO "/dev/icm20689_gyro"
#define ICM20689_DEVICE_PATH "/dev/icm20689"
// MPU 6000 registers
#define MPUREG_WHOAMI 0x75
@ -202,15 +195,10 @@ @@ -202,15 +195,10 @@
#define MPU6050_REV_D8 0x28 // TODO:Need verification
#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_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

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

@ -76,7 +76,6 @@ MPU6000_I2C::MPU6000_I2C(int bus, int device_type) : @@ -76,7 +76,6 @@ MPU6000_I2C::MPU6000_I2C(int bus, int device_type) :
I2C("MPU6000_I2C", nullptr, bus, PX4_I2C_MPU6050_ADDR, 400000),
_device_type(device_type)
{
_device_id.devid_s.devtype = DRV_ACC_DEVTYPE_MPU6000;
}
int
@ -112,7 +111,7 @@ int @@ -112,7 +111,7 @@ int
MPU6000_I2C::probe()
{
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;
}

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

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

Loading…
Cancel
Save