OpenEdv-开源电子网

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

mpu6050 DMP 如何取消水平校准?

[复制链接]

6

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2013-10-25
在线时间
44 小时
发表于 2015-5-4 10:49:29 | 显示全部楼层 |阅读模式
5金钱
将原子哥的MPU6050DMP成功移植到MINISTM32。每次输出的欧拉角数据都是被自动校准过的。每次初始化的时候,保持mpu6050某一状态,在这个状态的时候输出的欧拉角都为“0”。我想无论mpu6050处在何种状态,初始化完成后,当mpu6050处在水平位置时,输出的欧拉角都为“0”,不知该如何设置?

最佳答案

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

尝试使用的不同的DMP库,可以使MPU6050无论处于何种状态下初始化,当MPU6050水平放置时,欧拉角输出为“0”。 MINISTM32 103.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2013-10-25
在线时间
44 小时
 楼主| 发表于 2015-5-4 10:49:30 | 显示全部楼层
尝试使用的不同的DMP库,可以使MPU6050无论处于何种状态下初始化,当MPU6050水平放置时,欧拉角输出为“0”。
MINISTM32 103.

MPU6050-DMP-STM32无校准.rar

93.74 KB, 下载次数: 3113

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-5 00:13:53 | 显示全部楼层
我们例程默认输出就是0啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2013-10-25
在线时间
44 小时
 楼主| 发表于 2015-5-5 15:01:23 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我这个状况是,假如将mpu6050处于斜45状态下,初始化,这时,输出的欧拉角就为“0”,而放置水平时,欧拉角输出为45。我现在想的就是,无论处于何种状态下初始化,当mpu6050水平放置时,欧拉角输出全为“0”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-5 23:16:06 | 显示全部楼层
回复【3楼】近无止禁:
---------------------------------
貌似没办法。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-6 22:56:33 | 显示全部楼层
回复【5楼】近无止禁:
---------------------------------
谢谢分享。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2015-5-6 23:04:50 | 显示全部楼层
回复【5楼】近无止禁:
---------------------------------
十分感谢
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-5-31
在线时间
0 小时
发表于 2015-5-31 11:29:11 | 显示全部楼层
回复【5楼】近无止禁:
---------------------------------
能否指出这个DMP库和其他的 在哪里设置是不一样的,这样相对更加直观一些了解设置方法
回复

使用道具 举报

6

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2013-10-25
在线时间
44 小时
 楼主| 发表于 2015-6-3 10:11:10 | 显示全部楼层
回复【8楼】init:
---------------------------------
这我也没详细比较,我只是用了被处理过的库,用了就是这样的效果
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-9-14 08:46:20 | 显示全部楼层
回复【9楼】近无止禁:
---------------------------------
这个库确实好用  感谢分享
学无止境
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-9-14 08:47:28 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
建议原子哥下次代码改版时,用上面那位分享的DMP库,这个库无视MPU6050初始姿态
学无止境
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-14 23:53:14 | 显示全部楼层
回复【11楼】jermy_z:
---------------------------------
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

23

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2015-5-30
在线时间
9 小时
发表于 2015-9-15 13:18:59 | 显示全部楼层
回复【5楼】近无止禁:
---------------------------------
谢谢啦大神
要学的东西很多,不要慌,一步一个脚印,扎扎实实的学
回复

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2016-2-14
在线时间
6 小时
发表于 2016-3-11 17:58:00 | 显示全部楼层
编译出错了!
回复

使用道具 举报

14

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2016-5-16
在线时间
67 小时
发表于 2016-5-16 20:13:51 | 显示全部楼层
总算找到解决的办法了。稍后试下。
回复

使用道具 举报

14

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2016-5-16
在线时间
67 小时
发表于 2016-5-17 19:51:21 | 显示全部楼层
正点原子 发表于 2015-5-5 23:16
回复【3楼】近无止禁:
---------------------------------
貌似没办法。

原子哥,有更新无校准版的MPU6050吗,2楼的程序移植然后改程序改了1天,就是不行,卡在‘MPU6050 Error’那段程序的mpu_init()。找2个文件的差异修改了还是不行。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-6-17
在线时间
2 小时
发表于 2016-6-17 12:13:11 | 显示全部楼层
624467649 发表于 2016-5-17 19:51
原子哥,有更新无校准版的MPU6050吗,2楼的程序移植然后改程序改了1天,就是不行,卡在‘MPU6050 Error’ ...

我今天也用了楼主给出的代码,也一直过不了初始化。硬件肯定是没问题的,用其他的程序都能读出数据。打断点一直出错在mpu6050初始化那。
回复

使用道具 举报

10

主题

15

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-1-7
在线时间
10 小时
发表于 2016-6-22 03:25:35 来自手机 | 显示全部楼层
thebest 发表于 2016-6-17 12:13
我今天也用了楼主给出的代码,也一直过不了初始化。硬件肯定是没问题的,用其他的程序都能读出数据。打断 ...

是可以的,找到mpu6050_init这个函数原型,把多余的那个注释掉,找到mpu_dmp_get_data这个函数,把函数上面那三个变量在主函数里声明位外部变量,就可以了
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-6-17
在线时间
2 小时
发表于 2016-6-25 10:54:19 | 显示全部楼层
我本风雅 发表于 2016-6-22 03:25
是可以的,找到mpu6050_init这个函数原型,把多余的那个注释掉,找到mpu_dmp_get_data这个函数,把函数上 ...

