void imu_impl_init( void ) { ///////////////////////////////////////////////////////////////////// // MPU-60X0 mpu60x0_i2c_init(&imu_krooz.mpu, &(IMU_KROOZ_I2C_DEV), MPU60X0_ADDR); // change the default configuration imu_krooz.mpu.config.smplrt_div = KROOZ_SMPLRT_DIV; imu_krooz.mpu.config.dlpf_cfg = KROOZ_LOWPASS_FILTER; imu_krooz.mpu.config.gyro_range = KROOZ_GYRO_RANGE; imu_krooz.mpu.config.accel_range = KROOZ_ACCEL_RANGE; imu_krooz.mpu.config.drdy_int_enable = TRUE; hmc58xx_init(&imu_krooz.hmc, &(IMU_KROOZ_I2C_DEV), HMC58XX_ADDR); #if KROOZ_USE_MEDIAN_FILTER // Init median filters InitMedianFilterRatesInt(median_gyro); InitMedianFilterVect3Int(median_accel); InitMedianFilterVect3Int(median_mag); #endif RATES_ASSIGN(imu_krooz.rates_sum, 0, 0, 0); VECT3_ASSIGN(imu_krooz.accel_sum, 0, 0, 0); imu_krooz.meas_nb = 0; imu_krooz.gyr_valid = FALSE; imu_krooz.acc_valid = FALSE; imu_krooz.mag_valid = FALSE; imu_krooz_sd_arch_init(); }
/** * Navstik IMU initializtion of the MPU-60x0 and HMC58xx */ void imu_navstik_init(void) { /* MPU-60X0 */ mpu60x0_i2c_init(&imu_navstik.mpu, &(NAVSTIK_MPU_I2C_DEV), MPU60X0_ADDR_ALT); imu_navstik.mpu.config.smplrt_div = NAVSTIK_SMPLRT_DIV; imu_navstik.mpu.config.dlpf_cfg = NAVSTIK_LOWPASS_FILTER; imu_navstik.mpu.config.gyro_range = NAVSTIK_GYRO_RANGE; imu_navstik.mpu.config.accel_range = NAVSTIK_ACCEL_RANGE; /* HMC58XX */ hmc58xx_init(&imu_navstik.hmc, &(NAVSTIK_MAG_I2C_DEV), HMC58XX_ADDR); }
/** * Navstik IMU initializtion of the MPU-60x0 and HMC58xx */ void imu_impl_init(void) { /* MPU-60X0 */ mpu60x0_i2c_init(&imu_bebop.mpu, &(BEBOP_MPU_I2C_DEV), MPU60X0_ADDR); imu_bebop.mpu.config.smplrt_div = BEBOP_SMPLRT_DIV; imu_bebop.mpu.config.dlpf_cfg = BEBOP_LOWPASS_FILTER; imu_bebop.mpu.config.gyro_range = BEBOP_GYRO_RANGE; imu_bebop.mpu.config.accel_range = BEBOP_ACCEL_RANGE; /* AKM8963 */ ak8963_init(&imu_bebop.ak, &(BEBOP_MAG_I2C_DEV), AK8963_ADDR); }
void imu_impl_init(void) { ///////////////////////////////////////////////////////////////////// // MPU-60X0 mpu60x0_i2c_init(&imu_krooz.mpu, &(IMU_KROOZ_I2C_DEV), MPU60X0_ADDR); // change the default configuration imu_krooz.mpu.config.smplrt_div = KROOZ_SMPLRT_DIV; imu_krooz.mpu.config.dlpf_cfg = KROOZ_LOWPASS_FILTER; imu_krooz.mpu.config.gyro_range = KROOZ_GYRO_RANGE; imu_krooz.mpu.config.accel_range = KROOZ_ACCEL_RANGE; imu_krooz.mpu.config.drdy_int_enable = true; hmc58xx_init(&imu_krooz.hmc, &(IMU_KROOZ_I2C_DEV), HMC58XX_ADDR); // Init median filters #if IMU_KROOZ_USE_ACCEL_MEDIAN_FILTER InitMedianFilterVect3Int(median_accel); #endif InitMedianFilterVect3Int(median_mag); RATES_ASSIGN(imu_krooz.rates_sum, 0, 0, 0); VECT3_ASSIGN(imu_krooz.accel_sum, 0, 0, 0); imu_krooz.meas_nb = 0; imu_krooz.hmc_eoc = false; imu_krooz.mpu_eoc = false; imu_krooz.ad7689_trans.slave_idx = IMU_KROOZ_SPI_SLAVE_IDX; imu_krooz.ad7689_trans.select = SPISelectUnselect; imu_krooz.ad7689_trans.cpol = SPICpolIdleLow; imu_krooz.ad7689_trans.cpha = SPICphaEdge1; imu_krooz.ad7689_trans.dss = SPIDss8bit; imu_krooz.ad7689_trans.bitorder = SPIMSBFirst; imu_krooz.ad7689_trans.cdiv = SPIDiv16; imu_krooz.ad7689_trans.output_length = sizeof(imu_krooz.ad7689_spi_tx_buffer); imu_krooz.ad7689_trans.output_buf = (uint8_t *) imu_krooz.ad7689_spi_tx_buffer; imu_krooz.ad7689_trans.input_length = sizeof(imu_krooz.ad7689_spi_rx_buffer); imu_krooz.ad7689_trans.input_buf = (uint8_t *) imu_krooz.ad7689_spi_rx_buffer; imu_krooz.ad7689_trans.before_cb = NULL; imu_krooz.ad7689_trans.after_cb = NULL; axis_cnt = 0; axis_nb = 2; imu_krooz_sd_arch_init(); }
/** * Navstik IMU initializtion of the MPU-60x0 and HMC58xx */ void imu_bebop_init(void) { /* MPU-60X0 */ mpu60x0_i2c_init(&imu_bebop.mpu, &(BEBOP_MPU_I2C_DEV), MPU60X0_ADDR); imu_bebop.mpu.config.smplrt_div = BEBOP_SMPLRT_DIV; imu_bebop.mpu.config.dlpf_cfg = BEBOP_LOWPASS_FILTER; imu_bebop.mpu.config.gyro_range = BEBOP_GYRO_RANGE; imu_bebop.mpu.config.accel_range = BEBOP_ACCEL_RANGE; /* AKM8963 */ ak8963_init(&imu_bebop.ak, &(BEBOP_MAG_I2C_DEV), AK8963_ADDR); #if BEBOP_VERSION2 //the magnetometer of the bebop2 is located on the gps board, //which is under a slight angle struct FloatEulers imu_to_mag_eulers = {0.0, RadOfDeg(8.5), 0.0}; orientationSetEulers_f(&imu_to_mag_bebop, &imu_to_mag_eulers); #endif }
void imu_impl_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; }