leicheng 发表于 2014-2-3 13:00:18

飞控传感器之ITG3205(Arduino源代码附产品说明)

本帖最后由 leicheng 于 2014-2-3 20:52 编辑


采用I2C与单片机Arduino通信,Arduino源程序如下:

#include <Wire.h>
//陀螺仪传感器ITG3205
#define ITGAddress   0x68    //ITG3205的I2C地址(AD0接地)
#define G_SMPLRT_DIV 0x15    //设置采样率的寄存器
#define G_DLPF_FS 0x16   //设置量程、低通滤波带宽、时钟频率的寄存器
#define G_INT_CFG 0x17   //设置中断的寄存器
#define G_PWR_MGM 0x3E    //设置电源管理的寄存器

int xGyro, yGyro, zGyro;      //存放角速度值,温度
int buff;                  //存放寄存器高低位值,X、Y、Z轴共6个

// 陀螺仪传感器误差修正的偏移量
int g_offx = 0;
int g_offy = 0;
int g_offz = 0;

void writeRegister(int deviceAddress, byte address, byte val)
{
Wire.beginTransmission(deviceAddress);
Wire.write(address);      
Wire.write(val);      
Wire.endTransmission();
}

void readRegister(int deviceAddress, byte address)
{
Wire.beginTransmission(deviceAddress);
Wire.write(address);      
Wire.endTransmission();
Wire.beginTransmission(deviceAddress);
Wire.requestFrom(deviceAddress, 6);   

int i = 0;
while(Wire.available())   
{ buff = Wire.read(); }
Wire.endTransmission();
}

void initGyro()
{
/*****************************************
   * ITG3205
   * G_SMPLRT_DIV:采样率 = 125Hz
   * G_DLPF_FS:+ - 2000度/秒、低通滤波器5HZ、内部采样率1kHz
   * G_INT_CFG:没有中断
   * G_PWR_MGM:电源管理设定:无复位、无睡眠模式、无待机模式、内部振荡器
   ******************************************/
writeRegister(ITGAddress, G_SMPLRT_DIV, 0x07); //设置采样率
writeRegister(ITGAddress, G_DLPF_FS, 0x1E); //设置量程、低通滤波带宽、内部采样率
writeRegister(ITGAddress, G_INT_CFG, 0x00); //设置中断(默认值)
writeRegister(ITGAddress, G_PWR_MGM, 0x00);    //设置电源管理(默认值)

}

void getGyroValues()
{
readRegister(ITGAddress, 0x1D); //读取陀螺仪ITG3205的数据
xGyro = ((buff << 8) | buff) + g_offx;
yGyro = ((buff << 8) | buff) + g_offy;
zGyro = ((buff << 8) | buff) + g_offz;
}

void setup()
{
Serial.begin(9600);
Wire.begin();
initGyro();
delay(50);
}

void loop()
{
    getGyroValues();
    Serial.print("xGyro=");
    Serial.print(xGyro);
    Serial.print("yGyro=");
    Serial.print(yGyro);
    Serial.print("zGyro=");
    Serial.println(zGyro);
    delay(200);
}

将陀螺仪静止放置,运行后截图如下,然后再修正陀螺仪传感器误差偏移量g_offx、g_offy、g_offz。


yue621 发表于 2014-3-14 23:19:12

帮顶~!!!!3205经典的传感器

yinglively 发表于 2014-3-15 21:19:18

楼主,有个问题,
陀螺仪传感器误差偏移量g_offx、g_offy、g_offz的数值是不是就是静止时的测量值?

leicheng 发表于 2014-3-16 20:00:08

yinglively 发表于 2014-3-15 21:19
楼主,有个问题,
陀螺仪传感器误差偏移量g_offx、g_offy、g_offz的数值是不是就是静止时的测量值? ...

呵呵,看你应用的场合了~ 如果只是简单的应用,对精度要求不是很高,可以取一段时间的均值后相减,这时是把陀螺仪的输出看成是简单的常值零偏与白噪声之和。
对精度要求高一点的应用,需要建立陀螺仪的数学模型,采用Allan方差分析,得到各个相关系数。给个对照,传感器AIDS16405,经过校准后每小时零偏误差能在50度以内。

yinglively 发表于 2014-3-16 20:21:21

leicheng 发表于 2014-3-16 20:00
呵呵,看你应用的场合了~ 如果只是简单的应用,对精度要求不是很高,可以取一段时间的均值后相减,这时是 ...

多谢了。
目前对精度要求不高,比较深奥,目前还看不懂。
先使用大数据求取平均值的方法来进行修正。

想使用加速度计和陀螺仪的数据进行姿态运算,正在看四元数和欧拉角,目前还看不懂。

十分感谢
页: [1]
查看完整版本: 飞控传感器之ITG3205(Arduino源代码附产品说明)