请教关于MPU6050采样频率和DMP输出频率的问题

2019-07-20 00:36发布

最近在做风力摆系统,用到MPU6050,在MPU6050初始化中,有多处涉及初始化频率的地方,小白一个,希望大佬可以帮助以下,谢谢啦。
在MPU_Init()中
  1. //初始化MPU6050
  2. //返回值:0,成功
  3. //    其他,错误代码
  4. u8 MPU_Init(void)
  5. {
  6.         u8 res;
  7.         IIC_Init();//初始化IIC总线
  8.        
  9.         delay_ms(1000);
  10.        
  11.         MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80);        //复位MPU6050
  12.     delay_ms(100);
  13.         MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00);        //唤醒MPU6050
  14.         MPU_Set_Gyro_Fsr(3);                                        //陀螺仪传感器,±2000dps
  15.         MPU_Set_Accel_Fsr(0);                                        //加速度传感器,±2g
  16.         MPU_Set_Rate(50);                                                //设置采样率50Hz
  17.         MPU_Write_Byte(MPU_INT_EN_REG,0X00);        //关闭所有中断
  18.         MPU_Write_Byte(MPU_USER_CTRL_REG,0X00);        //I2C主模式关闭
  19.         MPU_Write_Byte(MPU_FIFO_EN_REG,0X00);        //关闭FIFO
  20.         MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80);        //INT引脚低电平有效
  21.         res=MPU_Read_Byte(MPU_DEVICE_ID_REG);
  22.         if(res==MPU_ADDR)//器件ID正确
  23.         {
  24.                 MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01);        //设置CLKSEL,PLL X轴为参考
  25.                 MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00);        //加速度与陀螺仪都工作
  26.                 //MPU_Set_Rate(50);                                                //设置采样率为50Hz
  27.                 MPU_Set_Rate(200);
  28.         }else return 1;
  29.         return 0;
  30. }
复制代码初始化了两次采样频率。
在mpu_dmp_init()
  1. //mpu6050,dmp初始化
  2. //返回值:0,正常
  3. //    其他,失败
  4. u8 mpu_dmp_init(void)
  5. {
  6.         u8 res=0;
  7.         IIC_Init();                 //初始化IIC总线
  8.         if(mpu_init()==0)        //初始化MPU6050
  9.         {         
  10.                 res=mpu_set_sensors(INV_XYZ_GYRO|INV_XYZ_ACCEL);//设置所需要的传感器
  11.                 if(res)return 1;
  12.                 res=mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL);//设置FIFO
  13.                 if(res)return 2;
  14.                 res=mpu_set_sample_rate(DEFAULT_MPU_HZ);        //设置采样率
  15.                 if(res)return 3;
  16.                 res=dmp_load_motion_driver_firmware();                //加载dmp固件
  17.                 if(res)return 4;
  18.                 res=dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation));//设置陀螺仪方向
  19.                 if(res)return 5;
  20.                 res=dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT|DMP_FEATURE_TAP|        //设置dmp功能
  21.                     DMP_FEATURE_ANDROID_ORIENT|DMP_FEATURE_SEND_RAW_ACCEL|DMP_FEATURE_SEND_CAL_GYRO|
  22.                     DMP_FEATURE_GYRO_CAL);
  23.                 if(res)return 6;
  24.                 res=dmp_set_fifo_rate(DEFAULT_MPU_HZ);        //设置DMP输出速率(最大不超过200Hz)
  25.                 if(res)return 7;   
  26.                 res=run_self_test();                //自检
  27.                 if(res)return 8;   
  28.                 res=mpu_set_dmp_state(1);        //使能DMP
  29.                 if(res)return 9;     
  30.         }
  31.         return 0;
  32. }
复制代码初始化了DMP输出输出频率
————————————————————————————————————————————————————————————————————————————————————————————
一些疑问:
      1.为什么要初始化两次采样频率
      2.为什么采样频率比DMP输出频率低
      3.如果我以200HZ频率读取DMP,可以吗?需要修改DMP输出频率和采样频率吗?
      4.谢谢大家









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