calcular la inclinación usando acelerómetro?


16

Tengo un acelerómetro ADXL203 de dispositivos analógicos en una placa de prueba y quería usar esto para medir la inclinación de algunos equipos a una frecuencia razonablemente alta (20-30 Hz). Lo estoy conectando a un registrador campbells cr3000 para hacer la detección. ¿Alguien tiene instrucciones sobre cómo interpretar las salidas del sensor? Gracias


Gracias a todos por los comentarios. saludos muy útiles TROY
troy jensen

Sé que tengo el más alto, pero si no te gusta el mío, al menos acepta el de alguien.
Kortuk

Respuestas:


12

Tengo varias cosas que decir aquí, y algunas de ellas implican estar de acuerdo con pingswept y algunas con penjuin.

cr3000

El muestreo cr3000 a 16 bits y 100 Hz va a tomar muestras un poco lentas para que pueda eliminar fácilmente el ruido de sus datos, pero con una precisión significativamente mayor será utilizable. Dudo que pueda obtener 13 o 14 bits de precisión sin algunos algoritmos de filtrado bastante buenos. Los acelerómetros me han enseñado que la vibración es el demonio, los malditos fonones.

Condensador de salida

Debe asegurarse de hacer lo que dice la hoja de datos y lo que dice la teoría de la señal. Para citar la hoja de datos:

La salida del ADXL103 / ADXL203 tiene un ancho de banda típico de 2.5 kHz. El usuario debe filtrar la señal en este punto para limitar los errores de alias. El ancho de banda analógico no debe ser más de la mitad de la frecuencia de muestreo de analógico a digital para minimizar el alias. El ancho de banda analógico puede reducirse aún más para reducir el ruido y mejorar la resolución.

Esto significa que debe elegir un condensador para mantener su frecuencia por debajo de 50Hz. Si lo coloca sobre esto, puede obtener alias, y el alias hace que el ruido de vibración sea un demonio con el que firmó un acuerdo. Indican cómo calcular los niveles de ruido del dispositivo, y en un ancho de banda de 50Hz, un ruido pico a pico de .006 * La gravedad ni siquiera se notará si tiene esto en un dispositivo con vibraciones.

Interpretando datos

Esto es probablemente lo que más le interesa y es relativamente fácil de hacer. Debe marcar el momento en que el dispositivo está en punto muerto, esto es cuando está plano y lo tiene relativamente quieto. Déle uno o dos segundos en este punto, y luego puede tomar la mediana de estos datos para determinar el voltaje no-G. Luego puede usar esto como un punto con el que compara el dispositivo. Ahora, desde este punto, puedo citar directamente la hoja de datos:

Cuando el acelerómetro es perpendicular a la gravedad, su salida cambia casi 17.5 mg por grado de inclinación .

Por lo tanto, simplemente puede usar esta aproximación si no va a inclinar demasiado, pero necesitará usar la geometría si planea inclinar en ambas direcciones y en ángulos que no son extremadamente pequeños.

Si vas a ir más grande, incluso tienen las ecuaciones enunciadas como:

PASO = ASIN (AX / 1 g)
ROLLO = ASIN (AY / 1 g)

Por lo que puedo decir, su dispositivo da un cambio de 1V por 1G de aceleración colocado en él. Si ha realizado la fase de calibración, entonces debería ser capaz de tomar mediciones, restar el desplazamiento y tener la cantidad de G que se está experimentando.

Deje de leer aquí a menos que tenga problemas o desee obtener más información para mejorar el enfoque.

Agregué un poco más de hablar sobre otros enfoques y métodos para mejorar su enfoque para sistemas que cambian rápidamente o sistemas donde va a programar el dispositivo haciendo las muestras.

Frecuencia de muestreo

Debe tomar muestras significativamente más rápido que la velocidad a la que su dispositivo cambia las direcciones en las que acelera, ya que debe medir la orientación 20-30 veces por segundo. necesita poder medir lo suficientemente rápido como para filtrar el ruido de vibración y la aceleración debido a otros efectos, que he encontrado que son bastante grandes cuando trabajo con un acelerómetro.

Acelerómetro de 3 ejes

