智能车制作

标题: L3G4200静止读数据有尖峰 [打印本页]

作者: a@u@t@o    时间: 2015-4-29 15:06
标题: L3G4200静止读数据有尖峰
初始化代码
L3G_WR(CTRL_REG1, 0x7f);
  L3G_WR(CTRL_REG2, 0x00);
  L3G_WR(CTRL_REG3, 0x00);
  L3G_WR(CTRL_REG4, 0x30);
  L3G_WR(CTRL_REG5, 0x00);


求大神帮忙是怎么回事

作者: wohsijingjing    时间: 2015-4-29 15:50
请问你用的是IIC还是SPI?
作者: zhou1994    时间: 2015-4-29 15:56
光看尖峰。你看一下,这个数据是255你就明白了撒
作者: a@u@t@o    时间: 2015-4-29 16:08
wohsijingjing 发表于 2015-4-29 15:50
请问你用的是IIC还是SPI?

用的IIC

作者: a@u@t@o    时间: 2015-4-29 16:10
zhou1994 发表于 2015-4-29 15:56
光看尖峰。你看一下,这个数据是255你就明白了撒

但是也不总是255,有时候253 252  是数据还没更新就读取了,麻烦您稍微提示一下,谢谢

作者: wohsijingjing    时间: 2015-4-29 16:10
zhou1994 发表于 2015-4-29 15:56
光看尖峰。你看一下,这个数据是255你就明白了撒

我也卡好几天了,我模拟IIC数据完全不对啊

作者: a@u@t@o    时间: 2015-4-29 16:12
wohsijingjing 发表于 2015-4-29 16:10
我也卡好几天了,我模拟IIC数据完全不对啊

我是用的硬件IIC,不过有大师说模拟IIC更稳定

作者: wohsijingjing    时间: 2015-4-29 16:12
a@u@t@o 发表于 2015-4-29 16:10
但是也不总是255,有时候253 252  是数据还没更新就读取了,麻烦您稍微提示一下,谢谢

能把你的代码接我参考一下不

作者: wohsijingjing    时间: 2015-4-29 16:14
a@u@t@o 发表于 2015-4-29 16:12
我是用的硬件IIC,不过有大师说模拟IIC更稳定

我模拟卡好几天了,读出的数据完全是乱的,也不知道是哪的问题

作者: a@u@t@o    时间: 2015-4-29 16:17
wohsijingjing 发表于 2015-4-29 16:14
我模拟卡好几天了,读出的数据完全是乱的,也不知道是哪的问题

/*!
*  @brief      读取I2C设备指定地址寄存器的数据
*  @param      I2Cn_e        I2C模块(I2C0、I2C1)
*  @param      SlaveID     从机地址(7位地址)
*  @param      reg         从机寄存器地址
*  @return                 读取的寄存器值
*  @since      v5.0
*  Sample usage:       uint8 value = i2c_read_reg(I2C0, 0x1D, 1);
*/
uint8 i2c_read_reg(I2Cn_e i2cn, uint8 SlaveID, uint8 reg)
{

    //先写入寄存器地址,再读取数据,因此此过程是 I2C 的复合格式,改变数据方向时需要重新启动
    uint8 result;

    ASSERT((SlaveID & 0x80) == 0);                      //断言,我们要求的7位地址的值仅仅是7bit,不是通信时要求的高7位
    //有些手册,给出的7位地址指的是8bit里的高7位
    //有些手册,给出的7位地址指的是7bit
    //请自行确认,可以尝试是否通信正常来确认

    i2c_Start(i2cn);                                    //发送启动信号

    i2c_write_byte(i2cn, ( SlaveID << 1 ) | MWSR);      //发送从机地址和写位

    i2c_write_byte(i2cn, reg);                          //发送从机里的寄存器地址

    i2c_RepeatedStart(i2cn);                            //复合格式,发送重新启动信号

    i2c_write_byte(i2cn, ( SlaveID << 1) | MRSW );      //发送从机地址和读位

    i2c_PutinRxMode(i2cn);                              //进入接收模式(不应答,只接收一个字节)
    result = I2C_D_REG(I2CN[i2cn]);                     //虚假读取一次,启动接收数据
    i2c_Wait(i2cn);                                     //等待接收完成

    i2c_Stop(i2cn);                                     //发送停止信号

    result = I2C_D_REG(I2CN[i2cn]);                     //读取数据

    Pause();                                            //必须延时一下,否则出错

    return result;
}


