【翻译】MPU6050 DMP官方手册

您所在的位置:网站首页 Mpu6000中断 【翻译】MPU6050 DMP官方手册

【翻译】MPU6050 DMP官方手册

2023-08-15 12:22| 来源: 网络整理| 查看: 265

嵌入式运动驱动5.1.1教程

文件版-百度网盘

1.修订历史 2.目标应用

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

3.使用需求 Code Composer Studio 开发环境(仅用于编译MSP430例程)Motion Driver 源文件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 工程 在file选单下选择import选择现存的CCS eclipse工程单击browse按钮选择Motion Driver文件夹 选择文件夹单击完成打开Motion Driver工程 选择工程文件树打开 simple_apps文件夹下motion_driver_test.c文件。此文件在本教程中将被视为“main”文件。Main文件包括如何配置Motion Driver的样例,并且每一行代码都提供了注释以帮助用户理解代码。 6.更详细地解释Motion Driver和功能说明 6.1 DMP 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。加载并使能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驱动 Motion Driver库以源代码的方式提供了一个MSP430F5528平台的I2C驱动实例。使用msp430_i2c_write和 msp430_i2c_read函数进行基本的数据读写, msp430_i2c_enable和msp430_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.c中test_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: 触发DMPp: 读取当前的计步值x: 复位系统v: 触发LP(低功耗)四元数m: 测试运动中断1:如果DMP打开设置DMP_FIFO_rate为10Hz,如果DMP关闭则设置gyro_sample_rate 为10Hz2:如果DMP打开设置DMP_FIFO_rate为20Hz,如果DMP关闭则设置gyro_sample_rate 为20Hz3:分别为40Hz4:分别为50Hz5:分别为100Hz6:分别为200Hz7:重设计步器计数值和步行时间为08:触发当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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3