En segundo lugar, si tiene un acelerómetro de tres ejes, puede reconocer con bastante facilidad cuándo un eje está perdiendo parte de la aceleración debido a la gravedad (es decir, cuando el eje z tiene una caída de magnitud de 2 m / s ^ 2, sabe que el La ganancia que viste en el otro eje es la gravedad). Esto seguirá siendo complicado, pero en general habrá una adición de aceleración que le dará la velocidad necesaria para cambiar su orientación y luego un cambio en la aceleración debido al cambio de orientación, lo que a menudo le permite reconocer la orientación.

Problemas con 2 ejes

Esto será, como dijo Penjuin, casi imposible con un acelerómetro de 2 ejes y, en el mejor de los casos, incompleto si tiene un sistema que puede tener 20-30 orientaciones diferentes por segundo, o si necesita tener una medida exacta de orientación en todo el tiempo. Estoy seguro de que un estudiante de maestría podría escribir una tesis bastante buena sobre esto, o un Doctorado podría escribir una disertación sobre cómo mejorar este algoritmo.

Ruido de vibración

Para agregar más, si puede colocar su dispositivo encima de algo que lo mantendrá estáticamente bloqueado al movimiento de su dispositivo, pero amortigua la vibración, obtendrá números mucho mejores y no necesitará tanto filtrado de software. Se puede colocar un relleno de espuma simple entre el acelerómetro y su dispositivo, y si es digital, esto no debería aumentar el ruido eléctrico y ayudar a absorber algo de ruido de vibración. Esto solo debe hacerse si ve problemas con el ruido de vibración.

Acelerómetro digital

Sugeriría un acelerómetro digital al que pueda usar SPI para conectarse. Los datos se pueden sincronizar a una velocidad muy muy alta y puede trabajar en segundo plano ya que su SPI realiza el trabajo constante de cargar el siguiente conjunto de valores. Necesitará tener un buen microcontrolador si se va a hacer digitalmente. Si me puede dar mejores detalles sobre lo que quiere hacer, puedo darle mejores comentarios. Si desea una advertencia basada en la detección de inclinación, debería ser muy fácil de hacer con todos los analógicos, pero si desea medir la posición y el ángulo del equipo durante la operación, prepárese para un poco de trabajo.

Avíseme si hay algo que pueda agregar para que esta respuesta sea más clara o aplicable a lo que estaba buscando.


1
Solo para que conste, esta respuesta es épica.
pingswept

1
Dr. Kortuk, Ph.D en acelerómetros! :-)
Jay Atkinson

Escribí esta respuesta porque seguía pensando que había olvidado algo, luego me di cuenta de que era un poco largo y agregué la verdadera respuesta rápida, pero parece que la gente prefiere la respuesta larga.
Kortuk

En cuanto al ruido de vibración, es posible que haya tenido una cantidad mayor durante el tiempo de funcionamiento debido a la presencia de un motor de CC sin escobillas (BLDC), pero antes de que se encendiera todavía había cifras significativas de vibración.
Kortuk

3

He escrito y reescrito esta respuesta varias veces con muchas ideas matemáticas locas, pero honestamente no creo que esto se pueda hacer con precisión. Puedes hacer algunas matemáticas vectoriales, pero ¿y si:

  • El objeto deja de moverse.
  • El objeto tiene una velocidad constante.
  • El objeto golpea un golpe / lo golpeas
  • La fuerza generada al subir la pendiente está por debajo de la resolución del eje Z

Si bien estoy seguro de que hay una solución alternativa para hacer este tipo de cosas, no estoy seguro de que valga la pena; Los acelerómetros simplemente no están diseñados para esta tarea (al menos que yo sepa). Para lo que está tratando de lograr, sugeriría un enfoque giroscópico utilizando cualquiera de estos , todos los cuales serían bastante resistentes a todos los problemas anteriores.


Los acelerómetros están diseñados para esto en realidad, hay una sección completa sobre cómo hacerlo. Los acelerómetros son de muy bajo costo en muchos casos y, a veces, el costo es un problema mayor que la funcionalidad perfecta.
Kortuk

3
Siempre trato de explicar esto a los estudiantes, y lo voy a agregar aquí porque creo que es un concepto importante. La ingeniería no siempre se trata de hacerlo de la mejor manera, se trata de hacerlo de tal manera que el usuario no pueda distinguir la diferencia en nada excepto en el precio.
Kortuk

