如果你把MPU6050设置为主机,可能需要写6050的程序读取磁力计数据,再通过IIC给单片机,这样比较麻烦。建议把MPU6050配置为旁通模式,这样相当于内部短路,磁力计就直接连到了IIC上,具体实现:
[mw_shl_code=c,true]MPU_Write_Byte(MPU_INTBP_CFG_REG,0X02);[/mw_shl_code]
这个是我参照其他代码写出来的,因为我没有找到MPU的寄存器方面的资料,所以...
但是这里注意到原子的F4开发板的MPU6050.c文件中第24行:
[mw_shl_code=c,true]MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80);[/mw_shl_code]
若题主参考原子代码,可以试把这里的寄存器改为0x82。
附录是我GY-86的工程,读取GY-86 10轴传感器并上传给匿名上位机V4.06
编译环境:MDK5
单片机:STM32F103RC
接线(只需四根): SDA-->C12 SCL-->C11 3.3V-->3.3V GND-->GND
若使用我的工程,遇到一个DMP初始不成功时候,则拔出电源线再接入,此时串口又会输出HMC_error,按复位,基本就可以了。
猜测是模拟IIC的SDA线没有作上输入,故在原子哥代码上增添为:
[mw_shl_code=c,true]#define SDA_IN() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;GPIOC->ODR=1<<11;} //新增GPIOC->ODR=1<<11[/mw_shl_code]
把PC11设置为上拉输入,但是没有效果,这里顺便请教一下原子哥,这样设置是否正确?
再一个问题,我的yaw没有倾角补偿,完全是hmc5883l的x轴,y轴的反三角,所以若不是水平面,得到的角度是不准确的。
使用网上流行的那两条公式并没有成功,我猜想是因为坐标系不同原因(左手坐标系和右手坐标系)。
|