Para esta practica se nos pidió que mediante un acelerómetro pudiésemos controlar algunos actuadores, específicamente se dieron los siguientes requerimientos:
- Los valores del Eje X controlen un Servomotor A
- Los valores del Eje Y controlen un Servomotor B
- Encender un LED A con un Tap Simple
- Encender un LED B con un Tap Doble
- Hacer parpadear un LED C con el censado de caída libre
Para la realización de la practica se selecciono el acelerómetro digital MMA8451Q, que cumple con una serie de características que se citan a continuación.
Acelerómetro MMA8451Q
Descripción.
El MMA8451Q es un dispositivo de bajo consumo, con 14 bits de resolución. Su salida digital es I2C, pero destaca su gran tasa de muestreo; cuenta con seis velocidades de muestreo configurables por el usuario desde 1,5 Hz hasta 800 Hz.
Cuenta con diferentes funciones integradas flexibles y modos de operación según se quiera priorizar, el bajo ruido, alta resolución o bajo consumo. Éste dispositivo tiene buffers FIFO 14/8 que pueden contener hasta 32 muestras de datos, ya sean directas o provenientes de filtros pasa altas, dependiendo de la selección del usuario.
Características.
- 1,95 a 3,6 voltios la tensión de alimentación
- Velocidades de transferencia de datos (ODR) de 1,56 Hz a 800 Hz
- Resolución de 14 bits
- I²C interfaz de salida digital (opera a 2,25 MHz con 4,7 kW pull-up)
- Detección de golpes: Simple y doble, direccional
- Detección de vibración: Vibración, vibración direccional
- Tres canales integrados de detección de movimiento
- Caída libre o detección de movimiento: un canal
- Detección de pulso: un canal
- Detección Jolt: un canal
Principio de funcionamiento.
Este sensor convierte la aceleración detectada en un número binario a complemento y luego a 2 el cual puede ser leído por un microcontrolador externo. El número generado dependerá de la sensibilidad que se haya ajustado el dispositivo, puede ser ±2g, ±4g ±8g. Donde “g” representa la aceleración de la gravedad (9,8 m/s2).Para obtener el valor más pequeño que podemos detectar con esa configuración, el rango de medidas seleccionado dividido entre el número de cuentas de la sensibilidad que se desee.
Para calcular el valor más pequeño de aceleración que el sensor puede detectar, se divide el rango de medida completo más pequeño (±2g), entre el número de cuentas con la mayor sensibilidad a 14 bits (4096), por lo que el bit menos significativo que se puede medir por el sensor es:
Resolución=4g/(4096 cuentas)=0,0009765625 g/cuentas
Esto es el equivalente a una cuenta. Para esa configuración dada, solamente hay que multiplicar el valor leído al acelerómetro y multiplicarlo por la resolución del mismo y así obtener el rango en g’s.
Aceleración= (nº de cuentas)*(resolución)
Esquema del sensor.
Conclusión.
Al final decidimos usar este sensor aparte de las razones descritas arriba la más importante es que este producto está incluido en la Freescale que estamos manejando.Los algoritmos de detección de movimientos embebidos en éste dispositivo, permite su fácil y rápida implementación para aplicaciones que requieran la detección de orientación, vibración, golpes, sacudidas, caída libre, que son los objetivos de detección en esta práctica
El manejo del acelerómetro se realizo con ayuda de la librería propia que se puede encontrar en el entorno de MBED, a dicha librería se le añadió algunas funciones a medida de que la practica así lo requería.
Control de Servomotores
Los servomotores deben ser controlados con el valor correspondiente de la orientación del eje predeterminado, por medio de una función que accede a los registros 0x01, 0x03 se obtienen los valores de la orientación de los ejes X e Y.
El valor que se obtiene de la función es un numero flotante, por lo tanto se guarda en una variable del mismo tipo, el valor de la variable puede ir de -1 a 1, debido a que nos conviene manejar números positivos decidimos mover el rango de la variable de 0 a 2.
El control directo sobre el Servomotor se realiza mediante una señal PWM, el entorno MBED ya cuanta con una librería bastante potente para el manejo de PWM. Usamos un Servomotor modelo MG995, que tiene un periodo de 20ms, por lo cual, mediante la función period modificamos dicho periodo a 0.02 segundos.
El ciclo de trabajo se configuro a fin de trabajar acorde al servomotor, de la hoja de datos sabemos que:
1ms - 0°
1.5ms - 90°
2ms - 180°
El valor que se obtiene de los ejes se ajusto a fin de cumplir con el rango del ciclo de trabajo, de tal manera que se pueda relacionar de forma lineal la orientación con la posición del servomotor. El resultado final se muestra a continuación.
Tap y Doble Tap
La librería de manejo del MMA8451Q no configura las interrupciones de Tap Simple y Doble Tap, por lo cual agregamos a la librería funciones de acceso a los registros necesarios para poder hacer uso de las interrupciones, los registro fueron:
PULSE_CFG - 0x21
Este registro configura de detección del evento Tap Simple y Doble Tap, el valor que se asigna en el registro se puede variar de tal manera que se habilite únicamente el evento Tap Simple, que se habilite únicamente el evento Doble Tap o que se habilite de manera simultanea el evento Tap Simple y Doble Tap. Nosotros habilitamos ambos eventos al escribir en el registro el valor 0x7F.
PULSE_THSX - 0x23
Modifica el umbral del pulso para el eje X, se estableció un valor de 0x30, que equilave aproximadamente a 3g.
PULSE_THSY - 0x24
Modifica el umbral del pulso para el eje Y, se estableció un valor de 0x30, que equilave aproximadamente a 3g.
PULSE_THSZ - 0x25
Modifica el umbral del pulso para el eje Z, se estableció un valor de 0x4F, que equivale aproximadamente a 5g.
PULSE_TMLT - 0x26
Con este registro definimos el tiempo que puede transcurrir entre el inicio de la aceleración en el eje seleccionado y el momento en el cual se alcanza el umbral especificado, para nuestro caso nos ayudamos de las tablas que se encuentran en las notas de programación AN4072. a 800Hz y para una TMLT de 60ms se estableció el valor del registro en 0x30.
PULSE_WIND - 0x28
Este registro especifica el tiempo en el cual un segundo pulso debe ser considerado, es decir, que es el tiempo entre pulsos máximo en el cual se considera un Tap Doble, Decidimos establecerlo a aproximadamente 700ms.
De igual manera se configuraron las interrupciones y con la ayuda de la librería InterrupIn de MBED se procedió a realizar el manejo de actuadores. Para el Tap Simple se selecciono el LED Rojo, para indicar un Tap Doble se selecciono el LED Verde, cuando se identifica un Tap Simple la interrupción producida hace que se ejecute una función que activa el LED correspondiente por algunos milisegundos, si se produce otro Tap dentro de los siguientes 700ms dicho Tap producirá una interrupción de Tap Doble, que activa el LED Verde, el resultado final se muestra en el siguiente vídeo, donde primero se hacen pruebas del Tap Simple para finalizar con las pruebas del Doble Tap.
Caída Libre
La librería de manejo del MMA8451Q no configura la interrupción de Caída Libre, por lo cual agregamos a la librería funciones de acceso a los registros necesarios para poder realizar la practica, los registro fueron:
FF_MT_CFG - 0x15
Este registro nos permite configurar el interrupción de Caída Libre, según la tabla del apartado de Free Fall de las notas de programación del acelerómetro, El valor que le dimos al registro fue 0xB8.
FF_MT_SRC - 0x16
Este registro es de solo lectura, en el podemos saber el estado de la interrupción y que orientación tuvo la Caída Libre.
Este registro es de solo lectura, en el podemos saber el estado de la interrupción y que orientación tuvo la Caída Libre.
Según los parámetros establecidos mediante el uso de registros, se procedió a realizar la prueba de Caída Libre, se selección el LED Azul para ser el indicador de dicha Caída, se procuro procuro una superficie blanda para no dañar la placa. El resultado final se muestra a continuación, también agregamos un vídeo en cámara lenta para poder observar a mejor detalle cuando se activa la función que hace parpadear el LED Azul.
Todo lo hicieron en un mismo codigo?
ResponderEliminarLos vídeos son muy ilustrativos con cada inciso, pero también les preguntaría si ¿Llegaron a compactar en un solo programa toda la practica?
ResponderEliminarsaludos!
Si, el aceletrometro solo tiene 2 pines para interrupciones, pero el tap y doble tap se pusieron en el mismo pin, cuando se provoca la interrupción se puede leer un registro que indique si fue un tap o doble tap y así pudimos usar el otro pin para caída libre.
EliminarLes quedó muy bien la práctica, una de las ventajas de esa tarjeta es que ya incluye su propio acelerómetro.
ResponderEliminarMe gusto mucho su explicación de la practica, y los videos de sus resultados son excelentes, sobre todo el de cámara lenta.
ResponderEliminarMuy buena descripción y videos. Me pareció muy bien que incluyeran qué registros utilizaron y de qué manera para los menos familiarizados con esta tarjeta. El video con la parte en cámara lenta estuvo excelente.
ResponderEliminarSaludos!