搜索
bottom↓
回复: 18

【讨论】L3G4200D陀螺仪 对于这种补码形式数据,各位大侠是如何处理的呢?

[复制链接]

出0入0汤圆

发表于 2012-1-12 14:37:14 | 显示全部楼层 |阅读模式
如题,小弟在使用这个sensor时候,数据处理不好,老是会出现65532这种很大的数据。我处理的方式如下:
  int xMSB = readRegister(L3G4200D_Address, 0x29);
  int xLSB = readRegister(L3G4200D_Address, 0x28);
  x = ((xMSB << 8) | xLSB);

求指教,多谢!

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-1-12 15:06:05 | 显示全部楼层
你把x定义成有符号的16位数据格式就OK了

出0入0汤圆

发表于 2012-1-12 16:26:38 | 显示全部楼层
数据 负数时是补码的形式

出0入0汤圆

 楼主| 发表于 2012-1-12 16:34:17 | 显示全部楼层
回复【1楼】haolxy  飞鸟
你把x定义成有符号的16位数据格式就ok了
-----------------------------------------------------------------------

signed char?

出0入0汤圆

 楼主| 发表于 2012-1-12 16:35:21 | 显示全部楼层
回复【2楼】Name_006  
数据 负数时是补码的形式
-----------------------------------------------------------------------

嗯 负数时是补码,这个也有处理过,不过的处理的数据还是有问题……
求具体做法,谢谢

出0入0汤圆

发表于 2012-1-12 20:17:27 | 显示全部楼层
直接把数据高位右移位8位后赋值给一个有符号16位变量,然后再"或"数据的低位就OK。清楚没?

unsigned char data_h, data_l;
short int value;

value = data_h;
value = value << 8;
value = value | data_l;

每一步都分开写了。

出0入0汤圆

 楼主| 发表于 2012-1-13 10:46:54 | 显示全部楼层
回复【5楼】majianjia  阿嘉^_^
-----------------------------------------------------------------------

按照你说的写的,sensor静止不懂时读出的数据如下:

4864  -2561  3072
-768  -1793  2303
3328  -1025  -7681
256  -769  -4608
-1793  -1281  4095
-1281  -10241  -4865
4608  768  1535
5120  -1537  0
-5121  -3585  3071
-769  4096  -3584
-1537  -513  4607
5376  0  -769
4864  -4353  -769
1024  -5121  -2561
1792  -1  -3841
3584  2560  -3584
1536  8448  6656
-3073  3328  3839
3072  -3585  -1537
2048  512  -6400
0  -3841  767
5376  0  -3585
-3329  -769  -1025
貌似这个数据跳动很大哦

寄存器设置如下:
  writeRegister(L3G4200D_Address, CTRL_REG1, 0xFF);
  writeRegister(L3G4200D_Address, CTRL_REG2, 0x06);
  writeRegister(L3G4200D_Address, CTRL_REG4, 0xD0);
  writeRegister(L3G4200D_Address, CTRL_REG5, 0x12);

出0入0汤圆

发表于 2012-1-13 19:02:25 | 显示全部楼层
回复【6楼】Farid
-----------------------------------------------------------------------

设置一下量程、带宽、滤波等等,然后就是求平均数

出0入0汤圆

发表于 2012-1-13 21:59:31 | 显示全部楼层
回复【6楼】Farid  
-----------------------------------------------------------------------
是不是高低位弄饭了?

出0入0汤圆

发表于 2012-1-16 09:48:08 | 显示全部楼层
我的10轴IMU模块例程是这样处理的:
unsigned short msb_dat,lsb_dat;
short dat;

msb_dat = 陀螺仪高8位数据;
lsb_dat = 陀螺仪低8位数据;

dat = (short)((unsigned short)msb_dat*256+lab_dat);

需要注意的是,读取陀螺仪数据是8位的,因此很多时候在不同的系统上大家都会定义读取的数据类型为unsigned char,这个类型在左移8位或者x256的时候最好先强制转换为16位无符号数,要不然有的编译器(比如Keil C51)会把移位结果仍看做8位数据和lsb相加,那样的结果自然就错了。

出0入0汤圆

发表于 2012-1-16 10:00:06 | 显示全部楼层
后面可能用到。mark

出0入0汤圆

发表于 2012-1-17 20:11:51 | 显示全部楼层
回复【4楼】Farid
-----------------------------------------------------------------------

X-axis: FF96 LSBs = -106 LSBs = -106 * 0.00875 = -0.93 dps
Y-axis: 0045 LSBs = 69 LSBs = 69 * 0.00875 = 0.6 dps
Z-axis: FFCC LSBs = -52 LSBs = -0.46 dps

出0入0汤圆

 楼主| 发表于 2012-1-31 15:13:10 | 显示全部楼层
回复【11楼】MrLCL  
-----------------------------------------------------------------------

你好,请问这个平均数如何求得?我现在陀螺仪静止的时候发现数据跳动很大……现在滤波也设置了

出0入0汤圆

 楼主| 发表于 2012-1-31 15:34:04 | 显示全部楼层
这个是静止的时候读数,不知道正确不,请大家指正:
X:31   Y:60  Z:111
X:25   Y:56  Z:-125
X:-2   Y:72  Z:-81
X:-9   Y:69  Z:109
X:21   Y:105  Z:118
X:8   Y:69  Z:84
X:-9   Y:64  Z:96
X:10   Y:59  Z:127
X:59   Y:68  Z:65
X:21   Y:68  Z:110
X:14   Y:73  Z:119
X:13   Y:83  Z:112
X:7   Y:81  Z:106
X:-11   Y:35  Z:-109
X:6   Y:72  Z:102
X:-12   Y:68  Z:-78
X:7   Y:61  Z:-113
X:9   Y:33  Z:-121
X:23   Y:89  Z:-116
X:-3   Y:87  Z:-117
X:45   Y:48  Z:110
X:-5   Y:64  Z:-100
--------------------------------------------------------
寄存器设置:
  writeRegister(L3G4200D_Address, 0x20, 0x0F);  
  writeRegister(L3G4200D_Address, 0x21, 0x00);  
  writeRegister(L3G4200D_Address, 0x22, 0x08);  
  writeRegister(L3G4200D_Address, 0x23, 0x00);
  writeRegister(L3G4200D_Address, 0x24, 0x00);
数据定义:
    unsigned char xMSB,xLSB,yMSB,yLSB,zMSB,zLSB;
    char  x,y,z;
x =  ( char)((unsigned char)(xMSB * 256 )+xLSB);

出0入0汤圆

发表于 2012-1-31 20:00:08 | 显示全部楼层
回复【13楼】Farid  
-----------------------------------------------------------------------

貌似比我的漂的还大

出0入0汤圆

 楼主| 发表于 2012-2-1 10:29:02 | 显示全部楼层
回复【14楼】feiling208  
-----------------------------------------------------------------------

请问你的现在处理的怎么样了呀?学习下

出0入0汤圆

发表于 2012-2-4 13:45:17 | 显示全部楼层
回复【12楼】Farid
-----------------------------------------------------------------------

这个是最终的算法,就是寄存器里面的数如何换算成角速度,这个尤为重要,我的好像也是这个浮动,你参照资料,他那有每个量程对应的噪声指标,270593595,加我qq,一起整,我就差他了别的都做完了

出0入0汤圆

发表于 2012-7-11 11:24:04 | 显示全部楼层
我用的是ADXL345,也是补码,好郁闷的说

出0入0汤圆

发表于 2012-11-30 18:22:20 | 显示全部楼层
先mark一下~以后应该会用到~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-4 08:28

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

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