搜索
bottom↓
回复: 13

L3G4200DH传感器问题讨论

[复制链接]

出0入0汤圆

发表于 2012-6-20 10:09:06 | 显示全部楼层 |阅读模式
  有几个问题一起讨论下:

1、250dps是250°/s 吗? 代码如下处理,手动旋转陀螺仪,Gypro.xRaw、 Gypro.yRaw、 Gypro.zRaw很容易超量程,而且改变Full Scale,输出值也按比例放大了,量程增大应该不会影响到输出值啊?

if(L3G4200DH_Read(STATUS_REG) & 0x08) {
     SPI2_CS_Set(0);
     SPI_SendByte(OUT_X_L | 0xC0);
     Gypro.xRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0) << 8));
     Gypro.yRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0) << 8));
     Gypro.zRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0) << 8));
     SPI2_CS_Set(1);
               
     Gypro.xRaw = (float)Gypro.xRaw * 8.75 / 1000;//转换为角速度单位,dps
     Gypro.yRaw = (float)Gypro.yRaw * 8.75 / 1000;
     Gypro.zRaw = (float)Gypro.zRaw * 8.75 / 1000;
}

2、Datasheet和AN3393关于ODR部分描述不一致,那个正确?

      

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

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

出0入0汤圆

发表于 2012-6-20 19:37:28 | 显示全部楼层
===========

出0入0汤圆

发表于 2012-6-21 08:33:49 | 显示全部楼层

  1. /*
  2. * 初始化使用的I2C回调函数。 */
  3. uint8_t l3g4200d_init_callback(uint8_t seq,uint8_t * data)
  4. {
  5.     const static uint8_t value[] = {
  6.         I2C_addressToByte_write(L3G4200D_ADDRESS), /* 总线地址。 */
  7.         (0x80 | 0x20), /* 寄存器地址。或0x80表示连续写。*/
  8.         0xEF, /* CTRL_REG1 */
  9.         0x00, /* CTRL_REG2 */
  10.         0x00, /* CTRL_REG3 */
  11.         0x00, /* CTRL_REG4,250dps量程。 */
  12.         /* 其它默认。 */
  13.     };
  14.     //
  15.     if(seq == sizeof(value))
  16.         return I2C_RT_STOP;
  17.     //
  18.     *data = value[seq];
  19.     return I2C_RT_ACK;
  20. }
复制代码
我的初始化函数。

出0入0汤圆

发表于 2012-6-21 08:35:41 | 显示全部楼层
本帖最后由 js200300953 于 2012-6-21 08:37 编辑

读写寄存器时,寄存器地址有没有或0x80?

出0入0汤圆

 楼主| 发表于 2012-6-21 16:30:34 | 显示全部楼层
js200300953 发表于 2012-6-21 08:35
读写寄存器时,寄存器地址有没有或0x80?

我是SPI操作的,读操作时,第一个字节或上了0xc0


   SPI_SendByte(OUT_X_L | 0xC0);
     Gypro.xRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0) << 8));
     Gypro.yRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0) << 8));
     Gypro.zRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0) << 8));

出0入0汤圆

发表于 2012-6-21 17:49:28 | 显示全部楼层
lizhijieli 发表于 2012-6-21 16:30
我是SPI操作的,读操作时,第一个字节或上了0xc0

对喔。

刚刚测试过,250dps:用手轻转可以满量程;2000dps:猛转也可以满。
不同量程分辨率是不同的,所以度数也不同(这点与ADXL345有区别,ADXL345不论量程,分辨率都可以一样)。
所以同一角速度,250dps量程时的度数应该比2000dps时的度数大,你的情况相反了?

出0入0汤圆

 楼主| 发表于 2012-6-25 08:53:37 | 显示全部楼层
js200300953 发表于 2012-6-21 17:49
对喔。

刚刚测试过,250dps:用手轻转可以满量程;2000dps:猛转也可以满。

你可以测试下,同样的转动角速度,在不同量程下,读数好像不一样,而且量程变大,读数好像也按比例变大。量程内的角速度应该与量程没有关系,不知道用该芯片做四轴的朋友是如何处理的。

出0入0汤圆

发表于 2012-6-25 10:24:44 | 显示全部楼层
也有可能是这里的问题:
Gypro.xRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0) << 8));
两次SPI_SendByte(0)的循序很难保证,分开两句试试。

出0入0汤圆

 楼主| 发表于 2012-6-30 16:41:51 | 显示全部楼层
js200300953 发表于 2012-6-25 10:24
也有可能是这里的问题:
Gypro.xRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0)

是我太疏忽了,寄存器设置有问题

出0入0汤圆

发表于 2012-6-30 17:31:10 | 显示全部楼层
lizhijieli 发表于 2012-6-30 16:41
是我太疏忽了,寄存器设置有问题

调试成功那种心情是很难表达的

出0入0汤圆

 楼主| 发表于 2012-6-30 18:06:24 | 显示全部楼层
js200300953 发表于 2012-6-30 17:31
调试成功那种心情是很难表达的

确实,有时就是隔了一层纸

出0入0汤圆

发表于 2012-10-7 15:54:37 | 显示全部楼层
请教一下,陀螺仪怎样才能把角度转化成弧度

出0入0汤圆

 楼主| 发表于 2012-11-19 11:19:25 | 显示全部楼层
long578553882 发表于 2012-10-7 15:54
请教一下,陀螺仪怎样才能把角度转化成弧度

(角度/180) * 3.1415926

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-23 23:35

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

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