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部分描述不一致,那个正确?
===========
/*
* 初始化使用的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:37 编辑
读写寄存器时,寄存器地址有没有或0x80?
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));
lizhijieli 发表于 2012-6-21 16:30 static/image/common/back.gif
我是SPI操作的,读操作时,第一个字节或上了0xc0
对喔。
刚刚测试过,250dps:用手轻转可以满量程;2000dps:猛转也可以满。
不同量程分辨率是不同的,所以度数也不同(这点与ADXL345有区别,ADXL345不论量程,分辨率都可以一样)。
所以同一角速度,250dps量程时的度数应该比2000dps时的度数大,你的情况相反了? js200300953 发表于 2012-6-21 17:49 static/image/common/back.gif
对喔。
刚刚测试过,250dps:用手轻转可以满量程;2000dps:猛转也可以满。
你可以测试下,同样的转动角速度,在不同量程下,读数好像不一样,而且量程变大,读数好像也按比例变大。量程内的角速度应该与量程没有关系,不知道用该芯片做四轴的朋友是如何处理的。 也有可能是这里的问题:
Gypro.xRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0) << 8));
两次SPI_SendByte(0)的循序很难保证,分开两句试试。 js200300953 发表于 2012-6-25 10:24 static/image/common/back.gif
也有可能是这里的问题:
Gypro.xRaw = (s16)(SPI_SendByte(0) + (SPI_SendByte(0)
是我太疏忽了,寄存器设置有问题 lizhijieli 发表于 2012-6-30 16:41 static/image/common/back.gif
是我太疏忽了,寄存器设置有问题
调试成功那种心情是很难表达的{:lol:} js200300953 发表于 2012-6-30 17:31 static/image/common/back.gif
调试成功那种心情是很难表达的
确实,有时就是隔了一层纸 请教一下,陀螺仪怎样才能把角度转化成弧度 long578553882 发表于 2012-10-7 15:54 static/image/common/back.gif
请教一下,陀螺仪怎样才能把角度转化成弧度
(角度/180) * 3.1415926 {:smile:}mark,有用,不错!
页:
[1]