Recuperación de datos de un acelerómetro saturado

Tengo un acelerómetro ADXL345 y lo monté en un cohete híbrido para lanzarlo. Desafortunadamente, olvidé establecer el rango predeterminado de +/- 2 g a +/- 8 g (esperábamos 6 g durante el despegue).

Para el rango de +/-2g, la hoja de datos enumera una resolución de salida de 10 bits, y para +/-8g enumera una resolución de 12 bits.

Noté esto en la hoja de datos vinculada anteriormente, debajo del DATA_FORMATregistro (0x31):

El registro DATA_FORMAT controla la presentación de datos al Registro 0x32 a través del registro 0x37. Todos los datos, excepto los del rango de +/-16 g, deben recortarse para evitar que se desplacen. ( énfasis mío )

Según esta declaración y el diagrama de bloques funcional (un sensor de 3 ejes está conectado a la "electrónica de detección", luego se conecta a un ADC), espero que haya una manera de resolver los datos correctos. Los factores de escala se enumeran en la página 3 de la hoja de datos.

¿Hay alguna manera de resolver estos datos, al menos a 1 o 2 cifras significativas? (Por ejemplo, tengo una detección de 1,9414 g; debería ser alrededor de 6). No creo que el sensor esté saturado, simplemente el número en los registros de datos, y dados los factores de escala y algunos cambios de bits creativos (no está del todo claro cómo pasan de 10 a 12 bits al cambiar la resolución), espero poder recuperar algo útil de mis datos.

Si traza sus datos asumiendo una pantalla de 2 g con rollover para que vea los 2 g inferiores de una palabra más larga, ¿cómo se ve el resultado? Para ascender g salta a ver una serie de dientes de sierra. 0-2 = 0-2. 2-4 = 0-2. 4-6 = 0-2.
Lo intentaré una vez que recuperemos el cohete. Los datos que tengo son insuficientes ya que los perdimos detrás de una nube..

Respuestas (1)

¿Qué valor almacenó realmente en "Register 0x31—DATA_FORMAT"?

Voy a suponer que no almacenó nada en ese registro, por lo que todavía está en su valor de reinicio de 00. En otras palabras, mientras recopilaba datos (de la Tabla 16 y también de la página 17 de la hoja de datos ADXL345 ):

  • Registro 0x31—DATA_FORMAT == 00.
  • FULL_RES == 0. Entonces, el dispositivo está en modo de 10 bits, y los bits de rango determinan el rango g máximo y el factor de escala.
  • El bit de justificación == 0. Entonces, modo justificado a la derecha con extensión de signo.
  • Los bits de rango == 00. Entonces +- 2g de rango.

Lo primero que haría sería recuperar los valores originales de 16 bits tal como se leen en el acelerómetro. (es decir, si por descuido he tirado los datos originales y todo lo que me queda son números en unidades de "g" que se calcularon restando un cierto desplazamiento y multiplicando por algún factor de escala incorrecto, copiaría los datos recopilados en un hoja de cálculo y dividir por ese mismo factor de escala (incorrecto) y luego agregar ese desplazamiento para tratar de recuperar algo cercano a los valores originales).

Luego graficaría los datos y vería si se parece más a "saturación", "lineal" o "vuelco" (como se describe a continuación).

La hoja de datos es enloquecedoramente vaga en cuanto a lo que sucede cuando el sensor experimenta una aceleración superior a 2 g.

diatriba tangencial

¿Te dije cuánto me molesta cuando los escritores técnicos insisten en escribir en voz pasiva? Cuando el escritor usa la voz pasiva en la oración que citó,

"Todos los datos, excepto los del rango de ±16 g, deben recortarse para evitar el vuelco". (página 17)

No puedo decir exactamente quién se supone que debe hacer este recorte.

Muchas personas recomiendan usar la voz activa . Cuando sigo esas recomendaciones, mi texto suele ser más claro en cuanto a quién hace qué. ¿No es mejor cuando escribo cosas que son más fáciles de entender , en lugar de usar un estilo en el que se ha engañado a la gente para que piense que suena "más profesional" o "más erudito"?

