Conversión de la aceleración de datos ADXL335 en desplazamiento

1

Actualmente estoy usando un chip ADXL335 de dos medidas de aceleración y luego lo convierto en un desplazamiento. Estoy deseando medir el rango de desplazamiento vetical (dirección -z) de un máximo de 10 cm, por lo que es bastante pequeño. He leído los datos del ADXL335 y los he convertido en "g's". Luego lo integro numéricamente (trapezoidal) dos veces para convertir las g en desplazamiento. Solo quiero medir el desplazamiento vertical en la dirección -Z.

Frecuencia de muestreo == 100Hz; utilizando un ADC de 12 bits; Vref == 3.3volts;

aquí está mi código CVI / c:

//every sample (0.01 seconds)

acceleration = (((((adc - 2420)*3.3)/4096)/0.3)*-9.8);//subtracting 2420 to account for the acceleration due to gravity.

acceleration_1 = acceleration;

velocity = velocity_1 + (((acceleration+acceleration_1)/2)*0.01);

velocity_1 = velocity;

displacement = displacement_1 + (((velocity+velocity_1)/2)*0.01);

displacement_1 = displacement;

.... // luego imprimo los datos de desplazamiento y tengo una condición para restablecer los valores de la velocidad y el desplazamiento a cero (cuando la aceleración se vuelve positiva ya que solo se necesita la dirección verticalmente hacia abajo).

Mi problema es que estoy obteniendo valores de desplazamiento incorrectos y mi observación hasta ahora es que cuanto más rápido se mueva el acelerómetro, mayor será el desplazamiento.

Apreciaría toda la ayuda que pueda obtener, quedarme estancado en este problema por un tiempo y no poder darle sentido.

También intenté usar un filtro de paso alto para eliminar el desplazamiento dc de la aceleración sin suerte (¿la resta funciona?). También intenté implementar otro botón para controlar cuando lo integro. Por ejemplo, integre cuando el botón esté presionado y establezca los valores de los datos en cero cuando no se presione.

Espero que mi problema esté claro. En esencia, mi salida de desplazamiento depende de la velocidad de aceleración y no de la distancia total.

    
pregunta Bobby McGlone

2 respuestas

1

Convertir los datos de un acelerómetro analógico a la distancia es bastante difícil debido a que el desplazamiento involucrado en la doble integración provoca una deriva como ya se dijo. Consulte esta interesante presentación fusión de sensores para obtener más detalles.
Por lo que sé, esta desviación se puede evitar mediante el uso de acelerómetros digitales (con altas tasas de muestreo) y la integración doble se debe realizar utilizando integradores electrónicos con filtros adecuados en cada etapa para eliminar el desplazamiento y el ruido de baja frecuencia. . Su tasa de muestreo ADC parece muy baja! Utilice una frecuencia de muestreo más alta y si puede diseñar un circuito de acondicionamiento de señal adecuado en cada etapa, ¡podría tener éxito con resultados decentes!

Espero que esto dé un poco más de información sobre tu problema :)

PS: Yo mismo he investigado el ADXL335 para usarlo en la medición de vibraciones y he fallado miserablemente. Tuve que estandarizar mis valores con la medición de vibraciones ópticas.

    
respondido por el charansai
0

Tenga en cuenta que obtener el desplazamiento de la aceleración requiere dos integraciones. Eso significa que los errores se acumulan con el tiempo. Después de la primera integración, y el desplazamiento fijo en la aceleración original provoca un error que aumenta linealmente. Después del segundo, el error aumenta de forma cuadrática.

Lo que estás intentando hacer es la navegación inercial. Para hacerlo durante períodos de tiempo significativos se requieren acelerómetros mucho más precisos que los dispositivos MEMs baratos.

Una vez trabajé en un proyecto que medía el movimiento de la cabeza de un golfista durante un swing de golf. Se utilizaron acelerómetros MEM y giroscopios. Los datos de posición no fueron muy buenos después de un par de segundos. Básicamente, fue suficiente para la duración del swing de golf. Afortunadamente eso es todo lo que necesitábamos, así que funcionó. También estábamos buscando tendencias y firmas específicas en el swing, y la posición exacta no era tan importante.

Haz el cálculo del error. Mira lo que es el error de aceleración. Doble integración para obtener el error de desplazamiento en función del tiempo. No será bonito, especialmente si desea conocer el desplazamiento más de unos segundos desde un inicio conocido.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas