The MPU-9250/6500/9255 is a highly integrated 9-axis motion tracking device that combines a 3-axis gyroscope, a 3-axis accelerometer, and a 3-axis magnetometer in a single compact package. This component is widely used for applications requiring precise orientation, motion detection, and inertial measurements. Its small size, low power consumption, and high performance make it ideal for use in robotics, drones, mobile devices, gaming controllers, and wearable technology.
The MPU-9250/6500/9255 has 24 pins. Below is a summary of the key pins:
Pin Number | Pin Name | Description |
---|---|---|
1 | VDD | Power supply input (2.4V to 3.6V) |
2 | VDDIO | I/O voltage reference |
3 | GND | Ground |
4 | SCL | I²C clock line |
5 | SDA | I²C data line |
6 | CS | Chip select for SPI |
7 | INT | Interrupt output |
8 | FSYNC | Frame synchronization input |
9-24 | NC | Not connected or reserved for internal use |
Power Supply:
Communication Interface:
Interrupts:
Magnetometer:
Below is an example of how to interface the MPU-9250 with an Arduino UNO using the I²C protocol:
#include <Wire.h>
// MPU-9250 I2C address
#define MPU9250_ADDR 0x68
// Register addresses
#define PWR_MGMT_1 0x6B
#define ACCEL_XOUT_H 0x3B
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Start serial communication
// Wake up the MPU-9250
Wire.beginTransmission(MPU9250_ADDR);
Wire.write(PWR_MGMT_1); // Access power management register
Wire.write(0x00); // Set to zero to wake up the sensor
Wire.endTransmission();
}
void loop() {
int16_t accelX, accelY, accelZ;
// Request accelerometer data
Wire.beginTransmission(MPU9250_ADDR);
Wire.write(ACCEL_XOUT_H); // Start reading at ACCEL_XOUT_H
Wire.endTransmission(false);
Wire.requestFrom(MPU9250_ADDR, 6); // Request 6 bytes (X, Y, Z)
// Read accelerometer data
accelX = (Wire.read() << 8) | Wire.read();
accelY = (Wire.read() << 8) | Wire.read();
accelZ = (Wire.read() << 8) | Wire.read();
// Print accelerometer data
Serial.print("Accel X: "); Serial.print(accelX);
Serial.print(" | Accel Y: "); Serial.print(accelY);
Serial.print(" | Accel Z: "); Serial.println(accelZ);
delay(500); // Wait 500ms before next reading
}
No Communication with the Sensor:
Incorrect or No Data Output:
Device Overheating:
Q: Can the MPU-9250/6500/9255 be used with a 5V microcontroller?
A: Yes, but you must use a level shifter for the I²C or SPI lines to avoid damaging the sensor.
Q: How do I calibrate the sensor?
A: Calibration involves collecting raw data from the gyroscope, accelerometer, and magnetometer, then calculating offsets and scaling factors. Many libraries (e.g., MPU9250 library) include built-in calibration functions.
Q: What is the difference between the MPU-9250, MPU-6500, and MPU-9255?
A: The MPU-9250 and MPU-9255 include a magnetometer, while the MPU-6500 does not. The MPU-9255 has improved magnetometer performance compared to the MPU-9250.