/*!
*  @brief      写入一个字节数据到I2C设备指定寄存器地址
*  @param      I2Cn_e        I2C模块(I2C0、I2C1)
*  @param      SlaveID     从机地址(7位地址)
*  @param      reg         从机寄存器地址
*  @param      Data        数据
*  @since      v5.0
*  Sample usage:       i2c_write_reg(I2C0, 0x1D, 1,2);     //向从机0x1D 的寄存器 1 写入数据 2
*/

void i2c_write_reg(I2Cn_e i2cn, uint8 SlaveID, uint8 reg, uint8 Data)
{

    i2c_Start(i2cn);                                    //发送启动信号

    i2c_write_byte(i2cn, ( SlaveID << 1 ) | MWSR);      //发送从机地址和写位

    i2c_write_byte(i2cn, reg);                         //发送从机里的寄存器地址

    i2c_write_byte(i2cn, Data);                         //发送需要写入的数据

    i2c_Stop(i2cn);

    Pause();                                            //延时太短的话,可能写出错
}



作者: a@u@t@o    时间: 2015-4-29 16:18
wohsijingjing 发表于 2015-4-29 16:14
我模拟卡好几天了,读出的数据完全是乱的,也不知道是哪的问题

初始化在最前面有,我是用山外的库,在这里先谢谢他了

作者: wohsijingjing    时间: 2015-4-29 16:22
a@u@t@o 发表于 2015-4-29 16:17
/*!
*  @brief      读取I2C设备指定地址寄存器的数据
*  @param      I2Cn_e        I2C模块(I2C0、 ...

你用的是野火的库?

作者: a@u@t@o    时间: 2015-4-29 16:22
wohsijingjing 发表于 2015-4-29 16:22
你用的是野火的库?

是的,你底层自己写?

作者: wohsijingjing    时间: 2015-4-29 16:26
a@u@t@o 发表于 2015-4-29 16:22
是的,你底层自己写?

我也用的野火库,但我用的是模拟IIC,是从STM32移植过来的,我用的是KL26,我同学的一组用的K60它们用我的模拟IIC就可以正常读数,我读就不能

作者: a@u@t@o    时间: 2015-4-29 16:39
wohsijingjing 发表于 2015-4-29 16:26
我也用的野火库,但我用的是模拟IIC,是从STM32移植过来的,我用的是KL26,我同学的一组用的K60它们用我 ...

你同学陀螺仪也是这个?他们有我这种问题吗

作者: BYu    时间: 2015-4-29 22:28
我调试出来的代码,供参考,也有尖峰,如图
作者: a@u@t@o    时间: 2015-4-29 23:21
BYu 发表于 2015-4-29 22:28
我调试出来的代码,供参考,也有尖峰,如图

谢谢哥们,真的很想知道这尖峰怎么来的,还有你角度融合那里是清华滤波还是别的?感觉dps设置到2000是不是太高了?

作者: BYu    时间: 2015-4-30 09:04
a@u@t@o 发表于 2015-4-29 23:21
谢谢哥们,真的很想知道这尖峰怎么来的,还有你角度融合那里是清华滤波还是别的?感觉dps设置到2000是不 ...

卡尔曼滤波,官方的有个时间补偿系数不好处理,过大开始融合太慢,过小陀螺仪影响就太大。
尖峰没关系的,我的里面也有尖峰的,不过跑跑起来没影响。

作者: 泰庆电子    时间: 2015-4-30 12:40
:):)




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2