陀螺仪?磁力计?(持续更新)


陀螺仪?磁力计?(持续更新)

MPU6050,MPU9250,ICM20602,HMC5883L……十七届智能视觉确实是没有想到会需要学这么多的知识,学习了融合算法、矩阵变换、滤波算法等等,在此记录学习过程

从数据手册开始

MPU6050数据手册

ICM20602数据手册

HMC5883L数据手册

学会读芯片的数据手册非常重要,在微机课程中也学习了相关内容的操作

下面以MPU6050举例

可以看到这是设置MPU6050加速计的寄存器,是设置满量程范围的

举例:设置范围为±8g,则设置为000|10|000B = 10H,设置范围为±2g,则设置为000|00|000B = 00H

上图是读取MPU6050加速计数值的,

LSB Sensitivity对应的是加速计的灵敏度(分辨率)

当量程越大的时候,加速度计的灵敏度越低,也就是相应的误差也就越大,

举个??:咱们用米尺去测量蚂蚁的长度和用千分尺去测量蚂蚁的长度,后者的数据一定会比前

者的数据误差小

读取数据:

  //acc_data[0]左移8位,按位或上acc_data[1]就是X轴的加速计数据
  data->acc_x = (float)(int16_t)(acc_data[0] << 8 | acc_data[1]);

  data->acc_y = (float)(int16_t)(acc_data[2] << 8 | acc_data[3]);

  data->acc_z = (float)(int16_t)(acc_data[4] << 8 | acc_data[5]);

上图是设置MPU6050角速度计的寄存器,设置角速度的满量程,

举例:设置范围为±1000°/s,则设置为000|10|000B = 10H,设置范围为±250°/s,则设置为000|00|000B = 00H

上图同样是对于灵敏度的设置,在后续的数据处理中非常重要!

读取数据:

    //gyro_data[0]左移8位,按位或上gyro_data[1]就是X轴的加速计数据
    data->gyro_x = (float)(int16_t)(gyro_data[0] << 8 | gyro_data[1]);
    data->gyro_y = (float)(int16_t)(gyro_data[2] << 8 | gyro_data[3]);
    data->gyro_z = (float)(int16_t)(gyro_data[4] << 8 | gyro_data[5]);

数据处理