智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6963|回复: 12
打印 上一主题 下一主题

L3G4200D陀螺仪问题

[复制链接]

2

主题

21

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5649
威望
2918
贡献
1911
兑换币
1905
注册时间
2014-4-3
在线时间
410 小时
毕业学校
小学生
跳转到指定楼层
1#
发表于 2014-11-27 22:43:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神,小弟今天用L3G4200D的时候发现K60硬件IIC读取数据有点问题,如果陀螺仪不动,读取值的会有一些波动,如果晃动陀螺仪读出来的值就全1成65535了,不知道有没有用L3G4200D的亲,你们的L3G4200D有没有这个情况啊?
回复

使用道具 举报

38

主题

446

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6478
威望
4794
贡献
648
兑换币
1264
注册时间
2014-3-19
在线时间
518 小时
推荐
发表于 2014-11-27 23:33:22 | 只看该作者
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地址引脚不同修改
就这几个重要点。。。其他的都是按照给的例子改的
回复 支持 1 反对 0

使用道具 举报

6

主题

618

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6491
威望
3362
贡献
527
兑换币
2332
注册时间
2013-8-31
在线时间
1301 小时
3#
发表于 2014-11-28 10:08:00 | 只看该作者
看看变量类型
回复 支持 反对

使用道具 举报

2

主题

21

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5649
威望
2918
贡献
1911
兑换币
1905
注册时间
2014-4-3
在线时间
410 小时
毕业学校
小学生
4#
 楼主| 发表于 2014-11-28 22:41:23 | 只看该作者
abacrya、军 发表于 2014-11-27 23:33
L3G4200_OPEN(400 * 1000);     //初始化L3G4200接口,设置波特率 400k   
   L3G4200_WR(CTRL_REG1, 0x0 ...

哦哦,谢谢,发现Y轴读出来不论在什么情况下都是65535,看来我是要确定他坏了
回复 支持 反对

使用道具 举报

2

主题

21

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5649
威望
2918
贡献
1911
兑换币
1905
注册时间
2014-4-3
在线时间
410 小时
毕业学校
小学生
5#
 楼主| 发表于 2014-11-28 22:42:45 | 只看该作者
allenanswerzq 发表于 2014-11-28 10:08
看看变量类型

这个也有影响啊?
回复 支持 反对

使用道具 举报

6

主题

618

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6491
威望
3362
贡献
527
兑换币
2332
注册时间
2013-8-31
在线时间
1301 小时
6#
发表于 2014-11-28 22:50:36 | 只看该作者
CP19940613 发表于 2014-11-28 22:42
这个也有影响啊?

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

使用道具 举报

2

主题

21

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5649
威望
2918
贡献
1911
兑换币
1905
注册时间
2014-4-3
在线时间
410 小时
毕业学校
小学生
7#
 楼主| 发表于 2014-11-29 10:24:13 | 只看该作者
allenanswerzq 发表于 2014-11-28 22:50
有啊,比如你定义成无符号16位的,但结果是-1,不就成65535了吗

啊!!!学习了
回复 支持 反对

使用道具 举报

6

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1002
威望
494
贡献
286
兑换币
308
注册时间
2013-6-4
在线时间
111 小时
毕业学校
黄山学院
8#
发表于 2014-12-4 20:36:22 | 只看该作者
abacrya、军 发表于 2014-11-27 23:33
L3G4200_OPEN(400 * 1000);     //初始化L3G4200接口,设置波特率 400k   
   L3G4200_WR(CTRL_REG1, 0x0 ...

我的读出来为什么是255,而且一直是255,也不变化!!
回复 支持 反对

使用道具 举报

38

主题

446

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6478
威望
4794
贡献
648
兑换币
1264
注册时间
2014-3-19
在线时间
518 小时
9#
发表于 2014-12-4 22:07:00 | 只看该作者
有你不孤单 发表于 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;

}


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

回复 支持 反对

使用道具 举报

6

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1002
威望
494
贡献
286
兑换币
308
注册时间
2013-6-4
在线时间
111 小时
毕业学校
黄山学院
10#
发表于 2014-12-4 22:11:59 | 只看该作者
abacrya、军 发表于 2014-12-4 22:07
一直是255,,看看IIC接口是不是对的,,我用的是C10 C11,即IIC1,,,,
//宏定义调用底层的I2C接口
...

恩恩  好的   谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-8 07:27 , Processed in 0.051927 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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