lizhijieli 发表于 2012-6-20 10:09:06

L3G4200DH传感器问题讨论

有几个问题一起讨论下:

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部分描述不一致,那个正确?

      

00superman00 发表于 2012-6-20 19:37:28

===========

js200300953 发表于 2012-6-21 08:33:49


/*
* 初始化使用的I2C回调函数。 */
uint8_t l3g4200d_init_callback(uint8_t seq,uint8_t * data)
{
    const static uint8_t value[] = {
      I2C_addressToByte_write(L3G4200D_ADDRESS), /* 总线地址。 */
      (0x80 | 0x20), /* 寄存器地址。或0x80表示连续写。*/
      0xEF, /* CTRL_REG1 */
      0x00, /* CTRL_REG2 */
      0x00, /* CTRL_REG3 */
      0x00, /* CTRL_REG4,250dps量程。 */
      /* 其它默认。 */
    };
    //
    if(seq == sizeof(value))
      return I2C_RT_STOP;
    //
    *data = value;
    return I2C_RT_ACK;
}
我的初始化函数。

js200300953 发表于 2012-6-21 08:35:41

本帖最后由 js200300953 于 2012-6-21 08:37 编辑

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

lizhijieli 发表于 2012-6-21 16:30:34

js200300953 发表于 2012-6-21 08:35 static/image/common/back.gif
读写寄存器时,寄存器地址有没有或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));

js200300953 发表于 2012-6-21 17:49:28

lizhijieli 发表于 2012-6-21 16:30 static/image/common/back.gif
我是SPI操作的,读操作时,第一个字节或上了0xc0




对喔。

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

lizhijieli 发表于 2012-6-25 08:53:37

js200300953 发表于 2012-6-21 17:49 static/image/common/back.gif
对喔。

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


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

js200300953 发表于 2012-6-25 10:24:44

也有可能是这里的问题:
Gypro.xRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0) << 8));
两次SPI_SendByte(0)的循序很难保证,分开两句试试。

lizhijieli 发表于 2012-6-30 16:41:51

js200300953 发表于 2012-6-25 10:24 static/image/common/back.gif
也有可能是这里的问题:
Gypro.xRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0)

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

js200300953 发表于 2012-6-30 17:31:10

lizhijieli 发表于 2012-6-30 16:41 static/image/common/back.gif
是我太疏忽了,寄存器设置有问题

调试成功那种心情是很难表达的{:lol:}

lizhijieli 发表于 2012-6-30 18:06:24

js200300953 发表于 2012-6-30 17:31 static/image/common/back.gif
调试成功那种心情是很难表达的

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

long578553882 发表于 2012-10-7 15:54:37

请教一下,陀螺仪怎样才能把角度转化成弧度

lizhijieli 发表于 2012-11-19 11:19:25

long578553882 发表于 2012-10-7 15:54 static/image/common/back.gif
请教一下,陀螺仪怎样才能把角度转化成弧度

(角度/180) * 3.1415926

szblue 发表于 2013-1-31 05:36:38

{:smile:}mark,有用,不错!
页: [1]
查看完整版本: L3G4200DH传感器问题讨论