搜索
bottom↓
回复: 23

如何把DMP和电子罗盘(AK8975)结合起来

[复制链接]

出0入0汤圆

发表于 2014-4-1 12:55:25 | 显示全部楼层 |阅读模式
我看官方资料说DMP固件里不包含对AK8975的算法,我想问一下大家是如何把AK8975的数据与DMP结合的。我用的是9150,我想既然是给了两传感器整合后的9轴硬件,应该有比较好的结合方法来算Yaw角,还请各位赐教一下!
拜谢了!

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

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

发表于 2014-4-1 20:49:35 | 显示全部楼层
你移植DMP的时候,会有对对磁罗盘的定义,但是好像只能是内置的,如果要自己的磁罗盘的话还得自己写算法吧

出0入0汤圆

 楼主| 发表于 2014-4-1 23:43:00 | 显示全部楼层
三人的羁绊 发表于 2014-4-1 20:49
你移植DMP的时候,会有对对磁罗盘的定义,但是好像只能是内置的,如果要自己的磁罗盘的话还得自己写算法吧 ...

我想用的就是内置在9150内的AK8975,我也在程序中把电子罗盘给打开了,但是输出的数据似乎没什么变化,所以想知道是否有人用DMP加载AK8975成功过。

出0入0汤圆

发表于 2014-4-2 14:01:24 | 显示全部楼层
hero_kai 发表于 2014-4-1 23:43
我想用的就是内置在9150内的AK8975,我也在程序中把电子罗盘给打开了,但是输出的数据似乎没什么变化,所 ...

你好,我用的也是9150,但是我没用DMP做姿态解算,用的AHRS这个算法融合三轴。
现在Pitch和Roll都很正常,但是Yaw有点问题,我初步确定是原始数据有些问题。
我可以读出ID(0x48),磁力计数据静时基本不变,动时变化明显。
高八位要么是0要么是255,低八位还比较正常,这样的话磁力计的数据不超过+ -256,但是量程是-4095---4095,这是不是不正常?
请问楼主你的是什么情况?

出0入0汤圆

 楼主| 发表于 2014-4-2 19:31:49 | 显示全部楼层
silence2455 发表于 2014-4-2 14:01
你好,我用的也是9150,但是我没用DMP做姿态解算,用的AHRS这个算法融合三轴。
现在Pitch和Roll都很正常 ...

我的情况是:
硬件9150,软件DMP
Pitch和Roll能够有读数,看上去显得正常(没细调过);Yaw也能够有读数,并且随着转动有变化,但是输出数据是每转一圈增加28左右,再转一圈增加到56左右,如果反转则减少28,我也不明白这28和360°之间是什么关系。
看了DMP的程序后,发现它并没有用到AK8975的数据,总感觉自己做的有什么地方是不对的,然后就到这里来求助了。
新的打算是准备用AHRS再算一遍。

出0入0汤圆

发表于 2014-4-2 19:34:57 | 显示全部楼层
hero_kai 发表于 2014-4-2 19:31
我的情况是:
硬件9150,软件DMP
Pitch和Roll能够有读数,看上去显得正常(没细调过);Yaw也能够有读数 ...

感谢楼主耐心回复。其实我只想请问你磁力计的原始数据是否正常,大概在哪个范围,旋转会有什么变化。。。
恳请赐教!!!

出0入0汤圆

 楼主| 发表于 2014-4-2 21:50:47 | 显示全部楼层
silence2455 发表于 2014-4-2 19:34
感谢楼主耐心回复。其实我只想请问你磁力计的原始数据是否正常,大概在哪个范围,旋转会有什么变化。。。 ...

原始数据是从fifo里获得的,但是在DMP中有一句“    /* Compass data isn't going into the FIFO. Stop trying. */”,所以我推断DMP里根本没用到电子罗盘的数据。

刚开始看AHRS,我还想向你请教一下,AHRSupdate的输入参数:float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz,这些都是怎么获得的?

还望赐教!

出0入0汤圆

