L3G4200D zufällige Spitzen

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 beantworten, warum das so ist, also dachte ich, ich würde mich umhören

Also sammle ich Daten vom Gyroskop mit i2c bei 400 kHz (schneller Modus) und sammle die Gyroskopdaten mit Multibyte-Lesen (sechs Bytes gleichzeitig). Sampling bei 100 Hz (versuchte auch die oberen 800 Hz), auch mit ein- und ausgeschalteter Filterung bei verschiedenen Werten versucht. Ich verwende den Interrupt-Pin nicht, aber ich verwende das Attribut „Block Data Update“ in GYRCTRLREG4, sodass die Daten nicht ausgegeben werden, bis sowohl LSB als auch MSB gelesen werden. Volle 2000dps und nichts mit dem FIFO gemacht. Ich kann meine genauen Registerwerte posten, wenn es hilft, aber die meisten von Ihnen werden das Datenblatt nicht zur Hand haben.

Das folgende Bild zeigt mein Problem. Die ausgegebenen Daten sind gut, korrekt berechnet (meines Wissens) und das allgemeine Rauschen ist sehr akzeptabel. Aber dann bemerkte ich diese lästigen "Blips", die zufällig auftauchten, wenn das Gerät stillstand. Wenn ich es für ein paar Sekunden still lasse, bekomme ich eine dieser Spitzen, die immer ungefähr 250-255 entsprechen (also ~ 18 bei der Konvertierung mit '(output * 70) / 1000'). Die Spitzen sind, wie gesagt, zufällig, können in jeder Ebene erscheinen (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 Probe und geht dann wieder auf normal zurück.

Fehlermarkierungen

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 darauf eingegrenzt, dass wenn das MSB null oder höher ist, dh eine positive Zahl, dann bekomme ich diese großen Zahlen, wenn MSB und LSB kombiniert werden. Zum Beispiel nehme ich die zwei Bytes, die für die X-Ebene erforderlich sind, ich bekomme eine -6 im LSB und eine 0 im MSB, die Kombination ergibt 250, dann ergibt die Konvertierung (250 * 70) / 1000 = 17,5 dps ( dh zu groß für stationär/falsch). Im gleichen Beispiel sind die zwei Bytes für die Y-Ebene –3 LSB und –1 MSN, ihre Kombination ergibt –3, und die Konvertierung ergibt –0,21 (dh erwartet/korrekt).

Ich habe dieses Problem seit Tagen, ich sehe auch ein paar dieser zufälligen Spitzen mit meinem Magnetometer, also denke ich, dass ich das Gerät (über i2c) falsch gelesen habe?

Alle Vorschläge oder Dinge zum Ausprobieren sind wirklich willkommen!

Ein Link zum Datenblatt könnte hilfreich sein: L3G4200D Datenblatt
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 Spikes und konnte das bisher nicht lösen.
Ich habe auch das gleiche Problem mit dem L3g4200d. Hast du es jemals herausgefunden?

Antworten (3)

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

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

  • Reduzieren Sie nach Möglichkeit 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 übermäßige Kapazitäten zu vermeiden.

  • Wenn Sie Prototyp-Boards verwenden, die bereits Pull-up-Widerstände enthalten, werden diese möglicherweise parallel geschaltet, und Sie haben möglicherweise einen zu niedrigen Pull-up-Widerstandswert.

  • Wenn Sie den Zugriff auf ein Oszilloskop arrangieren können, wäre 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 den Anwendungsbericht Troubleshooting I2C Bus Protocol , der detaillierter auf die Berechnung der Pull-up-Widerstände und Probleme eingeht, auf die Sie mit der Kapazität stoßen können.

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

Was passieren kann, ist, dass zwischen dem Lesen des LSB und des MSB ein neuer Abtastwert genommen wird. Wenn also MSB = 0 und LSB = -4 sind, sollten Sie 252 oder etwa 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 Sample nur das MSB auf 1 aktualisiert wurde und das LSB immer noch -4 ist, erhalten Sie 508, ungefähr 2 g, was dieser Blip sein könnte.

BDU auf CTRL_REG4 soll dies verhindern. Lesen Sie vielleicht dieses Register vom Sensor und stellen Sie sicher, dass der Block-Hold aktiviert ist?

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

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