智能车制作

标题: L3G4200D陀螺仪问题 [打印本页]

作者: CP19940613    时间: 2014-11-27 22:43
标题: L3G4200D陀螺仪问题
各位大神,小弟今天用L3G4200D的时候发现K60硬件IIC读取数据有点问题,如果陀螺仪不动,读取值的会有一些波动,如果晃动陀螺仪读出来的值就全1成65535了,不知道有没有用L3G4200D的亲,你们的L3G4200D有没有这个情况啊?
作者: abacrya、军    时间: 2014-11-27 23:33
L3G4200_OPEN(400 * 1000);     //初始化L3G4200接口,设置波特率 400k   
   L3G4200_WR(CTRL_REG1, 0x0b);  //启用X和Y,//禁用Z轴
   L3G4200_WR(CTRL_REG2, 0x00);  //
   L3G4200_WR(CTRL_REG3, 0x08);  //
   L3G4200_WR(CTRL_REG4, 0x30);  //+-2000dps
   L3G4200_WR(CTRL_REG5, 0x00);

#define            L3G4200_ADRESS     0x69          //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改
就这几个重要点。。。其他的都是按照给的例子改的
作者: allenanswerzq    时间: 2014-11-28 10:08
看看变量类型
作者: CP19940613    时间: 2014-11-28 22:41
abacrya、军 发表于 2014-11-27 23:33
L3G4200_OPEN(400 * 1000);     //初始化L3G4200接口,设置波特率 400k   
   L3G4200_WR(CTRL_REG1, 0x0 ...

哦哦,谢谢,发现Y轴读出来不论在什么情况下都是65535,看来我是要确定他坏了
作者: CP19940613    时间: 2014-11-28 22:42
allenanswerzq 发表于 2014-11-28 10:08
看看变量类型

这个也有影响啊?
作者: allenanswerzq    时间: 2014-11-28 22:50
CP19940613 发表于 2014-11-28 22:42
这个也有影响啊?

有啊,比如你定义成无符号16位的,但结果是-1,不就成65535了吗

作者: CP19940613    时间: 2014-11-29 10:24
allenanswerzq 发表于 2014-11-28 22:50
有啊,比如你定义成无符号16位的,但结果是-1,不就成65535了吗

啊!!!学习了
作者: 有你不孤单    时间: 2014-12-4 20:36
abacrya、军 发表于 2014-11-27 23:33
L3G4200_OPEN(400 * 1000);     //初始化L3G4200接口,设置波特率 400k   
   L3G4200_WR(CTRL_REG1, 0x0 ...

我的读出来为什么是255,而且一直是255,也不变化!!
作者: abacrya、军    时间: 2014-12-4 22:07
有你不孤单 发表于 2014-12-4 20:36
我的读出来为什么是255,而且一直是255,也不变化!!

一直是255,,看看IIC接口是不是对的,,我用的是C10 C11,即IIC1,,,,
//宏定义调用底层的I2C接口
#define L3G4200_OPEN(baud)      i2c_init(L3G4200_DEVICE,baud)
#define L3G4200_WR(reg,value)   i2c_write_reg(L3G4200_DEVICE,L3G4200_ADRESS,reg,value)  //L3G4200 写寄存器
#define L3G4200_RD(reg)         i2c_read_reg(L3G4200_DEVICE,L3G4200_ADRESS,reg)             //L3G4200 读寄存器

void L3G4200_init(void)
{
   L3G4200_OPEN(400 * 1000);     //初始化L3G4200接口,设置波特率 400k   
   L3G4200_WR(CTRL_REG1, 0x0b);  //启用X和Y轴z,//禁用Z轴
   L3G4200_WR(CTRL_REG2, 0x00);  //
   L3G4200_WR(CTRL_REG3, 0x08);  //
   L3G4200_WR(CTRL_REG4, 0x30);  //+-2000dps
   L3G4200_WR(CTRL_REG5, 0x00);


void L3G4200_write_reg(uint8 reg, uint8 Data)
{
    L3G4200_WR(reg, Data);
}
uint8 L3G4200_read_reg(uint8 reg)
{
    return L3G4200_RD(reg);
}

void L3G4200_get(int16 W[4])            //角速度信号采集
{
    uint8 BUF[6];
    int16 GYRO_data;
    BUF[0]= L3G4200_read_reg(OUT_X_L);
    BUF[1]= L3G4200_read_reg(OUT_X_H);  //读取X轴数据
    BUF[2]= L3G4200_read_reg(OUT_Y_L);
    BUF[3]= L3G4200_read_reg(OUT_Y_H);  //读取Y轴数据
    //BUF[4]= L3G4200_read_reg(OUT_Z_L);
    //BUF[5]= L3G4200_read_reg(OUT_Z_H);  //读取Z轴数据

    //W[3]=L3G4200_read_reg(OUT_TEMP);  //读取温度

    GYRO_data=(BUF[1]<<8)+BUF[0];        //合成数据   
    W[0]=(int16)(GYRO_data*0.07);             //数据手册 第9页,2000度/秒量程
    GYRO_data=(BUF[3]<<8)+BUF[2];              
    W[1]=(int16)(GYRO_data*0.07);   

    //GYRO_data=(BUF[5]<<8)+BUF[4];               
    //W[2]=(int16)GYRO_data*7;

}


以上是我的加速度计数据采集的程序,,或许对你有帮助!


作者: 有你不孤单    时间: 2014-12-4 22:11
abacrya、军 发表于 2014-12-4 22:07
一直是255,,看看IIC接口是不是对的,,我用的是C10 C11,即IIC1,,,,
//宏定义调用底层的I2C接口
...

恩恩  好的   谢谢

作者: 孤单    时间: 2015-1-6 17:49
abacrya、军 发表于 2014-11-27 23:33
L3G4200_OPEN(400 * 1000);     //初始化L3G4200接口,设置波特率 400k   
   L3G4200_WR(CTRL_REG1, 0x0 ...

禁用Z轴    跟不禁的区别很大么

作者: BYu    时间: 2015-3-26 20:14
abacrya、军 发表于 2014-11-27 23:33
L3G4200_OPEN(400 * 1000);     //初始化L3G4200接口,设置波特率 400k   
   L3G4200_WR(CTRL_REG1, 0x0 ...

请教一下,“定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改”这个地址是根据什么改的?ALT  ADDRESS地址引脚是指什么?

作者: 菇尝读书    时间: 2016-2-26 21:30
你好,请问你的陀螺仪用iic读出来都是255结果怎么解决,我现在遇到这个问题老是解决不了




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2