你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F4-Discovery连接MPU9250【MD6.12 keil移植】 精华  

[复制链接]
watershade 发布时间:2015-8-8 14:46
阅读主题, 点击返回1楼
1 收藏 12 评论117 发布时间:2015-8-8 14:46
117个回答
motianlun1111 回答时间:2015-8-22 02:04:16
又重新看了一晚上,才慢慢屡清楚思路了,这个mpl 原来是6.12新增的东西,它是用来做9轴融合的,然后它也能有3轴融合,6轴融合,当然3, 6轴的融合用dmp自己就能完成了,此外mpl提供了很多校准和补偿的应用函数api,这个是很生猛的,还有很关键的一点,提供了校准数据如何保持和重新下载的功能,这些都是很厉害的,望有意的朋友一起学习分享,,
anny 回答时间:2015-8-22 08:17:50
起初在的测试是在IAR上测试的,但是个人更喜欢keil上的全局搜索功能,就将工程一直到keil,以便后续工程的迁移
这里有错字
watershade 回答时间:2015-8-22 12:38:21
anny 发表于 2015-8-22 08:17
起初在的测试是在IAR上测试的,但是个人更喜欢keil上的全局搜索功能,就将工程一直到keil,以便后续工程的 ...

谢谢,我就是个白字布袋。
党国特派员 回答时间:2015-8-22 14:59:40
没有任何问题。。。 null - 副本 - 副本 - 副本.png null - 副本 - 副本.png null - 副本 (3).png null.png null - 副本 - 副本 (2).png
Inc_brza 回答时间:2015-8-22 15:55:53
大师你好,请问有没有用SPI方式读过9250呢,IIC不是很难,关键是SPI,网上基本80%以上的人都没法用SPI读取磁力计,理所当然也没能运行他的DMP!
watershade 回答时间:2015-8-22 17:37:20
Inc_brza 发表于 2015-8-22 15:55
大师你好,请问有没有用SPI方式读过9250呢,IIC不是很难,关键是SPI,网上基本80%以上的人都没法用SPI读取 ...

如果是spi方式推荐你看看这里:http://hom.hackpad.com/SmartIMU-E9zzbSI7QyK。文件可以在这里下载:http://github.com/Hom-Wang/SmartIMU 我暂时没有试过它的算法。但是我看过他的调试记录,个人觉得,这朋友还是挺严谨的,应该可以读取。我可能忙完算法和测试之后,试试添加SPI。
但问题是I2C融合之后的更新的速率能够达到200hz这还不够吗?当然有时候有利用使用SPI的。
个人之见:SPI读取并不难,对于姿态传感器最难的是算法.


还有朋友,我才不是什么大师,我其实也只能算是beginner。我的帖子有问题你直接指正,谢谢、
Inc_brza 回答时间:2015-8-22 18:58:41
watershade 发表于 2015-8-22 17:37
如果是spi方式推荐你看看这里:http://hom.hackpad.com/SmartIMU-E9zzbSI7QyK。文件可以在这里下载:http ...

你好,这个我已经参考过了,同样没法读取磁力计的数据!
虽然I2C可以完成,但是如果有SPI的方式,我觉得是SPI更好,毕竟读取
速度比I2C要快。
200hz是可以,不过如果通过SPI来加快单次的通信速率就更好了!
motianlun1111 回答时间:2015-8-22 22:19:33
不知道这里有没有仔细看过代码的人, 捕获.JPG ,这里写的要是把偏移值写到off set寄存器里面去的话,要转化成+-1000dps的格式,


但是在代码里面看,也确实是转成了这种模式,
捕获2.JPG
这个是写入到off set 寄存器里面去,但是如果是把这个偏移值带入到dmp中去,也就是
dmp_set_gyro_bias(gyro_bias);dmp_set_accel_bias(accel_bias); 的时候,我看到的一个
别的代码是
int result;
        long gyro_bias[3], accel_bias[3];
        result = mpu_run_self_test(gyro_bias, accel_bias);
        if (result == 0x07)
        {
                /* Test passed. We can trust the gyro data here, so let's push it down to the DMP.*/         
                float gyro_sens;
                unsigned short accel_sens;
                mpu_get_gyro_sens(&gyro_sens);   
                                                   
                gyro_bias[0] = (long)(gyro_bias[0] * gyro_sens);
                gyro_bias[1] = (long)(gyro_bias[1] * gyro_sens);
                gyro_bias[2] = (long)(gyro_bias[2] * gyro_sens);
                dmp_set_gyro_bias(gyro_bias);   
                mpu_get_accel_sens(&accel_sens);
                accel_bias[0] *= accel_sens;
                accel_bias[1] *= accel_sens;
                accel_bias[2] *= accel_sens;
                dmp_set_accel_bias(accel_bias);

                return 0;
        }
        else
                return 1;

