Forum: Mikrocontroller und Digitale Elektronik MPU-60X0 Gyro_ FiFO liefert immer wieder falsche Werte


von Basti B. (basti195) Benutzerseite


Lesenswert?

Hallo zusammen,

um die Lage eines Quadrocopters zu bestimmen möchte ich über einen Gyro 
wie aktuelle Lage/Winkel im verhältniss zur Startposition bestimmen.

um diesen Wert möglichst genau zu bekommen lese ich bei dem MPU6000 die 
aktuelle Winkel-Geschwindigkeit, über das FiFo register aus und 
Intrigiere die.

Dieser Vorgang Funktioniert auch so weit und ich erhalte Messwerte die 
eig nurnoch vom Rauschen verändert werden.

jedoch erhalte ich immer wieder ganze FIfo-Blöcke in denen einfach 
komplett falsche Zahlen drinnen stehen.

hat einer von euch eine Idee warum immer wieder das gesamte FiF voll mit 
falsche Werte ist?

Programm logig :

Gyro Fehler berechen (200 Messwerte)

FIFO_enable

While (1){
...

Fifo counter auslesen //wie Viele FIFO werte insgesammt vorhanden sind

 FOR (Counter /6 ){//(da pro sample 6 gyrowerte gespeichert werden 
g,y,z)


      FIFO Burst read mit 6 Byts // auslesen eines Samples
      Daten berechnen und aufsummieren

}
}

nun kommt es vor das alle werte die aus solch einer FOR-Schleife 
ausgelesen werden komplett falsch sind

von Rainer U. (r-u)


Lesenswert?

Ich weiß es auich nicht - Vorzeichenfehler vieleicht? Ansonsten würde 
ich erstmal abgucken, wie die das gemacht haben: 
http://www.multiwii.com/Software

(ganz unten ist ein Link zum Quelltext)

von Basti B. (basti195) Benutzerseite


Lesenswert?

gegen einen Vorzeichen Fehler / Logigfehler spricht, dass normaler weise 
die richtigen werte ausgelesen werden.

wo genau bei dem Code ist Gyro stelle?

: Bearbeitet durch User
von Basti B. (basti195) Benutzerseite


Angehängte Dateien:

Lesenswert?

ich hänge mal 2 Beispiele als Anhang hinzu welche werte ich durhc einmal 
FIFO auslesen erhalte

von Timmo H. (masterfx)


Lesenswert?

Wie sieht deine Initialisierung vom mpu aus?

von Basti B. (basti195) Benutzerseite


Lesenswert?

Der Sensor wird folgernder Maßen Initialisiert

Sensor_reset();
Sensor_cykle();
Sensor_sleep_disable();
gyro_kalibrieren(); // falsch Messungen analysieren
fifo_enable();

von Timmo H. (masterfx)


Lesenswert?

Vielleicht auch etwas genauer? Was verbirgt sich hinter den Funktionen? 
Welche Register werden wie beschrieben?

von Jim M. (turboj)


Lesenswert?

Sebastian Balz schrieb:
> ich hänge mal 2 Beispiele als Anhang hinzu welche werte ich durhc einmal
> FIFO auslesen erhalte

Wenn man den 2. Satz genau ansieht, dann haben die Wetre jeweils 0x00 
als low Byte. Off-by-one im FiFo?

von Basti B. (basti195) Benutzerseite


Lesenswert?

wie meinst du Off-by-one?

Sensor_reset(); Register : 107 Inhalt:  128

Sensor_cykle(); Register : 107 Inhalt:  32

Sensor_sleep_disable(); Register : 107 Inhalt:  0 // Kein Speep etc...

gyro_kalibrieren(); // falsch Messungen analysieren
    //liest "XXX" sensortwerte beim Start einmalig , um dadurch den 
mittleren Fehler zu bestimmen.

fifo_enable();  Register : 106 Inhalt:  64 //fifo Enbale
                Register : 35 Inhalt:  112 //XYZ Achsen enable

von Timmo H. (masterfx)


Lesenswert?

Bitte etwas detaillierter. Und gewöhnt dir mal Hex-Schreibweise an und 
nicht dezimal, kann ja keine lesen :) Mit hex sieht man sofort welche 
Bits gesetzt sind. Und irgendwie glaube ich immernoch dass du uns 
verheimlichst was tatsächlich in den Registern landet.

Ich schreibe ja auch nicht "ich initialisiere meinen Sensor 
folgendermaßen: init_mpu6050()"

: Bearbeitet durch User
von Rudolph (Gast)


Lesenswert?

