搜索
bottom↓
回复: 11

MPU9150的磁力计数据错误

[复制链接]

出0入0汤圆

发表于 2013-7-25 11:37:28 | 显示全部楼层 |阅读模式
读取MPU9150加速度计和陀螺仪数据没问题,读取磁力计数据时,mx一直为负,my和mz一直等于-1,试过各种方法,self-test结果也是如此,顶多mx变化一下,my和mz万年不变,加过灵敏度调整,也没用。

之前用过HMC的磁力计,也是容易焊坏,我想说的是磁力计都是大爷啊,就这么容易焊坏?我风枪温度才250度,不高啊

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2013-7-27 22:46:18 | 显示全部楼层
可能买的质量不好  

出0入0汤圆

 楼主| 发表于 2013-8-9 14:39:19 | 显示全部楼层
好吧,楼主表示已经搞好了,说下经验给还没搞好的少年吧
1.这个mpu9150的磁力计没我想象中的那么脆弱,300摄氏度,用风枪没焊好,找高人改用烙铁焊好了。。。。(这不科学啊)
2.采用官方库,读取mpu9150磁力计代码如下:
     mpu_set_bypass(1);                //开启bypass   
     mpu_get_compass_reg(mag, &timestamp);   
     init_mx =(float)mag[0];                                               
       init_my =(float)mag[1];
       init_mz =(float)mag[2];
       mpu_set_bypass(0);     //关闭bypass
注意要先开启bypass,然后读完要关闭bypass,如果不关bypass那么磁力计出来的数据是不会变的,这一点可难为死我了。。
如果不开bypass,mx my mz都是0

出0入0汤圆

 楼主| 发表于 2013-8-9 14:47:02 | 显示全部楼层
本帖最后由 zksniper 于 2013-8-9 14:48 编辑

还有,这个mpu9150的DMP的一个蛋疼的bug:
代码如下:
dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors, &more);
         if(sensors & INV_XYZ_GYRO)
         {
             init_gx=(float)(gyro[0] / (Gyro_500_Scale_Factor * 57.3));                       //单位转化成:弧度/s
                     init_gy=(float)(gyro[1] / (Gyro_500_Scale_Factor * 57.3));
             init_gz=(float)(gyro[2] / (Gyro_500_Scale_Factor * 57.3));
         }
         if(sensors & INV_XYZ_ACCEL)
         {
                  init_ax=(float)accel[0];          
                 init_ay=(float)accel[1];
                 init_az=(float)accel[2];
         }
各位有没有发现,再第一次执行这个代码时,sensors & INV_XYZ_GYRO和sensors & INV_XYZ_ACCEL是等于0的,以至于读取不出陀螺仪和加速度计的数值,
还有更扯淡的第二部分,这个语句是放在while(1)循环里的,经过楼主实测,每过一段不定期的时间,sensors & INV_XYZ_GYRO和sensors & INV_XYZ_ACCEL都会咪涨的等于0一次。。。。。。。。。
不过这个问题的第二部分楼主已经解决了,我也不知道怎么解决的,只不过是把读取磁力计的代码放到了if(sensors & INV_XYZ_ACCEL)下而已。。

出0入0汤圆

 楼主| 发表于 2013-8-9 15:09:57 | 显示全部楼层
还有seanwood大师的此贴:http://www.amobbs.com/thread-5492189-1-1.html,我各个楼层反复看了不下10遍了,用了里面的融合accel gyro和compass的那个算法,四元数也初始化了,最后循环调用AHRSupdate来读取q0123并转成pitch roll yaw,发现这三个角没一个是对的,现象就是要么时间长了这三个角一动不动定在一个数值上小波动一下,要么就是乱动。
有2个问题,求各位解惑:
1.我想了好长时间,是不是因为我把accel gyro和compass的坐标轴没定对?accel和gyro的xyz轴我没变,用的是mpu9150默认的那个方向,compass的xyz我转成了和accel gyro一样的方向,因为mpu9150 compass的轴和accel gyro的轴向不一致。
2.accel、gyro和compass的轴向分别如何定,才能符合AHRSupdate这个算法呢?是z指天、x指东、y指北这个方式?还是z指地、x指北、y指东?这俩都满足右手定律,但是好像都不行,试了好多方式,不得要领。

出0入0汤圆

发表于 2014-3-21 21:45:07 | 显示全部楼层

出0入0汤圆

发表于 2014-5-16 08:30:31 | 显示全部楼层
新手 学习一下, 有用arduino 调试Mpu9150的?,为何磁力计输出为零 ,gyro accel 都正常?

出0入0汤圆

发表于 2014-10-2 11:48:41 | 显示全部楼层
感谢楼主所发现的问题和解答,给了我莫大的帮助,谢谢。

出0入0汤圆

发表于 2015-8-5 18:01:59 | 显示全部楼层
楼主您好,您这个是软件模拟i2c读取,还是硬件i2c读取,我软件i2c读取磁力计数据是没有问题的;
但是硬件读取i2c是有问题,不知道需要注意什么;

经过我的查看这个地方的地址不一样
/* Find compass. Possible addresses range from 0x0C to 0x0F. */
    for (akm_addr = 0x0C; akm_addr <= 0x0F; akm_addr++) {
        int result;
        result = i2c_read(akm_addr, AKM_REG_WHOAMI, 1, data);
        if (!result && (data[0] == AKM_WHOAMI))
            break;
    }

    if (akm_addr > 0x0F) {
        /* TODO: Handle this case in all compass-related functions. */
        log_e("Compass not found.\n");
        return -1;
    }

    st.chip_cfg.compass_addr = akm_addr;
程序执行到return -1了,左移没有读取到,请指导一下,谢谢!

出0入0汤圆

发表于 2015-8-6 15:30:17 | 显示全部楼层
问题已经解决,噢耶!

出0入0汤圆

发表于 2015-10-15 09:58:11 | 显示全部楼层
我用的是MPU9150,我如果只用ACC和GRYO的数据姿态解出来是对的,只是会慢慢的飘,但是我将磁力计MAG的数据如果一起融合进去,YAW这个方向角就不对了,不知道是什么原因,请教

出0入0汤圆

发表于 2016-9-6 16:37:26 | 显示全部楼层
Zhang_Peike 发表于 2014-5-16 08:30
新手 学习一下, 有用arduino 调试Mpu9150的?,为何磁力计输出为零 ,gyro accel 都正常?
...

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

本版积分规则

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

GMT+8, 2024-4-26 10:29

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

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