OpenEdv-开源电子网

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

求助原子哥,MPU6050 读取的数值时不时出现为零的错误数值

[复制链接]

2

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2021-10-19
在线时间
3 小时
发表于 2021-10-19 19:31:29 | 显示全部楼层 |阅读模式
1金钱
最近把MPU6050获取姿态角程序从DMP换到kalman滤波,希望能使while循环时间缩短。但是用原子哥的IIC程序读取的加速度值时不时冒出一个为零的数值,明显不对。如果不采取判断丢弃,会造成kalman滤滤函数出错。这个错误的特点是过很久才出现一次,出错并不连续出现,之后又恢复正常数值。左思右想,实在不知道问题所在,特发贴求助大师!

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

使用道具 举报

2

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2021-10-19
在线时间
3 小时
 楼主| 发表于 2021-10-19 19:47:03 | 显示全部楼层
准备再买几个Mpu6050板子,先排除硬件问题。
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2020-8-19
在线时间
335 小时
发表于 2021-10-20 10:01:43 | 显示全部楼层
看看是不是模块的接口接触不稳定
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2021-10-19
在线时间
3 小时
 楼主| 发表于 2021-10-20 12:55:57 | 显示全部楼层
谢谢大师回复,换了接口还是老样子,出问题的数据一次只出一个循环中的, 不会连续两次出这个故障。
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2021-10-19
在线时间
3 小时
 楼主| 发表于 2021-10-20 13:03:02 | 显示全部楼层
rawacx is 16720, rawacy is 188, rawacz is 2952
rawacx is 16580, rawacy is 148, rawacz is 3076
rawacx is 16576, rawacy is 180, rawacz is 3012
rawacx is 16536, rawacy is 88, rawacz is 3056
rawacx is 16640, rawacy is 168, rawacz is 2968
rawacx is 16616, rawacy is 216, rawacz is 2916
rawacx is 16548, rawacy is 100, rawacz is 2936
rawacx is 16552, rawacy is 168, rawacz is 2964
rawacx is 16604, rawacy is 88, rawacz is 2888
rawacx is 16640, rawacy is 228, rawacz is 3080
rawacx is 16628, rawacy is 192, rawacz is 3064
rawacx is 16596, rawacy is 116, rawacz is 2948
rawacx is 16624, rawacy is 96, rawacz is 2948
rawacx is 16632, rawacy is 104, rawacz is 2972
rawacx is 16556, rawacy is 40, rawacz is 3064
rawacx is 16628, rawacy is 84, rawacz is 2944
rawacx is 16580, rawacy is 156, rawacz is 2880
rawacx is 16640, rawacy is 88, rawacz is 2956
rawacx is 16652, rawacy is 0, rawacz is 3012
warning:************* read 0 value accelerator from mpu6050
rawacx is 16552, rawacy is 144, rawacz is 2992
rawacx is 16600, rawacy is 156, rawacz is 3152
rawacx is 16596, rawacy is 112, rawacz is 3016
rawacx is 16636, rawacy is 108, rawacz is 3052
rawacx is 16668, rawacy is 96, rawacz is 2988
rawacx is 16648, rawacy is 84, rawacz is 3008
rawacx is 16592, rawacy is 80, rawacz is 2960
rawacx is 16596, rawacy is 116, rawacz is 2956
rawacx is 16540, rawacy is 152, rawacz is 2904
rawacx is 16588, rawacy is 64, rawacz is 3008
rawacx is 16540, rawacy is 144, rawacz is 3004
rawacx is 16656, rawacy is 112, rawacz is 3076
rawacx is 16644, rawacy is 200, rawacz is 3084
rawacx is 16640, rawacy is 8, rawacz is 2968
rawacx is 16612, rawacy is 144, rawacz is 2952
rawacx is 16564, rawacy is 140, rawacz is 2960
rawacx is 16596, rawacy is 192, rawacz is 3152
rawacx is 16476, rawacy is 108, rawacz is 2876
rawacx is 16632, rawacy is 160, rawacz is 3112
rawacx is 16672, rawacy is 164, rawacz is 3040
rawacx is 16696, rawacy is 104, rawacz is 2952
rawacx is 16588, rawacy is 120, rawacz is 2872
rawacx is 16544, rawacy is 240, rawacz is 3080
rawacx is 16652, rawacy is 180, rawacz is 2892
rawacx is 16504, rawacy is 68, rawacz is 2904
rawacx is 16608, rawacy is 160, rawacz is 3056


回复

使用道具 举报

2

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2021-10-19
在线时间
3 小时
 楼主| 发表于 2021-10-20 13:05:47 | 显示全部楼层
Angle_x_temp = (atan(Trans_accy / Trans_accz)) * 180 / 3.14;
        Angle_y_temp = (atan(Trans_accx / Trans_accz)) * 180 / 3.14;
Trans_accz如果为零,kalman滤波计算就报错,程序卡死了
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2021-10-19
在线时间
3 小时
 楼主| 发表于 2021-10-20 13:06:33 | 显示全部楼层
if (rawacx == 0 || rawacy == 0 || rawacz == 0)//如果有读到为零的错误数值,排除掉,否刚会导致kalman计算出错
        {
                printf("warning:************* read 0 value accelerator from mpu6050\r\n");
        }
        else
        {
                if (rawacx < 32764)

                        Trans_accx = rawacx / (float)16384; //计算x轴加速度
                else
                        Trans_accx = 1 - (rawacx - 49152) / (float)16384;

                if (rawacy < 32764)
                        Trans_accy = rawacy / (float)16384; //计算y轴加速度
                else
                        Trans_accy = 1 - (rawacy - 49152) / (float)16384;
                if (rawacz < 32764)
                        Trans_accz = rawacz / (float)16384; //计算z轴加速度
                else
                        Trans_accz = (rawacz - 49152) / (float)16384;
        }
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 19:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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