recorte automático

Mi mejor conjetura es que el acelerómetro automáticamente hace este recorte.

saturación : si ve que la aceleración aumenta a través de valores plausibles, luego misteriosamente se queda atascado en una meseta, saturando a +2g o cerca, luego el acelerómetro "útilmente" recortó los datos por usted. Después del recorte, el valor "superior" ya no indica "una aceleración muy cercana a +2 g", sino que ahora indica "una aceleración de al menos 2 g, y posiblemente mucho, mucho más; no hay forma de saberlo".

Debido a que estaba en modo justificado a la derecha de 10 bits, cuando interpreto esos valores de 16 bits como enteros normales con signo de 16 bits, espero ver valores que van desde

  • 0x01FF = +511, indicando más de 1,992 g. Posiblemente mucho, mucho más.
  • 0x01FE = +510, indicando 510/256 g ~= 1,992 g
  • 0x01FD = +509, indicando 510/256 g ~= 1,988 g
  • ...
  • 0x0001 = +1, indicando 1/256 g = 0,0039 g
  • 0x0000 = 0, indicando 0 g
  • 0xFFFF = -1, lo que indica -1/256 g = 0,0039
  • ...
  • 0xFE02 = -510, indicando -510/256 = -1,992 g
  • 0xFE01 = -511, lo que indica -511/256 = -1,996 g
  • 0xFE00 = -512, indicando algo más negativo -1.996 g. Posiblemente mucho, mucho más negativo.

(Sí, sé que 4 lugares decimales de precisión no se justifican para este sensor). (He visto algunos dispositivos saturarse en algún otro punto, como -511 o -510. Por lo general, puedo mirar los datos y averiguar el punto de saturación real).

Puede recuperar algunos datos útiles de este conjunto de datos recortados. Puede usarlo para medir, por ejemplo, cuántos milisegundos la aceleración fue de al menos 1,5 g. Por desgracia, cuando ve las mesetas en este tipo de conjunto de datos, es imposible medir la aceleración máxima o el impulso total; lo mejor que puede hacer es decir: "bueno, sabemos que la aceleración máxima es de al menos 2 g y probablemente más ", y calcula "bueno, calculamos que el impulso total es al menos (algo) newton*segundo".

alternativas

Debería ser posible averiguar si el acelerómetro recorta o no a partir de los datos. (He descrito "saturación", "lineal" y "desplazamiento" en términos de rampa ascendente; con algunos conjuntos de datos, puede ser más claro observar la rampa descendente en su lugar).

lineal : si ve que la aceleración aumenta a través de valores plausibles, luego continúe aumentando a valores más altos (valores por encima de 512, o más negativos que -512), entonces tuvo suerte: el acelerómetro en realidad no hizo ningún recorte, y tiene datos válidos en todo el rango.

vuelco : si ve que la aceleración aumenta a través de valores plausibles, y justo antes de que llegue a +2 g, instantáneamente salta a un valor no físicamente realista cerca de -2 g y luego continúa aumentando, posiblemente pasando a través de cero, luego acercándose a +2 g nuevamente, y saltando hacia abajo cerca de -2 g nuevamente, luego tiene un giro envolvente. Si tiene suerte, los valores cambian muy suavemente, lo que permite detectar cada vuelco y "desenvolver" estos valores para recuperar la verdadera fuerza g.

pd: siéntete libre de editar Open Circuits: Rocket Computer .

¡Excelente! Tan pronto como recuperemos el cohete probaré esto. A partir de ahora hemos tenido que alquilar un Cessna para ayudar a encontrarlo... pero esperamos tener suerte.
Parece que no podremos recuperar nuestro cohete, por lo que esta discusión es un poco discutible (solo tengo un par de puntos de datos de la estación terrestre). ¡Pero gracias!
@davidcary, el enlace Circuitos abiertos: Rocket Computer está roto
@MahendraGunawardena: Gracias por decírmelo. ¿Está funcionando ahora?