2
Hay algo que decir para hacerlo primero, y hay mucho que decir para hacerlo mejor que el último.
Kortuk

Estoy de acuerdo, pero depende de tus motivos (qué troy no ha indicado); ¿Quieres que funcione bien o quieres aprender? No son necesariamente mutuamente excluyentes, pero no escribirías tu propio compilador solo para parpadear un LED a menos que específicamente quisieras aprender sobre el diseño del compilador.
penjuin

Sí, lo agrego para discutir su respuesta, en general, si necesita poder decir una orientación diferente 30 veces por segundo, tendrá aceleraciones gigantescas, lo que a su vez significa que necesita más de 100 muestras al segundo.
Kortuk

3

Si entiendo la hoja de datos correctamente, la salida para cada eje variará entre 1.5 V y 3.5 V a medida que se incline alrededor del eje. Cuando el dispositivo está plano (ignorando el error de alineación del paquete de ± 1 grado), ambas salidas deben leer 2.5 V.

Si solo necesita medir la inclinación en una dirección, puede tomar el arco de la desviación de 2.5 V para obtener el ángulo en radianes y luego convertirlo a grados. Si el dispositivo puede inclinarse en cualquier dirección, puede calcular los dos ángulos y luego calcular el ángulo compuesto a partir de ellos.

Para ser explícito: ángulo alrededor de un eje = (180 / π) * arcsin (Vout - 2.5)

Para obtener una buena respuesta de frecuencia, necesitará condensadores de salida pequeños, Cx y Cy. De la nota a pie de página 6 en la p. 3 de la hoja de datos, parece que 0.02 uF le daría un ancho de banda de 250 Hz, que probablemente sea el adecuado para su frecuencia de muestreo. Tal vez podría subir hasta 0.1 uF, limitando el ancho de banda a 50 Hz, pero sus señales comenzarán a atenuarse.


No creo que atenúe las señales, a menos que se refiera a las frecuencias más altas, que es el punto del límite. Necesita ir a 50Hz o menos para que coincida con su dispositivo de muestreo de datos.
Kortuk

1
Ah, no lo había pensado desde la perspectiva del alias. Todavía creo que las mayúsculas grandes atenuarán las señales de alta frecuencia, pero eso es realmente algo bueno en este caso. Entonces sí, establecer el ancho de banda alrededor de 50 Hz es bueno.
pingswept

3

Estoy agregando una segunda respuesta, porque mi otra es grande, y es posible que solo desee simple.

La tapa del filtro debe ser de 0.10 uF o mayor para mantenerlo por debajo de su tasa de alias (50Hz). Debe dar una fase de calibración de un par de segundos con el dispositivo sentado a nivel con toda la aceleración de gravedad en la dirección Z, esto es para determinar su punto G cero.

El voltaje que mide para su punto G cero, probablemente será diferente para la dirección X e Y, no representa nada. Simplemente tome el voltaje que obtenga y reste eso de él. Este voltaje, con compensación restada, es el número de Gs que está obteniendo en esa dirección.

Toma el arco y obtendrás tu ángulo en esa dirección.

Esto ignora el ruido y otras aceleraciones. prepárese para que el NaN sea un resultado si lo tiene completamente inclinado y hay algún ruido.


0

Para obtener cualquier ángulo, debe medir la aceleración de la gravedad en ambas direcciones X e Y. reste el voltaje medio (2.5V) para que cero sea "sin aceleración".

Ahora puedes encontrar el ángulo con arcsin (y / x). Pero eso es molesto de usar, debido a la división, y porque el signo es ambiguo, así que lo que realmente quieres es la función C atan2 (y, x). atan2 () obtiene el signo correcto para todos los 360 grados.


Fuera de tema, ya que no está utilizando un micro: si está buscando atan2 () para usar en un microcontrolador, hay un generador atan2 () en mi sitio web: http://vivara.net/cgi-bin/ cordic.cgi


No es una garantía de 2.5 V para 0G. ya que probablemente usará una computadora para hacer los cálculos, dudo que el método que usa para hacer los cálculos sea importante.
Kortuk
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.