MPU6050 DMP官方手册【翻译】

8 篇文章 0 订阅
5 篇文章 0 订阅

嵌入式运动驱动5.1.1教程

文件版-百度网盘

1.修订历史

2.目标应用

Motion Driver 是一款传感器驱动层程序,其配置简单,利用了InvenSense的运动传感设备的片上数字移动处理器(DMP)的能力。Motion Driver 是嵌入式运动应用软件的一个子集,可以方便地移植到复杂的MCU架构。本文档介绍了运动驱动库的实际应用。部分教程为兼容TI的MSP430嵌入式处理器而写,因此,推荐事先熟悉MSP430架构。MSP430仅仅是作为举例平台。Motion Driver可以很容易地移植到任何MCU。

3.使用需求

  1. Code Composer Studio 开发环境(仅用于编译MSP430例程)
  2. Motion Driver 源文件
  3. MotionFit开发板或相似硬件(仅举例)

4.Motion Driver简介

Motion Driver 由一套遵循ANSI标准C语言的API构成,这些API可用来配置与使用InvenSense 运动传感器的不同功能,包括DMP操作。本教程提供了一个样例工程,程序通过PC串口发送经加速度计和陀螺仪数据融合得到的四元数数据,上位机由python写就,可在屏幕上显示并旋转一个三维立方体。本驱动支持InvenSense的6轴和9轴设备。
本教程包含以下内容:
- 如何加载,配置,应用DMP功能
- MSP430的I2C驱动示例
- 陀螺仪和加速度计自测功能,基于硬件自测文档(自测的具体细节请参考产品寄存器文档)
- 加速度计校准及更新硬件寄存器
- 陀螺仪校准
- 配置低功耗加速度计运动中断
- 可以改变陀螺仪和加速度计的传感器输出数据速率(ODR)
- 可以选择FIFO中存储哪种数据

5.在Code Composer Studio中打开Motion Driver 工程

  1. 在file选单下选择import
  2. 选择现存的CCS eclipse工程
  3. 单击browse按钮选择Motion Driver文件夹
    选择文件夹
  4. 单击完成打开Motion Driver工程
    选择工程文件树
  5. 打开 simple_apps文件夹下motion_driver_test.c文件。此文件在本教程中将被视为“main”文件。Main文件包括如何配置Motion Driver的样例,并且每一行代码都提供了注释以帮助用户理解代码。

6.更详细地解释Motion Driver和功能说明

6.1 DMP

  1. DMP和DMP特性:DMP是InvenSense MPU(运动处理器)设备独有的硬件特性,它可以通过传感器数值计算四元数,执行设备校准,也包括注入计步器等针对特定应用的特性。DMP映像(固件)存储在MPU的非永久性存储器上,需要在每次芯片上电时更新到DMP内,以使能此功能。Motion Driver的DMP映像支持的特性包括:
    a.DMP_FEATURE_LP_QUAT:DMP以200Hz的频率根据陀螺仪的数据计算三轴四元数,低功耗。
    b.DMP_FEATURE_6X_LP_QUAT:DMP以200Hz的频率根据陀螺仪和加速度计的数据融合计算四元数并输出,低功耗。
    c.DMP_FEATURE_TAP:这是一个“轻敲”手势特性,可识别出轻敲事件并分辨其基本的特征,比如单击、双击,或者轻敲的方向。
    d.DMP_FEATURE_ANDROID_ORIENT:此功能是兼容谷歌Motion Driver设备显示方向的实现。此功能包括一个状态机,它计算显示方向。
    e.DMP_PEDOMETER:计步特性,一直使能,在MPU上电后即在DMP中运行。Motion Driver 库可以复位计步器步数值,查询步行时间,以及返回步数。为改善精度、避免误判,在更新步数前会有7步的延时。此特性随DMP的使能一直使能。
    f.DMP_FEATURE_GYRO_CAL:此特性将在每次设备静止超过8秒时,校准陀螺仪零偏。
    g.DMP_FEATURE_SEND_RAW_ACCEL:将加速度计的raw轴(偏航)的数据放入FIFO,此数据基于芯片坐标系。
    h.DMP_FEATURE_SEND_RAW_GYRO:将陀螺仪的raw轴(偏航)的数据放入FIFO,此数据基于芯片坐标系。
    i.DMP_FEATURE_SEND_CAL_GYRO:将陀螺仪的校准后的数据放入FIFO。不可与DMP_FEATURE_SEND_RAW_GYRO结合使用。输出不基于芯片frame,而是基于设备frame或者体frame。
  2. 加载并使能DMP特性的步骤:更新映像和初始化DMP特性的步骤已在Motion Driver库提供的参考应用工程里高亮。这些步骤包括:
    a.推送DMP映像到MPU内存:提供了dmp_load_motion_driver_firmware函数帮助实现此任务
    b.推送陀螺仪和加速度计的方向矩阵到DMP:可以发送方向矩阵到DMP来转换输出为参考板子或设备坐标系的输出。dmp_set_orientation () 函数用来更新方向矩阵。
    c.DMP回调函数:一些DMP特性注册回调函数向主程序传递警讯,这些回调函数在诸如方向准备、检测到轻触等DMP特性下触发。在Motion Driver里提供了一些函数作为例子,比如方向改变特性,将触发dmp_register_android_orient_cb(android_orient_cb);。注意注册一个回调函数并不意味着默认打开了该特性。
    d.使能DMP特性:提供了函数 dmp_enable_feature ();
    e.数据速率:FIFO速率定义了DMP的输出速率,可以通过函数 mpu_set_fifo_rate (input)更新。

