如何把DMP和电子罗盘(AK8975)结合起来
我看官方资料说DMP固件里不包含对AK8975的算法,我想问一下大家是如何把AK8975的数据与DMP结合的。我用的是9150,我想既然是给了两传感器整合后的9轴硬件,应该有比较好的结合方法来算Yaw角,还请各位赐教一下!拜谢了! 你移植DMP的时候,会有对对磁罗盘的定义,但是好像只能是内置的,如果要自己的磁罗盘的话还得自己写算法吧 三人的羁绊 发表于 2014-4-1 20:49
你移植DMP的时候,会有对对磁罗盘的定义,但是好像只能是内置的,如果要自己的磁罗盘的话还得自己写算法吧 ...
我想用的就是内置在9150内的AK8975,我也在程序中把电子罗盘给打开了,但是输出的数据似乎没什么变化,所以想知道是否有人用DMP加载AK8975成功过。 hero_kai 发表于 2014-4-1 23:43
我想用的就是内置在9150内的AK8975,我也在程序中把电子罗盘给打开了,但是输出的数据似乎没什么变化,所 ...
你好,我用的也是9150,但是我没用DMP做姿态解算,用的AHRS这个算法融合三轴。
现在Pitch和Roll都很正常,但是Yaw有点问题,我初步确定是原始数据有些问题。
我可以读出ID(0x48),磁力计数据静时基本不变,动时变化明显。
高八位要么是0要么是255,低八位还比较正常,这样的话磁力计的数据不超过+ -256,但是量程是-4095---4095,这是不是不正常?
请问楼主你的是什么情况? silence2455 发表于 2014-4-2 14:01
你好,我用的也是9150,但是我没用DMP做姿态解算,用的AHRS这个算法融合三轴。
现在Pitch和Roll都很正常 ...
我的情况是:
硬件9150,软件DMP
Pitch和Roll能够有读数,看上去显得正常(没细调过);Yaw也能够有读数,并且随着转动有变化,但是输出数据是每转一圈增加28左右,再转一圈增加到56左右,如果反转则减少28,我也不明白这28和360°之间是什么关系。
看了DMP的程序后,发现它并没有用到AK8975的数据,总感觉自己做的有什么地方是不对的,然后就到这里来求助了。
新的打算是准备用AHRS再算一遍。 hero_kai 发表于 2014-4-2 19:31
我的情况是:
硬件9150,软件DMP
Pitch和Roll能够有读数,看上去显得正常(没细调过);Yaw也能够有读数 ...
感谢楼主耐心回复。其实我只想请问你磁力计的原始数据是否正常,大概在哪个范围,旋转会有什么变化。。。
恳请赐教!!! 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,这些都是怎么获得的?
还望赐教! hero_kai 发表于 2014-4-2 21:50
原始数据是从fifo里获得的,但是在DMP中有一句“ /* Compass data isn't going into the FIFO. Stop t ...
依次就是陀螺仪,加速度计,磁力计的三轴数据。我现在就是纠结磁力计的原始数据 silence2455 发表于 2014-4-2 23:28
依次就是陀螺仪,加速度计,磁力计的三轴数据。我现在就是纠结磁力计的原始数据 ...
这些数据从寄存器里读出的应该是long型的,是除以2的30次方以后,才变成float型的么?
磁力计的whoamI你读出来了么? hero_kai 发表于 2014-4-4 11:29
这些数据从寄存器里读出的应该是long型的,是除以2的30次方以后,才变成float型的么?
磁力计的whoamI你 ...
能读出来,现在看来磁力计数据应该是没问题,只不过没有校准数据很不正常。
原始四元数除以2的30次方,其余不用 {:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:} silence2455 发表于 2014-4-2 14:01
你好,我用的也是9150,但是我没用DMP做姿态解算,用的AHRS这个算法融合三轴。
现在Pitch和Roll都很正常 ...
你好,我最近从mpu6050转向mpu9150了,但是磁传感器读取的数据不正确,连ID都是错的(手册上是0x48我读取的是0xff),但是其他两个传感器的数据是正常的,你能否把你读取九轴裸数据部分的程序给我看看?感激不尽 也无风雨赵 发表于 2014-5-7 15:11
你好,我最近从mpu6050转向mpu9150了,但是磁传感器读取的数据不正确,连ID都是错的(手册上是0x48我读取 ...
I2C通讯成功了吗?
磁力计有不同的地址,此外要先给6050那个片子开启pass through模式。 geniuskim 发表于 2014-5-7 16:14
I2C通讯成功了吗?
磁力计有不同的地址,此外要先给6050那个片子开启pass through模式。 ...
用的是模拟IIC,可以读取加速度传感器可陀螺仪的数据,开启了bapass模式,我使用的是mpu9150芯片,AD0接地,所以加速度传感器和陀螺仪的地址是0XD0,磁传感器的地址应该是0X18吧? 也无风雨赵 发表于 2014-5-7 16:48
用的是模拟IIC,可以读取加速度传感器可陀螺仪的数据,开启了bapass模式,我使用的是mpu9150芯片,AD0接 ...
如果认为末位是0的话,地址应该是对的。
这种情况,建议先确定是否正确开启pass through?
或者极端点,重新上电后不对6050进行任何操作,从辅助的I2C接口上直接去读磁力计(磁力计是挂在辅助接口上的,pass through模式相当于接通了主IIC和辅助IIC之间的模拟开关。) 好,我试试看 geniuskim 发表于 2014-5-7 17:07
如果认为末位是0的话,地址应该是对的。
这种情况,建议先确定是否正确开启pass through?
好,我试试看,
pass through 模式应该是开启了的,应该是将0x37地址中的值设置为0x02吧Single_WriteI2C(MPU6050_I2C_ADDR, MPU6050_INT_PIN_CFG,0x02); geniuskim 发表于 2014-5-7 17:07
如果认为末位是0的话,地址应该是对的。
这种情况,建议先确定是否正确开启pass through?
按着这种方式试了,读取的数据还是错的,mpu6050可以正确读出ID但是ak8975的id读出的依然不对,真是头疼,起码ID应该读取正确才对啊,都是用的同一个IIC时序,bypass模式也开启了,现在是开不开启bypass模式,ak8975读取的数据都是0xff,就像器件地址是错误的一样,但是是设置的0x18。你能不能把你的mpu9150的读写程序给我一份? 也无风雨赵 发表于 2014-5-7 17:39
好,我试试看,
pass through 模式应该是开启了的,应该是将0x37地址中的值设置为0x02吧Single_WriteI2C ...
建议确定I2C_MST_EN (Register 106 bit) is equal to 0。
还不行的话,建议尝试从辅助I2C来通讯,确定原因。 AHRS,搜这个 geniuskim 发表于 2014-5-7 21:50
建议确定I2C_MST_EN (Register 106 bit) is equal to 0。
还不行的话,建议尝试从辅助I2C来通讯, ...
谢谢你的耐心回答,寄存器的设置都是按照手册上来的,读出来的数据还是不变,只要读写地址换成是0x18读出来的数据都是0xff,就跟这个地址是错的一样 mark电子罗盘(AK8975) 我也纠结中,没有磁力计总感觉少点什么 也无风雨赵 发表于 2014-5-8 10:17
谢谢你的耐心回答,寄存器的设置都是按照手册上来的,读出来的数据还是不变,只要读写地址换成是0x18读出 ...
你好问一下,你的问题解决了吗,我的AK8975也是读取不到数据
页:
[1]