TDK InvenSense MPU-6000 MPU-6050 Motion Registers

TDK InvenSense MPU-6000 MPU-6050 Motion Registers
Photo by SpaceX / Unsplash

MPU6050 Legacy Motion & Free Fall Detection Registers

Datasheet Revision History Notice: These registers (0x1D through 0x22, plus advanced bits in 0x69) 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 (29 decimal)
  • 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 (30 decimal)
  • 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 (31 decimal)
  • 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 (32 decimal)
  • 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 (33 decimal)
  • 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 (34 decimal)
  • 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 (105 decimal)
  • 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 ms
    • 01: 1 ms (Recommended setting for Motion/Free Fall stability)
    • 10: 2 ms
    • 11: 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 (56 decimal)
  • 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 to 1 to enable Free Fall interrupt generation.
  • MOT_EN (Bit 6): Set to 1 to enable Motion Detection interrupt generation.
  • ZMOT_EN (Bit 5): Set to 1 to enable Zero Motion Detection interrupt generation.

Hardware Initialization Flow Example

To enable Wake-on-Motion interrupts on hardware using direct register writes:

  1. Set Accelerometer Delay: Write 0x10 to 0x69 (MOT_DETECT_CTRL) to set a 1 ms power-up delay.
  2. Set Threshold: Write desired threshold value (e.g., 0x0A for ~0.32g) to 0x1F (MOT_THR).
  3. Set Duration: Write desired duration count (e.g., 0x01 for 1 ms) to 0x20 (MOT_DUR).
  4. Enable Motion Interrupt: Write 0x40 (Bit 6 set) to 0x38 (INT_ENABLE).