6.2 与InvenSence设备通讯的I2C驱动

  1. Motion Driver库以源代码的方式提供了一个MSP430F5528平台的I2C驱动实例。使用msp430_i2c_writemsp430_i2c_read函数进行基本的数据读写, msp430_i2c_enablemsp430_i2c_disable 函数用以控制MSP430F5528的I2C通讯的使能和失能。这些函数需要的形参有从地址、寄存器地址、长度和数据。在 msp430_i2c.c文件中有更多详细的信息。

6.3陀螺仪和传感器自测(self-test)函数调用

MPU的陀螺仪和加速度计自测特性允许用户测试陀螺仪和加速度计的机械和电子部分。当自测激活,板上电路将“激励”相应的传感器。此激励将移动陀螺仪的测试单元一定距离,等效于科里奥利力(地球自偏转);模拟外部力施加在加速度计上。测试结果改变传感器的输出,映射在输出信号上。输出信号通常用于与自测寄存器比较,观测“自测响应”。“自测相应”(STR)定义如下:

SelfTest Response=Sensor Output with SelfTest Enable- Sensor Output with Selftest Disabled

(STR自测响应=自测使能时传感器的输出-自测失能时传感器的输出)
此自测响应与工厂设定的自测响应值比较,用于判定该部分是否通过了自测:

Change from Factory Trim of the Self-Test Response(%)=(Str-FT)/FT

Motion Driver 提供了 int mpu_run_self_test(long* gyro, long* accel) API,来执行陀螺仪和加速度计的自测。如果自测成功执行将返回0。从mpu_run_self_test获得的陀螺仪值应根据陀螺仪敏感度设置做相应的比例转换。陀螺仪敏感度参数可通过调用mpu_get_gyro_sens(float* sens)获得。按比例缩减陀螺仪和加速度计的16位有符号格式(Q16)的数据,存储最新获得的陀螺仪基准值。
执行加速度计自测用以确定加速度计功能正常,该功能通过在mpu_self_test()函数中调用另一个函数accelerate_self_test(accel,accel_st)实现。accel_st 参数参考标准加速度计基准值,该值可通过调用get_st_biases从MPU寄存器中获得。
motion_driver_test.c 中有关于run_self_test函数的更多细节。参考以下函数可获得更多信息:
- mpu_run_self_test
- get_st_biases
- accel_self_test

6.4 加速度计校准

将板子放在平坦表面上,保持静止,加速度计校准将通过对照当前加速度值(如有必要)更新基准值。加速度计校准执行的函数为accel_self_test(accel,accel_st),该函数包含于inv_mpu.c。该函数检索MPU寄存器获得加速度计的基准偏差(函数调用 get_st_biases返回基准偏差)和当前加速度计读取值,计算两值之差与 inv_mpu.ctest_s 结构体的一个实例所指定的最大、最小g值相比较。

