智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: qiangkai311
打印 上一主题 下一主题

MPU6050

  [复制链接]

1

主题

373

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
14252

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
6571
贡献
4551
兑换币
4005
注册时间
2012-1-8
在线时间
1565 小时
41#
发表于 2013-9-7 20:23:33 | 只看该作者
表示瑞萨的单片机一直没读起
回复 支持 反对

使用道具 举报

11

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2311
威望
1210
贡献
743
兑换币
775
注册时间
2013-8-11
在线时间
179 小时
42#
发表于 2014-8-9 23:38:31 | 只看该作者
qiangkai311 发表于 2013-9-1 10:32
用的是IIC,S12模拟的,检测过了没有问题,用同样的时序获取了HMC5883的正常数据。。。。。。。

hellow,我也用S12 模拟的iic mpu6050 的数据可也采出,5883的怎么也猜不出来,地址也分开了,这是程序你怎么看??
#include "define.h"     
void GetDataS(uchar SlaveAddress,uchar REG_Address);
int16 x,y,z;
int16 tx,ty,tz;
float ax,ay,az;
float wx,wy,wz;
float atx,aty,atz;
int data_gauss[3]={0};
uchar data_t[6];
void Delay5us()
{
    _asm(nop);_asm(nop);_asm(nop);_asm(nop);
    _asm(nop);_asm(nop);_asm(nop);_asm(nop);
    _asm(nop);_asm(nop);_asm(nop);_asm(nop);
}
void main(void)
{
    float wave[4];
    SetBusCLK_80M();
    //EnableInterrupts;
    uart0_init();
    InitMPU6050();
    InitHMC5883L();
    for(;;)
     {
            x=GetData(SlaveAddress_6050,ACCEL_XOUT_H);
            y=GetData(SlaveAddress_6050,ACCEL_YOUT_H);
            z=GetData(SlaveAddress_6050,ACCEL_ZOUT_H);
            
            ax=MPU6050_Get_Angle(x,y,z,1);
            ay=MPU6050_Get_Angle(x,y,z,2);
            az=MPU6050_Get_Angle(x,y,z,0);
            
            wx=GetData(SlaveAddress_6050,GYRO_XOUT_H);
            wy=GetData(SlaveAddress_6050,GYRO_YOUT_H);
            wz=GetData(SlaveAddress_6050,GYRO_ZOUT_H);   
     
            /*uart0_printf("ax:",ax);uart0_printf("ay:",ay);uart0_printf("az:",az);
            uart0_printf("wx:",wx);uart0_printf("wy:",wy);uart0_printf("wz:",wz);
            uart0_putchar(0x0d);uart0_putchar(0x0a); */
            
           // wave[0]=ax*10;wave[1]=ay*10; wave[2]=az*10;
           // wave[0]=wx*10;wave[1]=wy*10; wave[2]=wz*10;
           //wave[0]=tx*10;wave[1]=ty*10; wave[2]=tz*10;
           
           GetDataS(0x3C,0x3);
           //wave[0]=data_gauss[0];wave[1]=data_gauss[1]; wave[2]=data_gauss[2];
           //wave[0]=BUF[0];wave[1]=BUF[2]; wave[2]=BUF[4];  
           OutPutData_DS(wave);   
           delay(400);
     }
}
float MPU6050_Get_Angle(float x,float y,float z,uchar dir)
{
float temp;
float res=0;
switch(dir)
{
case 0://与自然Z轴的角度
temp=z/sqrt((x*x+y*y));
res=atan(temp);
break;
case 1://与自然X轴的角度
temp=x/sqrt((y*y+z*z));
res=atan(temp);
break;
case 2://与自然Y轴的角度
temp=y/sqrt((x*x+z*z));
res=atan(temp);
break;
}
return res*180.0/3.1415926;//把弧度转换成角度
}
void GetDataS(uchar SlaveAddress,uchar REG_Address)
{
       uint8 i=0;   
               I2C_Start();                   //起始信号
        I2C_SendByte(0x3c);    //发送设备地址+写信号
        I2C_SendByte(0x3);     //发送存储单元地址,从0开始       
        I2C_Start();                   //起始信号
        I2C_SendByte(0x3d);  //发送设备地址+读信号
        for(i=0;i<6;i=i+1)
        {
            data_t=I2C_RecvByte();
            if(i<=4)I2C_SendACK(0);
            else I2C_SendACK(1);  
        }            
        I2C_Stop();                    //停止信号
        data_gauss[0]=data_t[0];//<<8|data_t[1];
        data_gauss[1]=data_t[2];//<<8|data_t[3];
        data_gauss[2]=data_t[4];//<<8|data_t[5];
}
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 03:50 , Processed in 0.040437 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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