MPU6050可以读出器件地址,无法加载dmp,无法读FIFO,自检不通过

如果有人遇到了和我一样的问题,首先我想告诉你有极大可能是芯片损坏了。

我是移植的原子的6050程序到自己做的四轴上(使用STM32f103c8t6),程序移植好之后发现初始化一直不过,调试发现可正确的读出器件地址0X68(如果ad0接vcc读出的应该是0X69),说明IIC通信没问题,接着调试发现程序一直停在这个位置

        if (!rev) {
            log_e("Product ID read as 0 indicates device is either "
                "incompatible or an MPU3050.\n");

翻译一下的意思是:产品ID读为0表示设备是“不兼容或者是MPU3050”;

但是不可能用错芯片。只能换个办法,去移植了匿名四轴的程序,发现不能对芯片不能加载DMP,也不能读fifo。上网搜索原因,也没有明确答案,怀疑到焊接时候设备原因没办法控制烙铁温度以及没有做静电防护,很有可能是损坏了芯片。

马上拆下来换了一片,一遍通过之前卡的地方,但是又有新的问题,对MPU6050的设置都可以通过,但是却卡死在自检步骤,初始化 return 8;

//mpu6050,dmp初始化
//返回值:0,正常
//   其他,失败
u8 mpu_dmp_init(void)
{
	u8 res=0;
	MPU_IIC_Init(); 	//初始化IIC
	if(mpu_init()==0)	//初始化MPU6050
	{	 
		res=mpu_set_sensors(INV_XYZ_GYRO|INV_XYZ_ACCEL);//设置所需要的传感器
		if(res)return 1; 
		res=mpu_configure_fifo(INV_XYZ_GYRO|INV_XYZ_ACCEL);//设置FIFO
		if(res)return 2; 
		res=mpu_set_sample_rate(DEFAULT_MPU_HZ);	//设置采样频率
		if(res)return 3; 
		res=dmp_load_motion_driver_firmware();		//加载dmp固件
		if(res)return 4; 
		res=dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation));//设置陀螺仪方向
		if(res)return 5; 
		res=dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT|DMP_FEATURE_TAP|	//设置dmp功能
		    DMP_FEATURE_ANDROID_ORIENT|DMP_FEATURE_SEND_RAW_ACCEL|DMP_FEATURE_SEND_CAL_GYRO|
		    DMP_FEATURE_GYRO_CAL);
		if(res)return 6; 
		res=dmp_set_fifo_rate(DEFAULT_MPU_HZ);	//设置dmp最大输出功率(最大不超过200Hz)
		if(res)return 7;   
//		res=run_self_test();		//自检
//		if(res)return 8;    
		res=mpu_set_dmp_state(1);	//使能DMP
		if(res)return 9;     
	}else return 10;
	return 0;
}

去了解了下自检,MPU的自检功能主要是检测下自己的测量范围符不符合标准,因为内部的机械结构剧烈运动可能摔坏,或者高温静电等原因也可能损坏芯片。想到更换芯片时仍然没有采取保护措施(穷逼条件有限),不会又一次损坏了芯片吧。屏蔽MPU的自检,如上代码,可以正常采集,采集范围有待验证。

最后,建议大家焊接时能用风枪千万不要用烙铁,没办法只能用烙铁也要做好防护措施,控制烙铁温度,带静电手环,还有一定要小心别摔到地上。

 

你可能感兴趣的:(MPU6050可以读出器件地址,无法加载dmp,无法读FIFO,自检不通过)