const struct test_s test = { 
.gyro_sens      = 32768/250,     
.accel_sens     = 32768/16,     
.reg_rate_div   = 0,    /* 1kHz. */     
.reg_lpf        = 1,    /* 188Hz. */     
.reg_mpu_fsr    = 0,    /* 250dps. */     
.reg_accel_fsr  = 0x18, /* 16g. */     
.wait_ms        = 50,     
.packet_thresh  = 5,    /* 5% */     
.min_dps        = 10.f,     
.max_dps        = 105.f,     
.max_gyro_var   = 0.14f,     
.min_g          = 0.3f,     
.max_g          = 0.95f,     
.max_accel_var  = 0.14f}; 

调用mpu_set_accel_bias函数,更新MPU硬件寄存器中的加速度计标准偏移量。注意:陀螺仪偏移量更新到DMP存储器,加速度计偏移量更新到硬件寄存器。参考mpu_set_accel_bias获得更多细节。

6.5陀螺仪校准

DMP提供了一种基于设备不移动状态的方法来校准陀螺仪偏移量。此特性可通过选择DMP特性中的DMP_FEATURE_GYRO_CAL使能。当此特性使能,并且板子保持不移动超过8秒,陀螺仪将自动校准。

6.6低功耗加速度计运动中断

此段揭示了驱动中关于实现低功耗(LP)的加速度计中断模式的部分,可用于当无运动时休眠主进程直到检测到运动。函数
int mpu_lp_motion_interrupt (unsigned short thresh, unsigned char time, unsigned char lpa_freq) 配置LP 加速度中断模式的三个参数(在Embedded Motion Driver API文档中有进一步描述),包括阈值、时间和LPA频率。
在此模式下,设备将以固定的频率持续采样加速度计,直到检测到持续一段时间的高于阈值的信号。如果选择的时间周期比 Ipa_freq 定义的采样周期值小,LP加速度中断将在采集到高于阈值信号后的第一次采样时触发。参照产品规格文档(DS)的低功耗加速度中断章节可获得更多细节。

6.7能够改变传感器加速度计和陀螺仪的ODR

InvenSense MPU 提供了可编程的陀螺仪、加速度计数据输出速率范围(ODR)。该范围可通过写值到SMPLRT_DIV配置,陀螺仪的输出数据速率计算公式如下:

Sample Rate = Gyroscope Output Rate /(1+SMPLRT_DIV)

Motion Driver 提供了一个简单的方法配置陀螺仪的ODR——调用函数mpu_set_sample_rate。不过,当DMP打开,陀螺仪就预设为200Hz采样率,并不需要调用mpu_set_sample_rate。当DMP关闭,最大值可以设置为最高8Khz,取决于MPU设备特性。当DLPF失能(DLPF_CFG=0 or 7)最大陀螺仪输出速率为8Khz,当DLPF使能时为1Khz。最大加速度计输出速率为1Khz。当采样率高于1KHz时,加速度计的同一次采样数据可能会在FIFO、DMP和传感器寄存器中输出超过一次。

6.8能够通过调用函数选择填充到FIFO中的数据

提供了片内FIFO来队列化传感器寄存器值,降低了MCU读取速率的需求。只有加速度计和陀螺仪传感器数据可以被推到FIFO缓冲区。每个轴陀螺仪数据可以存储在独立FIFO(如果需要的话)。加速度计输出只能用于同时保存所有三个轴值。Motion Driver提供了函数int mpu_configure_fifo(unsigned char sensors) 来配置FIFO缓冲区。sensor的值包括如下标志: INV_X_GYRO, INV_Y_GYRO, INV_Z_GYRO, INV_XYZ_GYRO, INV_XYZ_ACCEL.