我比较愚笨,我反复比较了这个函数,在mpu_run_self_test(gyro_bias, accel_bias); 中获得的gyro_bias, accel_bias是q16格式的,然后那个
dmp_set_gyro_bias(gyro_bias);dmp_set_accel_bias(accel_bias); 要求输入的参数也是q16,而且我实在想不明白那里获得偏移的时候,获得的q16格式的数,乘以一个范围值做什么用,费解这里,,还是说人家这里就是错的,,上面的代码是原子的开发板里面的一段截取的代码,我没用,给注释掉了,换成把偏移存进去off set寄存器里面了,
motianlun1111 回答时间:2015-8-22 23:22:40
刚刚试着如果用上面的代码,不乘以那个范围值,会发现z轴飘的很厉害,漂移了24度之多才会稳定住,这个又是为啥,但是上面的代码实在感觉不到理由来着,,,
watershade 回答时间:2015-8-23 01:41:07
Inc_brza 发表于 2015-8-22 18:58
你好,这个我已经参考过了,同样没法读取磁力计的数据!
虽然I2C可以完成,但是如果有SPI的方式,我觉得 ...

我没有测试过hom的方案,但是我记忆中他的硬件连接的的确是SPI。我又看了一般片子的PS,MPU9250内部集成的是AK8963。AK8963是I2C的,但是不知道Invensense在封装的时候是怎么处理的。
但是请看下面的图,它让我似乎明白了些东西。但还需要实验验证。 MPU9250结构.PNG

注意看图中ACC和Gyro与compass的区别。Got it?
实际上访问Acc和Gyro读取的直接是内部寄存器,用SPI和I2C都行。但是Compass却不是。它使用的I2C的辅助接口来连接的。在SPI当作通讯接口时,MPU内部实际上是通过I2C来和Compass通讯的。但是是否是自动的呐?读取的数据写到了哪里呐?必须再深入了解。今天有些累了,先这样。回头在看文档做实验。
ppprrr 回答时间:2015-8-24 11:39:04
楼主您好,我想问一下 使用matster i2c模式读取地磁数据 你有尝试过吗
ppprrr 回答时间:2015-8-24 12:10:40
Inc_brza 发表于 2015-8-22 18:58
你好,这个我已经参考过了,同样没法读取磁力计的数据!
虽然I2C可以完成,但是如果有SPI的方式,我觉得 ...

我也看过,官方库i2c是读取了地磁数据的,地磁数据是通过bypass模式,把ak8xxx磁力计直接当作另一个器件,通过它的地址来读取的,而使用spi模式 只能通过内部i2c matster模块来读取,我试过无数方法,从来没有读过正常值,唯一有一次只能读到了ID号,其他数据都不行
watershade 回答时间:2015-8-24 13:49:22
priestyoyo 发表于 2015-8-24 12:10
我也看过,官方库i2c是读取了地磁数据的,地磁数据是通过bypass模式,把ak8xxx磁力计直接当作另一个器件 ...

那我回头试试,按道理SPI比I2C更容易读取。先读一下生数据试试。hom wang的就是通过SPI读取的。
ppprrr 回答时间:2015-8-24 15:13:23
watershade 发表于 2015-8-24 13:49
那我回头试试,按道理SPI比I2C更容易读取。先读一下生数据试试。hom wang的就是通过SPI读取的。 ...

我参考过他的做过一版PCB,因为这个问题没解决,我换用了MPU6500+HMC5983,后来陀螺仪和加表我改用了MAX21105,正在打样
watershade 回答时间:2015-8-24 22:31:52
priestyoyo 发表于 2015-8-24 15:13
我参考过他的做过一版PCB,因为这个问题没解决,我换用了MPU6500+HMC5983,后来陀螺仪和加表我改用了MAX21 ...

现在还是不清楚你遇到的具体是什么问题?是通过SPI不能读取原始数据吧? Hom Wang 提供的程序不能工作吗?
还是说你需要利用SPI读取原始数据后,再使用别的算法不能实现fusionn?

如果是SPI读取不了原始数据的话,这个周末我做一下试验。但是可以提供你一个方法,你先做一个UART转SPI的小程序。通过UART发送指令,然后由SPI把指令转发到传感器上。然后传感器通过SPI读回的指令再由UARTg返回。这样你就可以用串口控制程序来模拟SPI收发。这样你也可以一天一天的指令测试了。

还有你说的SPI读取不了地址,这样的话我觉得你的连线有没有问题?Hom Wang的板子采用的那种那种连接方式似乎很有创意,但是将板子固定上而且固定紧是个大问题。

我啰里啰唆这么多,请别烦。因为我有些搞不清状况,见谅!

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版