Farid 发表于 2011-12-30 16:48:56

L3G4200D 程序及读数分析

小弟的L3G4200D陀螺仪初始化如下:
writeRegister(L3G4200D_Address, CTRL_REG1, 0x0F);
writeRegister(L3G4200D_Address, CTRL_REG2, 0x00);
writeRegister(L3G4200D_Address, CTRL_REG3, 0x08);
writeRegister(L3G4200D_Address, CTRL_REG4, 0x10);
writeRegister(L3G4200D_Address, CTRL_REG5, 0x00);

读取的数据代码如下:
int xMSB = readRegister(L3G4200D_Address, 0x29);
int xLSB = readRegister(L3G4200D_Address, 0x28);

int yMSB = readRegister(L3G4200D_Address, 0x2B);
int yLSB = readRegister(L3G4200D_Address, 0x2A);

int zMSB = readRegister(L3G4200D_Address, 0x2D);
int zLSB = readRegister(L3G4200D_Address, 0x2C);

静止不动时串口打印输出如下:

031037255189
021019255212
019028255220
019023255202
0   8038255207
034039255205
028024255197
019010255217
016043255196
025044255205
013026255220
0   1018255212
017032255200
024037255217
030032255215
016042255227
013020255198
0   2035255232
022029255194
027034255231
014029255199

请问这个数据正常么?如果处理后按照
x = ((xMSB << 8) | xLSB);
这种显示,出来的数据变化貌似非常不对……

请各位达人指点下是数据问题还是我初始化或者别的地方有误?

谢谢!

nnnkey 发表于 2011-12-30 19:04:44

数据很正常,前两个数是正的,第三个是负数,要取反。

kdaiee 发表于 2011-12-30 19:33:06

L3G4200D静止不动的时候是会有点飘的,你主要看看转动芯片的时候,数据是不是跟着一起动

Name_006 发表于 2011-12-30 21:55:19

读出来的数据负数 是补码形式

Farid 发表于 2011-12-31 10:41:49

回复【1楼】nnnkey
-----------------------------------------------------------------------

那看来这样处理:
x = ((xMSB << 8) | xLSB);
不行了……
如果更好的去处理得到的x,y,z 数值呢?请指点下……多谢!

jojasd 发表于 2011-12-31 11:09:00

x = ((xMSB << 8) | xLSB);
这样没问题
X,Y,Z轴数据都要这样处理

xjun 发表于 2011-12-31 11:48:56

最好连续一次读6个数据,不要分开读

nnnkey 发表于 2011-12-31 12:42:25

将高字节与127比较,大于127的说明是负数,整体取反加负号就行了

jickaut 发表于 2011-12-31 18:25:53

啊!我都不会用这个陀螺仪?谁有资料呀!

Farid 发表于 2012-1-4 10:50:09

回复【7楼】nnnkey
-----------------------------------------------------------------------
是这样处理?
if( xMSB > 127){
        xMSB = -(~xMSB);       
}
x= ((xMSB << 8) | xLSB);

但是这样得到的x值很大……

nnnkey 发表于 2012-1-4 14:32:01

低字节也要取反的,其实就是已知补码求原码

changqing 发表于 2012-5-7 21:01:55

对,输出的高低字节都是补码形式,可以先将两个补码合并,然后再强制类型转化为带符号的16位数即可;

wzxjplw 发表于 2012-10-16 10:04:59

你好,可以把你的这个程序让我参考一下吗?

enthier 发表于 2012-10-16 10:45:32

定义一个有符号16位的变量,把读到的数据高8位左移8位或上低8位赋给这个有符号变量就行了,没有必要补码转原码。
页: [1]
查看完整版本: L3G4200D 程序及读数分析