OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 21982|回复: 47

原子哥 与偶没有stm32读取mpu6050的代码,寄存器版本的,搞了一天了 就是读不出数据

[复制链接]

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2013-3-24
在线时间
6 小时
发表于 2013-4-16 21:00:09 | 显示全部楼层 |阅读模式
模拟的IIC,不知道怎么搞的   各种豆试了,就是不正常,我也参考ADL345的了,还是不正常,不知道哪出问题了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-4-16 23:05:52 | 显示全部楼层
先读写寄存器,看正常不...
另外,你的IIC没有接其他外设吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2013-3-24
在线时间
6 小时
 楼主| 发表于 2013-4-17 05:58:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
读写也不正常  肯定是IIC的问题,我读初始化后的寄存器都是不对的,但是我改变初始化的值,读出的值也发生变化   读数据寄存器的返回值都是257,但是IIC我也参照了好久  没有发现问题啊
回复 支持 反对

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2013-3-24
在线时间
6 小时
 楼主| 发表于 2013-4-17 05:59:00 | 显示全部楼层
IIC   么有其他外设
回复 支持 反对

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2013-3-24
在线时间
6 小时
 楼主| 发表于 2013-4-17 07:46:02 | 显示全部楼层
我初始化后再读这个寄存器的值  都不对
回复 支持 反对

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2013-3-24
在线时间
6 小时
 楼主| 发表于 2013-4-17 07:50:44 | 显示全部楼层
这是代码  

10、IIC.zip

413.26 KB, 下载次数: 2017

回复 支持 反对

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2013-3-24
在线时间
6 小时
 楼主| 发表于 2013-4-17 09:11:25 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我用的操作24c02的模拟IIC的程序,但是引脚一定要配置为推完》?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-4-17 10:17:10 | 显示全部楼层
回复【7楼】chenjiawei7:
---------------------------------
看情况的.输出用推挽,输入用上拉输入.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2013-3-24
在线时间
6 小时
 楼主| 发表于 2013-4-17 12:29:52 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
目前即使这样用的  我是在定时器中断500ms里读的mpu6050,是不是有关系?还有就是端口用的是ODR控制的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-4-17 14:23:08 | 显示全部楼层
回复【9楼】chenjiawei7:
---------------------------------
中断读取是可以,怀疑你IO设置没搞对.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2013-3-24
在线时间
6 小时
 楼主| 发表于 2013-4-17 15:09:49 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
附件在上面  你帮我看看呗  我貌似卡这了。。谢谢哈
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-4-17 20:32:46 | 显示全部楼层
回复【11楼】chenjiawei7:
---------------------------------
看了下,IIC初始化部分,没有错误.
那就怀疑是不是你的MPU挂了,你把PB8,PB9接到其他IIC设备测试下看看.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2013-3-24
在线时间
6 小时
 楼主| 发表于 2013-4-17 21:07:30 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
6050应该没有坏  我在以前的单片机上试的,可以用,真是不知道怎么回事  块崩溃了啊。。。
回复 支持 反对

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2013-4-18 15:29:17 | 显示全部楼层
嘿嘿,搞平衡车还是飞控?Mpu6050非常简单阿。那个示波器看看时序吧。
回复 支持 反对

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2013-4-22 12:02:43 | 显示全部楼层
你没有发现你的I2c的时序不满足i2c的要求吗?
//IIC 起始信号 
void IIC_Start(void) 
  SDA_OUT(); //sda 线输出,作为输出 
  SDA=1;             
  delay_us(4); 
  SCL=1; 
  delay_us(4); 
  SDA=0; //拉低总线   
  delay_us(4); 
  SCL=0; //钳住 I2C 总线,准备发送或接收数据 
  delay_us(4);  
  }       
//产生 IIC 停止信号 
昨天花了一个小时写的mpu6050 I/0模拟 i2c的底层驱动你可以看看。我已经成功读出mpu6050。因为我当初上当买了神州王的板子。主板硬件定义和原子的不一样,注意自己修改。


