环境:
ArduRover4.2.2方案
ChibIOS系统
pixhawk1(PX4-V2)硬件环境
更换方案:
使用MPU6000+ICM20689组合惯导替代原有的MPU6000+LSM303D+L3GD20方案
更换内容如下:
一、hwdef.dat中添加icm20689芯片
#(fmuv3)
SPIDEV mpu6000 SPI1 DEVID4 MPU_CS MODE3 2*MHZ 8*MHZ
SPIDEV icm20689 SPI1 DEVID1 GYRO_EXT_CS MODE3 4*MHZ 8*MHZ
SPIDEV lsm9ds0_g SPI1 DEVID1 GYRO_EXT_CS MODE3 11*MHZ 11*MHZ
SPIDEV lsm9ds0_am SPI1 DEVID2 ACCEL_EXT_CS MODE3 11*MHZ 11*MHZ
#(pixhawk)
IMU Invensense SPI:mpu6000 ROTATION_ROLL_180
IMU LSM9DS0 SPI:lsm9ds0_g SPI:lsm9ds0_am ROTATION_ROLL_180 ROTATION_ROLL_180_YAW_270 ROTATION_PITCH_180
IMU Invensense SPI:icm20689 ROTATION_NONE
我的MPU6000在背面,ICM20689在正面,所以mpu6000反转180度
LSM303D和L3GD20使用LSM9DS0驱动,保留原有方案
二、libraries/AP_BoardConfig/board_drivers.cpp添加ICM20689支持
1、添加芯片ID识别
#define MPUREG_WHOAMI 0x75
#define MPU_WHOAMI_MPU60X0 0x68
#define MPU_WHOAMI_MPU9250 0x71
#define MPU_WHOAMI_ICM20608 0xaf
#define MPU_WHOAMI_ICM20602 0x12
#define MPU_WHOAMI_ICM20689 0x98
2、 硬件类型选择中添加芯片识别
} else if ((spi_check_register("lsm9ds0_am", LSMREG_WHOAMI, LSM_WHOAMI_LSM303D) ||
spi_check_register("icm20689", MPUREG_WHOAMI, MPU_WHOAMI_ICM20689)) &&
(spi_check_register("mpu6000", MPUREG_WHOAMI, MPU_WHOAMI_MPU60X0) ||
spi_check_register("icm20608", MPUREG_WHOAMI, MPU_WHOAMI_ICM20608) ||
spi_check_register("icm20608", MPUREG_WHOAMI, MPU_WHOAMI_ICM20602) ||
spi_check_register("mpu9250", MPUREG_WHOAMI, MPU_WHOAMI_MPU9250))) {
// classic or upgraded Pixhawk1
state.board_type.set(PX4_BOARD_PIXHAWK);
hal.console->printf("Detected Pixhawk\n");
添加完成
注释:
APM中支持ICM20689芯片驱动,因此不需要另外添加,只需要在二1中添加一次芯片ID即可
这个版本APM通过惯导方案选择匹配硬件类型,因此需要在二2中添加新的惯导方案。