diff --git a/sw/airborne/boards/bebop/actuators.c b/sw/airborne/boards/bebop/actuators.c index 526304f796..0f78c014c1 100644 --- a/sw/airborne/boards/bebop/actuators.c +++ b/sw/airborne/boards/bebop/actuators.c @@ -54,6 +54,8 @@ static void send_bebop_actuators(struct transport_tx *trans, struct link_device } #endif +#define ACTUATORS_BEBOP_I2C_TIMEOUT 1.f + uint32_t led_hw_values; struct ActuatorsBebop actuators_bebop; static uint8_t actuators_bebop_checksum(uint8_t *bytes, uint8_t size); @@ -79,7 +81,7 @@ void actuators_bebop_commit(void) { // Receive the status actuators_bebop.i2c_trans.buf[0] = ACTUATORS_BEBOP_GET_OBS_DATA; - i2c_blocking_transceive(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 1, 13, 0.5); + i2c_blocking_transceive(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 1, 13, ACTUATORS_BEBOP_I2C_TIMEOUT); // Update status electrical.vsupply = (float)(actuators_bebop.i2c_trans.buf[9] + (actuators_bebop.i2c_trans.buf[8] << 8)) / 1000.f; @@ -99,7 +101,7 @@ void actuators_bebop_commit(void) if (actuators_bebop.i2c_trans.buf[10] != 4 && actuators_bebop.i2c_trans.buf[10] != 2 && autopilot_get_motors_on()) { // Reset the error actuators_bebop.i2c_trans.buf[0] = ACTUATORS_BEBOP_CLEAR_ERROR; - i2c_blocking_transmit(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 1, 0.5); + i2c_blocking_transmit(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 1, ACTUATORS_BEBOP_I2C_TIMEOUT); // Start the motors actuators_bebop.i2c_trans.buf[0] = ACTUATORS_BEBOP_START_PROP; @@ -109,12 +111,12 @@ void actuators_bebop_commit(void) #else actuators_bebop.i2c_trans.buf[1] = 0b00000101; #endif - i2c_blocking_transmit(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 2, 0.5); + i2c_blocking_transmit(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 2, ACTUATORS_BEBOP_I2C_TIMEOUT); } // Stop the motors else if (actuators_bebop.i2c_trans.buf[10] == 4 && !autopilot_get_motors_on()) { actuators_bebop.i2c_trans.buf[0] = ACTUATORS_BEBOP_STOP_PROP; - i2c_blocking_transmit(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 1, 0.5); + i2c_blocking_transmit(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 1, ACTUATORS_BEBOP_I2C_TIMEOUT); } else if (actuators_bebop.i2c_trans.buf[10] == 4 && autopilot_get_motors_on()) { // Send the commands actuators_bebop.i2c_trans.buf[0] = ACTUATORS_BEBOP_SET_REF_SPEED; @@ -131,18 +133,18 @@ void actuators_bebop_commit(void) #pragma GCC diagnostic ignored "-Wcast-qual" actuators_bebop.i2c_trans.buf[10] = actuators_bebop_checksum((uint8_t *)actuators_bebop.i2c_trans.buf, 9); #pragma GCC diagnostic pop - i2c_blocking_transmit(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 11, 0.5); + i2c_blocking_transmit(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 11, ACTUATORS_BEBOP_I2C_TIMEOUT); } // Update the LEDs if (actuators_bebop.led != (led_hw_values & 0x3)) { actuators_bebop.i2c_trans.buf[0] = ACTUATORS_BEBOP_TOGGLE_GPIO; actuators_bebop.i2c_trans.buf[1] = (led_hw_values & 0x3); - i2c_blocking_transmit(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 2, 0.5); + i2c_blocking_transmit(&i2c1, &actuators_bebop.i2c_trans, actuators_bebop.i2c_trans.slave_addr, 2, ACTUATORS_BEBOP_I2C_TIMEOUT); actuators_bebop.led = led_hw_values & 0x3; } - + // Send ABI message struct act_feedback_t feedback[4]; for (int i=0;i<4;i++) { diff --git a/sw/airborne/boards/disco/actuators.c b/sw/airborne/boards/disco/actuators.c index 1e973c4ab3..642979050a 100644 --- a/sw/airborne/boards/disco/actuators.c +++ b/sw/airborne/boards/disco/actuators.c @@ -45,6 +45,8 @@ #warning "Disco actuators require a " #endif +#define ACTUATORS_DISCO_I2C_TIMEOUT 1.f + /** * private observation structure */ @@ -119,7 +121,7 @@ void actuators_disco_commit(void) // Receive the status actuators_disco.i2c_trans.buf[0] = ACTUATORS_DISCO_GET_OBS_DATA; - i2c_blocking_transceive(&i2c1, &actuators_disco.i2c_trans, actuators_disco.i2c_trans.slave_addr, 1, sizeof(obs_data), 0.5); + i2c_blocking_transceive(&i2c1, &actuators_disco.i2c_trans, actuators_disco.i2c_trans.slave_addr, 1, sizeof(obs_data), ACTUATORS_DISCO_I2C_TIMEOUT); // copy data from buffer #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wcast-qual" @@ -149,17 +151,17 @@ void actuators_disco_commit(void) actuators_disco.motor_rpm > DISCO_BLDC_START_MOTOR_THRESHOLD) { // Reset the error actuators_disco.i2c_trans.buf[0] = ACTUATORS_DISCO_CLEAR_ERROR; - i2c_blocking_transmit(&i2c1, &actuators_disco.i2c_trans, actuators_disco.i2c_trans.slave_addr, 1, 0.5); + i2c_blocking_transmit(&i2c1, &actuators_disco.i2c_trans, actuators_disco.i2c_trans.slave_addr, 1, ACTUATORS_DISCO_I2C_TIMEOUT); // Start the motors actuators_disco.i2c_trans.buf[0] = ACTUATORS_DISCO_START_PROP; - i2c_blocking_transmit(&i2c1, &actuators_disco.i2c_trans, actuators_disco.i2c_trans.slave_addr, 1, 0.5); + i2c_blocking_transmit(&i2c1, &actuators_disco.i2c_trans, actuators_disco.i2c_trans.slave_addr, 1, ACTUATORS_DISCO_I2C_TIMEOUT); } // Stop the motors else if ((bldc_status == DISCO_BLDC_STATUS_RUNNING || bldc_status == DISCO_BLDC_STATUS_RAMPUP) && actuators_disco.motor_rpm < DISCO_BLDC_START_MOTOR_THRESHOLD) { actuators_disco.i2c_trans.buf[0] = ACTUATORS_DISCO_STOP_PROP; - i2c_blocking_transmit(&i2c1, &actuators_disco.i2c_trans, actuators_disco.i2c_trans.slave_addr, 1, 0.5); + i2c_blocking_transmit(&i2c1, &actuators_disco.i2c_trans, actuators_disco.i2c_trans.slave_addr, 1, ACTUATORS_DISCO_I2C_TIMEOUT); } else if (bldc_status == DISCO_BLDC_STATUS_RUNNING) { // Send the commands actuators_disco.i2c_trans.buf[0] = ACTUATORS_DISCO_SET_REF_SPEED; @@ -170,7 +172,7 @@ void actuators_disco_commit(void) #pragma GCC diagnostic ignored "-Wcast-qual" actuators_disco.i2c_trans.buf[4] = actuators_disco_checksum((uint8_t *)actuators_disco.i2c_trans.buf, 3); #pragma GCC diagnostic pop - i2c_blocking_transmit(&i2c1, &actuators_disco.i2c_trans, actuators_disco.i2c_trans.slave_addr, 11, 0.5); + i2c_blocking_transmit(&i2c1, &actuators_disco.i2c_trans, actuators_disco.i2c_trans.slave_addr, 11, ACTUATORS_DISCO_I2C_TIMEOUT); } // Send ABI message diff --git a/sw/airborne/modules/imu/imu_bebop.c b/sw/airborne/modules/imu/imu_bebop.c index 71a9c78fb8..138fb03fe3 100644 --- a/sw/airborne/modules/imu/imu_bebop.c +++ b/sw/airborne/modules/imu/imu_bebop.c @@ -50,7 +50,7 @@ PRINT_CONFIG_VAR(BEBOP_MPU_I2C_DEV) #define BEBOP_LOWPASS_FILTER MPU60X0_DLPF_42HZ #define BEBOP_SMPLRT_DIV 9 PRINT_CONFIG_MSG("Gyro/Accel output rate is 100Hz at 1kHz internal sampling") -#elif PERIODIC_FREQUENCY == 512 +#elif (PERIODIC_FREQUENCY == 512) || (PERIODIC_FREQUENCY == 500) /* Accelerometer: Bandwidth 260Hz, Delay 0ms * Gyroscope: Bandwidth 256Hz, Delay 0.98ms sampling 8kHz */ diff --git a/sw/airborne/modules/imu/imu_disco.c b/sw/airborne/modules/imu/imu_disco.c index 89b4125738..2e8e80f78c 100644 --- a/sw/airborne/modules/imu/imu_disco.c +++ b/sw/airborne/modules/imu/imu_disco.c @@ -49,7 +49,7 @@ PRINT_CONFIG_VAR(DISCO_MPU_I2C_DEV) #define DISCO_LOWPASS_FILTER MPU60X0_DLPF_42HZ #define DISCO_SMPLRT_DIV 9 PRINT_CONFIG_MSG("Gyro/Accel output rate is 100Hz at 1kHz internal sampling") -#elif PERIODIC_FREQUENCY == 512 +#elif (PERIODIC_FREQUENCY == 500) || (PERIODIC_FREQUENCY == 512) /* Accelerometer: Bandwidth 260Hz, Delay 0ms * Gyroscope: Bandwidth 256Hz, Delay 0.98ms sampling 8kHz */