MPU6050 是 InvenSense 推出的一款经典 6 轴惯性测量单元(IMU),内部集成了 3 轴加速度计 和 3 轴陀螺仪,并内置 DMP(Digital Motion Processor)。它通过 I2C 接口与主控通信,广泛应用于姿态感知、平衡车、无人机、机器人、体感控制等场景。
主要特性
- 3 轴加速度计(±2g / ±4g / ±8g / ±16g)
- 3 轴陀螺仪(±250 / ±500 / ±1000 / ±2000 °/s)
- 内置 16-bit ADC
- I2C 通信接口(地址 0x68 / 0x69)
- 支持 FIFO 数据缓存
- 支持低功耗模式
- 内置温度传感器
硬件连接
| MPU6050 | MCU |
|---|---|
| VCC | 3.3V(或 5V,视模块而定) |
| GND | GND |
| SCL | I2C SCL |
| SDA | I2C SDA |
| AD0 | GND(地址 0x68)/ VCC(地址 0x69) |
| INT | 可选,中断输入 |
初始化流程(推荐)
典型初始化步骤如下:
复位设备
i2c_write(MPU_ADDR, 0x6B, 0x80); // DEVICE_RESET = 1 delay_ms(100);唤醒设备并选择时钟源(推荐使用 Z 轴陀螺仪 PLL)
i2c_write(MPU_ADDR, 0x6B, 0x03); // CLKSEL = 3配置加速度计量程
i2c_write(MPU_ADDR, 0x1C, 0x00); // ±2g配置陀螺仪量程
i2c_write(MPU_ADDR, 0x1B, 0x00); // ±250 dps(可选)配置采样率、FIFO、中断等
原始数据读取
数据格式说明
MPU6050 的传感器数据均为 16 位有符号整数(补码),由高字节和低字节组成。
int16_t raw = (int16_t)((high << 8) | low);
加速度换算
以 Z 轴为例:
int16_t accel_z_raw = (ACCEL_ZOUT_H << 8) | ACCEL_ZOUT_L;
float accel_z_g = accel_z_raw / 16384.0f; // ±2g 量程
陀螺仪换算
int16_t gyro_x_raw = (GYRO_XOUT_H << 8) | GYRO_XOUT_L;
float gyro_x_dps = gyro_x_raw / 131.0f; // ±250 dps
温度换算
int16_t temp_raw = (TEMP_OUT_H << 8) | TEMP_OUT_L;
float temperature = temp_raw / 340.0f + 36.53f;
适用场景
- 姿态感知 / 姿态控制
- 平衡车 / 自平衡系统
- 机器人方向感知
- IMU 教学与算法验证