MPU9250配置及原始数据读取

MPU9250配置及原始数据读取


1.  初始化:

(1)对部分寄存器进行了解:

#define SMPLRT_DIV                 0X19 //陀螺仪采样率典型值为0X07 1000/(1+7)=125HZ

#define CONFIG                         0X1A //低通滤波器  典型值0x06 5hz

#define GYRO_CONFIG                0X1B //陀螺仪测量范围 0X18 正负2000

#define ACCEL_CONFIG            0X1C //加速度计测量范围 0X18 正负16g

#define ACCEL_CONFIG2           0X1D //加速度计低通滤波器 0x06 5hz

#define PWR_MGMT_1                  0X6B//电源管理1 典型值为0x00

#define PWR_MGMT_2                 0X6C //电源管理2 典型值为0X00

 

#define WHO_AM_I                    0X75 //器件ID MPU9250默认ID0X71

#define USER_CTRL                   0X6A //用户配置当为0X10时使用SPI模式

 

#define MPU9250_CS        PDout(3) //MPU9250片选信号

#define I2C_ADDR                    0X68  //i2c的地址   

#define ACCEL_XOUT_H            0X3B  //加速度计输出数据

#define ACCEL_XOUT_L            0X3C

#define ACCEL_YOUT_H            0X3D

#define ACCEL_YOUT_L            0X3E

#define ACCEL_ZOUT_H            0X3F

#define ACCEL_ZOUT_L            0X40

 

#define TEMP_OUT_H               0X41  //温度计输出数据

#define TEMP_OUT_L               0X42

 

#define GYRO_XOUT_H              0X43  //陀螺仪输出数据

#define GYRO_XOUT_L              0X44

#define GYRO_YOUT_H              0X45

#define GYRO_YOUT_L              0X46

#define GYRO_ZOUT_H              0X47

#define GYRO_ZOUT_L                 0X48

当然以上的都是把数据手册的地址进行定义

(2)初始化配置

  先看一下数据手册

MPU9250配置及原始数据读取_第1张图片

即存在MPU9250就可以从这个地址中读出固定ID :0x71

MPU9250配置及原始数据读取_第2张图片

即陀螺仪采样率=1000/1+SMPLRT_DIV

MPU9250配置及原始数据读取_第3张图片

加速度计测量范围配置

MPU9250配置及原始数据读取_第4张图片

加速度采样频率配置

接下来就是实现代码

 //MPU9250初始化

int MPU9250_Init(void)

{

    uint8_t value;

   I2CReadBytes(I2C_ADDR,(WHO_AM_I|0x80),1,&value);//获取器件ID

    if(value==0x71)

    {

       I2CWriteBytes(I2C_ADDR,PWR_MGMT_1,1,0X80);  //电源管理,复位MPU9250

          DBG_PRINTF("MPU9250Inint OK!!!\n");

       I2CWriteBytes(I2C_ADDR,SMPLRT_DIV,1,0x07);//陀螺仪采样率1000/(1+7)=125HZ

       I2CWriteBytes(I2C_ADDR,CONFIG,1,0X06); //低通滤波器 0x06 5hz

       I2CWriteBytes(I2C_ADDR,ACCEL_CONFIG,1,0x18); //加速度计测量范围 0X18 正负16g

       I2CWriteBytes(I2C_ADDR,ACCEL_CONFIG2,1,0x00); //加速度采样频率460HZ

       return 0;

    }

    return 1;

}

2.读取数据

MPU9250配置及原始数据读取_第5张图片

MPU9250配置及原始数据读取_第6张图片

MPU9250配置及原始数据读取_第7张图片

这里 贴出加速度XYZ轴的寄存器数据手册,接下来就是,温度,然后角速度XYZ轴,地址是连续的。

/*MPU9250数据读取*/

int MPU9250_ReadValues(void *bleData)

{

   struct sensor_9axis_data *tmp=NULL;

   int8_t MPU9250_buf[14];

   tmp = (struct sensor_9axis_data *) bleData;

  I2CReadBytes(I2C_ADDR,(ACCEL_XOUT_H),14,MPU9250_buf);

   MPU9250_ACC_LAST.X = ((int16_t)MPU9250_buf[0]<<8)| MPU9250_buf[1];//加速度原始数据

   MPU9250_ACC_LAST.Y = ((int16)MPU9250_buf[2]<<8)| MPU9250_buf[3];

   MPU9250_ACC_LAST.Z = ((int16)MPU9250_buf[4]<<8)| MPU9250_buf[5];

   MPU9250_TEMP_LAST =  ((int16)MPU9250_buf[6]<<8) |MPU9250_buf[7];//温度

   MPU9250_GYRO_LAST.X = ((int16)MPU9250_buf[8]<<8)| MPU9250_buf[9];//角速度原始数据

   MPU9250_GYRO_LAST.Y = ((int16)MPU9250_buf[10]<<8)| MPU9250_buf[11];

   MPU9250_GYRO_LAST.Z = ((int16)MPU9250_buf[12]<<8)| MPU9250_buf[13];

    return 0;

}

你可能感兴趣的:(传感器,MPU9250)