TDK InvenSense MPU-6000 MPU-6050 Motion Registers
MPU6050 Legacy Motion & Free Fall Detection Registers
Datasheet Revision History Notice: These registers (
0x1Dthrough0x22, plus advanced bits in0x69) are officially documented in Revision 3.4 of the MPU-6050 Register Map and Descriptions. In Revision 4.0 and later, InvenSense removed them from public documentation in favor of their proprietary Digital Motion Processor (DMP) software stack. However, the hardware registers remain fully functional on MPU-6050 silicon.
Register Map Overview (Addresses 29–34 / 0x1D–0x22)
| Address (Hex) | Address (Dec) | Register Name | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | Reset Value |
|---|---|---|---|---|---|---|---|---|---|---|---|
0x1D |
29 | FF_THR |
FF_THR[7] |
FF_THR[6] |
FF_THR[5] |
FF_THR[4] |
FF_THR[3] |
FF_THR[2] |
FF_THR[1] |
FF_THR[0] |
0x00 |
0x1E |
30 | FF_DUR |
FF_DUR[7] |
FF_DUR[6] |
FF_DUR[5] |
FF_DUR[4] |
FF_DUR[3] |
FF_DUR[2] |
FF_DUR[1] |
FF_DUR[0] |
0x00 |
0x1F |
31 | MOT_THR |
MOT_THR[7] |
MOT_THR[6] |
MOT_THR[5] |
MOT_THR[4] |
MOT_THR[3] |
MOT_THR[2] |
MOT_THR[1] |
MOT_THR[0] |
0x00 |
0x20 |
32 | MOT_DUR |
MOT_DUR[7] |
MOT_DUR[6] |
MOT_DUR[5] |
MOT_DUR[4] |
MOT_DUR[3] |
MOT_DUR[2] |
MOT_DUR[1] |
MOT_DUR[0] |
0x00 |
0x21 |
33 | ZRMOT_THR |
ZRMOT_THR[7] |
ZRMOT_THR[6] |
ZRMOT_THR[5] |
ZRMOT_THR[4] |
ZRMOT_THR[3] |
ZRMOT_THR[2] |
ZRMOT_THR[1] |
ZRMOT_THR[0] |
0x00 |
0x22 |
34 | ZRMOT_DUR |
ZRMOT_DUR[7] |
ZRMOT_DUR[6] |
ZRMOT_DUR[5] |
ZRMOT_DUR[4] |
ZRMOT_DUR[3] |
ZRMOT_DUR[2] |
ZRMOT_DUR[1] |
ZRMOT_DUR[0] |
0x00 |
Detailed Register Descriptions
1. Register 29 – Free Fall Detection Threshold (FF_THR)
- Address:
0x1D(29decimal) - Reset Value:
0x00 - Access: Read / Write
Description
Configures the threshold for Free Fall detection. A free fall condition is detected when the acceleration vector sum across all three axes (X, Y, Z) falls below this specified threshold (near 0g).
- Unit / Scaling: 1 LSB = 3 mg = 0.003g
- Range: 0 mg to 765 mg
- Example: To set a free fall detection threshold of 150 mg (0.15g), write
50(0x32) to this register (50 * 3 mg = 150 mg).
2. Register 30 – Free Fall Detection Duration (FF_DUR)
- Address:
0x1E(30decimal) - Reset Value:
0x00 - Access: Read / Write
Description
Configures the minimum duration required for a Free Fall event to be generated. The acceleration vector sum must continuously stay below FF_THR for the duration specified in this register before a Free Fall interrupt is triggered.
- Unit / Scaling: 1 LSB = 1 ms (at an internal accelerometer sample rate of 1 kHz)
- Example: Writing
30(0x1E) requires a sustained free fall state for 30 ms before triggering the interrupt.
3. Register 31 – Motion Detection Threshold (MOT_THR)
- Address:
0x1F(31decimal) - Reset Value:
0x00 - Access: Read / Write
Description
Configures the threshold value for hardware motion detection. If the measured absolute acceleration on any single axis (X, Y, or Z) exceeds this threshold, a motion event is registered.
- Unit / Scaling: 1 LSB = 32 mg = 0.032g
- Range: 0 mg to 8160 mg
- Example: To set a threshold of approximately 0.32g (320 mg), write
10(0x0A) to this register (10 * 32 mg = 320 mg).
4. Register 32 – Motion Detection Duration (MOT_DUR)
- Address:
0x20(32decimal) - Reset Value:
0x00 - Access: Read / Write
Description
Specifies the minimum duration that a motion signal must continuously exceed MOT_THR before triggering a motion interrupt. This acts as a hardware debounce filter to eliminate false triggers caused by vibration or transient noise.
- Unit / Scaling: 1 LSB = 1 ms (at an internal accelerometer sample rate of 1 kHz)
- Example: Writing
20(0x14) requires motion to persist for 20 ms continuously.
5. Register 33 – Zero Motion Detection Threshold (ZRMOT_THR)
- Address:
0x21(33decimal) - Reset Value:
0x00 - Access: Read / Write
Description
Configures the threshold value for detecting absolute stillness (no-motion state). If the absolute acceleration on all three axes remains below this threshold, the sensor registers a zero-motion condition.
- Unit / Scaling: 1 LSB = 4 mg = 0.004g
- Range: 0 mg to 1020 mg
- Example: Writing
25(0x19) sets a threshold of 100 mg (25 * 4 mg).
6. Register 34 – Zero Motion Detection Duration (ZRMOT_DUR)
- Address:
0x22(34decimal) - Reset Value:
0x00 - Access: Read / Write
Description
Defines the duration that the zero-motion state must be continuously maintained across all axes before triggering a zero-motion event.
- Unit / Scaling: 1 LSB = 64 ms
- Example: Writing
10(0x0A) requires the sensor to remain still for 640 ms (10 * 64 ms).
Control & Interrupt Setup (Registers 0x69 and 0x38)
To utilize hardware Motion and Free Fall events, specific control register bits must be set alongside threshold registers.
Register 105 – Motion Detection Control (MOT_DETECT_CTRL)
- Address:
0x69(105decimal) - Reset Value:
0x00 - Access: Read / Write
| Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|---|---|---|---|---|---|---|---|
| Reserved | Reserved | ACCEL_ON_DELAY[1] |
ACCEL_ON_DELAY[0] |
FF_COUNT[1] |
FF_COUNT[0] |
MOT_COUNT[1] |
MOT_COUNT[0] |
Bit Fields:
ACCEL_ON_DELAY(Bits 5:4): Configures the add-on power-on delay for the accelerometer after waking up.00: 0 ms01: 1 ms (Recommended setting for Motion/Free Fall stability)10: 2 ms11: 3 ms
FF_COUNT(Bits 3:2): Configures the decrement rate for the Free Fall duration counter when a threshold check fails.00: Reset counter to 0 immediately.01: Decrement by 1.10: Decrement by 2.11: Decrement by 4.
MOT_COUNT(Bits 1:0): Configures the decrement rate for the Motion duration counter when a threshold check fails.00: Reset counter to 0 immediately.01: Decrement by 1.10: Decrement by 2.11: Decrement by 4.
Register 56 – Interrupt Enable (INT_ENABLE)
- Address:
0x38(56decimal) - Reset Value:
0x00 - Access: Read / Write
| Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|---|---|---|---|---|---|---|---|
FF_EN |
MOT_EN |
ZMOT_EN |
FIFO_OFLOW_EN |
I2C_MST_INT_EN |
Reserved | Reserved | DATA_RDY_EN |
Relevant Event Bits:
FF_EN(Bit 7): Set to1to enable Free Fall interrupt generation.MOT_EN(Bit 6): Set to1to enable Motion Detection interrupt generation.ZMOT_EN(Bit 5): Set to1to enable Zero Motion Detection interrupt generation.
Hardware Initialization Flow Example
To enable Wake-on-Motion interrupts on hardware using direct register writes:
- Set Accelerometer Delay: Write
0x10to0x69(MOT_DETECT_CTRL) to set a 1 ms power-up delay. - Set Threshold: Write desired threshold value (e.g.,
0x0Afor ~0.32g) to0x1F(MOT_THR). - Set Duration: Write desired duration count (e.g.,
0x01for 1 ms) to0x20(MOT_DUR). - Enable Motion Interrupt: Write
0x40(Bit 6 set) to0x38(INT_ENABLE).