我再去试试,谢谢楼主
回复

使用道具 举报

14

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2016-5-16
在线时间
67 小时
发表于 2016-8-15 19:59:36 | 显示全部楼层
thebest 发表于 2016-6-17 12:13
我今天也用了楼主给出的代码,也一直过不了初始化。硬件肯定是没问题的,用其他的程序都能读出数据。打断 ...

我已经成功了,只把int里面几个变量赋0就好了,不过这样有个现象就是初始化过程中如果晃动,那数值就要很长一段时间来变到正确值(就是慢慢减下来),dmp初始化里的自检函数加一句accel_sens=0就好了。        谁能解答下我描述的这个现象。
                dmp_set_gyro_bias(gyro);               
                accel_sens=0;                                                               
                accel[0] *= accel_sens;
回复

使用道具 举报

4

主题

9

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-2-25
在线时间
4 小时
发表于 2017-3-28 15:42:19 | 显示全部楼层
楼主你真的太棒了~~~~~~~~~~~~~~~~~
回复

使用道具 举报

3

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2016-11-5
在线时间
26 小时
发表于 2017-5-17 10:20:32 | 显示全部楼层
本帖最后由 激动的小河马 于 2017-5-17 10:34 编辑

库的哪些被更改了呢?
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-7-27
在线时间
8 小时
发表于 2017-8-25 15:19:56 | 显示全部楼层
激动的小河马 发表于 2017-5-17 10:20
库的哪些被更改了呢?

问:楼主提供的无校验库的哪些地方被修改了呢?
答:
1.inv_mpu里面,run_self_test函数被更改1:原子的if(result==0x03)改成了无校验库的if(result==0x07),下面解释:
  首先找到这一句:result = mpu_run_self_test(gyro, accel);这个的意思是对陀螺仪和加计(加速度计)进行检查。
  跳到该函数,找到这里:
    accel_result = accel_self_test(accel, accel_st); //对加计进行自检,OK返回1,不OK返回0;
    gyro_result = gyro_self_test(gyro, gyro_st);     //对陀螺仪进行自检,OK返回1,不OK返回0;

    result = 0;
    if (!gyro_result)
        result |= 0x01;    //如果陀螺仪OK,result变成1;
    if (!accel_result)
        result |= 0x02;    //如果加计也OK,result变成3;

#ifdef AK89xx_SECONDARY
    compass_result = compass_self_test();
    if (!compass_result)
        result |= 0x04;    //如果磁力计也OK,result变成7;
【结论】因为MPU6050没有磁力计,所以result不可能为0x07,也就是说if必然失败,所以不会执行if里面的校正,也就是无校准。

2.inv_mpu里面,run_self_test函数下面的return被更改:return直接被注释掉,所以不会报错MPU6050 Error。
【结论】这种去掉校验的方法不可取,因为去掉校验之后,数据收敛的时间很长,而且不准。可以试试保存偏移量的办法实现以水平面为参考。
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-7-27
在线时间
8 小时
发表于 2017-8-25 15:22:20 | 显示全部楼层
无校验库的哪些地方被修改了呢? 1.inv_mpu里面,run_self_test函数被更改1:原子的if(result==0x03)改成了无校验库的if(result==0x07),下面解释:   首先找到这一句:result = mpu_run_self_test(gyro, accel);这个的意思是对陀螺仪和加计(加速度计)进行检查。   跳到该函数,找到这里:     accel_result = accel_self_test(accel, accel_st); //对加计进行自检,OK返回1,不OK返回0;     gyro_result = gyro_self_test(gyro, gyro_st);     //对陀螺仪进行自检,OK返回1,不OK返回0;      result = 0;     if (!gyro_result)         result |= 0x01;    //如果陀螺仪OK,result变成1;     if (!accel_result)         result |= 0x02;    //如果加计也OK,result变成3;  #ifdef AK89xx_SECONDARY     compass_result = compass_self_test();     if (!compass_result)         result |= 0x04;    //如果磁力计也OK,result变成7; 【结论】因为MPU6050没有磁力计,所以result不可能为0x07,也就是说if必然失败,所以不会执行if里面的校正,也就是无校准。  2.inv_mpu里面,run_self_test函数下面的return被更改:return直接被注释掉,所以不会报错MPU6050 Error。 【结论】这种去掉校验的方法不可取,因为去掉校验之后,数据收敛的时间很长,而且不准。可以试试保存偏移量的办法实现以水平面为参考。
回复

使用道具 举报

3

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2016-11-5
在线时间
26 小时
发表于 2017-8-26 14:04:57 | 显示全部楼层
老书虫 发表于 2017-8-25 15:19
问:楼主提供的无校验库的哪些地方被修改了呢?
答:
1.inv_mpu里面,run_self_test函数被更改1:原子的i ...

谢谢了,我是直接屏蔽了磁场校准 现象是直接复位后的位置就是0误差面,存在的问题是只有在6050放在水平时才可进行其他实验,有点麻烦,这样感觉不够完美,目前还没想到其他方法。
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-7-27
在线时间
8 小时
发表于 2017-9-11 17:39:27 | 显示全部楼层
激动的小河马 发表于 2017-8-26 14:04
谢谢了,我是直接屏蔽了磁场校准 现象是直接复位后的位置就是0误差面,存在的问题是只有在6050放在水平时 ...

你下载楼主的“无校验库”吧,这样就可以不用水平校准了,作为代价就是需要一定时间输出才稳定
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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