极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 275891381

MPU6050数据采集及其意义和滤波(一阶互补滤波、二阶互补滤波、卡尔曼滤波)

  [复制链接]
 楼主| 发表于 2018-1-27 13:15:42 | 显示全部楼层
野子yz 发表于 2018-1-27 11:46
请问一下,那个串口显示曲线的软件咋用的?

你百度一下就有了
回复 支持 反对

使用道具 举报

发表于 2018-1-27 16:02:08 | 显示全部楼层
275891381 发表于 2018-1-27 13:15
你百度一下就有了

好的,谢谢

回复 支持 反对

使用道具 举报

发表于 2018-1-30 20:00:09 | 显示全部楼层
非常好的教程
回复 支持 反对

使用道具 举报

发表于 2018-3-12 11:25:36 | 显示全部楼层
楼主 您好,请问需要修改mpu6050的量程,要怎么修改?百度找的都是给寄存器地址什么0,1,2,3代表2g,4g,8g,16g,不明白是i什么意思,请问代码要怎么写?就是单单修改量程的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-13 09:27:37 | 显示全部楼层
本帖最后由 275891381 于 2018-3-13 09:29 编辑
jhwu999 发表于 2018-3-12 11:25
楼主 您好,请问需要修改mpu6050的量程,要怎么修改?百度找的都是给寄存器地址什么0,1,2,3代表2g,4g,8g ...


帖子里面写了呀  FS_SEL改变就可以了

void MPU6050::initialize() {
    setClockSource(MPU6050_CLOCK_PLL_XGYRO);
    setFullScaleGyroRange(MPU6050_GYRO_FS_250);
    setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
    setSleepEnabled(false); // thanks to Jack Elston for pointing this one out!
}
回复 支持 反对

使用道具 举报

发表于 2018-3-18 15:52:44 | 显示全部楼层
275891381 发表于 2018-3-13 09:27
帖子里面写了呀  FS_SEL改变就可以了

void MPU6050::initialize() {

但是这个要怎么申明啊?你看我错误!
sketch_sanzhouduqu:25: error: 'setFullScaleAccelRange' was not declared in this scope
setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
回复 支持 反对

使用道具 举报

发表于 2018-3-18 17:09:04 | 显示全部楼层
jhwu999 发表于 2018-3-18 15:52
但是这个要怎么申明啊?你看我错误!
sketch_sanzhouduqu:25: error: 'setFullScaleAccelRange' was not ...

而且我在帖子里面也没有看到这几行代码?还烦请楼主帮忙解答一下啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-19 16:19:06 | 显示全部楼层
jhwu999 发表于 2018-3-18 15:52
但是这个要怎么申明啊?你看我错误!
sketch_sanzhouduqu:25: error: 'setFullScaleAccelRange' was not ...


#define MPU6050_GYRO_FS_250         0x00
#define MPU6050_GYRO_FS_500         0x01
#define MPU6050_GYRO_FS_1000        0x02
#define MPU6050_GYRO_FS_2000        0x03

#define MPU6050_ACONFIG_XA_ST_BIT           7
#define MPU6050_ACONFIG_YA_ST_BIT           6
#define MPU6050_ACONFIG_ZA_ST_BIT           5
#define MPU6050_ACONFIG_AFS_SEL_BIT         4
#define MPU6050_ACONFIG_AFS_SEL_LENGTH      2
#define MPU6050_ACONFIG_ACCEL_HPF_BIT       2
#define MPU6050_ACONFIG_ACCEL_HPF_LENGTH    3

#define MPU6050_ACCEL_FS_2          0x00
#define MPU6050_ACCEL_FS_4          0x01
#define MPU6050_ACCEL_FS_8          0x02
#define MPU6050_ACCEL_FS_16         0x03



头文件有定义,.cpp里面有代码,改就可以了
回复 支持 反对

使用道具 举报

发表于 2018-3-20 10:16:20 | 显示全部楼层
275891381 发表于 2018-3-19 16:19
#define MPU6050_GYRO_FS_250         0x00
#define MPU6050_GYRO_FS_500         0x01
#define MPU6 ...

#include <I2Cdev.h>
#include <MPU6050.h>
#include <Wire.h>
MPU6050 accelgyro;
int16_t ax,ay,az;
int16_t gx,gy,gz;
//float ax_pianyi,ay_pianyi,az_pianyi;   //加速度计偏移量
//float gx_pianyi,gy_pianyi,gz_pianyi;   //陀螺仪偏移量

float ax_pianyi=739; //由500组原始数据得出的系统原始偏移误差
float ay_pianyi=386;
float az_pianyi=892;
float gx_pianyi=-372;
float gy_pianyi=162;
float gz_pianyi=118;
bool blinkstate=false;
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  accelgyro.initialize();
// setFullScaleGyroRange(MPU6050_GYRO_FS_250);
//  setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
// uint8_t getFullScaleAccelRange();
// void setFullScaleAccelRange(uint8_t 8);
/*unsigned short times = 200;             //采样次数  
    for(int i=0;i<times;i++)  
    {  
        accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //读取六轴原始数值  
        ax_pianyi += ax; ay_pianyi += ay; az_pianyi += az;      //采样和  
        gx_pianyi += gx; gy_pianyi += gy; gz_pianyi += gz;  
      
    }  
      
    ax_pianyi /= times; ay_pianyi /= times; az_pianyi /= times; //计算加速度计偏移  
    gx_pianyi /= times; gy_pianyi /= times; gz_pianyi /= times; //计算陀螺仪偏移 */
   

}
void loop()
{
  accelgyro.getMotion6(&ax,&ay,&az,&gx,&gy,&gz);
  ax=ax-ax_pianyi;
  ay=ay-ay_pianyi;
  az=az-az_pianyi;
  gx=gx-gx_pianyi;
  gy=gy-gy_pianyi;
  gz=gz-gz_pianyi;
/*  Serial.print(ax-ax_pianyi);Serial.print(" ");
  Serial.print(ay-ay_pianyi);Serial.print(" ");
  Serial.print(az-az_pianyi);Serial.print(" ");
  Serial.print(gx-gx_pianyi);Serial.print(" ");
  Serial.print(gy-gy_pianyi);Serial.print(" ");
  Serial.print(gz-gz_pianyi);Serial.print("\n");*/

  Serial.print(ax);Serial.print(" ");
  Serial.print(ay);Serial.print(" ");
  Serial.print(az);Serial.print(" ");
  Serial.print(gx);Serial.print(" ");
  Serial.print(gy);Serial.print(" ");
  Serial.print(gz);Serial.print("\n");
  blinkstate=!blinkstate;
  delay(100);
//  Serial.print("\n");
}

