搜索
bottom↓
回复: 32

【求助】MPU9250用SPI无法读取AK8963传感器I的数据

[复制链接]

出0入0汤圆

发表于 2014-12-1 22:27:24 | 显示全部楼层 |阅读模式
        坛友们好,目前我正在使用9轴传感器MPU9250,目前可以读出加速度计和陀螺仪的数据,并能准确地读出Roll角和Pitch角,只剩Yaw数据一直漂移,经检索知道得用磁力计来校准Yaw角,所以配置读取AK8963的寄存器。代码均参考另一位台湾坛友,配置如下:
  1. {0x80, MPU6500_PWR_MGMT_1},     // Reset Device
  2.       {0x01, MPU6500_PWR_MGMT_1},     // Clock Source
  3.       {0x00, MPU6500_PWR_MGMT_2},     // Enable Acc & Gyro
  4.       {0x06, MPU6500_CONFIG},         // 5Hz
  5.       {0x18, MPU6500_GYRO_CONFIG},    // +-2000dps  1
  6.       {0x00, MPU6500_ACCEL_CONFIG},   // +-2G
  7.       {0x0E, MPU6500_ACCEL_CONFIG_2}, // Set Acc Data Rates 1k 5Hz
  8.       {0x30, MPU6500_INT_PIN_CFG},    //
  9.       {0x4D, MPU6500_I2C_MST_CTRL},   // I2C Speed 400 kHz
  10.       {0x20, MPU6500_USER_CTRL},      // Enable AUX
  11.       //Enable the MAG:
  12.       {0x8C,MPU6500_I2C_SLV0_ADDR},     //七位地址b000_1100
  13.       {AK8963_WIA,MPU6500_I2C_SLV0_REG},//读取AK8963的WIA
  14.       {0x81,MPU6500_I2C_SLV0_CTRL},     //开启从I2C读取
  15.       {0x01,MPU6500_I2C_MST_DELAY_CTRL}
复制代码

以上是所有的初始化代码,不知有哪里是配置错误的?有没有人知道这是什么回事,希望能得到你们的帮助,感激不尽。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2014-12-2 20:29:41 | 显示全部楼层
自己顶,有人知道答案吗?已经被其折腾两个星期了。

出0入0汤圆

 楼主| 发表于 2014-12-3 13:59:06 | 显示全部楼层
继续顶,有人知道解决方法吗?

出0入8汤圆

发表于 2014-12-20 23:37:16 | 显示全部楼层
楼主,请问你的磁力计SPI模式读出来没,需要如何配置?

出0入0汤圆

 楼主| 发表于 2014-12-21 16:49:48 | 显示全部楼层
Jmhh247 发表于 2014-12-20 23:37
楼主,请问你的磁力计SPI模式读出来没,需要如何配置?

配置方法如附件文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入8汤圆

发表于 2014-12-22 13:49:29 | 显示全部楼层
iseafish 发表于 2014-12-21 16:49
配置方法如附件文件。

好的,我参考参考,谢谢!

出0入0汤圆

发表于 2014-12-22 21:35:04 | 显示全部楼层
在github上找到的,楼主可以看看:
https://github.com/TauLabs/TauLa ... /pios_mpu9250_spi.c

出0入0汤圆

 楼主| 发表于 2014-12-23 12:06:16 | 显示全部楼层
dawanpi 发表于 2014-12-22 21:35
在github上找到的,楼主可以看看:
https://github.com/TauLabs/TauLabs/blob/next/flight/PiOS/Common/pio ...

谢谢,目前已经把数据读出,正在搞算法,有时间会参考一下这份代码。

出0入0汤圆

发表于 2014-12-23 12:28:43 | 显示全部楼层
iseafish 发表于 2014-12-23 12:06
谢谢,目前已经把数据读出,正在搞算法,有时间会参考一下这份代码。

就是用你之前上传的附件读出来的?

出0入0汤圆

 楼主| 发表于 2014-12-23 14:59:47 | 显示全部楼层
dawanpi 发表于 2014-12-23 12:28
就是用你之前上传的附件读出来的?

嗯,但磁力计有时候会读不出来,断电重新上电就可以了,目前这个细节问题先放下。

出0入0汤圆

发表于 2015-1-9 10:14:50 | 显示全部楼层
iseafish 发表于 2014-12-23 14:59
嗯,但磁力计有时候会读不出来,断电重新上电就可以了,目前这个细节问题先放下。 ...

楼主,你这个有时读不出磁力计ID的问题解决了吗?我使用了你共享的配置代码,只成功读出来过一次,掉电后上电又一直是0了,郁闷死了!求教。。。

出0入0汤圆

 楼主| 发表于 2015-1-10 00:18:37 | 显示全部楼层
kcdennis 发表于 2015-1-9 10:14
楼主,你这个有时读不出磁力计ID的问题解决了吗?我使用了你共享的配置代码,只成功读出来过一次,掉电后 ...

拔出来再插一次。

出0入0汤圆

发表于 2015-1-10 02:15:19 来自手机 | 显示全部楼层
尼玛,不懂就来问,解决了就没影了,建议封ID

出0入0汤圆

 楼主| 发表于 2015-1-10 15:26:09 | 显示全部楼层
相由心生 发表于 2015-1-10 02:15
尼玛,不懂就来问,解决了就没影了,建议封ID

你好,有什么问题都可以问我。拔出来再插一次就是我的方法。

出0入0汤圆

发表于 2015-1-11 05:49:54 | 显示全部楼层
iseafish 发表于 2015-1-10 15:26
你好,有什么问题都可以问我。拔出来再插一次就是我的方法。

sorry没看到....   
不过这方法也太....
算你狠....

