arduPilot上的ArduPilot 2.6加速度计

时间:2018-06-19 05:20:39

标签: arduino accelerometer i2c

我不知道 - 如何使用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才能显示(这是磁力计)。

0 个答案:

没有答案