注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lb8820265的个人空间 https://home.eeworld.com.cn/space-uid-527961.html [收藏] [复制] [分享] [RSS]
日志

mpu9250 mpu6050 DMP SPI IIC学习

热度 1已有 42041 次阅读2015-3-16 22:50 | MPU9250, MPU6050, DMP, SPI, IIC

Mpu6050mpu9250这两个我都用过,区别为:mpu9250mpu6500AK8975两者的结合,而mpu6500mpu6050的区别是mpu6500支持SPI通信。而且寄存器几乎相同,mpu9250寄存器多了电子罗盘,所以 mpu6050的程序换上mpu9250也是完全可用的。但是有几个地方需要注意,mpu9250多了一个加速度配置寄存器用来单独配置加速度计的低通率。

       市面上很多陀螺仪加速度计,而mpu6050绝对是超值的一款,陀螺仪与加速度计集成在一个芯片上,而且芯片带DMP,可以直接得出四元素然后再转化为欧拉角。如果不用DMP通常的做法是用Z轴的加速度与Y轴的陀螺仪利用卡尔曼滤波然后得出Z轴的角度。两种方法都试过,比较如下:用DMP优点:不需要调卡尔曼参数,数据稳定准确。缺点:最短周期为5ms才能读一次数,且无法调。用卡尔曼滤波优点:读取数据周期短,数据手册上说1ms就可读一次新数据。缺点:需要调节卡尔曼参数。关于两者的运算复杂度我觉得差不多,DMP需要将四元数转化为欧拉角,有三角函数需要运算,而卡尔曼滤波运算复杂。所以对于需要频繁控制的对象,用DMP可能吃不消,5ms时间还是挺长的。

       Mpu6050数据的读取,这里先飞思卡尔的K60芯片,先是直接用I2c读取。这个简单。这里又存在一个问题了,用硬件I2C还是模拟,结果是我很惊讶的发现用模拟I2C的速度远远高于用硬件I2C,因为硬件I2C有一个等待回馈信号的过程,没有收到ACK就一直等着,而模拟I2C则不需要确定收到ACK,稍微执行几个nop就可以了。用硬件I2c要消耗掉我2ms时间,模拟的也要近1ms,要我说用哪个好,我说都不用,用mpu9250通过SPI读取,官方说SPI操作寄存器为1M,读取数据可为20M

然后是DMP数据的读取,这个官方是有例程的,然后还有许多大神也都有自己的DMP库,反正用官方的motion_driver库我是没弄出来,然后代码也相当复杂,因此我用的其他人的库然提取有用东西,自己弄成的一个库,十分小巧只有一个.h文件。而且库里面还有SPIIIC两种模式的切换,文件里面有详细的解释,十分方便。

运用这个库我成功的运用到K60msp430G2553两款芯片上,都实现了硬件SPIIIC的数据读取,也都十分准确,先是移植K60,这个十分方便,可是移植到msp430G2553中这个就出现了一些问题,首先是内存问题,这个可以通过在大数组前面添加const解决,可是还是RAM不够,这个不科学啊,以前用G2553来做显示那数组可比这个大多了,后来发现是函数asin出现问题,这个函数会占用大量的RAM,可以说整个G2553的内存都不够它调用一个asin函数的,没办法那就先不调用这个函数吧,这个函数是在将四元数化为欧拉角的时候用到的,而且只有一个欧拉角需要用到,没什么关系。要是能够自己写一个asin函数那是最好的。

然后还有一个地方需要主要,那就是在mpu芯片上电后需要延时几十毫秒,然后在给它初始化操作。

虚拟示波器下载javascript:;注意:首次使用将兼容性改为windows98

K60工程文件下载:https://download.eeworld.com.cn/detail/lb8820265/552856

Msp430G2553工程文件下载:https://download.eeworld.com.cn/detail/lb8820265/552857

发表评论 评论 (1 个评论)
回复 lihuaxu66 2015-4-7 19:44
谢谢额!!!!!!!!!!!!

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章