7.使用MotionFit SDK和Python脚本测试

  • 编译工程加载到SDK
  • 连接USB,指向.inf文件(core\driver\msp430\USB_eMPL*.inf)安装USB CDC驱动
  • 参考APPENDIX_A安装python
  • 获得SDK连接的串口号。关于获得串口号的帮助,参考APPENDIX_B
  • 打开命令行界面,指向 motion-driver-client.py 存储的文件夹,例如
    C:\MotionDriver\embedded_motiondriver-Rel-TI_MSP430F5528-MPU6050-V5_1_1-201212-14\simple_apps\msp430\motion-driver-client
  • 在命令行中输入字符motion-driver-client.py 32运行motion-driver-client.py
  • 32是步骤#4中获得的串口号,将其改变为你在步骤#4中获得的串口号(参见Appendix B)
  • 应用成功运行,显示如下窗口:
    运行成功窗口
  • Motion Driver提供了一个命令集,从PC发送指令来执行相应的任务,比如自测等。下面是命令列表,每个命令在发送到PC时应加前缀“inv”,例如命令“a”应为“inva”,焦点中的窗口将旋转方块。
    • a:触发传送加速度计值到控制台的状态
    • g: 触发传送陀螺仪值到控制台的状态
    • q:触发传送四元数值到控制台的状态
    • t: 运行自测
    • f: 触发DMP
    • p: 读取当前的计步值
    • x: 复位系统
    • v: 触发LP(低功耗)四元数
    • m: 测试运动中断
    • 1:如果DMP打开设置DMP_FIFO_rate为10Hz,如果DMP关闭则设置gyro_sample_rate 为10Hz
    • 2:如果DMP打开设置DMP_FIFO_rate为20Hz,如果DMP关闭则设置gyro_sample_rate 为20Hz
    • 3:分别为40Hz
    • 4:分别为50Hz
    • 5:分别为100Hz
    • 6:分别为200Hz
    • 7:重设计步器计数值和步行时间为0
    • 8:触发当DMP不打开的时候仅运行加速度计时
    • 9:触发当DMP不打开的时候仅运行陀螺仪
    • ,:设置硬件仅在姿态事件中断。此特性对于保持MCU睡眠,直到DMP检测到一次敲击或者方向事件很有用。
    • .: 设置硬件周期性中断。Motion Driver

8.通过Motion Driver获得罗盘数据

如果使用集成电子罗盘的InvenSense MPU-9150或者一个6轴MPU通过第二条I2C总线连接一个辅助的电子罗盘,motion driver 有能力从电子罗盘中拉取raw(偏航)数据。Motion driver 函数 mpu_set_sensors()可以用来配置电子罗盘,同样也可以用 INV_XYZ_COMPASS宏定义。当其配置好后,用函数mpu_set_conpass_sample_rate()设置电子罗盘采样率,最大100Hz。mpu_get_compass_reg()功能将允许获得芯片层面的电子罗盘数据。

9.罗盘融合和校准

本节提供关于如何集成和校准电子罗盘一般性指导和参考,以实现9轴传感器融合。Motion Driver 源代码不包括或支持在本节点出的任何电子罗盘校准或融合参考。本节讨论的电子罗盘校准和集成参考自TI和MEMSense提供的应用笔记和源代码。
磁场强度测量受地磁场和当地铁磁材料的影响。考虑理想情况下,磁场沿着硬件组件磁力仪应该形成一个球体,原点应该在(0,0,0)。然而,只是不考虑外部磁场影响的情况。如果外部影响来自于预设的磁场,或者“硬铁”,将会导致球体的原点偏移(),这可以通过地磁场数据类似基准偏移量校准的操作来校准。“软铁”效应是由于材料弯曲和扭曲了当地磁场,这将导致角度精度误差。为得到正确的电子罗盘值,软铁影响也应消除。
以下链接解释了罗盘指南针校准和集成并给出了源代码。此应用笔记详细解释了硬件如何使用。
- http://www.memsense.com/docs/MTD-0802_1.2_Magnetometer_Calibration.pdf
- http://www.ti.com/general/docs/lit/getliterature.tsp?literatureNumber=slaa518a&fileType=pdf

10.SPI驱动实现

11.附录

12.参考文档

[1] Embedded Motion Driver V5.1.1 APIs Specification, Doc# SW-EMD-REL-5.1.1



文章转载至:http://blog.csdn.net/ee_wang/article/details/48804715

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MPU6050是一款集成了三轴陀螺仪和三轴加速度计的MEMS传感器。DMP(数字运动处理)是MPU6050上的一个处理单元,旨在处理陀螺仪和加速度计数据,通过融合算法和滤波器产生更精确的姿态和运动跟踪数据。 MPU6050 DMP官方手册提供了详细的技术规格和DMP的使用说明,帮助开发者更好的进行项目开发。手册分为四部分,分别为概述,硬件规格,软件规格和性能参数. 其中概述部分介绍了MPU6050 DMP的基本原理、特点和应用领域。硬件规格部分介绍了MPU6050 DMP的器件参数、引脚定义、电气特性和封装形式。 软件规格部分是手册的重点,对MPU6050 DMP的使用方法、寄存器配置、FIFO缓存、 DMP的输出格式等进行了详细介绍。对于开发者来说,这部分内容对于如何驱动传感器获取数据以及如何利用DMP计算姿态具有非常重要的指导意义。 性能参数部分介绍了MPU6050 DMP的性能指标,包括采样率、零漂、非线性度和温度变化影响等等。开发者需要根据项目实际需求,参考这些指标对设备进行参数选择,并进行合理的软硬件设计,以达到良好的性能和稳定性。 总的来说,MPU6050 DMP官方手册为开发者提供了非常实用的技术资料和开发指南。相信如果能够充分利用手册中的内容,将有助于提高开发效率和项目的可靠性。 ### 回答2: MPU6050是一款集成三轴加速度计和三轴陀螺仪的传感器。DMP(数字运动处理器)是其内部的运动处理单元,可以进行运动姿态计算,并提供数据融合功能,可以将加速度计和陀螺仪的数据进行处理,得到更精确的姿态数据。 在MPU6050 DMP官方手册中,主要介绍了DMP的功能和配置方式。手册首先介绍了DMP的优势和适用场景,随后详细说明了其硬件和软件相关配置和初始化的方法。其中包括I2C通讯协议、传感器数据格式、DMP输出数据格式等,通过这些配置可以使DMP更好地适应不同的应用场景。手册还介绍了DMP处理数据的具体方法以及姿态计算算法,使用户更深入地理解DMP的运行过程和结果意义。 此外,手册也提供了丰富的代码示例和应用案例,帮助用户更快速地了解和使用MPU6050 DMP。同时,手册也涵盖了一些常见问题及解决方案,方便用户解决遇到的各种问题。 总的来说,MPU6050 DMP官方手册是一本详细而丰富的指南,对于想要深入了解和使用MPU6050 DMP的开发者和技术爱好者来说,是一份不可多得的宝藏。 ### 回答3: MPU6050是由英特尔公司推出的一款集成了三轴陀螺仪和三轴加速度计的微机电系统(MEMS)解决方案。MPU6050 DMP官方手册是一本指导用户如何使用MPU6050数字运动处理器(DMP)的详细手册,该手册共分为三个部分。 第一部分涵盖了MPU6050 DMP的缘由和基础知识。该部分主要介绍了数字运动处理器的概念、MPU6050微机电系统的硬件架构,还介绍了与MPU6050 DMP的配合必须遵守的一些规则和限制。 第二部分是技术参考,这一部分主要介绍了MPU6050 DMP的相关技术细节。其中包括DMP在运行过程中采用的算法、内存结构和数据格式等重要细节。在这一部分中,用户可以学习到如何使用MPU6050 DMP工具,以及如何自定义DMP算法和配置文件,满足不同应用场景的需求。 第三部分是使用手册。该部分对用户进行了具体的操作指导,包括如何通过I2C总线与MPU6050进行通信,如何加载MPU6050 DMP库,以及如何利用DMP数据进行姿态传感和运动跟踪。同时,用户可以从该部分中获取对常见问题的解答和技术支持。 总之,MPU6050 DMP官方手册是一本详细介绍MPU6050数字运动处理器的手册,同时提供丰富的技术参考和操作指导。同时,这本手册还通过提供完整的示例代码和常见问题解答,帮助用户更好地理解和应用MPU6050 DMP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值