Mein Eindruck von dem MPU-6000 ist, dass der wohl scheinbar Bugs hat.
Das aktuelle Datenblatt enthält weniger Features als ältere Versionen, 
da wurde wohl scheinbar im nachhinein was rauskorrigiert was nicht ganz 
wie erwartet funktioniert hat.

Ein Ersatz wäre der MPU-9250.
Oder vielleicht auch ein BMI-055 von Bosch.

Aber während der MPU-9250 schon schwierig von Hand zu löten ist,
den BMI-055 kann man garnicht mehr konventionell löten.

von Basti B. (basti195) Benutzerseite


Lesenswert?

Ich schreibe es so da der Prozessor ein AT32 ist und der Register Syntax 
komplett anders ist als bei den AVR-Prozessoren ist.
das mit den Hex-Zahlen läst sich einrichten.

für den Fall das es wirklich notwendig den Sensor zu ersetzen wäre es 
mir wichtig das der Gyro ein möglichst geringes Rauschen hat.
Beim BMI-055 finde den Rauschfaktor aber zum MPU 9250  nicht.
hatt da einer einen Wert bzw Erfahrung mit dem Sensor?

von Rudolph (Gast)


Lesenswert?

Schau mal erstmal, ob Du ein älteres Datenblatt findest und was dort zu 
den FIFOs steht.
FIFO hatten wir garnicht benutzt, unser Controller war sehr schnell wach 
und den SPI haben wir auf 10MHz laufen lassen.
Aber das Wecken per Schwellwert des Beschleunigungs-Sensors und 
zumindest das wurde entfernt.

von Basti B. (basti195) Benutzerseite


Lesenswert?

okay,
man könnte natürlich den Fifo weglassen oder "Kaputte werte" weg 
filtern, aber das is ja auch nicht Sinn der Sache. und die genauichkeit 
geht dabei Flöten.

leider habe ich nur die i2C (twi) Variante. und mir steht ein Max 
Frequenz ca 10 - 40 khz zu.
kann der überhaupt so viel? ich dachte die max-Sample-Rate läge bei 8mhz

: Bearbeitet durch User
von Rudolph (Gast)


Lesenswert?

Der MPU-6050 hat nur I2C, der MPU-6000 hat SPI und ist damit viel 
schneller.

von Rudolph (Gast)


Lesenswert?

Datenblatt Seite 10, 400kHz mit I2C und 1MHz für SPI bei allen Registern 
plus bis 20MHz für die Sensor und Interrupt Register.

von Basti B. (basti195) Benutzerseite


Lesenswert?

um die Hex-Werte noch nachzureichen :)


    [0]  0x000000c8  int@0x0014
    [1]  0xffffc000  int@0x0018
    [2]  0xffffb900  int@0x001c
    [3]  0xffffaa00  int@0x0020
    [4]  0xffffa200  int@0x0024
    [5]  0xffff9b00  int@0x0028
    [6]  0xffff9c00  int@0x002c
    [7]  0xffff9f00  int@0x0030
    [8]  0xffffa200  int@0x0034
    [9]  0xffffad00  int@0x0038

hier scheint es so das nach dem ersten Datensatz alle weiteren Werte 
"Falsch" sind.

beim auslesen des nächsten FIFO-counters stimmen die werte aber wieder.

von Basti B. (basti195) Benutzerseite


Lesenswert?

Wenn ich die Sample rate heruntersetzen würde, würde der Sensor mir den 
aktuellen wert ausgeben, oder den Durchschnitt seit der letzten Messung.

und müsste dies nicht auch die Genauigkeit des Sensors erhöhen, da ich 
dann weniger Fehler durch eigen-rausche auslese ´(da weniger Messwerte)

von BeastyK (Gast)


Lesenswert?

Sebastian Balz schrieb:
> und müsste dies nicht auch die Genauigkeit des Sensors erhöhen, da ich
> dann weniger Fehler durch eigen-rausche auslese ´(da weniger Messwerte)

Dann nehm ich eine Messung vor und die stimmt dann....neeee, so nicht!
Das Rauschen ist doch immer da, auch wenn du nur einen verrauschten Wert 
aufnimmst...da wird nix besser...

von Basti B. (basti195) Benutzerseite


Lesenswert?

aber müsste sich das im Sensor dann nicht selber filtern bzw negiert 
sich das Rauschen direkt an der quelle nicht viel schneller ?

von Jan K. (jan_k)


Lesenswert?

Da filtert sich nix selber. Du tastest nur zu einem Zeitpunkt ab. Der 
Wert ist ebenfalls so verrauscht, als würdest du mehrfach abtasten, 
stochastisch gesehen.

von Basti B. (basti195) Benutzerseite


Lesenswert?

mmmpf
schade :(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.