找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12711|回复: 16
收起左侧

51单片机怎么使用MPU6050读取角度值程序 ?

  [复制链接]
ID:171069 发表于 2017-4-8 10:40 | 显示全部楼层 |阅读模式
20黑币
目前只能初始化mpu6050,如何通过程序使陀螺仪和加速度计的初始值转化成角度??

回复

使用道具 举报

ID:173909 发表于 2017-4-8 19:01 | 显示全部楼层

#include <REG52.H>       
#include <math.h>    //Keil library  
#include <stdio.h>   //Keil library       
#include <INTRINS.H>


typedef unsigned char  uchar;
typedef unsigned short ushort;
typedef unsigned int   uint;

//******功能模块头文件*******
//#include "DELAY.H"                    //延时头文件
#include "lcd1602.H"                        //LCD1602文件
#include "MPU6050.H"                //MPU6050头文件

//******角度参数************
float Accel_ax;
float Accel_az;             //X轴加速度值暂存
float Angle;         //小车最终倾斜角度
uchar value;                 //角度正负极性标记
//float  Accel_x;
//float  Angle_ax;
//float Gyro_y;        //Y轴陀螺仪数据暂存
//*********************************************************
// 倾角计算(卡尔曼融合)
//*********************************************************

float Angle_Calcu(void)         
{
        //------加速度--------------------------

        //范围为2g时,换算关系:16384 LSB/g
        //角度较小时,x=sinx得到角度(弧度), deg = rad*180/3.14
        //因为x>=sinx,故乘以1.3适当放大

        Accel_ax  = GetData(ACCEL_XOUT_H);          //读取X轴加速度
        Accel_az  = GetData(ACCEL_ZOUT_H);          //读取X轴加速度
        Angle = (int)(atan(Accel_ax/Accel_az)*180/3.14);
/*        Accel_x  = GetData(ACCEL_XOUT_H);          //读取X轴加速度
        Angle_ax = (Accel_x - 1100) /16384;   //去除零点偏移,计算得到角度(弧度)
        Angle_ax = Angle_ax*1.2*180/3.14;     //弧度转换为度,
    return        Angle_ax;
        Gyro_y = GetData(GYRO_YOUT_H);              //静止时角速度Y轴输出为-30左右
        Gyro_y = -(Gyro_y + 30)/16.4;         //去除零点偏移,计算角速度值,负号为方向处理
        Angle  = Angle + Gyro_y*0.01;  //角速度积分得到倾斜角度.*/       
        return         Angle;                                                                                                          
}

void main()
{         //float ax,ay,az,xx,yy,zz;
    float xx;
        delay(500);                //上电延时               
        InitLcd();                //液晶初始化
        InitMPU6050();        //初始化MPU6050
        delay(150);
        while(1)
        {               
                xx=Angle_Calcu();
                lcd_printf(dis,xx);                        //转换数据显示
            DisplayListChar(2,0,dis,4);  
        }
}



这是我写的程序希望能解决
回复

使用道具 举报

ID:171069 发表于 2017-4-9 10:40 来自手机 | 显示全部楼层
mr_zhangpupu 发表于 2017-4-8 19:01
#include        
#include     //Keil library  
#include    //Keil library       

差了好多东西啊
回复

使用道具 举报

ID:148552 发表于 2017-4-10 21:00 | 显示全部楼层
陀螺仪直接读出来的值是没有任何意义的,但是可以通过四元数计算得到角度,这个角度就反应陀螺仪的实际角度
回复

使用道具 举报

ID:188289 发表于 2017-4-10 22:31 | 显示全部楼层
你需要使用模拟IIC来模拟时序 ,进行6轴原始数据读取,买模块的店家连接应该有程序,你直接移植过来
回复

使用道具 举报

ID:171069 发表于 2017-4-19 10:52 来自手机 | 显示全部楼层
caojunchocjc 发表于 2017-4-10 22:31
你需要使用模拟IIC来模拟时序 ,进行6轴原始数据读取,买模块的店家连接应该有程序,你直接移植过来

可以读取原始值,我想通过算法输出一个方向的角度,51用dmp没有必要
回复

使用道具 举报

ID:171069 发表于 2017-4-19 10:53 来自手机 | 显示全部楼层
你像风儿来了 发表于 2017-4-10 21:00
陀螺仪直接读出来的值是没有任何意义的,但是可以通过四元数计算得到角度,这个角度就反应陀螺仪的实际角度

不会啊
回复

使用道具 举报

ID:154197 发表于 2017-4-19 23:28 | 显示全部楼层
本帖最后由 helios 于 2017-4-19 23:32 编辑

角度的话可以用反三角函数,假设你把加速度计初始化为2g,那x轴的角度=180.0*asin((float)x/16384)/3.1416;
然后假设你把陀螺仪初始化为+-2000度/s,那x轴的角速度=gy/16.4
当然你会发现静止时角速度不为0,需要调零
回复

使用道具 举报

ID:221855 发表于 2017-7-25 16:02 | 显示全部楼层
用stc12c5a60s2写,怎样 用互补滤波?
回复

使用道具 举报

ID:148552 发表于 2017-7-25 20:21 | 显示全部楼层
这里面有,我自己测试过

IAP15W4K58S4-小四轴DIY.zip

577.07 KB, 下载次数: 433

回复

使用道具 举报

ID:222437 发表于 2017-7-26 00:48 | 显示全部楼层
我这有基于51单片,在1602显示角度的陀螺仪gy 271程序
回复

使用道具 举报

ID:224251 发表于 2017-8-3 09:15 | 显示全部楼层
启动MPU6050自带的DMP,从DMP中得到四元数,再进行欧拉公式换算,就能得到角度
回复

使用道具 举报

ID:221145 发表于 2017-10-15 22:50 | 显示全部楼层
参考参考
回复

使用道具 举报

ID:221145 发表于 2017-10-15 22:50 | 显示全部楼层
我也在找,51用DMP空间不够,不知道有没有更简单的方法
回复

使用道具 举报

ID:592012 发表于 2019-8-2 20:57 | 显示全部楼层
守护灵 发表于 2017-7-26 00:48
**** 作者被禁止或删除 内容自动屏蔽 ****

1361267482@qq.com,麻烦发一份
回复

使用道具 举报

ID:421308 发表于 2019-8-3 09:10 | 显示全部楼层
有没有原始数据转换的
回复

使用道具 举报

ID:233015 发表于 2019-8-14 00:22 来自手机 | 显示全部楼层
楼主,你好请问一下你这个问题解决了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表