OpenEdv-开源电子网

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

关于mpu9250使用dmp解算的数据不准确的问题

[复制链接]

37

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2017-12-14
在线时间
51 小时
发表于 2018-8-18 20:39:48 | 显示全部楼层 |阅读模式
1金钱
最近自己做了一块mpu9250的板子,自己焊了mpu9250,网上找了个mpu9250使用dmp的例程,用串口把解算的姿态角发到电脑上,发现yaw特别不稳定,改变姿态后,yaw会逐渐地从一个值增大或减小到某一个值,然后稳定在这个值附近,这个增大或减小的速度还是挺快的,同时发现似乎pitch和roll也不太准,这可能是什么原因呢?不会是焊接的原因吧(焊接技术比较菜)。求指教

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-8-19 00:31:31 | 显示全部楼层
回复

使用道具 举报

37

主题

79

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2017-12-14
在线时间
51 小时
 楼主| 发表于 2018-8-19 11:02:38 | 显示全部楼层
void Mpu9250_Init(void)
{
        int result=0;
        u8 ID[1];
        do
        {
                i2cRead(0x69,0x75,1,ID);
                printf("%x\r\n",ID[0]);
        }while(ID[0]!=0x71);
        printf("mpu通信正常");
    if(!result)   //返回0代表初始化成功
    {   
        printf("mpu initialization complete......\r\n ");
        
        //mpu_set_sensor
        if(!mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL))
        {
            printf("mpu_set_sensor complete ......\r\n");
        }
        else
        {
            printf("mpu_set_sensor come across error ......\r\n");
        }
        
        //mpu_configure_fifo
        if(!mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL))
        {
            printf("mpu_configure_fifo complete ......\r\n");
        }
        else
        {
            printf("mpu_configure_fifo come across error ......\r\n");
        }
        
        //mpu_set_sample_rate
        if(!mpu_set_sample_rate(DEFAULT_MPU_HZ))
        {
            printf("mpu_set_sample_rate complete ......\r\n");
        }
        else
        {
            printf("mpu_set_sample_rate error ......\r\n");
        }
        
        //dmp_load_motion_driver_firmvare
        if(!dmp_load_motion_driver_firmware())
        {
            printf("dmp_load_motion_driver_firmware complete ......\r\n");
        }
        else
        {
            printf("dmp_load_motion_driver_firmware come across error ......\r\n");
        }
        
        //dmp_set_orientation
        if(!dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation)))
        {
            printf("dmp_set_orientation complete ......\r\n");
        }
        else
        {
            printf("dmp_set_orientation come across error ......\r\n");
        }
        
        //dmp_enable_feature
        if(!dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT | DMP_FEATURE_TAP |
            DMP_FEATURE_ANDROID_ORIENT | DMP_FEATURE_SEND_RAW_ACCEL | DMP_FEATURE_SEND_CAL_GYRO |
            DMP_FEATURE_GYRO_CAL))
        {
            printf("dmp_enable_feature complete ......\r\n");
        }
        else
        {
            printf("dmp_enable_feature come across error ......\r\n");
        }
        
        //dmp_set_fifo_rate
        if(!dmp_set_fifo_rate(DEFAULT_MPU_HZ))
        {
           printf("dmp_set_fifo_rate complete ......\r\n");
        }
        else
        {
            printf("dmp_set_fifo_rate come across error ......\r\n");
        }
        
        //不开自检,以水平作为零度
        //开启自检以当前位置作为零度
        //run_self_test();
        
        if(!mpu_set_dmp_state(1))
        {
            printf("mpu_set_dmp_state complete ......\r\n");
        }
        else
        {
            printf("mpu_set_dmp_state come across error ......\r\n");
        }
        
    }else
                {
                        printf("mpu初始化失败\r\n");
                }
}

这是我的初始化代码
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 00:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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