以上是我的代码,请问要怎么改啊?真的不知道这个要怎么实现,在这里卡了很久了。我在头文件里面把量程的2改成8,但是传感器在静止时候,还是输出16384左右,也就是还是2g的量程,没有变化啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 21:23:36 | 显示全部楼层
jhwu999 发表于 2018-3-20 10:16
#include
#include
#include

删掉 accelgyro.initialize();

添加:
    accelgyro.setClockSource(MPU6050_CLOCK_PLL_XGYRO);
    accelgyro.setFullScaleGyroRange(MPU6050_GYRO_FS_500);//角速度
    accelgyro.setFullScaleAccelRange(MPU6050_ACCEL_FS_4);//加速度
    accelgyro.setSleepEnabled(false);
试试
回复 支持 反对

使用道具 举报

发表于 2018-3-21 14:10:31 | 显示全部楼层
275891381 发表于 2018-3-20 21:23
删掉 accelgyro.initialize();

添加:

哇,谢谢楼主,终于可以了。真的感谢!!!卡了这么久的问题解决了,谢谢谢谢!!!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-21 14:47:34 | 显示全部楼层
jhwu999 发表于 2018-3-21 14:10
哇,谢谢楼主,终于可以了。真的感谢!!!卡了这么久的问题解决了,谢谢谢谢!!!!!


要改别的幅值就按头文件或者之前给你的回复改就可以了
回复 支持 反对

使用道具 举报

发表于 2018-6-7 00:54:15 | 显示全部楼层
我是新人,这学期才接触单片机,表示会用你的,但不懂,拿走了,谢谢
我正研究DIY无人机
回复 支持 反对

使用道具 举报

发表于 2018-6-7 00:56:49 | 显示全部楼层
能解释下其它的角 角速度怎么算的吗?
无人机要用到3轴
回复 支持 反对

使用道具 举报

发表于 2018-11-5 10:13:29 | 显示全部楼层
mark 感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-9-29 09:49 , Processed in 0.046552 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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