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.