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说明
启动流程
- 调用
dmp_load_motion_driver_firmware()
。这会将inv_mpu_dmp_motion_driver.h
中的 DMP 图像推送到 MPU 内存中。 - 将陀螺和加速度方向矩阵推到 DMP。
- 注册手势回调。别担心,除非启用了相应的功能,否则这些回调不会被执行。
- 调用
dmp_enable_feature(mask)
以启用不同的功能。 - 调用
dmp_set_fifo_rate(freq)
以选择 DMP 输出速率。 - 调用任何特定于功能的控制功能。
这里以移植到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 结合使用。