L3G4200D zufällige Spitzen


8

Ich habe dieses Forum ein wenig in Bezug auf das Gyroskop L3G4200D durchsucht und dieses Problem nicht erwähnt, aber ich habe andere in anderen Foren darüber sprechen sehen. Ich sehe einen seltsam großen Wert in meiner Ausgabe, wenn das Gyroskop stationär ist. Leider scheint niemand in der Lage zu sein zu antworten, warum dies so ist, also dachte ich, ich würde herumfragen

Ich sammle also Daten aus dem Kreisel mit i2c bei 400 kHz (schneller Modus) und sammle die Gyroskopdaten mit Multibyte-Lesevorgang (jeweils sechs Bytes). Abtastung bei 100 Hz (versuchte auch die oberen 800 Hz), versuchte auch das Ein- und Ausschalten der Filterung bei verschiedenen Werten. Ich verwende nicht den Interrupt-Pin, aber ich verwende das Attribut 'Blockdatenaktualisierung' im GYRCTRLREG4, sodass die Daten erst ausgegeben werden, wenn sowohl LSB als auch MSB gelesen werden. Volle 2000dps und nichts mit dem FIFO gemacht. Ich kann meine genauen Registerwerte veröffentlichen, wenn es hilft, aber die meisten von Ihnen haben das Datenblatt nicht zur Hand.

Das Bild unten zeigt mein Problem. Die ausgegebenen Daten sind gut, korrekt berechnet (meines Wissens) und allgemeines Rauschen ist sehr akzeptabel. Aber dann bemerkte ich, dass diese nervigen "Blips" zufällig auftauchten, wenn das Gerät stationär ist. Wenn ich es ein paar Sekunden lang stehen lasse, erhalte ich eine dieser Spitzen, die immer zwischen 250 und 255 liegt (also ~ 18 bei der Konvertierung mit '(Ausgabe * 70) / 1000'). Die Spitzen sind, wie gesagt, zufällig und können in jeder Ebene auftreten (im Bild unten sehen Sie die erste Spitze in der X-Ebene, die zweite in der Y-Ebene), immer um den gleichen Wert und eins, zwei oder alle drei können gleichzeitig passieren. Der große Wert gilt nur für eine einzelne Stichprobe und kehrt dann zum Normalwert zurück.

Fehlerfehler

Ich habe irgendwo in einem anderen Thread gesehen, dass ich die Blockdaten-Wartefunktion in GYRCTRLREG4 verwenden sollte, wie ich bereits erwähnt habe, aber keine Änderung. Ich habe das Problem auf das Problem eingegrenzt, wenn das MSB Null oder höher ist, dh eine positive Zahl. Wenn dann das MSB und das LSB kombiniert werden, erhalte ich diese großen Zahlen. Zum Beispiel greife ich nach den zwei für die X-Ebene erforderlichen Bytes, erhalte im LSB eine -6 und im MSB eine 0, wenn ich sie kombiniere, erhalte ich 250, und beim Konvertieren ergibt sich (250 * 70) / 1000 = 17,5 dps ( dh zu groß für stationär / falsch). In derselben Stichprobe sind die beiden Bytes für die Y-Ebene -3 LSB und -1 MSN, wobei die Kombination -3 ergibt und die Konvertierung -0,21 ergibt (dh erwartet / korrekt).

Ich bin schon seit Tagen mit diesem Problem beschäftigt und sehe auch ein paar dieser zufälligen Spitzen mit meinem Magnetometer. Ich denke also, ich lese das Gerät (über i2c) falsch?

Anregungen oder Versuche sind herzlich willkommen!


Ein Link zum Datenblatt könnte hilfreich sein: L3G4200D Datenblatt
Tut

Hast du dein Problem gelöst? Ich stecke seit einem Tag in einem ähnlichen Problem mit einem anderen Kreisel fest. Ich habe jede Sekunde einzelne Spitzen und konnte das bisher nicht lösen.
John

Ich habe auch das gleiche Problem mit dem L3g4200d. Hast du es jemals herausgefunden?
Trapper

Antworten:


1

Da Sie ein ähnliches Problem mit Ihrem Magnetometer beobachten, schätze ich, dass Sie ein Problem mit dem I2C-Bus haben. Obwohl es aufgrund des intermittierenden Betriebs zuerst ein Codeproblem sein könnte, würde ich zuerst überprüfen, wie der Bus angeschlossen ist. Ein paar Dinge zu überprüfen / versuchen:

  • Wenn Sie keine externen Pull-up-Widerstände verwenden, versuchen Sie es mit 10K-Pull-up-Widerständen an SDA und SCL. Das interne Pull-up der meisten Mikrocontroller ist nicht stark genug.

  • Wenn möglich, reduzieren Sie die Länge des Busses so weit wie möglich und versuchen Sie, ihn von Hochgeschwindigkeitssignalen fernzuhalten.

  • Wenn Sie ein Steckbrett verwenden, versuchen Sie, die Verbindungen so direkt wie möglich zu halten, um eine Überkapazität zu vermeiden.

  • Wenn Sie Prototypkarten verwenden, die bereits Pull-up-Widerstände enthalten, werden diese möglicherweise parallel ausgeführt, und Sie haben möglicherweise einen zu niedrigen Pull-up-Widerstandswert.

  • Wenn Sie den Zugriff auf ein Oszilloskop arrangieren können, ist dies ideal, um sicherzustellen, dass die Takt- und Datenleitungen schön und quadratisch aussehen und nicht zu stark verzerrt sind.

Wenn diese Schritte nicht funktionieren, hat Texas Instruments die Anwendungsbericht Fehlerbehebung beim I2C-Busprotokoll , der detailliertere Informationen zur Berechnung der Pull-up-Widerstände und Probleme mit der Kapazität enthält.


Vielen Dank für Ihre Antwort. Ich habe beide auf einem Steckbrett mit kurzen Drähten getestet und den Widerstandswert von 10k auf 1,5k geändert (ich habe mich für 1,5k entschieden). Ich habe auch ein Make-up-Board mit oberflächenmontierten Komponenten und sehr kurzen Schienen. Ich werde später mit einem Zielfernrohr nachsehen, aber ich wäre überrascht, wenn meine Pull-up-Widerstände oder -Spuren ein Problem darstellen würden. Ich werde versuchen, einige Daten von jeglicher Elektronik zu sammeln, um EMI-Probleme zu beseitigen.
Ritchie888

0

Was möglicherweise passiert, ist, dass zwischen dem Lesen des LSB und des MSB eine neue Stichprobe entnommen wird. Wenn also MSB = 0 und LSB = -4 ist, sollten Sie 252 oder ungefähr 1 g erhalten. Wenn der nächste Messwert MSB = 1 und LSB = 2 ist, sollten Sie 258 erhalten, was angemessen ist. Das Problem ist, wenn für 1 Probe nur das MSB auf 1 aktualisiert wurde und das LSB immer noch -4 ist. Sie erhalten 508, ungefähr 2 g, was dieser Fehler sein könnte.

BDU auf CTRL_REG4 soll dies verhindern. Vielleicht lesen Sie dieses Register vom Sensor und stellen Sie sicher, dass der Blockhalt aktiviert ist?


0

Versuchen Sie es mit einem Medianfilter, und diese Spitzen verschwinden.

Bitte beziehen Sie sich auf meine Frage hier auf StackExchange und lesen Sie dann diesen Beitrag über das gleiche Problem

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.