#define MPU6050_Addr   0xD0  //定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改 //这里注意了!!!i2c器件地址是7bit 不是8bit,而模拟i2c的用7bit传送因此是0xd0 器件A0引脚是接地。但是对于who am I 寄存器读出后是0x68. bin编码方向而已。
//****************************************
// 定义MPU6050内部地址
//****************************************
#define SMPLRT_DIV      0x19    //陀螺仪采样率,典型值:0x07(125Hz)
#define CONFIG          0x1A    //低通滤波频率,典型值:0x06(5Hz)
#define GYRO_CONFIG     0x1B    //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
#define ACCEL_CONFIG    0x1C    //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)
#define ACCEL_XOUT_H    0x3B
#define ACCEL_XOUT_L    0x3C
#define ACCEL_YOUT_H    0x3D
#define ACCEL_YOUT_L    0x3E
#define ACCEL_ZOUT_H    0x3F
#define ACCEL_ZOUT_L    0x40
#define TEMP_OUT_H      0x41
#define TEMP_OUT_L      0x42
#define GYRO_XOUT_H     0x43
#define GYRO_XOUT_L     0x44    
#define GYRO_YOUT_H     0x45
#define GYRO_YOUT_L     0x46
#define GYRO_ZOUT_H     0x47
#define GYRO_ZOUT_L     0x48
#define PWR_MGMT_1      0x6B    //电源管理,典型值:0x00(正常启用)
#define WHO_AM_I        0x75    //IIC地址寄存器(默认数值0x68,只读)

void MPU6050_GPIO_Config(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure; 
 
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/*******************************************************************************
* Function Name : I2C_Start 
* Description   : Master Start Simulation IIC Communication
* Input         : None
* Output         : None
* Return         : Wheather Start
****************************************************************************** */
bool MPU6050_I2C_Start(void)
{
MPU6050_SDA_H;
MPU6050_SCL_H;
delay_us(4);
if(!MPU6050_SDA_read)return FALSE; //SDA线为低电平则总线忙,退出
MPU6050_SDA_L;
delay_us(4);
if(MPU6050_SDA_read) return FALSE; //SDA线为高电平则总线出错,退出
MPU6050_SDA_L;
delay_us(4);
return TRUE;
}
/*******************************************************************************
* Function Name : I2C_Stop
* Description   : Master Stop Simulation IIC Communication
* Input         : None
* Output         : None
* Return         : None
****************************************************************************** */
void MPU6050_I2C_Stop(void)
{
MPU6050_SCL_L;
delay_us(4);
MPU6050_SDA_L;
delay_us(4);
MPU6050_SCL_H;
delay_us(4);
MPU6050_SDA_H;
delay_us(4);
/*******************************************************************************
* Function Name : I2C_Ack
* Description   : Master Send Acknowledge Single
* Input         : None
* Output         : None
* Return         : None
****************************************************************************** */
void MPU6050_I2C_Ack(void)
{
MPU6050_SCL_L;
delay_us(1);
MPU6050_SDA_L;
delay_us(1);
MPU6050_SCL_H;
delay_us(1);
MPU6050_SCL_L;
delay_us(1);
}   
/*******************************************************************************
* Function Name : I2C_NoAck
* Description   : Master Send No Acknowledge Single
* Input         : None
* Output         : None
* Return         : None
****************************************************************************** */
void MPU6050_I2C_NoAck(void)
{
MPU6050_SCL_L;
delay_us(1);
MPU6050_SDA_H;
delay_us(1);
MPU6050_SCL_H;
delay_us(1);
MPU6050_SCL_L;
delay_us(1);
/*******************************************************************************
* Function Name : I2C_WaitAck
* Description   : Master Reserive Slave Acknowledge Single
* Input         : None
* Output         : None
* Return         : Wheather Reserive Slave Acknowledge Single
****************************************************************************** */
bool MPU6050_I2C_WaitAck(void) //返回为:=1有ACK,=0无ACK
{
MPU6050_SCL_L;
delay_us(1);
MPU6050_SDA_H;
delay_us(1);
MPU6050_SCL_H;
delay_us(1);
if(MPU6050_SDA_read)
{
      MPU6050_SCL_L;
 delay_us(1);
      return FALSE;
}
MPU6050_SCL_L;
delay_us(1);
return TRUE;
}
/*******************************************************************************
* Function Name : I2C_SendByte
* Description   : Master Send a Byte to Slave
* Input         : Will Send Date
* Output         : None
* Return         : None
****************************************************************************** */
void MPU6050_I2C_SendByte(u8 SendByte) //数据从高位到低位//
{
    u8 i=8;
    while(i--)
    {
        MPU6050_SCL_L;
        delay_us(1);
      if(SendByte&0x80)
        MPU6050_SDA_H;  
      else 
        MPU6050_SDA_L;   
        SendByte<<=1;
        delay_us(1);
MPU6050_SCL_H;
        delay_us(1);
    }
    MPU6050_SCL_L;
}  
/*******************************************************************************
* Function Name : I2C_RadeByte
* Description   : Master Reserive a Byte From Slave
* Input         : None
* Output         : None
* Return         : Date From Slave 
****************************************************************************** */
unsigned char MPU6050_I2C_RadeByte(void)  //数据从高位到低位//
    u8 i=8;
    u8 ReceiveByte=0;

    MPU6050_SDA_H;
    while(i--)
    {
      ReceiveByte<<=1;      
      MPU6050_SCL_L;
      delay_us(1);
 MPU6050_SCL_H;
      delay_us(1);
      if(MPU6050_SDA_read)
      {
        ReceiveByte|=0x01;
      }
    }
    MPU6050_SCL_L;
    return ReceiveByte;
}

mpu6050 api

//初始化MPU6050,根据需要请参考pdf进行修改************************
void Init_MPU6050(void)
{
   Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x00);   //
   Single_Write(MPU6050_Addr,SMPLRT_DIV, 0x07);    //
   Single_Write(MPU6050_Addr,CONFIG,0x03); //输出采样率=1khz/1+7(smpl——div)=125hz
   Single_Write(MPU6050_Addr,GYRO_CONFIG, 0x00);    //±250°
   Single_Write(MPU6050_Addr,ACCEL_CONFIG, 0x00 );  //
  
}
//单字节写入*******************************************

bool Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char REG_data)     //void
{
  if(!MPU6050_I2C_Start())return FALSE;
    MPU6050_I2C_SendByte(SlaveAddress);   //发送设备地址+写信号//I2C_SendByte(((REG_Address & 0x0700) >>7) | SlaveAddress & 0xFFFE);//设置高起始地址+器件地址 
    if(!MPU6050_I2C_WaitAck()){MPU6050_I2C_Stop(); return FALSE;}
    MPU6050_I2C_SendByte(REG_Address );   //设置低起始地址      
    MPU6050_I2C_WaitAck();
    MPU6050_I2C_SendByte(REG_data);
    MPU6050_I2C_WaitAck();   
    MPU6050_I2C_Stop(); 
    delay_ms(5);
    return TRUE;
}

