Diferencia entre revisiones de «Acelerómetro - DEMOQE128»
(→Tipos) |
(→Simulación) |
||
(No se muestran 23 ediciones intermedias de 6 usuarios) | |||
Línea 3: | Línea 3: | ||
[[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]]] | [[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 | + | 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== | ||
Línea 9: | Línea 9: | ||
===Acelerómetro Analógico=== | ===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] | 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)]] | ||
Línea 17: | Línea 18: | ||
==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 | + | 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 | + | 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 50: | 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 | + | 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 |
|} | |} | ||
Línea 72: | 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 |
|} | |} | ||
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: | ||
− | + | <syntaxhighlight lang="c"> | |
− | + | //*En Lenguaje C | |
− | /* Habilitamos pullups en todos los puertos del módulo principal | + | /* 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 | + | /* 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 | /* Habilitamos pullups en todos los puertos del módulo principal | ||
mov #$ff,PTAPE | mov #$ff,PTAPE | ||
Línea 100: | Línea 105: | ||
//*En Assembler | //*En Assembler | ||
− | /* Configuramos la sensibilidad con la que va a trabajar el | + | /* Configuramos la sensibilidad con la que va a trabajar el acelerómetro |
mov #$00,PTGD // Puerto G inicialmente como salida | 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 | + | 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 | //*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 | + | 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 | //*Lenguaje C | ||
//*Configuración tasa de transferencia. Lenguaje C | //*Configuración tasa de transferencia. Lenguaje C | ||
void InicializarSCI(word baudvalor) { | void InicializarSCI(word baudvalor) { | ||
− | SCI1BD = baudvalor; //donde baudvalor es una palabra | + | 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 | ||
Línea 122: | Línea 171: | ||
sig_caracter = msg[i++]; | sig_caracter = msg[i++]; | ||
while(sig_caracter != 0x00) { // mientras hayan caracteres realizar | 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: | + | while(!SCI1S1_TDRE){} //mientras que el registro de transmisión no este vacío |
− | SCI1D = (byte) sig_caracter; // transmitir caracter y verificar si la bandera de transmisión ha cambiado a vacío TRDE=1 | + | //(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++]; | sig_caracter = msg[i++]; | ||
} //fin while del SCI1D para transmitir | } //fin while del SCI1D para transmitir | ||
} //final de transmisión | } //final de transmisión | ||
+ | </syntaxhighlight> | ||
===Simulación=== | ===Simulación=== | ||
Línea 137: | Línea 189: | ||
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 | + | *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. | *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. | ||
Línea 146: | Línea 198: | ||
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". | 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== | ||
− | [[Archivo: | + | [[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. | * 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: | + | [[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== | ==Referencias== | ||
Línea 175: | Línea 222: | ||
[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 de usuario DEMOQE128 (Rev A)] | ||
− | [http://www.pemicro.com/downloads/main_downloads_temp/ | + | [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] | ||
Línea 182: | Línea 229: | ||
*[http://www.youtube.com/watch?v=wNJZNUo4oJE Aplicación a la robótica] | *[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=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 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).
Contenido
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]
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
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.
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
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.
Referencias
Manual de usuario DEMOQE128 (Rev A)
Manual de usuario DEMOQE128 (Rev C)
Datasheet del acelerómetro MMA7260Q
Enlaces externos
- Aplicación a la robótica
- Ajuste en un DEMOQE128 (rev A)
- Proyecto acelerómetro: indicador de nivel (nivelador electrónico) con leds
- datasheet del MC9S08QE128]
Publicado por: Gabino Betancourt (Manypuig)