hero_kai 发表于 2014-4-1 12:55:25

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

我看官方资料说DMP固件里不包含对AK8975的算法,我想问一下大家是如何把AK8975的数据与DMP结合的。我用的是9150,我想既然是给了两传感器整合后的9轴硬件,应该有比较好的结合方法来算Yaw角,还请各位赐教一下!
拜谢了!

三人的羁绊 发表于 2014-4-1 20:49:35

你移植DMP的时候,会有对对磁罗盘的定义,但是好像只能是内置的,如果要自己的磁罗盘的话还得自己写算法吧

hero_kai 发表于 2014-4-1 23:43:00

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

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

silence2455 发表于 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,这是不是不正常?
请问楼主你的是什么情况?

hero_kai 发表于 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再算一遍。

silence2455 发表于 2014-4-2 19:34:57

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

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

hero_kai 发表于 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,这些都是怎么获得的?

还望赐教!

silence2455 发表于 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 ...

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

hero_kai 发表于 2014-4-4 11:29:02

silence2455 发表于 2014-4-2 23:28
依次就是陀螺仪,加速度计,磁力计的三轴数据。我现在就是纠结磁力计的原始数据 ...

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

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

silence2455 发表于 2014-4-4 14:28:27

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

磁力计的whoamI你 ...

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

电气工程化动自 发表于 2014-4-10 21:54:10

{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}

也无风雨赵 发表于 2014-5-7 15:11:33

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

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

geniuskim 发表于 2014-5-7 16:14:06

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

I2C通讯成功了吗?

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

也无风雨赵 发表于 2014-5-7 16:48:33

geniuskim 发表于 2014-5-7 16:14
I2C通讯成功了吗?

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

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

geniuskim 发表于 2014-5-7 17:07:47

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

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

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

也无风雨赵 发表于 2014-5-7 17:37:38

好,我试试看

也无风雨赵 发表于 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);

也无风雨赵 发表于 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的读写程序给我一份?

geniuskim 发表于 2014-5-7 21:50:58

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

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

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

nongxiaoming 发表于 2014-5-7 21:58:09

AHRS,搜这个

也无风雨赵 发表于 2014-5-8 10:17:00

geniuskim 发表于 2014-5-7 21:50
建议确定I2C_MST_EN (Register 106 bit) is equal to 0。

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

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

yat 发表于 2014-7-8 19:14:44

mark电子罗盘(AK8975)

xiangbin099 发表于 2014-11-25 14:47:57

我也纠结中,没有磁力计总感觉少点什么

哈哈孩Holmes 发表于 2016-3-23 16:38:54

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

你好问一下,你的问题解决了吗,我的AK8975也是读取不到数据
页: [1]
查看完整版本: 如何把DMP和电子罗盘(AK8975)结合起来