#1 2016-06-26 12:39:58

Nik
Учасник
Зареєстрований: 2016-06-26
Повідомлень: 1

Проблема с гироскопом MPU-6050

Доброго времени суток.
Проблема в следующем
При работе двигателей MPU6050 начинает подвисать и снимать неправильные показания.

 void turnRight(int angle)
   {
     
    digitalWrite(D1, LOW);  
    digitalWrite(D2, LOW);
    analogWrite(M1, 255);       
    analogWrite(M2, 255);
    
    digitalWrite(D3, HIGH);  
    digitalWrite(D4, HIGH);
    analogWrite(M3, 0);
    analogWrite(M4, 0);
     
     int currentAngle = globalAngle;
     
    while(globalAngle < currentAngle + angle)
    {
      SerialUSB.println(globalAngle);
      accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
      globalAngle = globalAngle + gz/44000.0 - comp;
      delay(1);
    }
     
     stop();
   }

При этом если заккоментировать вот эту чать кода в методе turnRight: 

digitalWrite(D1, 0);  
digitalWrite(D2, 0);
analogWrite(M1, 255);       
analogWrite(M2, 255);
    
digitalWrite(D3, 1);  
digitalWrite(D4, 1);
analogWrite(M3, 0);
analogWrite(M4, 0);

то MPU6050 работает как нужно и даже правильно отображает угол повотота.     
В общем если работают двигатели то неправильно работает MPU6050, если двигатели не работают то MPU6050 работает нормально.

MPU6050 подключаю к Arduino Due следующим образом:

MPU6050     Arduino Due
Vcc              3.3V
GND            GND
SCL             SCL21
SDA            SDA20

4 мотора FIT0016 через два драйвера моторов L298N подключаю
как указано тут
Питание на моторы подаю с PowerBank-а 10400 mAh, то есть на все 4 мотора питание подаётся с одного PowerBank-a через переделанный USB кабель.

Я предполагаю что проблема в неправильном подключении питания, или его нехватке, если это так то подскажите как лучше всё это запитывать, потому что я в этом пока что не особо разбераюсь.
Заранее спасибо.

Неактивний

#2 2016-07-29 09:35:40

Андрей
Учасник
Зареєстрований: 2014-06-17
Повідомлень: 46

Re: Проблема с гироскопом MPU-6050

Аксель вообще капризная штука, а 6050, в отличие от 6000 работает только по I2C, насколько я помню, а этот протокол очень подвержен помехам. Думаю движки дают помехи и данные битые приходят. Я бы проверял так:

  • разнес движки подальше

  • укоротил бы длину провода к 6050 до минимума (вообще i2c предполагает, что устройства будут на той же плате, а не связаны проводами)

  • проверял бы контрольную сумму данных с акселя и выводил бы количество ошибок передач (по их наличию можно понять есть ли проблема с помехами)

  • подключился бы осциллографом к i2c шине и посмотрел какие данные приходят, насколько ровные фронты

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму