The ICM-20602 is a high-performance 6-axis motion tracking device that integrates a 3-axis gyroscope and a 3-axis accelerometer into a single compact package. This sensor is designed for applications requiring precise motion sensing and orientation detection. It is widely used in drones, smartphones, wearable devices, gaming controllers, and other systems where accurate motion tracking is essential.
The ICM-20602 offers low power consumption, high sensitivity, and a wide range of programmable features, making it suitable for both consumer and industrial applications. Its small form factor and robust design allow it to be easily integrated into space-constrained devices.
Parameter | Value |
---|---|
Gyroscope Range | ±250, ±500, ±1000, ±2000 dps |
Accelerometer Range | ±2g, ±4g, ±8g, ±16g |
Gyroscope Sensitivity | 16.4 LSB/dps (±2000 dps) |
Accelerometer Sensitivity | 16384 LSB/g (±2g) |
Operating Voltage | 1.71V to 3.6V |
Communication Interface | I²C (up to 400 kHz) / SPI (up to 10 MHz) |
Operating Temperature | -40°C to +85°C |
Package Size | 3 mm x 3 mm x 0.75 mm |
The ICM-20602 is typically available in a 16-pin LGA package. Below is the pin configuration:
Pin Number | Pin Name | Description |
---|---|---|
1 | VDD | Power supply input (1.71V to 3.6V) |
2 | VDDIO | I/O voltage reference |
3 | GND | Ground |
4 | FSYNC | Frame synchronization input |
5 | INT | Interrupt output |
6 | SCL/SCLK | I²C clock / SPI clock input |
7 | SDA/SDI | I²C data / SPI data input |
8 | SDO | SPI data output |
9 | nCS | SPI chip select (active low) |
10-16 | NC | No connection (leave unconnected) |
Below is an example of how to interface the ICM-20602 with an Arduino UNO using the I²C protocol:
#include <Wire.h>
// ICM-20602 I2C address (default is 0x68 when AD0 is low)
#define ICM20602_ADDR 0x68
// Register addresses
#define WHO_AM_I 0x75
#define PWR_MGMT_1 0x6B
#define ACCEL_XOUT_H 0x3B
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Wake up the ICM-20602
Wire.beginTransmission(ICM20602_ADDR);
Wire.write(PWR_MGMT_1); // Power management register
Wire.write(0x00); // Set to 0 to wake up the sensor
Wire.endTransmission();
// Verify communication by reading the WHO_AM_I register
Wire.beginTransmission(ICM20602_ADDR);
Wire.write(WHO_AM_I);
Wire.endTransmission();
Wire.requestFrom(ICM20602_ADDR, 1);
if (Wire.available()) {
byte whoAmI = Wire.read();
if (whoAmI == 0x12) { // Expected WHO_AM_I value for ICM-20602
Serial.println("ICM-20602 detected!");
} else {
Serial.print("Unexpected WHO_AM_I value: 0x");
Serial.println(whoAmI, HEX);
}
} else {
Serial.println("Failed to communicate with ICM-20602.");
}
}
void loop() {
// Read accelerometer data (X-axis high byte)
Wire.beginTransmission(ICM20602_ADDR);
Wire.write(ACCEL_XOUT_H);
Wire.endTransmission();
Wire.requestFrom(ICM20602_ADDR, 1);
if (Wire.available()) {
int16_t accelX = Wire.read() << 8; // Read high byte
accelX |= Wire.read(); // Read low byte
Serial.print("Accelerometer X: ");
Serial.println(accelX);
}
delay(500); // Delay for readability
}
0x12
value in the WHO_AM_I
check with the correct value if your specific ICM-20602 variant differs.No Communication with the Sensor:
Incorrect or No Data Output:
PWR_MGMT_1
).High Noise in Sensor Data:
Q: Can the ICM-20602 operate at 5V?
A: No, the maximum operating voltage for the ICM-20602 is 3.6V. Use a voltage regulator or level shifter if interfacing with a 5V system.
Q: How do I switch between I²C and SPI modes?
A: The ICM-20602 defaults to I²C mode. To use SPI, connect the nCS pin to the microcontroller and ensure it is pulled low during communication.
Q: What is the purpose of the FSYNC pin?
A: The FSYNC pin is used for frame synchronization in applications requiring precise timing, such as multi-sensor setups.
Q: How do I calibrate the sensor?
A: Perform a calibration routine to account for offsets and biases in the accelerometer and gyroscope. This can be done in software by averaging readings when the sensor is stationary.