Diferencia entre revisiones de «Acelerómetro - DEMOQE128»

De Wikitronica
Saltar a: navegación, buscar
(Simulación)
 
(No se muestran 56 ediciones intermedias de 7 usuarios)
Línea 1: Línea 1:
El acelerómetro es una herramienta que dispone el módulo [[DEMOQE128]] para detectar el movimiento o giro que resulta mediante la acción de una fuerza (gravedad o fuerza resultante por movimientos continuos).
+
[[Archivo:pruebita.gif|300px|right|thumb|Un Acelerómetro puesto a prueba en un Iphone. Ref: [http://www.google.co.ve/imgres?start=88&um=1&hl=es-419&safe=off&tbm=isch&tbnid=MXnKq9QAvTyT7M:&imgrefurl=http://voo-du.net/2012/03/05/the-iphone-steering-wheel/&docid=cH9Qqa9cdVT73M&imgurl=http://voo-du.net/wp-content/uploads/2012/03/gif_shop.gif&w=300&h=226&ei=SwOmUPufEum40QHb74CABA&zoom=1&iact=rc&dur=496&sig=114450985690802651824&page=5&tbnh=151&tbnw=224&ndsp=22&ved=1t:429,r:8,s:100,i:28&tx=75&ty=49&biw=1262&bih=624]]]
 +
 
 +
[[Archivo:acelerómetro analog.jpg|280px|right|thumb|El MMA7260Q es un acelerómetro analógico de 3 ejes, disponible solo en las primeras revisiones del DEMOQE (Rev A). Ref:[http://www.google.co.ve/imgres?imgurl=http://www.freescale.com/files/graphic/product_freescale/MMA7260Q_3ARROW_LOWRES.jpg&imgrefurl=http://www.freescale.com/files/abstract/event/MMA7260QPK.html?tid%3Dtslp&h=964&w=1000&sz=89&tbnid=HHyfYgj7Jk-sqM:&tbnh=90&tbnw=93&zoom=1&usg=__Hwh_6G9CgCzmgnVoMTytO155a_4=&docid=rDmzD451bBP8UM&hl=es-419&sa=X&ei=TFSmUOnoMoPa8wSm94G4Dw&ved=0CCsQ9QEwAg&dur=2938]]]
 +
 
 +
Un acelerómetro es un dispositivo para detectar el movimiento o giro que resulta mediante la acción de una fuerza (gravedad o fuerza resultante por movimientos continuos). Hay muchos tipos de acelerómetros y operan segun el número de ejes que disponga, el básico dispone de 2 ejes (X,Y), los mas modernos y complejos operan en 3 ejes (X,Y,Z). Para todos los ejes, devuelve una tensión en milivoltios proporcional a la aceleración que experimenta el dispostivo cuando se somete a movimientos. Su utilidad hoy día es muy aplicada a la robótica (direccionamiento remoto), en consolas de videojuegos (como la Wiimote) y en la mayoria de teléfonos celulares de última generación (Smartphones).
  
 
==Tipos==
 
==Tipos==
En este módulo hay x tipos de acelerómetros:
+
El acelerómetro descrito en este artículo es una herramienta que dispone el módulo [[PE Micro: DEMOQE128|DEMOQE128]] que pertenece a la primera generación (rev A) del DEMOQE cuyo dispositivo es el analógico, sín embargo la tercera revisión (rev C) consta de uno digital.
 +
 +
===Acelerómetro Analógico===
 +
Este dispositivo de bajo costo (MMA7260Q[http://wikitronica.labc.usb.ve/index.php/Acelerómetro_-_DEMOQE128#Referencias]) está presente solo en la primera revisión del DEMOQE (Rev A),en este acelerómetro analógico tenemos las coordenadas x,y,z y cuyos voltajes serán proporcionales a la aceleración a la que se someta el dispositivo. Las señales en cada uno de los ejes son convertidas en el [[ADC (Conversor Analógico-Digital) - MC9S08QE128|ADC]] antes de enviarse vía [[SCI (Interfaz de Comunicación Serial) - MC9S08QE128|serial]] a través del puerto de comunicaciones y ser visualizado en el [[TOOLKIT PC APPLICATIONS - DEMOQE128]], el usuario puede realizar ciertas modificaciones referente al rango de gravedad/sensibilidad sobre el dispositivo según lo demande la situación. Las distintas modalidades pueden observarse en el marco de configuración.[http://wikitronica.labc.usb.ve/index.php/Aceler%C3%B3metro_-_DEMOQE128#Configuraci.C3.B3n]
 +
 
 +
[[Archivo:analog.jpg|200px|right|thumb|Se puede observar el MMA7260Q (acelerómetro analógico) junto con los jumpers de selección de rango (G-Sel1/G-Sel2).DEMOQE (Rev A)]]
 +
 
  
* Acelerómetro Analógico: En el acelerómetro analógico tenemos las coordenadas x,y,z y cuyos voltajes serán proporcionales a la aceleración a la que se someta el dispositivo.
+
===Acelerómetro Digital===
 +
El acelerómetro digital (263765030UA) solo está disponible para la tercera revisión (rev C) del DEMOQE, es mucho mas pequeño y una ventaja que posee es que no es necesario configurar la sensibilidad mediante los jumpers, tampoco necesita la conversión en el ADC sino que es enviada directamente a través de la [[SCI (Interfaz de Comunicación Serial) - MC9S08QE128|interfaz de comunicación serial]], otra diferencia respecto a su antecesor es que ahora utiliza la interfaz [[I²C (Inter-Integrated Circuit) - MC9S08QE128|I²C]] para la transmisión a través del puerto a utilizar cuyo rango va desde los 0 a los 100kbps aumentando la rapidéz de transmisión. A pesar de estas modificaciones, el acelerémetro sigue cumpliendo las mismas funciones para su proposito, sin embargo, no es posible utilizar la misma correspondencia respecto a la programación del analógico.
  
==Funcionamiento y Características==
+
==Características==
El acelerómetro del Demoqe es mucho mas versátil que el de otros micros pues dispone en su interior la configuración a 3 ejes, lo que nos permite ademas de detectar movimientos lineales, saber si el dispositivo gira alrededor de su entorno.
+
El acelerómetro del DEMOQE es mucho mas versátil que el de otros micros, pues dispone en su interior la configuración a 3 ejes lo que nos permite además de detectar movimientos lineales, saber si el dispositivo gira alrededor de su eje. Funciona con el reloj interno del DEMOQE [[JUMPER SETTINGS|debidamente configurado]], posee una gama de hasta 4 modalidades respecto a su sensibilidad, es decir, que entre mas grande sea el rango seleccionado, menor serán las tensiones que variarán en cada uno de los ejes que compone el dispositivo. Para fines de visualización el acelerómetro también cuenta con un una herramienta para verificar cada variación en sus ejes y como se comportan segun la posición que el mismo tenga en un instante de tiempo, la gráfica obviamente hará un trazo en valores muestrales para cada segmento de tiempo determinado.
  
 
==Configuración==
 
==Configuración==
Este dispositivo cuenta con una gama variada para su sensibilidad respecto al movimiento que se le aplica, se puede utilizar 1,5g  2 y 4g según se le especifique mediante la configuracion de los [[JUMPER SETTINGS|jumpers]], especificamente la línea de jumpers J14 J15 y J16 segun convenga, para cada valor del rango se tiene otro valor de sensibilidad que es inversamente proporcional al primero.
+
Este dispositivo cuenta con una gama variada para su sensibilidad respecto al movimiento que se le aplica, se puede utilizar 1,5g  2 y 4g según se le especifique mediante la [[JUMPER SETTINGS|configuracion de los jumpers]], especificamente la línea de jumpers J14(G-Sel2) J15(G-Sel1) y J16(Sleep Mode) según convenga, para cada valor del rango se tiene otro valor de sensibilidad que es inversamente proporcional al primero.
  
 
{| border="2" style="padding: 0.5em; border: 1px #aaa solid; border-collapse: collapse;background:#F9F9F9" cellpadding="4"  
 
{| border="2" style="padding: 0.5em; border: 1px #aaa solid; border-collapse: collapse;background:#F9F9F9" cellpadding="4"  
Línea 40: Línea 51:
 
|}
 
|}
  
Para configurar este periférico según la sensibilidad que se desea aplicar, es necesario ralizar también una indicación mediante instrucciones al puerto G especificamente los puertos PTGD2/PTGD3 y siguiendo las especificaciones de la tabla anteiror. Para ello observemos momentaneamente el puerto PTGDD:
+
Para configurar este periférico según la sensibilidad que se desea aplicar, es necesario ralizar también una indicación mediante instrucciones al puerto G específicamente los puertos PTGD2/PTGD3 y siguiendo las especificaciones de la tabla anterior. Para ello observemos momentaneamente el puerto PTGDD:
  
  
 
{| border="0" style="padding: 0.1em; border-collapse: collapse;background:#FFFFFF" cellpadding="4"  
 
{| border="0" style="padding: 0.1em; border-collapse: collapse;background:#FFFFFF" cellpadding="4"  
 
|- valign="bottom" style="background:#FFFFFF"
 
|- valign="bottom" style="background:#FFFFFF"
|      7             6              5              4      ¦       3             2             1             0
+
|     7            6              5              4      ¦      3            2            1            0
 
|}
 
|}
  
Línea 62: Línea 73:
 
{| border="0" style="padding: 0.1em; border-collapse: collapse;background:#FFFFFF" cellpadding="4"  
 
{| border="0" style="padding: 0.1em; border-collapse: collapse;background:#FFFFFF" cellpadding="4"  
 
|- valign="bottom" style="background:#FFFFFF"
 
|- valign="bottom" style="background:#FFFFFF"
|      0             0              0              0      ¦       0             0            0             0
+
|     0            0              0              0      ¦      0            0            0            0
 
|}
 
|}
  
 
Para seleccionar por ejemplo el rango de 6g se tendria que seleccionar los bits 1 y 2 del registro PTGDD, análogamente se procede si se requiere seleccionar las otras modalidades de rango. Es necesario activar los pull-ups por seguridad antes de escribir en los puertos, en este caso el mas relevante seria el puerto G. Veamos el siguiente ejemplo:
 
Para seleccionar por ejemplo el rango de 6g se tendria que seleccionar los bits 1 y 2 del registro PTGDD, análogamente se procede si se requiere seleccionar las otras modalidades de rango. Es necesario activar los pull-ups por seguridad antes de escribir en los puertos, en este caso el mas relevante seria el puerto G. Veamos el siguiente ejemplo:
  
   /* Habilitamos pullups en todos los puertos del módulo principal
+
<syntaxhighlight lang="c">
 +
//*En Lenguaje C
 +
   /* Habilitamos pullups en todos los puertos del módulo principal*/
 
   PTAPE = PTBPE = PTCPE = PTDPE = PTEPE = PTFPE = PTGPE = PTHPE = PTJPE = 0xFF;  
 
   PTAPE = PTBPE = PTCPE = PTDPE = PTEPE = PTFPE = PTGPE = PTHPE = PTJPE = 0xFF;  
 
    
 
    
   /* Configuramos la sensibilidad con la que va a trabajar el acelerometro
+
   /* Configuramos la sensibilidad con la que va a trabajar el acelerómetro */
 
    
 
    
 
   PTGD = 0x00; // Puerto G inicialmente como salida
 
   PTGD = 0x00; // Puerto G inicialmente como salida
   PTGDD = 0x06; // Cargar este valor para usar los bits 1 y 2 para trabajar a 6g como se indica en el cuadro.
+
   PTGDD = 0x06; // Cargar este valor para usar los bits 1 y 2 para trabajar a 6g  
 +
                // como se indica en el cuadro.
 +
</syntaxhighlight>
  
 +
 +
<syntaxhighlight lang="asm"> 
 +
//*En Assemnbler
 +
  /* Habilitamos pullups en todos los puertos del módulo principal
 +
  mov #$ff,PTAPE
 +
  mov #$ff,PTBPE
 +
  mov #$ff,PTCPE
 +
  mov #$ff,PTDPE
 +
  mov #$ff,PTEPE
 +
  mov #$ff,PTFPE
 +
  mov #$ff,PTGPE
 +
  mov #$ff,PTHPE
 +
  mov #$ff,PTJPE
 +
 
 +
  //*En Assembler
 +
  /* Configuramos la sensibilidad con la que va a trabajar el acelerómetro
 +
  mov #$00,PTGD  // Puerto G inicialmente como salida
 +
  mov #$06,PTGDD  // Cargar este valor para usar los bits 1 y 2 para trabajar a 6g como se
 +
                  //indica en el cuadro
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="c">
 +
  //*Lectura de aceleración y Conversión ADC
 +
  //*Lee los datos de aceleración en un eje y lo guarda en una estructura
 +
  word LeerAceleracion(void)
 +
  {
 +
  word adc;
 +
  while (!(ADCSC1_COCO)){}          // Esperar a que la conversión con el adc haya finalizado.
 +
  adc=ADCR;
 +
  return adc;
 +
  }
 +
</syntaxhighlight>
 +
 +
'''Nota con el ADC''': recordemos que COCO es un bit de sólo lectura que se establece cada vez que se completa una conversión cuando la función de comparación se desactiva (ACFE = 0). Cuando la función de comparación se activa (ACFE = 1) la bandera COCO se ajusta al término de una conversión sólo si el resultado de la comparación es de valor lógico alto (true). Este bit se borra cada vez que se escribe o ADCSC1 ADCRL cuando lee, viendo bien que si COCO = 0 se encuentra convirtiendo, si COCO=1 quiere decir que la conversión se completó.[[ADC (Conversor Analógico-Digital) - MC9S08QE128|véase ADC]]
 +
 +
<syntaxhighlight lang="c">
 +
  //*Selección de canal para cada eje
 +
  void MostrarAceleracion ()
 +
  {
 +
  word MuestraCNT;
 +
  byte j,k;
 +
  // Lectura de los datos de aceleración
 +
  ADCSC1 = 0x01;                // Seleccionamos canal ADC1 (PTA1)
 +
  x.leyendo[muest]  = (dword)(LeerAceleracion()); // El valor que contenga el pin x lo toma
 +
                                                  // como muestra y lo convierte usando canal 1
 +
                                                  // de los adc's
 +
  ADCSC1 = 0x08;                // Seleccionamos canal ADC8 (PTA6) 
 +
  y.leyendo[muest]  = (dword)(LeerAceleracion()); // El valor que contenga el pin y lo toma
 +
                                                  // como muestra y lo convierte usando canal 8
 +
                                                  // de los adc's
 +
  ADCSC1 = 0x09;                // Seleccionamos canal ADC9 (PTA7)
 +
  z.leyendo[muest]  = (dword)(LeerAceleracion()); // El valor que contenga el pin z lo toma
 +
                                                  // como muestra y lo convierte usando canal 9
 +
                                                  // de los adc's
 +
</syntaxhighlight>
 +
 +
Luego que se convierte se envia a través del puerto serial usando SCISC1
 +
 +
<syntaxhighlight lang="asm">
 +
  //*Configuración tasa de transferencia. Assembler
 +
  mov #$02,SCI1BDH // se ajusta la escala de transferencia se carga 2 de manera que
 +
                    // 4Mhz/2x16 = 115000 bps aprox
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="c">
 +
  //*Lenguaje C
 +
  //*Configuración tasa de transferencia. Lenguaje C
 +
  void InicializarSCI(word baudvalor) {
 +
  SCI1BD = baudvalor; //donde baudvalor es una palabra que asigna el valor indicado en el
 +
                      //comentario anterior y obtener 115000bps
 +
    } //Inicialización de la interfaz de comunicación serial finalizada
 +
 
 +
 +
  //*Transmisión serial (se transmitirá en este caso un string)
 +
  void EnvMsg(char msg[]) {
 +
  byte i=0;
 +
  char sig_caracter;
 +
 
 +
    SCI1C2 = 0x08;    // habilitamos la transmisión especificamante el registro TE
 +
    sig_caracter = msg[i++];
 +
    while(sig_caracter != 0x00) {  // mientras hayan caracteres realizar
 +
    while(!SCI1S1_TDRE){}    //mientras que el registro de transmisión no este vacío
 +
                              //(Transmit data register empty flag) hacer:
 +
    SCI1D = (byte) sig_caracter; // transmitir caracter y verificar si la bandera de
 +
                                // transmisión ha cambiado a vacío TRDE=1
 +
    sig_caracter = msg[i++];
 +
    } //fin while del SCI1D para transmitir
 +
  } //final de transmisión
 +
</syntaxhighlight>
  
 
===Simulación===
 
===Simulación===
 
[[Archivo:interfaz.png|450px|right|thumb|La interfaz compone las herramientas fundamentales de visualización para verificar el comportamiento del acelerómetro.]]
 
[[Archivo:interfaz.png|450px|right|thumb|La interfaz compone las herramientas fundamentales de visualización para verificar el comportamiento del acelerómetro.]]
  
Luego de realizar las configuraciones y realizar un programa básico para su correcto funcionamiento, el usuario puede utilizar una aplicación adicional denominada [[DEMOQE Accelerometer Demo application]] en la que puede observar gráficamente el comportamiento del acelerómetro mientras el usuario interactua con el dispositivo.
+
Luego de realizar las configuraciones y realizar un programa básico para su correcto funcionamiento, el usuario puede utilizar una aplicación adicional denominada [[ TOOLKIT PC APPLICATIONS - DEMOQE128|DEMOQE Accelerometer Demo application]] en la que puede observar gráficamente el comportamiento del acelerómetro mientras el usuario interactua con el dispositivo.
 +
 
 +
La aplicación lee la información que hay en los ejes X, Y, y Z del acelerómetro de 3-ejes utilizando el convertidor analógico/digital. Los datos trazados incluye la magnitud de los ejes X, Y, Z y las señales del acelerómetro, así como la carga del procesador actual. Estos datos procesados ​​es un promedio de los datos totales del acelerometro en sí (datos en bruto), o una versión filtrada de los datos totales del mismo, dependiendo del modo seleccionado.
  
 
La interfáz de este programa se describe básicamente en tres secciones:
 
La interfáz de este programa se describe básicamente en tres secciones:
  
*Terminal Windows:
+
*Terminal Windows: Nos muestra los ciclos que hay en el bus durante cada interacción del dispositivo, es similar a la aplicación hyperterminal de Windows. Permite ver los caracteres que se transmiten y se reciben mientras el acelerometro experimenta interaciones, si el dispositivo no experimenta movimientos considerables segun su sensibilidad, siempre se transmitirá el último caracter correspondiente en ese instante.
  
*Data Snapshot: Esta interfaz nos permite ver en porcentaje que tanto se ha movido el eje (x,y,z) del dispositivo respecto a la referencia teniendo en cuenta que tan sensible es, las varianzas de la gráfica dependerán de la sensibiliad del acelerometro en cada caso.
+
*Data Snapshot: Esta interfaz nos permite ver que tanto se ha movido el eje (x,y,z) del dispositivo respecto a la referencia (en porcentajes) teniendo en cuenta que tan sensible es, como se había mencionado antes para cada dato trazado de la señal tambien hay un indicador que muestra la carga del procesador en ese momento, las varianzas de la gráfica dependerán de la sensibilidad del acelerómetro en cada caso.
  
Scope:  
+
*Scope: Muestra el trazado de las señales que van cambiando en el acelerómetro a medida que experimenta variaciones de posición, si el movimiento es brusco, los valores de muestra seran altos y viceversa si sucede lo contrario, el graficador toma el trazado de todos los ejes al mismo tiempo.
  
Para inicializar es necesario indicarle al programa a cuanto se desea transmitir la opción dependerá del usuario sin embargo el estandar es 115000, y el puerto por lo general es el usb, sín embargo pueden usarse puertos de comunicaciones (COM1:COM5)si el usuario asi lo desea. Verificar previamente la correcta configuración de los [[jumpers]] y mantener apagado el [[DEMOQE]]
+
[[Archivo:scope.png|300px|center|thumb|Las interacciones que experimenta el acelerometro es trazada en cada eje al mismo tiempo.]]
 +
 
 +
Para inicializar es necesario indicarle al programa a cuanto se desea transmitir la opción dependerá del usuario sin embargo el estandar es 115000, y el puerto por lo general es el usb, sín embargo pueden usarse puertos de comunicaciones (COM1:COM5)si el usuario asi lo desea. Verificar previamente la correcta configuración de los [[JUMPER SETTINGS|jumpers]] y mantener apagado el DEMOQE, luego cuando se hace la compilación correcta del programa y se hace el debug correspondiente, se puede abrir el puerto en la aplicación pulsando el boton "Open serial port and start demo".
 +
 
 +
En este enlace se podrá descarga la aplicación para el acelerómetro
 +
 
 +
([http://pemicro.com/fixedlinks/DEMOToolkit.cfm/ Descarga de la aplicación para el acelerómetro].)
  
 
==Ficha técnica==
 
==Ficha técnica==
El acelerómetro que dispone el DEMOQE128 es el [[MMA7260Q]] y tiene las siguientes especificaciones técnicas:
+
[[Archivo:vista superior.jpg|300px|right|thumb|Vista superior del acelerómetro.DEMOQE (Rev A)]]
  
* Consumo promedio en corriente de 500μA
+
El acelerómetro que dispone el DEMOQE128 es el [[http://hercules.uni-mb.si/projects/AVMA/dokumentacija/MMA7260Q.pdf MMA7260Q]] y tiene las siguientes especificaciones técnicas:
* Sensibilidad seleccionable (1.5, 2, 4 y 6g)
+
 
* Modalidad de espera de 3μA
+
* Consumo promedio en corriente de 500μA.
* Dimensiones de 6mm x 6mm x 1.45mm QFN
+
* Sensibilidad seleccionable (1.5, 2, 4 y 6g).
* Alta sensibilidad en niveles de voltajes (800mV/g g@1.5)
+
* Modalidad de espera de 3μA.
 +
* Dimensiones de 6mm x 6mm x 1.45mm QFN.
 +
* Alta sensibilidad en niveles de voltajes (800mV/g g@1.5).
 
* Acondicionamiento de señales integrado con un filtro pasabajo trabajando conjuntamente con el dispositivo.
 
* Acondicionamiento de señales integrado con un filtro pasabajo trabajando conjuntamente con el dispositivo.
* Capacidad para operar a baja tensión (2,2v a 3,6v)
+
* Capacidad para operar a baja tensión (2,2v a 3,6v).
 +
* Modo Inactivo: Al colocar acelerómetro de 3 ejes en modo de suspensión. El usuario puede controlar mediante PTC4 para activar o desactivar el acelerómetro.
 +
[[Archivo:esquema.jpg|400px|center|thumb|En el esquema es notable observar que cada salida posee un filtro a manera de protección.DEMOQE (Rev A)]]
  
 +
==Referencias==
  
==Enlace externo==
+
[http://www.freescale.com/files/microcontrollers/doc/user_guide/DEMOQE128UM.pdf Manual de usuario DEMOQE128 (Rev A)]
[http://www.freescale.com/files/microcontrollers/doc/user_guide/DEMOQE128UM.pdf Manual User DEMOQE128]
+
 
 +
[http://www.pemicro.com/downloads/main_downloads_temp/201211280935557655751/DEMOQE_User_Manual_1_08.pdf Manual de usuario DEMOQE128 (Rev C)]
  
 
[http://hercules.uni-mb.si/projects/AVMA/dokumentacija/MMA7260Q.pdf Datasheet del acelerómetro MMA7260Q]
 
[http://hercules.uni-mb.si/projects/AVMA/dokumentacija/MMA7260Q.pdf Datasheet del acelerómetro MMA7260Q]
 +
 +
==Enlaces externos==
 +
*[http://www.youtube.com/watch?v=wNJZNUo4oJE Aplicación a la robótica]
 +
*[http://www.youtube.com/watch?v=rZ7lGdV0JzE&feature=plcp Ajuste en un DEMOQE128 (rev A)]
 +
*[http://www.youtube.com/watch?v=NPqwmq--f0g Proyecto acelerómetro: indicador de nivel (nivelador electrónico) con leds]
 +
*[http://www.datasheetarchive.com/MC9S08QE128-datasheet.html datasheet del MC9S08QE128]]
 +
  
 
[[Categoría:DEMOQE128]]
 
[[Categoría:DEMOQE128]]
 +
 +
 +
Publicado por: Gabino Betancourt (Manypuig)

Revisión actual del 23:04 5 dic 2012

Un Acelerómetro puesto a prueba en un Iphone. Ref: [1]
El MMA7260Q es un acelerómetro analógico de 3 ejes, disponible solo en las primeras revisiones del DEMOQE (Rev A). Ref:[2]

Un acelerómetro es un dispositivo para detectar el movimiento o giro que resulta mediante la acción de una fuerza (gravedad o fuerza resultante por movimientos continuos). Hay muchos tipos de acelerómetros y operan segun el número de ejes que disponga, el básico dispone de 2 ejes (X,Y), los mas modernos y complejos operan en 3 ejes (X,Y,Z). Para todos los ejes, devuelve una tensión en milivoltios proporcional a la aceleración que experimenta el dispostivo cuando se somete a movimientos. Su utilidad hoy día es muy aplicada a la robótica (direccionamiento remoto), en consolas de videojuegos (como la Wiimote) y en la mayoria de teléfonos celulares de última generación (Smartphones).

Tipos

El acelerómetro descrito en este artículo es una herramienta que dispone el módulo DEMOQE128 que pertenece a la primera generación (rev A) del DEMOQE cuyo dispositivo es el analógico, sín embargo la tercera revisión (rev C) consta de uno digital.

Acelerómetro Analógico

Este dispositivo de bajo costo (MMA7260Q[3]) está presente solo en la primera revisión del DEMOQE (Rev A),en este acelerómetro analógico tenemos las coordenadas x,y,z y cuyos voltajes serán proporcionales a la aceleración a la que se someta el dispositivo. Las señales en cada uno de los ejes son convertidas en el ADC antes de enviarse vía serial a través del puerto de comunicaciones y ser visualizado en el TOOLKIT PC APPLICATIONS - DEMOQE128, el usuario puede realizar ciertas modificaciones referente al rango de gravedad/sensibilidad sobre el dispositivo según lo demande la situación. Las distintas modalidades pueden observarse en el marco de configuración.[4]

Se puede observar el MMA7260Q (acelerómetro analógico) junto con los jumpers de selección de rango (G-Sel1/G-Sel2).DEMOQE (Rev A)


Acelerómetro Digital

El acelerómetro digital (263765030UA) solo está disponible para la tercera revisión (rev C) del DEMOQE, es mucho mas pequeño y una ventaja que posee es que no es necesario configurar la sensibilidad mediante los jumpers, tampoco necesita la conversión en el ADC sino que es enviada directamente a través de la interfaz de comunicación serial, otra diferencia respecto a su antecesor es que ahora utiliza la interfaz I²C para la transmisión a través del puerto a utilizar cuyo rango va desde los 0 a los 100kbps aumentando la rapidéz de transmisión. A pesar de estas modificaciones, el acelerémetro sigue cumpliendo las mismas funciones para su proposito, sin embargo, no es posible utilizar la misma correspondencia respecto a la programación del analógico.

Características

El acelerómetro del DEMOQE es mucho mas versátil que el de otros micros, pues dispone en su interior la configuración a 3 ejes lo que nos permite además de detectar movimientos lineales, saber si el dispositivo gira alrededor de su eje. Funciona con el reloj interno del DEMOQE debidamente configurado, posee una gama de hasta 4 modalidades respecto a su sensibilidad, es decir, que entre mas grande sea el rango seleccionado, menor serán las tensiones que variarán en cada uno de los ejes que compone el dispositivo. Para fines de visualización el acelerómetro también cuenta con un una herramienta para verificar cada variación en sus ejes y como se comportan segun la posición que el mismo tenga en un instante de tiempo, la gráfica obviamente hará un trazo en valores muestrales para cada segmento de tiempo determinado.

Configuración

Este dispositivo cuenta con una gama variada para su sensibilidad respecto al movimiento que se le aplica, se puede utilizar 1,5g 2 y 4g según se le especifique mediante la configuracion de los jumpers, especificamente la línea de jumpers J14(G-Sel2) J15(G-Sel1) y J16(Sleep Mode) según convenga, para cada valor del rango se tiene otro valor de sensibilidad que es inversamente proporcional al primero.

PTG1 PTG2 Rango (g) Sensibilidad (mV/g)
0 0 1.5 800
0 1 2.0 600
1 0 4.0 300
1 1 6.0 200

Para configurar este periférico según la sensibilidad que se desea aplicar, es necesario ralizar también una indicación mediante instrucciones al puerto G específicamente los puertos PTGD2/PTGD3 y siguiendo las especificaciones de la tabla anterior. Para ello observemos momentaneamente el puerto PTGDD:


7 6 5 4 ¦ 3 2 1 0
PTGDD7 PTGDD6 PTGDD5 PTGDD4 PTGDD3 PTGDD2 PTGDD1 PTGDD0
0 0 0 0 ¦ 0 0 0 0

Para seleccionar por ejemplo el rango de 6g se tendria que seleccionar los bits 1 y 2 del registro PTGDD, análogamente se procede si se requiere seleccionar las otras modalidades de rango. Es necesario activar los pull-ups por seguridad antes de escribir en los puertos, en este caso el mas relevante seria el puerto G. Veamos el siguiente ejemplo:

//*En Lenguaje C
  /* Habilitamos pullups en todos los puertos del módulo principal*/
  PTAPE = PTBPE = PTCPE = PTDPE = PTEPE = PTFPE = PTGPE = PTHPE = PTJPE = 0xFF; 
   
  /* Configuramos la sensibilidad con la que va a trabajar el acelerómetro */
  
  PTGD = 0x00; // Puerto G inicialmente como salida
  PTGDD = 0x06; // Cargar este valor para usar los bits 1 y 2 para trabajar a 6g 
                // como se indica en el cuadro.


  
//*En Assemnbler
  /* Habilitamos pullups en todos los puertos del módulo principal
  mov #$ff,PTAPE
  mov #$ff,PTBPE
  mov #$ff,PTCPE
  mov #$ff,PTDPE
  mov #$ff,PTEPE
  mov #$ff,PTFPE
  mov #$ff,PTGPE
  mov #$ff,PTHPE
  mov #$ff,PTJPE
  
  //*En Assembler
  /* Configuramos la sensibilidad con la que va a trabajar el acelerómetro
  mov #$00,PTGD  // Puerto G inicialmente como salida
  mov #$06,PTGDD  // Cargar este valor para usar los bits 1 y 2 para trabajar a 6g como se 
                  //indica en el cuadro
  //*Lectura de aceleración y Conversión ADC
  //*Lee los datos de aceleración en un eje y lo guarda en una estructura
   word LeerAceleracion(void)
  {
  word adc;
  while (!(ADCSC1_COCO)){}          // Esperar a que la conversión con el adc haya finalizado.
  adc=ADCR;
  return adc;
   }

Nota con el ADC: recordemos que COCO es un bit de sólo lectura que se establece cada vez que se completa una conversión cuando la función de comparación se desactiva (ACFE = 0). Cuando la función de comparación se activa (ACFE = 1) la bandera COCO se ajusta al término de una conversión sólo si el resultado de la comparación es de valor lógico alto (true). Este bit se borra cada vez que se escribe o ADCSC1 ADCRL cuando lee, viendo bien que si COCO = 0 se encuentra convirtiendo, si COCO=1 quiere decir que la conversión se completó.véase ADC

   //*Selección de canal para cada eje
   void MostrarAceleracion ()
  {
   word MuestraCNT;
   byte j,k;
  // Lectura de los datos de aceleración
  ADCSC1 = 0x01;                 // Seleccionamos canal ADC1 (PTA1)
  x.leyendo[muest]  = (dword)(LeerAceleracion()); // El valor que contenga el pin x lo toma
                                                  // como muestra y lo convierte usando canal 1
                                                  // de los adc's
  ADCSC1 = 0x08;                 // Seleccionamos canal ADC8 (PTA6)  
  y.leyendo[muest]  = (dword)(LeerAceleracion()); // El valor que contenga el pin y lo toma 
                                                  // como muestra y lo convierte usando canal 8
                                                  // de los adc's
  ADCSC1 = 0x09;                 // Seleccionamos canal ADC9 (PTA7) 
  z.leyendo[muest]  = (dword)(LeerAceleracion()); // El valor que contenga el pin z lo toma 
                                                  // como muestra y lo convierte usando canal 9
                                                  // de los adc's

Luego que se convierte se envia a través del puerto serial usando SCISC1

  //*Configuración tasa de transferencia. Assembler
   mov #$02,SCI1BDH // se ajusta la escala de transferencia se carga 2 de manera que 
                    // 4Mhz/2x16 = 115000 bps aprox
  //*Lenguaje C
  //*Configuración tasa de transferencia. Lenguaje C
   void InicializarSCI(word baudvalor) {
   SCI1BD = baudvalor; //donde baudvalor es una palabra que asigna el valor indicado en el 
                       //comentario anterior y obtener 115000bps
    } //Inicialización de la interfaz de comunicación serial finalizada 
   

  //*Transmisión serial (se transmitirá en este caso un string)
  void EnvMsg(char msg[]) {
  byte i=0;
  char sig_caracter;
  
    SCI1C2 = 0x08;    // habilitamos la transmisión especificamante el registro TE
    sig_caracter = msg[i++];
    while(sig_caracter != 0x00) {  // mientras hayan caracteres realizar
    while(!SCI1S1_TDRE){}     //mientras que el registro de transmisión no este vacío 
                              //(Transmit data register empty flag) hacer:
    SCI1D = (byte) sig_caracter; // transmitir caracter y verificar si la bandera de 
                                 // transmisión ha cambiado a vacío TRDE=1
    sig_caracter = msg[i++];
     } //fin while del SCI1D para transmitir
   } //final de transmisión

Simulación

La interfaz compone las herramientas fundamentales de visualización para verificar el comportamiento del acelerómetro.

Luego de realizar las configuraciones y realizar un programa básico para su correcto funcionamiento, el usuario puede utilizar una aplicación adicional denominada DEMOQE Accelerometer Demo application en la que puede observar gráficamente el comportamiento del acelerómetro mientras el usuario interactua con el dispositivo.

La aplicación lee la información que hay en los ejes X, Y, y Z del acelerómetro de 3-ejes utilizando el convertidor analógico/digital. Los datos trazados incluye la magnitud de los ejes X, Y, Z y las señales del acelerómetro, así como la carga del procesador actual. Estos datos procesados ​​es un promedio de los datos totales del acelerometro en sí (datos en bruto), o una versión filtrada de los datos totales del mismo, dependiendo del modo seleccionado.

La interfáz de este programa se describe básicamente en tres secciones:

  • Terminal Windows: Nos muestra los ciclos que hay en el bus durante cada interacción del dispositivo, es similar a la aplicación hyperterminal de Windows. Permite ver los caracteres que se transmiten y se reciben mientras el acelerometro experimenta interaciones, si el dispositivo no experimenta movimientos considerables segun su sensibilidad, siempre se transmitirá el último caracter correspondiente en ese instante.
  • Data Snapshot: Esta interfaz nos permite ver que tanto se ha movido el eje (x,y,z) del dispositivo respecto a la referencia (en porcentajes) teniendo en cuenta que tan sensible es, como se había mencionado antes para cada dato trazado de la señal tambien hay un indicador que muestra la carga del procesador en ese momento, las varianzas de la gráfica dependerán de la sensibilidad del acelerómetro en cada caso.
  • Scope: Muestra el trazado de las señales que van cambiando en el acelerómetro a medida que experimenta variaciones de posición, si el movimiento es brusco, los valores de muestra seran altos y viceversa si sucede lo contrario, el graficador toma el trazado de todos los ejes al mismo tiempo.
Las interacciones que experimenta el acelerometro es trazada en cada eje al mismo tiempo.

Para inicializar es necesario indicarle al programa a cuanto se desea transmitir la opción dependerá del usuario sin embargo el estandar es 115000, y el puerto por lo general es el usb, sín embargo pueden usarse puertos de comunicaciones (COM1:COM5)si el usuario asi lo desea. Verificar previamente la correcta configuración de los jumpers y mantener apagado el DEMOQE, luego cuando se hace la compilación correcta del programa y se hace el debug correspondiente, se puede abrir el puerto en la aplicación pulsando el boton "Open serial port and start demo".

En este enlace se podrá descarga la aplicación para el acelerómetro

(Descarga de la aplicación para el acelerómetro.)

Ficha técnica

Vista superior del acelerómetro.DEMOQE (Rev A)

El acelerómetro que dispone el DEMOQE128 es el [MMA7260Q] y tiene las siguientes especificaciones técnicas:

  • Consumo promedio en corriente de 500μA.
  • Sensibilidad seleccionable (1.5, 2, 4 y 6g).
  • Modalidad de espera de 3μA.
  • Dimensiones de 6mm x 6mm x 1.45mm QFN.
  • Alta sensibilidad en niveles de voltajes (800mV/g g@1.5).
  • Acondicionamiento de señales integrado con un filtro pasabajo trabajando conjuntamente con el dispositivo.
  • Capacidad para operar a baja tensión (2,2v a 3,6v).
  • Modo Inactivo: Al colocar acelerómetro de 3 ejes en modo de suspensión. El usuario puede controlar mediante PTC4 para activar o desactivar el acelerómetro.
En el esquema es notable observar que cada salida posee un filtro a manera de protección.DEMOQE (Rev A)

Referencias

Manual de usuario DEMOQE128 (Rev A)

Manual de usuario DEMOQE128 (Rev C)

Datasheet del acelerómetro MMA7260Q

Enlaces externos


Publicado por: Gabino Betancourt (Manypuig)