diff --git a/conf/modules/imu_drotek_10dof_v2.xml b/conf/modules/imu_drotek_10dof_v2.xml deleted file mode 100644 index deea39c78e..0000000000 --- a/conf/modules/imu_drotek_10dof_v2.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - Drotek 10DOF V2 IMU via I2C. - MPU60x0 via I2C. - HMC58xx via I2C. - - -
- - - - - - - -
-
- - i2c,imu_common - imu,mag - - - -
- -
- - - - - - - - - - - - - - - - - - - - - -
diff --git a/sw/airborne/modules/imu/imu_drotek_10dof_v2.c b/sw/airborne/modules/imu/imu_drotek_10dof_v2.c deleted file mode 100644 index d420e07098..0000000000 --- a/sw/airborne/modules/imu/imu_drotek_10dof_v2.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (C) 2013 Felix Ruess - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/** - * @file modules/imu/imu_drotek_10dof_v2.c - * - * Driver for the Drotek 10DOF V2 IMU. - * MPU6050 + HMC5883 + MS5611 - * Reading the baro is not part of the IMU driver. - * - * By default the axes orientation should be as printed on the pcb, - * meaning z-axis pointing down if ICs are facing down. - * The orientation can be switched so that the IMU can be mounted ICs facing up - * by defining IMU_DROTEK_2_ORIENTATION_IC_UP. - */ - -#include "modules/imu/imu.h" -#include "modules/core/abi.h" -#include "mcu_periph/i2c.h" - -#if !defined DROTEK_2_LOWPASS_FILTER && !defined DROTEK_2_SMPLRT_DIV -#if (PERIODIC_FREQUENCY == 60) || (PERIODIC_FREQUENCY == 120) -/* Accelerometer: Bandwidth 44Hz, Delay 4.9ms - * Gyroscope: Bandwidth 42Hz, Delay 4.8ms sampling 1kHz - */ -#define DROTEK_2_LOWPASS_FILTER MPU60X0_DLPF_42HZ -#define DROTEK_2_SMPLRT_DIV 9 -PRINT_CONFIG_MSG("Gyro/Accel output rate is 100Hz at 1kHz internal sampling") -#elif PERIODIC_FREQUENCY == 512 -/* Accelerometer: Bandwidth 260Hz, Delay 0ms - * Gyroscope: Bandwidth 256Hz, Delay 0.98ms sampling 8kHz - */ -#define DROTEK_2_LOWPASS_FILTER MPU60X0_DLPF_256HZ -#define DROTEK_2_SMPLRT_DIV 3 -PRINT_CONFIG_MSG("Gyro/Accel output rate is 2kHz at 8kHz internal sampling") -#endif -#endif -PRINT_CONFIG_VAR(DROTEK_2_SMPLRT_DIV) -PRINT_CONFIG_VAR(DROTEK_2_LOWPASS_FILTER) - -PRINT_CONFIG_VAR(DROTEK_2_GYRO_RANGE) -PRINT_CONFIG_VAR(DROTEK_2_ACCEL_RANGE) - -#ifndef DROTEK_2_MPU_I2C_ADDR -#define DROTEK_2_MPU_I2C_ADDR MPU60X0_ADDR_ALT -#endif -PRINT_CONFIG_VAR(DROTEK_2_MPU_I2C_ADDR) - -#ifndef DROTEK_2_HMC_I2C_ADDR -#define DROTEK_2_HMC_I2C_ADDR HMC58XX_ADDR -#endif -PRINT_CONFIG_VAR(DROTEK_2_HMC_I2C_ADDR) - - -struct ImuDrotek2 imu_drotek2; - -void imu_drotek2_init(void) -{ - /* MPU-60X0 */ - mpu60x0_i2c_init(&imu_drotek2.mpu, &(DROTEK_2_I2C_DEV), DROTEK_2_MPU_I2C_ADDR); - // change the default configuration - imu_drotek2.mpu.config.smplrt_div = DROTEK_2_SMPLRT_DIV; - imu_drotek2.mpu.config.dlpf_cfg = DROTEK_2_LOWPASS_FILTER; - imu_drotek2.mpu.config.gyro_range = DROTEK_2_GYRO_RANGE; - imu_drotek2.mpu.config.accel_range = DROTEK_2_ACCEL_RANGE; - - /* HMC5883 magnetometer */ - hmc58xx_init(&imu_drotek2.hmc, &(DROTEK_2_I2C_DEV), DROTEK_2_HMC_I2C_ADDR); - - /* mag is declared as slave to call the configure function, - * regardless if it is an actual MPU slave or passthrough - */ - imu_drotek2.mpu.config.nb_slaves = 1; - /* set callback function to configure mag */ - imu_drotek2.mpu.config.slaves[0].configure = &imu_drotek2_configure_mag_slave; - - // use hmc mag via passthrough - imu_drotek2.mpu.config.i2c_bypass = true; -} - -void imu_drotek2_periodic(void) -{ - // Start reading the latest gyroscope data - mpu60x0_i2c_periodic(&imu_drotek2.mpu); - - // Read HMC58XX at ~50Hz (main loop for rotorcraft: 512Hz) - if (imu_drotek2.mpu.config.initialized) { - RunOnceEvery(10, hmc58xx_read(&imu_drotek2.hmc)); - } -} - -void imu_drotek2_event(void) -{ - uint32_t now_ts = get_sys_time_usec(); - - // If the MPU6050 I2C transaction has succeeded: convert the data - mpu60x0_i2c_event(&imu_drotek2.mpu); - - if (imu_drotek2.mpu.data_available) { -#if IMU_DROTEK_2_ORIENTATION_IC_UP - /* change orientation, so if ICs face up, z-axis is down */ - imu.gyro_unscaled.p = imu_drotek2.mpu.data_rates.rates.p; - imu.gyro_unscaled.q = -imu_drotek2.mpu.data_rates.rates.q; - imu.gyro_unscaled.r = -imu_drotek2.mpu.data_rates.rates.r; - imu.accel_unscaled.x = imu_drotek2.mpu.data_accel.vect.x; - imu.accel_unscaled.y = -imu_drotek2.mpu.data_accel.vect.y; - imu.accel_unscaled.z = -imu_drotek2.mpu.data_accel.vect.z; -#else - /* default orientation as should be printed on the pcb, z-down, ICs down */ - RATES_COPY(imu.gyro_unscaled, imu_drotek2.mpu.data_rates.rates); - VECT3_COPY(imu.accel_unscaled, imu_drotek2.mpu.data_accel.vect); -#endif - - imu_drotek2.mpu.data_available = false; - imu_scale_gyro(&imu); - imu_scale_accel(&imu); - AbiSendMsgIMU_GYRO_INT32(IMU_DROTEK_ID, now_ts, &imu.gyro); - AbiSendMsgIMU_ACCEL_INT32(IMU_DROTEK_ID, now_ts, &imu.accel); - } - - /* HMC58XX event task */ - hmc58xx_event(&imu_drotek2.hmc); - if (imu_drotek2.hmc.data_available) { -#if IMU_DROTEK_2_ORIENTATION_IC_UP - imu.mag_unscaled.x = imu_drotek2.hmc.data.vect.x; - imu.mag_unscaled.y = -imu_drotek2.hmc.data.vect.y; - imu.mag_unscaled.z = -imu_drotek2.hmc.data.vect.z; -#else - VECT3_COPY(imu.mag_unscaled, imu_drotek2.hmc.data.vect); -#endif - imu_drotek2.hmc.data_available = false; - imu_scale_mag(&imu); - AbiSendMsgIMU_MAG_INT32(IMU_DROTEK_ID, now_ts, &imu.mag); - } -} - -/** callback function to configure hmc5883 mag - * @return TRUE if mag configuration finished - */ -bool imu_drotek2_configure_mag_slave(Mpu60x0ConfigSet mpu_set __attribute__((unused)), - void *mpu __attribute__((unused))) -{ - hmc58xx_start_configure(&imu_drotek2.hmc); - if (imu_drotek2.hmc.initialized) { - return true; - } else { - return false; - } -} diff --git a/sw/airborne/modules/imu/imu_drotek_10dof_v2.h b/sw/airborne/modules/imu/imu_drotek_10dof_v2.h deleted file mode 100644 index 418f4a39a2..0000000000 --- a/sw/airborne/modules/imu/imu_drotek_10dof_v2.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2013 Felix Ruess - * - * This file is part of paparazzi. - * - * paparazzi is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * paparazzi is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with paparazzi; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/** - * @file modules/imu/imu_drotek_10dof_v2.h - * - * Driver for the Drotek 10DOF V2 IMU. - * MPU6050 + HMC5883 + MS5611 - */ - -#ifndef IMU_DROTEK_10DOF_V2_H -#define IMU_DROTEK_10DOF_V2_H - -#include "std.h" -#include "generated/airframe.h" -#include "modules/imu/imu.h" - -#include "peripherals/mpu60x0_i2c.h" -#include "peripherals/hmc58xx.h" - -#ifndef DROTEK_2_GYRO_RANGE -#define DROTEK_2_GYRO_RANGE MPU60X0_GYRO_RANGE_1000 -#endif - -#ifndef DROTEK_2_ACCEL_RANGE -#define DROTEK_2_ACCEL_RANGE MPU60X0_ACCEL_RANGE_8G -#endif - -// Set default sensitivity based on range if needed -#if !defined IMU_GYRO_P_SENS & !defined IMU_GYRO_Q_SENS & !defined IMU_GYRO_R_SENS -#define IMU_GYRO_P_SENS MPU60X0_GYRO_SENS[DROTEK_2_GYRO_RANGE] -#define IMU_GYRO_P_SENS_NUM MPU60X0_GYRO_SENS_FRAC[DROTEK_2_GYRO_RANGE][0] -#define IMU_GYRO_P_SENS_DEN MPU60X0_GYRO_SENS_FRAC[DROTEK_2_GYRO_RANGE][1] -#define IMU_GYRO_Q_SENS MPU60X0_GYRO_SENS[DROTEK_2_GYRO_RANGE] -#define IMU_GYRO_Q_SENS_NUM MPU60X0_GYRO_SENS_FRAC[DROTEK_2_GYRO_RANGE][0] -#define IMU_GYRO_Q_SENS_DEN MPU60X0_GYRO_SENS_FRAC[DROTEK_2_GYRO_RANGE][1] -#define IMU_GYRO_R_SENS MPU60X0_GYRO_SENS[DROTEK_2_GYRO_RANGE] -#define IMU_GYRO_R_SENS_NUM MPU60X0_GYRO_SENS_FRAC[DROTEK_2_GYRO_RANGE][0] -#define IMU_GYRO_R_SENS_DEN MPU60X0_GYRO_SENS_FRAC[DROTEK_2_GYRO_RANGE][1] -#endif - -// Set default sensitivity based on range if needed -#if !defined IMU_ACCEL_X_SENS & !defined IMU_ACCEL_Y_SENS & !defined IMU_ACCEL_Z_SENS -#define IMU_ACCEL_X_SENS MPU60X0_ACCEL_SENS[DROTEK_2_ACCEL_RANGE] -#define IMU_ACCEL_X_SENS_NUM MPU60X0_ACCEL_SENS_FRAC[DROTEK_2_ACCEL_RANGE][0] -#define IMU_ACCEL_X_SENS_DEN MPU60X0_ACCEL_SENS_FRAC[DROTEK_2_ACCEL_RANGE][1] -#define IMU_ACCEL_Y_SENS MPU60X0_ACCEL_SENS[DROTEK_2_ACCEL_RANGE] -#define IMU_ACCEL_Y_SENS_NUM MPU60X0_ACCEL_SENS_FRAC[DROTEK_2_ACCEL_RANGE][0] -#define IMU_ACCEL_Y_SENS_DEN MPU60X0_ACCEL_SENS_FRAC[DROTEK_2_ACCEL_RANGE][1] -#define IMU_ACCEL_Z_SENS MPU60X0_ACCEL_SENS[DROTEK_2_ACCEL_RANGE] -#define IMU_ACCEL_Z_SENS_NUM MPU60X0_ACCEL_SENS_FRAC[DROTEK_2_ACCEL_RANGE][0] -#define IMU_ACCEL_Z_SENS_DEN MPU60X0_ACCEL_SENS_FRAC[DROTEK_2_ACCEL_RANGE][1] -#endif - - - -struct ImuDrotek2 { - struct Mpu60x0_I2c mpu; - struct Hmc58xx hmc; -}; - -extern struct ImuDrotek2 imu_drotek2; - -extern void imu_drotek2_init(void); -extern void imu_drotek2_periodic(void); -extern void imu_drotek2_event(void); -extern bool imu_drotek2_configure_mag_slave(Mpu60x0ConfigSet mpu_set, void *mpu); - -#endif /* IMU_DROTEK_10DOF_V2_H */