OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13452|回复: 9

求解--移植MPU6050,自检始终失败

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-7-30
在线时间
5 小时
发表于 2016-8-5 00:10:53 | 显示全部楼层 |阅读模式
1金钱
移植MPU6050,发现在初始化时自检始终失败
[mw_shl_code=applescript,true]res=run_self_test();                //自检
printf("自检--res---%d\r\n",res);
if(res)return 8;   
res=mpu_set_dmp_state(1);        //使能DMP
printf("使能DMP--res---%d\r\n",res);[/mw_shl_code]

发现在函数 run_self_test检测,需要result=0x03;
[mw_shl_code=applescript,true]uint8_t run_self_test(void)
{
        int result;
        //char test_packet[4] = {0};
        long gyro[3], accel[3];
        result = mpu_run_self_test(gyro, accel);
        printf("result %d\r\n",result);
        if (result == 0x3)
        {
                /* Test passed. We can trust the gyro data here, so let's push it down
                * to the DMP.
                */
                float sens;
                unsigned short accel_sens;
                mpu_get_gyro_sens(&sens);
                gyro[0] = (long)(gyro[0] * sens);
                gyro[1] = (long)(gyro[1] * sens);
                gyro[2] = (long)(gyro[2] * sens);
                dmp_set_gyro_bias(gyro);
                mpu_get_accel_sens(&accel_sens);
                accel[0] *= accel_sens;
                accel[1] *= accel_sens;
                accel[2] *= accel_sens;
                dmp_set_accel_bias(accel);
                return 0;
        }else return 1;
}[/mw_shl_code]

但是在mpu_run_self_test函数中,根本没有等于result=0x03的值
int mpu_run_self_test(long *gyro, long *accel)
{
#ifdef MPU6050
    const unsigned char tries = 2;
    long gyro_st[3], accel_st[3];
    unsigned char accel_result, gyro_result;
#ifdef AK89xx_SECONDARY
    unsigned char compass_result;
#endif
    int ii;
#endif
    int result;
    unsigned char accel_fsr, fifo_sensors, sensors_on;
    unsigned short gyro_fsr, sample_rate, lpf;
    unsigned char dmp_was_on;

    if (st.chip_cfg.dmp_on) {
        mpu_set_dmp_state(0);
        dmp_was_on = 1;
    } else
        dmp_was_on = 0;
        printf("dmp_was_on =%d \r\n",dmp_was_on);
    /* Get initial settings. */
    mpu_get_gyro_fsr(&gyro_fsr);
        printf("gyro_fsr = %X \r\n",gyro_fsr);
    mpu_get_accel_fsr(&accel_fsr);
        printf("accel_fsr = %X \r\n",accel_fsr);
    mpu_get_lpf(&lpf);
        printf("lpf = %X \r\n",lpf);
    mpu_get_sample_rate(&sample_rate);
        printf("sample_rate = %X \r\n",sample_rate);
    sensors_on = st.chip_cfg.sensors;
        printf("sensors_on = %X \r\n",sensors_on);
    mpu_get_fifo_config(&fifo_sensors);
        printf("fifo_sensors = %X \r\n",fifo_sensors);
       
    /* For older chips, the self-test will be different. */
#if defined MPU6050
    for (ii = 0; ii < tries; ii++)
        if (!get_st_biases(gyro, accel, 0))
            break;
    if (ii == tries) {
        /* If we reach this point, we most likely encountered an I2C error.
         * We'll just report an error for all three sensors.
         */
        result = 0;
        goto restore;
    }
    for (ii = 0; ii < tries; ii++)
        if (!get_st_biases(gyro_st, accel_st, 1))
            break;
    if (ii == tries) {
        /* Again, probably an I2C error. */
        result = 0;
        goto restore;
    }
    accel_result = accel_self_test(accel, accel_st);
    gyro_result = gyro_self_test(gyro, gyro_st);

    result = 0;
    if (!gyro_result)
        result |= 0x01;
    if (!accel_result)
        result |= 0x02;

#ifdef AK89xx_SECONDARY
    compass_result = compass_self_test();
    if (!compass_result)
        result |= 0x04;
#endif
restore:
#elif defined MPU6500
    /* For now, this function will return a "pass" result for all three sensors
     * for compatibility with current test applications.
     */
    get_st_biases(gyro, accel, 0);
    result = 0x7;
#endif
    /* Set to invalid values to ensure no I2C writes are skipped. */
    st.chip_cfg.gyro_fsr = 0xFF;
    st.chip_cfg.accel_fsr = 0xFF;
    st.chip_cfg.lpf = 0xFF;
    st.chip_cfg.sample_rate = 0xFFFF;
    st.chip_cfg.sensors = 0xFF;
    st.chip_cfg.fifo_enable = 0xFF;
    st.chip_cfg.clk_src = INV_CLK_PLL;
    mpu_set_gyro_fsr(gyro_fsr);
    mpu_set_accel_fsr(accel_fsr);
    mpu_set_lpf(lpf);
    mpu_set_sample_rate(sample_rate);
    mpu_set_sensors(sensors_on);
    mpu_configure_fifo(fifo_sensors);

    if (dmp_was_on)
        mpu_set_dmp_state(1);

    return result;
}



原子哥,帮忙看下是否我移植的有问题




1.PNG

最佳答案

查看完整内容[请看2#楼]

我也出现这问题了,模块放平就好了,谢谢原子哥的指导!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-4-4
在线时间
3 小时
发表于 2016-8-5 00:10:54 来自手机 | 显示全部楼层
我也出现这问题了,模块放平就好了,谢谢原子哥的指导!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165225
金钱
165225
注册时间
2010-12-1
在线时间
2107 小时
发表于 2016-8-6 20:17:18 | 显示全部楼层
这个看不出问题。你看是不是模块没放平导致的?
回复

使用道具 举报

3

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2015-2-28
在线时间
29 小时
发表于 2016-10-27 10:47:11 | 显示全部楼层
我也是自测没通过,accel_result = accel_self_test(accel, accel_st);    gyro_result = gyro_self_test(gyro, gyro_st);,这两个数都为7;
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-7-30
在线时间
5 小时
 楼主| 发表于 2017-1-25 11:15:18 | 显示全部楼层
这部分我是直接将自检部分代码给屏蔽掉了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-8-5
在线时间
7 小时
发表于 2017-3-16 13:39:39 | 显示全部楼层
我也是自检出了问题,跟你遇到的一模一样,怎么解决啊?你解决了么?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-8-5
在线时间
7 小时
发表于 2017-3-16 14:25:24 | 显示全部楼层
正点原子 发表于 2016-8-6 20:17
这个看不出问题。你看是不是模块没放平导致的?

我也出现了这样的问题,我把自检注释掉后,数据就出来了。但是数据不准确。求解!!
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-7-4
在线时间
13 小时
发表于 2017-11-13 20:07:55 | 显示全部楼层
当然没有result=3的程序,3就是0x11呗,这段程序是吧每个位用来检测一个功能,说明gyro_result出问题了,但是具体什么问题就不清楚了,我也出了这个问题
回复

使用道具 举报

3

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2019-5-8
在线时间
27 小时
发表于 2019-5-15 11:17:37 | 显示全部楼层
模块不放平会导致自检不通过吗?我的也是自检返回8,不知道哪里出了问题
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2019-9-12
在线时间
3 小时
发表于 2020-10-10 09:36:21 | 显示全部楼层
正点原子 发表于 2016-8-6 20:17
这个看不出问题。你看是不是模块没放平导致的?

原子哥,MPU6050初始化必须水平吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-1 07:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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