Fork me on GitHub


一 系统简介
1.简介
MPU-60x0 是全球首例 9 轴运动处理传感器。它集成了 3 轴MEMS陀螺仪,3 轴MEMS加速度计,以及一个可扩展的数字运动处理器 DMP(Digital Motion Processor)。MPU-60x0 对陀螺仪和加速度计分别用了三个 16 位的 ADC,将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为 ±250,±500,±1000,±2000°/秒(dps),加速度可测±2,±4,±8,±16g。
2.特性
  • 可读取加速度和角速度
  • 可读取温度
  • 可计算出倾斜角
二 源码解析
 
1.获取温度信息如下所示:
    short temp_per = MPU_Get_Temperature();

2.获取倾斜角和加速度信息如下所示:

    MPU_Get_Accelerometer(&aacx,&aacy,&aacz);
    MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);

    aacx = aacx + X_ACCEL_OFFSET;
    aacy = aacy + Y_ACCEL_OFFSET;
    aacz = aacz + Z_ACCEL_OFFSET;

    gyrox = gyrox + X_GYRO_OFFSET;
    gyroy = gyroy + Y_GYRO_OFFSET;
    gyroz = gyroz + Z_GYRO_OFFSET;

3.计算倾斜角度信息如下所示:

/****************************************************************************** 
* 函数介绍: 计算 x, y, z 三轴的倾角 
* 输入参数: 无 
* 输出参数: data:角度结构体 
* 返回值 : 无 
******************************************************************************/
void MPU6050_Get_Angle(mpu6050_angle *data,short aacx,short aacy, short aacz)
{   
    float f_aacx = float(aacx)/16384.0;
    float f_aacy = float(aacy)/16384.0;
    float f_aacz = float(aacz)/16384.0;
    /* 计算x, y, z 轴倾角,返回弧度值*/
    data->X_Angle = acos(f_aacx);
    data->Y_Angle = acos(f_aacy);
    data->Z_Angle = acos(f_aacz);

    TRACE("x_angle:%d y_angle:%d ",short(data->X_Angle),short(data->Y_Angle));

    /* 弧度值转换为角度值 */
    data->X_Angle = data->X_Angle * (double)57.29577;
    data->Y_Angle = data->Y_Angle * (double)57.29577;
    data->Z_Angle = data->Z_Angle * (double)57.29577;

} 
三 效果展示
1.效果展示如下所示:

 

四 参考文献
1.角度检测文献
posted on 2022-05-11 17:08  虚生  阅读(978)  评论(0编辑  收藏  举报