发表于 2014-4-2 23:28:03 | 显示全部楼层
hero_kai 发表于 2014-4-2 21:50
原始数据是从fifo里获得的,但是在DMP中有一句“    /* Compass data isn't going into the FIFO. Stop t ...

依次就是陀螺仪,加速度计,磁力计的三轴数据。我现在就是纠结磁力计的原始数据

出0入0汤圆

 楼主| 发表于 2014-4-4 11:29:02 | 显示全部楼层
silence2455 发表于 2014-4-2 23:28
依次就是陀螺仪,加速度计,磁力计的三轴数据。我现在就是纠结磁力计的原始数据 ...

这些数据从寄存器里读出的应该是long型的,是除以2的30次方以后,才变成float型的么?

磁力计的whoamI你读出来了么?

出0入0汤圆

发表于 2014-4-4 14:28:27 | 显示全部楼层
hero_kai 发表于 2014-4-4 11:29
这些数据从寄存器里读出的应该是long型的,是除以2的30次方以后,才变成float型的么?

磁力计的whoamI你 ...

能读出来,现在看来磁力计数据应该是没问题,只不过没有校准数据很不正常。
原始四元数除以2的30次方,其余不用

出0入0汤圆

发表于 2014-4-10 21:54:10 | 显示全部楼层

出0入0汤圆

发表于 2014-5-7 15:11:33 | 显示全部楼层
silence2455 发表于 2014-4-2 14:01
你好,我用的也是9150,但是我没用DMP做姿态解算,用的AHRS这个算法融合三轴。
现在Pitch和Roll都很正常 ...

你好,我最近从mpu6050转向mpu9150了,但是磁传感器读取的数据不正确,连ID都是错的(手册上是0x48我读取的是0xff),但是其他两个传感器的数据是正常的,你能否把你读取九轴裸数据部分的程序给我看看?感激不尽

出0入0汤圆

发表于 2014-5-7 16:14:06 | 显示全部楼层
也无风雨赵 发表于 2014-5-7 15:11
你好,我最近从mpu6050转向mpu9150了,但是磁传感器读取的数据不正确,连ID都是错的(手册上是0x48我读取 ...

I2C通讯成功了吗?

磁力计有不同的地址,此外要先给6050那个片子开启pass through模式。

出0入0汤圆

发表于 2014-5-7 16:48:33 | 显示全部楼层
geniuskim 发表于 2014-5-7 16:14
I2C通讯成功了吗?

磁力计有不同的地址,此外要先给6050那个片子开启pass through模式。 ...

用的是模拟IIC,可以读取加速度传感器可陀螺仪的数据,开启了bapass模式,我使用的是mpu9150芯片,AD0接地,所以加速度传感器和陀螺仪的地址是0XD0,磁传感器的地址应该是0X18吧?

出0入0汤圆

发表于 2014-5-7 17:07:47 | 显示全部楼层
也无风雨赵 发表于 2014-5-7 16:48
用的是模拟IIC,可以读取加速度传感器可陀螺仪的数据,开启了bapass模式,我使用的是mpu9150芯片,AD0接 ...


如果认为末位是0的话,地址应该是对的。

这种情况,建议先确定是否正确开启pass through?
或者极端点,重新上电后不对6050进行任何操作,从辅助的I2C接口上直接去读磁力计(磁力计是挂在辅助接口上的,pass through模式相当于接通了主IIC和辅助IIC之间的模拟开关。)

出0入0汤圆

发表于 2014-5-7 17:37:38 | 显示全部楼层
好,我试试看

出0入0汤圆

发表于 2014-5-7 17:39:49 | 显示全部楼层
geniuskim 发表于 2014-5-7 17:07
如果认为末位是0的话,地址应该是对的。

这种情况,建议先确定是否正确开启pass through?

好,我试试看,       
pass through 模式应该是开启了的,应该是将0x37地址中的值设置为0x02吧Single_WriteI2C(MPU6050_I2C_ADDR, MPU6050_INT_PIN_CFG,0x02);

出0入0汤圆

发表于 2014-5-7 19:00:22 | 显示全部楼层
geniuskim 发表于 2014-5-7 17:07
如果认为末位是0的话,地址应该是对的。

这种情况,建议先确定是否正确开启pass through?

按着这种方式试了,读取的数据还是错的,mpu6050可以正确读出ID但是ak8975的id读出的依然不对,真是头疼,起码ID应该读取正确才对啊,都是用的同一个IIC时序,bypass模式也开启了,现在是开不开启bypass模式,ak8975读取的数据都是0xff,就像器件地址是错误的一样,但是是设置的0x18。你能不能把你的mpu9150的读写程序给我一份?

出0入0汤圆

发表于 2014-5-7 21:50:58 | 显示全部楼层
也无风雨赵 发表于 2014-5-7 17:39
好,我试试看,       
pass through 模式应该是开启了的,应该是将0x37地址中的值设置为0x02吧Single_WriteI2C ...

建议确定  I2C_MST_EN (Register 106 bit[5]) is equal to 0。

还不行的话,建议尝试从辅助I2C来通讯,确定原因。

出0入0汤圆

发表于 2014-5-7 21:58:09 | 显示全部楼层
AHRS,搜这个

出0入0汤圆

发表于 2014-5-8 10:17:00 | 显示全部楼层
geniuskim 发表于 2014-5-7 21:50
建议确定  I2C_MST_EN (Register 106 bit[5]) is equal to 0。

还不行的话,建议尝试从辅助I2C来通讯, ...

谢谢你的耐心回答,寄存器的设置都是按照手册上来的,读出来的数据还是不变,只要读写地址换成是0x18读出来的数据都是0xff,就跟这个地址是错的一样

出0入0汤圆

发表于 2014-7-8 19:14:44 | 显示全部楼层
mark  电子罗盘(AK8975)

出0入0汤圆

发表于 2014-11-25 14:47:57 | 显示全部楼层
我也纠结中,没有磁力计总感觉少点什么

出0入0汤圆

发表于 2016-3-23 16:38:54 | 显示全部楼层
也无风雨赵 发表于 2014-5-8 10:17
谢谢你的耐心回答,寄存器的设置都是按照手册上来的,读出来的数据还是不变,只要读写地址换成是0x18读出 ...

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

本版积分规则

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

GMT+8, 2024-4-17 00:21

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

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