//单字节读取*****************************************
unsigned char Single_Read(unsigned char SlaveAddress,unsigned char REG_Address)
{   unsigned char REG_data;    
if(!MPU6050_I2C_Start())return FALSE;
    MPU6050_I2C_SendByte(SlaveAddress); //I2C_SendByte(((REG_Address & 0x0700) >>7) | REG_Address & 0xFFFE);//设置高起始地址+器件地址 
    if(!MPU6050_I2C_WaitAck()){MPU6050_I2C_Stop(); return FALSE;}
    MPU6050_I2C_SendByte((u8) REG_Address);   //设置低起始地址      
    MPU6050_I2C_WaitAck();
    MPU6050_I2C_Start();
    MPU6050_I2C_SendByte(SlaveAddress+1);
    MPU6050_I2C_WaitAck();

REG_data= MPU6050_I2C_RadeByte();
    MPU6050_I2C_NoAck();
    MPU6050_I2C_Stop();
    //return TRUE;
return REG_data;

}//检查MPU6050是否正常
//对于6050检查who am I 寄存器 
//返回1:检测失败
//返回0:检测成功
u8 MPU6050_Check(void)
{
u8 temp;
temp=Single_Read(MPU6050_Addr,WHO_AM_I);   
if(temp==0X68)return 0;   
else
return 1;  
}


回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-3-22
在线时间
3 小时
发表于 2013-4-27 20:03:20 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-3-22
在线时间
3 小时
发表于 2013-4-27 20:08:10 | 显示全部楼层
回复【6楼】chenjiawei7:
---------------------------
看了之后,才发现太需要了,谢谢了
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2013-4-28
在线时间
1 小时
发表于 2013-4-28 23:33:18 | 显示全部楼层
回复【楼主位】chenjiawei7:
---------------------------------
楼主有没有解决问题啊?  求助攻,QQ295669373.
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2013-4-28
在线时间
1 小时
发表于 2013-4-28 23:33:50 | 显示全部楼层
回复【14楼】bg8wj:
---------------------------------
哥们能问个问题吗?   QQ295669373
回复 支持 反对

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2013-4-30 09:59:07 | 显示全部楼层
18楼?有问题吗?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-5-21
在线时间
0 小时
发表于 2013-5-21 21:04:56 | 显示全部楼层
回复【15楼】bg8wj:
---------------------------------
哥们 问个问题   怎么确定slaveaddress,根据ALT ADDRESS地址引脚不同修改  什么意思
回复 支持 反对

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2013-5-22 22:32:47 | 显示全部楼层
详细请看官网的ps page34对于Serial Interface 的表格,AD0 I2C Slave Address LSB。
回复 支持 反对

