获取mpu6050的十六位数据后如何转换为角度和加速度

#include <iom16v.h>
#include <macros.h>
#include <math.h>
#include "typedefine.h"
#include "delay.h"
#include "usart.h"
#include "LCD12864.h"
#include "LCD1602.h"
#include "mpu6050.h"
#include "mpu6050_iic.h"

//==============================================
int accel_x,accel_y,accel_z;
int gyro_x,gyro_y,gyro_z;

uint8 accel_x_data[5];//x轴加速度
uint8 accel_y_data[5];//y轴加速度
uint8 accel_z_data[5];//z轴加速度

uint8 angle_x_data[5];//x轴角度
uint8 angle_y_data[5];//y轴角度
uint8 angle_z_data[5];//z轴角度

uint8 mpudata[5];
//===============================================

void data_conversion(int data)
{
mpudata[0] = data/10000%10 + '0';
mpudata[1] = data/1000%10 + '0';
mpudata[2] = data/100%10 + '0';
mpudata[3] = data/10%10 + '0';
mpudata[4] = data/1%10 + '0';
}

//*****以下用l602液晶显示*********//
//======显示x轴加速度======
void display_accel_x(void)
{
int accel_x;
accel_x = GetData(ACCEL_XOUT_H);//x轴加速度十六位数据

if(accel_x < 0)
{
accel_x = -accel_x;
LCM_put_char(2,0,'-');
}

else
{
LCM_put_char(2,0,' ');
}

data_conversion(accel_x);

LCM_put_char(0,0,'x'); //第0行,第0列 显示X
LCM_put_char(1,0,':');
LCM_put_char(3,0,mpudata[0]);
LCM_put_char(4,0,mpudata[1]);
LCM_put_char(5,0,mpudata[2]);
LCM_put_char(6,0,mpudata[3]);
LCM_put_char(7,0,mpudata[4]);
}

//======显示y轴加速度======
void display_accel_y(void)
{
int accel_y;
accel_y = GetData(ACCEL_YOUT_H);//x轴加速度十六位数据

if(accel_y < 0)
{
accel_y = -accel_y;
LCM_put_char(2,1,'-');
}

else
{
LCM_put_char(2,1,' ');
}

data_conversion(accel_y);

LCM_put_char(0,1,'y'); //第0行,第0列 显示X
LCM_put_char(1,1,':');
LCM_put_char(3,1,mpudata[0]);
LCM_put_char(4,1,mpudata[1]);
LCM_put_char(5,1,mpudata[2]);
LCM_put_char(6,1,mpudata[3]);
LCM_put_char(7,1,mpudata[4]);
}

//======显示z轴加速度======
void display_accel_z(void)
{
int accel_z;
accel_z = GetData(ACCEL_ZOUT_H);//x轴加速度十六位数据

if(accel_z < 0)
{
accel_z = -accel_z;
LCM_put_char(9,1,'-');
}

else
{
LCM_put_char(9,1,' ');
}

data_conversion(accel_z);

LCM_put_char(9,0,'z'); //第0行,第0列 显示X
LCM_put_char(10,0,':');
LCM_put_char(10,1,mpudata[0]);
LCM_put_char(11,1,mpudata[1]);
LCM_put_char(12,1,mpudata[2]);
LCM_put_char(13,1,mpudata[3]);
LCM_put_char(14,1,mpudata[4]);
}

//*****以下用串口调试助手显示**********//
//=======显示x轴角速度=======
void display_angle_x(void)
{
gyro_x = GetData(GYRO_XOUT_H);//x轴加速度十六位数据

if(gyro_x < 0)
{
gyro_x = -gyro_x;
data_conversion(gyro_x);
putchar('-');
putchar(mpudata[0]);
putchar(mpudata[1]);
putchar(mpudata[2]);
putchar(mpudata[3]);
putchar(mpudata[4]);
}

else
{
data_conversion(gyro_x);
putchar(mpudata[0]);
putchar(mpudata[1]);
putchar(mpudata[2]);
putchar(mpudata[3]);
putchar(mpudata[4]);
}
}

//=======显示y轴角速度=======
void display_angle_y(void)
{
gyro_y = GetData(GYRO_YOUT_H);//x轴加速度十六位数据

if(gyro_y < 0)
{
gyro_y = -gyro_y;
data_conversion(gyro_y);
putchar('-');
putchar(mpudata[0]);
putchar(mpudata[1]);
putchar(mpudata[2]);
putchar(mpudata[3]);
putchar(mpudata[4]);
}

else
{
data_conversion(gyro_y);
putchar(mpudata[0]);
putchar(mpudata[1]);
putchar(mpudata[2]);
putchar(mpudata[3]);
putchar(mpudata[4]);
}
}

//=======显示z轴角速度=======
void display_angle_z(void)
{
gyro_z = GetData(GYRO_ZOUT_H);//x轴加速度十六位数据

if(gyro_z < 0)
{
gyro_z = -gyro_z;
data_conversion(gyro_z);
putchar('-');
putchar(mpudata[0]);
putchar(mpudata[1]);
putchar(mpudata[2]);
putchar(mpudata[3]);
putchar(mpudata[4]);
}

else
{
data_conversion(gyro_z);
putchar(mpudata[0]);
putchar(mpudata[1]);
putchar(mpudata[2]);
putchar(mpudata[3]);
putchar(mpudata[4]);
}

}

 

请问如何解决这个问题,我是大一的。刚学,不太懂如何融合,哪位前辈大神能帮我解答一下?

集成小杰 发表于08-08 14:54 浏览65535次
分享到:

已有2条评论

  • 3w之王少
    3w之王少 08-10 15:56

        回复 3w之王少:AHx<<8|alx/32767*16

  • 3w之王少
    3w之王少 08-10 15:52

    可以试着角度去推算

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

集成小杰
集成小杰(上士)
金币:106个|学分:456个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号