MPU6050

Нет ответов
NeoProg
Offline
Зарегистрирован: 05.02.2017

Добрый день. Использую MPU6050 с Arduino UNO. Код программы представлен ниже. Проблема заключается вот в чем: я экспериментальным методом определил параметры калибровки гироскопа. Установил необходимые значения во время инициализации. Первые 6 - 10 секунд работы датчика (датчик неподвижен) данные с гироскопа по всем осям 0, потом начинаются скачки 0, -1, 0, -1, 0, -1 и тд. Предполагаю, что DMP сам производит калибровку первые 10 секунд потому, что даже когда я не устанавливаю свои значения, то датчик показывает: -3 по Х, -2 по Y, - 2 по Z, а через 6 - 10 секунд опять начинаются скачки 0, -1, 0, -1. Не подскажите как от этого избавится?

 

#include "myMPU6050_6Axis_MotionApps20.h"
MPU6050 mpu;

uint16_t packetSize = 42;    // expected DMP packet size (default is 42 bytes)
uint8_t fifoBuffer[64]; // FIFO storage buffer

void setup()
{
    Wire.begin();
    Serial.begin(500000);
    while (!Serial);
    //
    Serial.println(F("Initializing I2C devices..."));
    mpu.initialize();

    // verify connection
    Serial.println("CORE: Testing device connections...");
    Serial.println(mpu.testConnection() ? "CORE: MPU6050 connection successful" : "CORE: MPU6050 connection failed");

    // wait for ready
    Serial.println("CORE: Send any character to begin DMP programming and demo: ");
    Serial.flush();
    while (Serial.available() == 0);
    Serial.flush();
    //
    Serial.println("CORE: Initializing DMP...");
    if (mpu.dmpInitialize() == true)
    {
        mpu.setXGyroOffset(131);
        mpu.setYGyroOffset(87);
        mpu.setZGyroOffset(87);

        Serial.print("CORE: Enabling DMP...");
        mpu.setDMPEnabled(true);
        Serial.println("CORE: SUCCESS");
    }
    else
        Serial.println("FAIL");
    //
    Serial.println("SETUP END");
}



// ================================================================
// ===                    MAIN PROGRAM LOOP                     ===
// ================================================================


void loop()
{
    if (mpu.getFIFOCount() >= 42)
    {
        mpu.getFIFOBytes(fifoBuffer,packetSize);
        mpu.dmpGetGyro(Data,fifoBuffer);
        Serial.print("G:\t");
        Serial.print(Data[0]);
        Serial.print("\t");
        Serial.print(Data[1]);
        Serial.print("\t");
        Serial.println(Data[2]);
    }
}

Первые 10 секунд

После 10 секунд