搜索
bottom↓
回复: 13

L3G4200D 程序及读数分析

[复制链接]

出0入0汤圆

发表于 2011-12-30 16:48:56 | 显示全部楼层 |阅读模式
小弟的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);

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

0  31  0  37  255  189  
0  21  0  19  255  212  
0  19  0  28  255  220  
0  19  0  23  255  202  
0   8  0  38  255  207  
0  34  0  39  255  205  
0  28  0  24  255  197  
0  19  0  10  255  217  
0  16  0  43  255  196  
0  25  0  44  255  205  
0  13  0  26  255  220  
0   1  0  18  255  212  
0  17  0  32  255  200  
0  24  0  37  255  217  
0  30  0  32  255  215  
0  16  0  42  255  227  
0  13  0  20  255  198  
0   2  0  35  255  232  
0  22  0  29  255  194  
0  27  0  34  255  231  
0  14  0  29  255  199  

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

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

谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2011-12-30 19:04:44 | 显示全部楼层
数据很正常,前两个数是正的,第三个是负数,要取反。

出0入0汤圆

发表于 2011-12-30 19:33:06 | 显示全部楼层
L3G4200D静止不动的时候是会有点飘的,你主要看看转动芯片的时候,数据是不是跟着一起动

出0入0汤圆

发表于 2011-12-30 21:55:19 | 显示全部楼层
读出来的数据负数 是补码形式

出0入0汤圆

 楼主| 发表于 2011-12-31 10:41:49 | 显示全部楼层
回复【1楼】nnnkey  
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2011-12-31 11:09:00 | 显示全部楼层
x = ((xMSB << 8) | xLSB);
这样没问题
X,Y,Z轴数据都要这样处理

出0入0汤圆

发表于 2011-12-31 11:48:56 | 显示全部楼层
最好连续一次读6个数据,不要分开读

出0入0汤圆

发表于 2011-12-31 12:42:25 | 显示全部楼层
将高字节与127比较,大于127的说明是负数,整体取反加负号就行了

出0入0汤圆

发表于 2011-12-31 18:25:53 | 显示全部楼层
啊!我都不会用这个陀螺仪?谁有资料呀!

出0入0汤圆

 楼主| 发表于 2012-1-4 10:50:09 | 显示全部楼层
回复【7楼】nnnkey  
-----------------------------------------------------------------------
是这样处理?
if( xMSB > 127){
        xMSB = -(~xMSB);       
  }
  x= ((xMSB << 8) | xLSB);

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

出0入0汤圆

发表于 2012-1-4 14:32:01 | 显示全部楼层
低字节也要取反的,其实就是已知补码求原码

出0入0汤圆

发表于 2012-5-7 21:01:55 | 显示全部楼层
对,输出的高低字节都是补码形式,可以先将两个补码合并,然后再强制类型转化为带符号的16位数即可;

出0入0汤圆

发表于 2012-10-16 10:04:59 | 显示全部楼层
你好,可以把你的这个程序让我参考一下吗?

出0入0汤圆

发表于 2012-10-16 10:45:32 | 显示全部楼层
定义一个有符号16位的变量,把读到的数据高8位左移8位或上低8位赋给这个有符号变量就行了,没有必要补码转原码。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 18:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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