我不知道 - 如何使用Arduino IDE从MPU6000(位于APM 2.6板上)获取数据? - 它实际上是使用i2c作为传感器还是SPI?
我所知道的:
- 因为我拆开了这个案子并查看了部件名称,所以是MPU-6000
- 电路板和传感器工作,它与Mission Planner的设置完美配合
- 在检查MPU-6000的数据表时,6000和6050共用一些寄存器和地址用于R / W.
我尝试了什么:
- 了解了ArduPilot在库部分的源代码(特别是AP_IntertialSensor / AP_InertialSensor_MPU6000),但我似乎无法找到地址。以下是传感器初始化时的代码:
bool AP_InertialSensor_MPU6000::_init_sensor(void)
{
_spi = hal.spi->device(AP_HAL::SPIDevice_MPU6000);
_spi_sem = _spi->get_semaphore();
#ifdef MPU6000_DRDY_PIN
_drdy_pin = hal.gpio->channel(MPU6000_DRDY_PIN);
_drdy_pin->mode(HAL_GPIO_INPUT);
#endif
hal.scheduler->suspend_timer_procs();
uint8_t tries = 0;
do {
bool success = _hardware_init();
if (success) {
hal.scheduler->delay(5+2);
if (!_spi_sem->take(100)) {
return false;
}
if (_data_ready()) {
_spi_sem->give();
break;
} else {
return false;
}
_spi_sem->give();
}
if (tries++ > 5) {
hal.console->print_P(PSTR("failed to boot MPU6000 5 times"));
return false;
}
} while (1);
// grab the used instances
_gyro_instance = _imu.register_gyro();
_accel_instance = _imu.register_accel();
hal.scheduler->resume_timer_procs();
// start the timer process to read samples
hal.scheduler->register_timer_process(AP_HAL_MEMBERPROC(&AP_InertialSensor_MPU6000::_poll_data));
#if MPU6000_DEBUG
_dump_registers();
#endif
return true;
}
- 我还尝试了几个MPU-6050示例,库上的每个草图 - 一个I2C扫描器,扫描地址从8(十进制)到119(十进制)。只有1E才能显示(这是磁力计)。