使用道具 举报

3

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-7-8
在线时间
0 小时
发表于 2013-7-8 20:20:48 | 显示全部楼层
楼主发个完整的程序吧
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-7-26
在线时间
0 小时
发表于 2013-7-26 19:09:36 | 显示全部楼层
求一份MPU6050的STM32的程序,小弟最近在学。一直搞不出来。邮箱1246884224@qq.com.谢啦
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-7-26
在线时间
0 小时
发表于 2013-7-26 19:10:28 | 显示全部楼层
回复【22楼】bg8wj:
---------------------------------
大神帮帮忙,有没有完整的程序
回复 支持 反对

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2013-7-26 22:39:09 | 显示全部楼层
写之前清休眠位了吗?不然写无效的!
于20150522停用该账号:http://www.microstar.club
回复 支持 反对

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-5-5
在线时间
0 小时
发表于 2013-8-12 20:27:15 | 显示全部楼层
回复【7楼】chenjiawei7:
---------------------------------
一定要用开漏  不然读不出6050的管脚电平变化的。。。   外加上拉电阻即可
回复 支持 反对

使用道具 举报

4

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2012-10-16
在线时间
84 小时
发表于 2013-8-25 08:37:46 | 显示全部楼层
我以前调345的时候也遇到过这情况,后来在发送完读数据后面加个小延时就好了,你也可以试试
回复 支持 反对

使用道具 举报

54

主题

194

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
金钱
430
注册时间
2013-11-2
在线时间
0 小时
发表于 2014-3-6 15:53:50 | 显示全部楼层
回复【楼主位】chenjiawei7:
---------------------------------
我这两天也在用STM32驱动mpu,问题是我读出的器件是209,而其他所有储存角度及加速度的寄存器都是1,求交流
回复 支持 反对

使用道具 举报

54

主题

194

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
金钱
430
注册时间
2013-11-2
在线时间
0 小时
发表于 2014-3-11 10:10:31 | 显示全部楼层
回复【29楼】周小样:
---------------------------------
亲,你的这个问题解决了没?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-6-26
在线时间
0 小时
发表于 2014-7-1 14:03:08 | 显示全部楼层
回复【15楼】bg8wj:
---------------------------------
大侠好!小女子遇到一问题想请教大侠~
1)检测6050时总是返回1,也就是说总失败。
2)如果去掉检测的话,显示的加速度、欧拉角的值总为0。
请教大侠这会是什么问题呢?
回复 支持 反对

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2014-8-18 20:29:31 | 显示全部楼层
前段时间很忙,没有再继续,现在统一说一下,各位的问题,对于6050检查的问题返回1 或255 都是没有正确的读取到数字,首先要排除硬件故障,请接上示波器看一下IIC的通讯是否正确。在程序上我推荐各位参考一下 原子的 IIC的底层驱动,会节约你不少时间。排除硬件、底层驱动后,mpu6050的问题就集中在初始化的问题上,这个需要你认真读一读 6050的datasheet,这个真不是一句话说的清楚的。关键点在调用程序后返回值是0就bingo了。然后的话四元素、卡曼是各位的造化了。
//检查MPU6050是否正常
//对于6050检查who am I 寄存器 
//返回1:检测失败
//返回0:检测成功
u8 MPU6050_Check(void)
{
u8 temp;
temp=Single_Read(MPU6050_Addr,WHO_AM_I);    
if(temp==0X68)return 0;    
else
 return 1;   
}
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2013-8-19
在线时间
0 小时
发表于 2014-8-25 01:00:20 | 显示全部楼层
回复【29楼】周小样:
---------------------------------
亲,你这问题应该解决了吧。。。。帮帮忙。。。。
回复 支持 反对

使用道具 举报

54

主题

