Wiederherstellen von Daten von einem gesättigten Beschleunigungsmesser

Ich habe einen ADXL345-Beschleunigungsmesser und habe ihn zum Starten an einer Hybridrakete montiert. Leider habe ich vergessen, den Bereich von der Standardeinstellung von +/-2 g auf +/-8 g einzustellen (wir erwarteten 6 g während des Abhebens).

Für den Bereich von +/-2 g listet das Datenblatt eine Ausgabeauflösung von 10 Bit auf und für +/-8 g eine Auflösung von 12 Bit.

Ich habe dies im oben verlinkten Datenblatt unter dem DATA_FORMATRegister (0x31) bemerkt:

Das DATA_FORMAT-Register steuert die Präsentation von Daten an Register 0x32 bis Register 0x37. Alle Daten, außer denen für den Bereich +/-16 g, müssen abgeschnitten werden, um Rollover zu vermeiden. ( Hervorhebung von mir )

Basierend auf dieser Aussage und dem Funktionsblockdiagramm (ein 3-Achsen-Sensor wird an die "Sensorelektronik" angeschlossen und dann an einen ADC angeschlossen) hoffe ich, dass es eine Möglichkeit gibt, die richtigen Daten aufzulösen. Die Skalierungsfaktoren sind auf Seite 3 des Datenblatts aufgeführt.

Gibt es eine Möglichkeit, diese Daten zumindest auf 1 oder 2 signifikante Zahlen aufzulösen? (Zum Beispiel habe ich eine Erkennung von 1,9414 g - das sollte ungefähr 6 sein). Ich glaube nicht, dass der Sensor gesättigt ist, sondern nur die Zahl in den Datenregistern - und angesichts der Skalierungsfaktoren und einiger kreativer Bitverschiebungen (es ist nicht ganz klar, wie sie beim Ändern der Auflösung von 10 auf 12 Bit kommen), kann ich das hoffentlich etwas Nützliches aus meinen Daten wiederherstellen .

Wie sieht das Ergebnis aus, wenn Sie Ihre Daten unter der Annahme einer 2-g-Anzeige mit Rollover zeichnen, sodass Sie die unteren 2 g eines längeren Worts sehen? Bei aufsteigendem g sehen Sie eine Reihe von Sägezähnen. 0-2 = 0-2. 2-4 = 0-2. 4-6 = 0-2.
Ich werde es versuchen, sobald wir die Rakete geborgen haben. Die Daten, die ich habe, sind unzureichend, da wir sie hinter einer Wolke verloren haben.

Antworten (1)

Welchen Wert haben Sie tatsächlich in „Register 0x31 – DATA_FORMAT“ gespeichert?

Ich gehe davon aus, dass Sie nichts in diesem Register gespeichert haben, also hat es immer noch seinen Rücksetzwert von 00. Mit anderen Worten, während Sie Daten gesammelt haben (aus Tabelle 16 und auch Seite 17 des ADXL345-Datenblatts ):

  • Register 0x31 – DATA_FORMAT == 00.
  • Die FULL_RES == 0. Das Gerät befindet sich also im 10-Bit-Modus, und die Bereichsbits bestimmen den maximalen g-Bereich und den Skalierungsfaktor.
  • Das Justify Bit == 0. Also rechtsbündiger Modus mit Vorzeichenerweiterung.
  • Die Range Bits == 00. Also +- 2g Reichweite.

Als erstes würde ich die ursprünglichen 16-Bit-Werte wiederherstellen, die vom Beschleunigungsmesser gelesen wurden. (dh wenn ich die Originaldaten achtlos weggeworfen habe und alles, was ich übrig habe, Zahlen in Einheiten von "g" sind, die durch Subtrahieren eines Offsets und Multiplizieren mit einem falschen Skalierungsfaktor berechnet wurden, würde ich die gesammelten Daten in a kopieren Tabellenkalkulation und teilen Sie durch denselben (falschen) Skalierungsfaktor und addieren Sie dann diesen Offset, um zu versuchen, etwas in der Nähe der ursprünglichen Werte wiederherzustellen).

Dann würde ich die Daten grafisch darstellen und sehen, ob sie eher wie "Sättigung", "linear" oder "Überschlag" aussehen (wie unten beschrieben).

Das Datenblatt ist wahnsinnig vage, was passiert, wenn der Sensor eine Beschleunigung von mehr als 2 g erfährt.

tangentiales Geschwätz

Habe ich Ihnen schon gesagt, wie sehr es mich ärgert, wenn Technische Redakteure darauf bestehen, im Passiv zu schreiben? Wenn der Autor in dem von Ihnen zitierten Satz das Passiv verwendet,

"Alle Daten, außer denen für den Bereich von ±16 g, müssen abgeschnitten werden, um ein Überrollen zu vermeiden." (Seite 17)

Ich kann nicht sagen, wer genau diesen Ausschnitt machen soll.

Viele Leute empfehlen, die aktive Stimme zu verwenden . Wenn ich diesen Empfehlungen folge, ist mein Text normalerweise klarer, wer was tut. Ist es nicht besser, wenn ich Dinge schreibe, die leichter zu verstehen sind, als einen Stil zu verwenden, der den Leuten vorgaukelt, dass er „professioneller“ oder „wissenschaftlicher“ klingt?

