MPU6050初始化失败原因及常见问题解决方法

1、6050初始化失败

如果是6050初始化失败,首先看下是否是读出的地址不对

res=MPU_Read_Byte(MPU_DEVICE_ID_REG);
	printf("mpu addr=%x\r\n",res);
	if(res==MPU_ADDR)//器件ID正确
	{
		MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01);	//设置CLKSEL,PLL X轴为参考
		MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00);	//加速度与陀螺仪都工作
		MPU_Set_Rate(50);						//设置采样率为50Hz
 	}
	else return 1;

我这里读出来是0x68,不同的接法也会导致ID不同,如果地址正确,那就是return 0,这里对于6050的初始化就初始化通过了。

2、mpu初始化失败

Mpu初始化失败常见的是返回错误代码8,可一步一步进入源码去分析,

解决办法一、

mpu_dmp_init() -> run_self_test() 这里是进行自检,跳进函数里面可以看到,意思是需要水平放置才能自检成功,所以只有将模块水平放置即可,如果不行直接将这部分代码屏蔽掉即可。

解决办法二、

追踪源码:mpu_dmp_init() -> run_self_test() -> mpu_run_self_test(gyro, accel) -> accel_self_test(accel, accel_st)
在这里插入图片描述
既只有当st_shift_var的绝对值<test.max_accel_var的值时,才能初始化成功。而且不同位置摆放MPU6050模块,st_shift_var的绝对值都不同,只有当水平放置模块时,st_shift_var的绝对值最接近test.max_accel_var的值,如果不修改这个参数,则需要按照方法一将模块水平放置进行测试

这里调试时可以将st_shift_var的绝对值和test.max_accel_var的值打印出来对比下,我这里的解决方法是将test.max_accel_var的初始化值从0.14改为0.16。这时水平放置模块时模块就能初始化成功。如下图所示:
在这里插入图片描述

3、初始化通过但数据为0

还有种情况就是初始化所有的都通过,但是欧拉角登数据全为0,这种情况是因为代码里面存在硬延时或者其他模块的处理影响到了6050,所以数据全为0,亲测是经过测试把某一个模块数据处理屏蔽掉就ok了。

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值