194

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
金钱
430
注册时间
2013-11-2
在线时间
0 小时
发表于 2014-8-25 13:48:38 | 显示全部楼层
回复【33楼】霹雳华:
---------------------------------
你的是什么问题?
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2013-8-19
在线时间
0 小时
发表于 2014-8-25 15:07:09 | 显示全部楼层
回复【34楼】周小样:
---------------------------------
我读出的器件是209,而其他所有储存角度及加速度的寄存器都是1
回复 支持 反对

使用道具 举报

54

主题

194

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
金钱
430
注册时间
2013-11-2
在线时间
0 小时
发表于 2014-8-25 19:24:59 | 显示全部楼层
回复【35楼】霹雳华:
---------------------------------
IIC通信协议有问题,用逻辑分析仪看一下哪里错了
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2013-8-19
在线时间
0 小时
发表于 2014-8-26 12:54:52 | 显示全部楼层
回复【36楼】周小样:
---------------------------------
实验室条件差,没这东西。。。不过现在解决了,是IIC的问题。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-12-5
在线时间
0 小时
发表于 2014-12-6 17:06:34 | 显示全部楼层

回复【15楼】bg8wj:
---------------------------------
MPU6050_Check()函数读出来的temp是0XFF怎么办?

会是哪儿出问题呢?


回复 支持 反对

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2014-12-7 23:03:51 | 显示全部楼层
回复【38楼】PYPXY:
---------------------------------
I2c 总线错误,用示波器接在i2c上看看。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-12-5
在线时间
0 小时
发表于 2014-12-8 09:49:44 | 显示全部楼层
回复【39楼】bg8wj:
---------------------------------
嗯嗯,你说的太对了,就是IIC总线的问题,现在成功解决啦!
但是现在问题又来了:
如何由读出的原始数据得到姿态角等参数呢?
读出的原始数据好像是补码吗?
回复 支持 反对

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2014-12-8 21:45:45 | 显示全部楼层
所谓补码大部分是总线的问题。因此数据看来总是0xfx的。另外一种就是软件中数据处理出错。
关于如何得出各种数据的话,你先看看数据手册,先把单个数据换算正确,
然后么好好看看卡尔曼滤波,然后才是数据融合,现在一般喜欢使用4元素来做。
关于滤波我想多说点,不要使用哪种小学数学的加权值来计算。好好看看卡尔曼滤波论文。这部分占时没有
时间科普。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-12-16
在线时间
6 小时
发表于 2014-12-18 22:08:27 | 显示全部楼层
iic读出来角速度不同角度都不一样,角速度会随角度变化?
角速度应该静止的时候是不动的吧,求解?
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-15
在线时间
0 小时
发表于 2015-4-15 22:49:21 | 显示全部楼层
回复【37楼】霹雳华:
---------------------------------请问怎么解决209问题的?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2015-6-27
在线时间
0 小时
发表于 2015-6-27 19:58:40 | 显示全部楼层
请问一下为什么一定要配置成开漏?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-7-22
在线时间
0 小时
发表于 2015-7-23 21:42:27 | 显示全部楼层
如果IIC导通后,用串口调试显示的数据会变化吗?
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-5-1
在线时间
1 小时
发表于 2015-8-17 20:24:31 | 显示全部楼层
回复【27楼】mengyuwei290:
---------------------------------
为什么要设置成开漏?(确实设置成开漏输出就可以了)
回复 支持 反对

使用道具 举报

34

主题

178

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-11-1
在线时间
183 小时
发表于 2015-12-28 15:55:40 | 显示全部楼层
bg8wj 发表于 2014-12-7 23:03
回复【38楼】PYPXY:
---------------------------------
I2c&nbsp;总线错误,用示波器接在i2c上看看。

怎么用示波器调试IIC
回复 支持 反对

使用道具 举报

18

主题

190

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1068
金钱
1068
注册时间
2012-6-18
在线时间
158 小时
发表于 2016-10-16 22:52:57 | 显示全部楼层
总算回国正常访问天朝论坛了。示波器设定在器件容忍电压为读数单元格,时间同步一下发送0xff,很好看的。另外mpu原件的数据,是二次微分的值,积分二次才是角度,和位移。时间周期就是最终积分结果影响因素之一,器件滤波处理要考虑系统谐振频率。yaw要考虑惯性坐标系地球重力简单说地球的章动,静动。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 03:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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