automatisches Abschneiden

Meine beste Vermutung ist, dass der Beschleunigungsmesser dieses Clipping automatisch durchführt.

Sättigung : Wenn Sie sehen, wie die Beschleunigung durch plausible Werte ansteigt, dann auf mysteriöse Weise auf einem Plateau stecken bleiben und bei oder nahe +2 g sättigen, dann hat der Beschleunigungsmesser die Daten "hilfreich" für Sie abgeschnitten. Nach dem Abschneiden zeigt der "oberste" Wert nicht mehr "eine Beschleunigung von sehr nahe an +2 g" an, sondern zeigt jetzt "eine Beschleunigung von mindestens 2 g und möglicherweise viel, viel mehr an - das kann man nicht sagen".

Da es sich im rechtsbündigen 10-Bit-Modus befand, erwarte ich, wenn ich diese 16-Bit-Werte als normale 16-Bit-Ganzzahlen mit Vorzeichen interpretiere, Werte im Bereich von zu sehen

  • 0x01FF = +511, was mehr als 1,992 g anzeigt. Möglicherweise viel, viel mehr.
  • 0x01FE = +510, was 510/256 g ~= 1,992 g anzeigt
  • 0x01FD = +509, was 510/256 g ~= 1,988 g anzeigt
  • ...
  • 0x0001 = +1, was 1/256 g = 0,0039 g anzeigt
  • 0x0000 = 0, was 0 g anzeigt
  • 0xFFFF = -1, was -1/256 g = 0,0039 anzeigt
  • ...
  • 0xFE02 = -510, was -510/256 = -1,992 g anzeigt
  • 0xFE01 = -511, was -511/256 = -1,996 g anzeigt
  • 0xFE00 = -512, was etwas Negativeres anzeigt -1,996 g. Möglicherweise weit, weit negativer.

(Ja, ich weiß, dass eine Genauigkeit von 4 Dezimalstellen für diesen Sensor nicht gerechtfertigt ist). (Ich habe gesehen, dass einige Geräte an einem anderen Punkt gesättigt sind, z. B. -511 oder -510. Normalerweise kann ich mir die Daten ansehen und den tatsächlichen Sättigungspunkt herausfinden).

Sie können einige nützliche Daten aus diesem abgeschnittenen Datensatz wiederherstellen. Sie können damit beispielsweise messen, wie viele Millisekunden die Beschleunigung mindestens 1,5 g betrug. Leider, wenn Sie die Plateaus in dieser Art von Datensatz sehen, ist es unmöglich, die maximale Beschleunigung oder den Gesamtimpuls zu messen – das Beste, was Sie tun können, ist zu sagen: „Nun, wir wissen, dass die maximale Beschleunigung mindestens 2 g und wahrscheinlich mehr beträgt ", und berechnen Sie "nun, wir berechnen, dass der Gesamtimpuls mindestens (etwas) Newton*Sekunde beträgt".

Alternativen

Es sollte möglich sein, anhand der Daten herauszufinden, ob der Beschleunigungsmesser Clipping durchführt oder nicht. (Ich habe „Sättigung“, „linear“ und „Überschlag“ in Bezug auf das Hochfahren beschrieben – bei einigen Datensätzen ist es möglicherweise klarer, stattdessen das Herunterfahren zu betrachten).

linear : Wenn Sie sehen, dass die Beschleunigung durch plausible Werte ansteigt, fahren Sie dann mit dem Hochfahren auf höhere Werte fort (Werte über 512 oder negativer als -512), dann haben Sie Glück gehabt - der Beschleunigungsmesser hat tatsächlich kein Clipping durchgeführt, und Sie haben gültige Daten für den gesamten Bereich.

roll-over : Wenn Sie sehen, dass die Beschleunigung durch plausible Werte ansteigt und kurz bevor sie +2 g erreicht, springt sie sofort auf einen physikalisch nicht realistischen Wert in der Nähe von -2 g und steigt dann weiter an – möglicherweise geht es durch Null, nähert sich dann wieder +2 g und springt wieder zurück in die Nähe von -2 g - dann haben Sie einen Roll-Over-Wrap-Around. Wenn Sie Glück haben, ändern sich die Werte extrem sanft, sodass Sie jeden Überschlag erkennen und diese Werte „auspacken“ können, um die wahre g-Kraft wiederherzustellen.

ps: Fühlen Sie sich frei, Open Circuits: Rocket Computer zu bearbeiten .

Super! Sobald wir die Rakete geborgen haben, werde ich das ausprobieren. Bis jetzt mussten wir eine Cessna chartern, um bei der Suche zu helfen ... aber hoffentlich haben wir Glück.
Sieht so aus, als könnten wir unsere Rakete nicht bergen, daher ist diese Diskussion etwas umstritten (ich habe nur ein paar Datenpunkte von der Bodenstation). Aber danke!
@davidcary, die Open Circuits: Rocket Computer-Verbindung ist unterbrochen
@MahendraGunawardena: Danke, dass du es mir gesagt hast. Funktioniert es jetzt?