出0入0汤圆

发表于 2015-1-11 05:55:03 | 显示全部楼层
iseafish 发表于 2015-1-10 15:26
你好,有什么问题都可以问我。拔出来再插一次就是我的方法。

是不是上电就读数据?   延时下试试. 延个1秒再说.... 还有就是配置完再延下.............哎.....

出0入0汤圆

 楼主| 发表于 2015-1-11 11:11:07 | 显示全部楼层
相由心生 发表于 2015-1-11 05:55
是不是上电就读数据?   延时下试试. 延个1秒再说.... 还有就是配置完再延下.............哎..... ...

MPU9250里面的MPU6500有硬件I2C,我认为配置完之后里面的I2C就会自行读取磁力计的数据,但I2C的速度比SPI慢,我测试过循环我的代码循环读数据时没问题的,热拔插得重新配置,否则也读不了。

出0入0汤圆

发表于 2015-1-15 14:29:23 | 显示全部楼层
iseafish 发表于 2015-1-10 00:18
拔出来再插一次。

这个问题解决了,我这边是初始化之前延时1分钟左右。但问题又来了,电子罗盘读出来的数据跳动的好厉害,标准位置放置的时候Y轴数据有从0-15之间跳动的,有点不解。用atan2(y,x)算出来的磁偏角也十分不准,跳变的厉害,再融合陀螺仪估计也不行。请问楼主是否也是这样或者您怎么算磁偏角的?

出0入0汤圆

 楼主| 发表于 2015-1-15 16:37:52 | 显示全部楼层
kcdennis 发表于 2015-1-15 14:29
这个问题解决了,我这边是初始化之前延时1分钟左右。但问题又来了,电子罗盘读出来的数据跳动的好厉害, ...

航向角融合我也没弄出来,现在用陀螺仪Z轴转动滤掉漂移换算成角度。航向角计算你可以了解一下椭圆拟合或者椭球拟合。

出0入0汤圆

发表于 2015-4-12 10:20:46 | 显示全部楼层

楼主,罗盘问题解决了吗,我这也是这情况,mpu9250刚开始罗盘能初始化成功,但复位几次后就读不出来了,需要断电后再上电才可以读写,这什么原因啊

出0入0汤圆

 楼主| 发表于 2015-4-14 22:36:01 | 显示全部楼层
1165530693 发表于 2015-4-12 10:20
楼主,罗盘问题解决了吗,我这也是这情况,mpu9250刚开始罗盘能初始化成功,但复位几次后就读不出来了,需 ...

嗯。每次读取要有一定时间间隔。

出0入0汤圆

发表于 2015-4-16 21:39:10 | 显示全部楼层
iseafish 发表于 2015-4-14 22:36
嗯。每次读取要有一定时间间隔。

已经成功了,不是间隔问题,楼主,我用示波器检查过了,是你的spi配置问题,
GPIO_SetBits(SPIx_CSM_GPIO_PORT,SPIx_SCK_PIN|SPIx_SDO_PIN|SPIx_SDI_PIN|SPIx_CSM_PIN);
  IMU_CSM_HIGH;
这两句注释掉,地磁就没有问题了,你高低电平搞反了

出0入0汤圆

发表于 2015-4-16 21:40:16 | 显示全部楼层
iseafish 发表于 2015-4-14 22:36
嗯。每次读取要有一定时间间隔。

已经成功了,不是间隔问题,楼主,我用示波器检查过了,是你的spi配置问题,
GPIO_SetBits(SPIx_CSM_GPIO_PORT,SPIx_SCK_PIN|SPIx_SDO_PIN|SPIx_SDI_PIN|SPIx_CSM_PIN);
  IMU_CSM_HIGH;
这两句注释掉,地磁就没有问题了,你高低电平搞反了

出0入0汤圆

发表于 2015-4-24 22:17:59 | 显示全部楼层
1165530693 发表于 2015-4-16 21:39
已经成功了,不是间隔问题,楼主,我用示波器检查过了,是你的spi配置问题,
GPIO_SetBits(SPIx_CSM_GPI ...

能不能上传个工程看看

出0入0汤圆

发表于 2015-12-29 16:08:06 | 显示全部楼层
学习了!!!!!

出0入0汤圆

发表于 2016-3-23 09:45:29 | 显示全部楼层
mark一下!

出0入0汤圆

发表于 2016-5-21 22:50:31 | 显示全部楼层
热插拔的问题到底是怎么解决啊

出0入0汤圆

发表于 2016-5-25 16:34:00 | 显示全部楼层
热插拔的问题到底是怎么解决啊

出0入0汤圆

发表于 2016-8-10 15:42:11 来自手机 | 显示全部楼层
1165530693 发表于 2015-4-16 21:40
已经成功了,不是间隔问题,楼主,我用示波器检查过了,是你的spi配置问题,
GPIO_SetBits(SPIx_CSM_GPI ...

能不能分享一下代码啊!

出0入0汤圆

发表于 2016-8-23 13:53:05 | 显示全部楼层
楼主,你9250磁力计读出数据了?

出0入0汤圆

 楼主| 发表于 2016-9-5 17:18:32 | 显示全部楼层
18852855253 发表于 2016-8-23 13:53
楼主,你9250磁力计读出数据了?

嗯。一年前的事情了,找一下评论。

出0入0汤圆

发表于 2016-10-2 18:25:59 | 显示全部楼层
iseafish 发表于 2016-9-5 17:18
嗯。一年前的事情了,找一下评论。

mark一下 过两天也开始调这个东东

出0入0汤圆

发表于 2016-10-4 15:46:41 | 显示全部楼层
学习mark一下哦,谢了.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-17 16:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表