陀螺仪?磁力计?(持续更新)
陀螺仪?磁力计?(持续更新)
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]);