使用mpu6050和hmc5883l集成的9轴芯片测量数据,如果开启了DMP驱动,就没法获得hmc的数据了,只能获得mpu6050相关数据?

2019-10-16 06:18发布

前提:
       我使用的是mpu6050和hmc5883l集成的9轴芯片LEADIY D3B芯片。
       芯片内部的hmc5883l的SCL和SDA线是连接在mpu6050的AUX_CL和AUX_DA上的,所以我在初始化mpu6050的时候关闭了I2C主模式,并且设置中断/旁路设置寄存器使他开启Bypass功能,使mpu6050可以通过I2C辅助总线直接访问HMC5883l。

问题:
       当我不开启DMP驱动(即没有进行mpu_dmp_init()),直接只是测量mpu6050的三轴加速度和角速度,以及hmc5883l的三轴磁分量。测量数据输出正常。
     但是当我卡其DMP驱动,则hmc5883l就无法输出了,三轴磁分量都是为一个很小的定值不变,而且每次reset这三个定值也不变。

     以上配置mpu6050和开启DMP驱动的方法,都是移植原子哥的代码,自己只不过加了开启hmc5883l的代码。在不开启DMP的时候hmc5883l输出正常,但开启DMP,就不正常了,所以问题应噶是出在DMP这一块,是不是在驱动DMP的时候关闭了Bypass功能,使mpu6050不能通过I2C辅助总线直接访问HMC5883l还是其他原因?应该怎么改呢?
     求助大神应该怎么在开启DMP的功能的基础上,让hmc的功能也实现。


不开启DMP时,主程序代码:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
uart_init(115200); 
delay_init(); 
usmart_dev.init(72); 
KEY_Init();
LED_Init();     
MPU_Init(); 
 init_hmc5883l();
while(1)
{
if((t%1000)==0)

temp=MPU_Get_Temperature(); 
 MPU_Get_Accelerometer(&aacx,&aacy,&aacz);
 MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);
 get_hmc5883l(&bbx,&bby,&bbz,&angle);           //以上四句为获得数据

print_HMC5883L(&bbx,&bby,&bbz,&angle);
 MPU_show_Gyroscope(&gyrox,&gyroy,&gyroz);
MPU_show_Accelerometer(&aacx,&aacy,&aacz);    //以上三句为打印数据
delay_ms(500);
 t=0;
 LED0=!LED0;
}
t++:
}

开启DMP时代码:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
uart_init(115200); 
delay_init(); 
usmart_dev.init(72); 
KEY_Init();
LED_Init();     
MPU_Init(); 
 init_hmc5883l();
while(mpu_dmp_init())                        
 {
   printf("MPUdmp6050 Error ");
   delay_ms(200);
 }  

while(1)
{
if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
{

if((t%1000)==0)

temp=MPU_Get_Temperature(); 
 MPU_Get_Accelerometer(&aacx,&aacy,&aacz);
 MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);
 get_hmc5883l(&bbx,&bby,&bbz,&angle);           //以上四句为获得数据

print_HMC5883L(&bbx,&bby,&bbz,&angle);
 MPU_show_Gyroscope(&gyrox,&gyroy,&gyroz);
MPU_show_Accelerometer(&aacx,&aacy,&aacz);    //以上三句为打印数据
delay_ms(500);
 t=0; 
 LED0=!LED0; 
}
}

t++:
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。