https://invensense.tdk.com/
https://invensense.tdk.com/products/motion-tracking/6-axis/mpu-6500/

资源说明

嵌入式运动驱动库

资源链接:https://download.csdn.net/download/u013564470/72124800
资源说明:

  • 硬件校准陀螺数据输出
  • MPU-6050/MPU-9150 运动中断支持
  • MPU-6500 运动唤醒支持
  • 可以从 6 轴四元数中去除加速度偏差
  • DMP驱动

InvenSense 嵌入式运动跟踪器驱动程序 5.1.3 eMD 5.1.3
Invensense 嵌入式运动跟踪器驱动程序 6.12 eMD 6.12
运动链接用户手册 Motion Link User Manual Version 2.0

DataSheet 手册

资源链接: https://download.csdn.net/download/u013564470/72129581
资源说明:
TDK-InvenSense 运动传感器通用评估板 (UEVB) 用户指南

  • TDK-InvenSense Motion Sensor Universal Evaluation Board (UEVB) User Guide
  • AN-IVS-0001EVB-00

MPU-6500 寄存器映射和描述修订版 2.1
开发时用的IC为MPU6500,需要其他版本的官网下载即可。

  • MPU-6500 Register Map and Descriptions Revision 2.1
  • RM-MPU-6500A-00
    Motion Sensors Introduction

MPU-6500 产品规格修订版 1.3

  • MPU-6500 Product Specification Revision 1.3

运动传感器介绍
主要介绍四元数的计算

  • Motion Sensors Introduction

另外有3个MPU系列手册的中文翻译,英语不好童鞋的福音。

移植说明

核心文件

对于想要MPU驱动,以及DMP功能的童鞋来说。只需要移植如下目录:

eMPL
├── dmpKey.h
├── dmpmap.h
├── inv_mpu.c
├── inv_mpu_dmp_motion_driver.c
├── inv_mpu_dmp_motion_driver.h
└── inv_mpu.h

移植之后需要根据自己的主控修改对应接口,需要修改的接口如下:

i2c_write(unsigned char slave_addr, unsigned char reg_addr,unsigned char length, unsigned char const *data)
i2c_read(unsigned char slave_addr, unsigned char reg_addr,unsigned char length, unsigned char *data)
delay_ms(unsigned long num_ms)
get_ms(unsigned long *count)
reg_int_cb(void (*cb)(void), unsigned char port, unsigned char pin)
labs(long x)
fabsf(float x)
min(int a, int b)

DMP说明

启动流程

  1. 调用 dmp_load_motion_driver_firmware()。这会将 inv_mpu_dmp_motion_driver.h 中的 DMP 图像推送到 MPU 内存中。
  2. 将陀螺和加速度方向矩阵推到 DMP。
  3. 注册手势回调。别担心,除非启用了相应的功能,否则这些回调不会被执行。
  4. 调用 dmp_enable_feature(mask) 以启用不同的功能。
  5. 调用 dmp_set_fifo_rate(freq) 以选择 DMP 输出速率。
  6. 调用任何特定于功能的控制功能。

这里以移植到ESP32为例:

/******************** MPU DMP 初始化 ********************/
struct int_param_s int_param;
ESP_ERROR_CHECK(mpu_init(&int_param));
ESP_ERROR_CHECK(mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL));
ESP_ERROR_CHECK(mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL));                        //设置FIFO
ESP_ERROR_CHECK(mpu_set_sample_rate(200));                                                //设置采样率
ESP_ERROR_CHECK(dmp_load_motion_driver_firmware());                                       //加载dmp固件
ESP_ERROR_CHECK(dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation))); //设置陀螺仪方向
ESP_ERROR_CHECK(dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT | DMP_FEATURE_SEND_RAW_ACCEL | DMP_FEATURE_SEND_CAL_GYRO));
ESP_ERROR_CHECK(dmp_set_fifo_rate(200)); //设置DMP输出速率(最大不超过200Hz)

以下是 inv_mpu_dmp_motion_driver.c 中提供的 DMPimage 支持的功能的简短摘要:

DMP_FEATURE_LP_QUAT          :在 DMP 上以 200Hz 生成仅陀螺仪的四元数。以更高的速率集成陀螺仪数据可减少数值误差(与在 MCU 上以较低的采样率集成相比)。
DMP_FEATURE_6X_LP_QUAT       :在 DMP 上以 200Hz 生成陀螺仪/加速度四元数。不能与 DMP_FEATURE_LP_QUAT 结合使用。
DMP_FEATURE_TAP              :检测沿 X、Y 和 Z 轴的敲击。
DMP_FEATURE_ANDROID_ORIENT   :谷歌的屏幕旋转算法。在屏幕应旋转的四个方向触发事件。
DMP_FEATURE_GYRO_CAL         :八秒无运动后校准陀螺仪数据。
DMP_FEATURE_SEND_RAW_ACCEL   :将原始加速度计数据添加到 FIFO。
DMP_FEATURE_SEND_RAW_GYRO    :将原始陀螺数据添加到 FIFO。
DMP_FEATURE_SEND_CAL_GYRO    :将校准的陀螺仪数据添加到 FIFO。不能与 DMP_FEATURE_SEND_RAW_GYRO 结合使用。
最后修改:2021 年 12 月 29 日
男宾一位~ 欢迎下次再来!