Pages Menu
TwitterFacebook



BANNER1_ALT

Posted by on Abr 15, 2014 in AVR | 3 comments

Sensor Acelerometro MMA8451Q

Sensor Acelerometro MMA8451Q

Sensor Acelerometro MMA8451Q

Ejemplo para la tarjeta acelerometro MMA8451 (Link) HeTPro.

Sensor Aceleròmetro

Sensor Aceleròmetro

Descripción del  sensor acelerometro

Para este ejemplo se hará uso de un sensor acelerometro, este es un modulo independiente, el cual es controlado vía I2C (Inter-Integrated Circuit), este protocolo es también conocido como TWI (Two-Wire-Interface).En este ejemplo el Microcontrolador nos entrega los datos de modo serial y los estaremos observando en la computadora con el software LabView.

DIAGRAMA ESQUEMÁTICO

Sensor Aceleròmetro

sensor acelerometro

Nota 1: Es muy importante que cuando se programe el Microcontrolador se retire el Sensor acelerpmetro y una vez programado retirar el programador y alimentar el circuito con una fuente de 3.3 Volts. El convertidor TTL/CMOS-RS232 funciona con 5V o 3.3V, pero en este caso será alimentado con 3.3V.

 MATERIALES

–       Tarjeta con sensor acelerometro de 3 ejes MMA8451

–       1 Microcontrolador ATMEGA8535

–       Programador USBasp V3.0

–       Convertidor TTL/CMOS – RS232

–       Fuente de 3.3 Volts

–       Cable USB serial (opcional)

 

INTRODUCCIÓN

Sensor acelerometro

DESCRIPCIÓN

Son pequeños circuitos integrados que entregan en una de sus salidas (pueden disponer de una para cada eje espacial) una serie de pulsos cuya frecuencia depende de la aceleración a la que están sometidos. Un Microcontrolador puede leer esos trenes de pulsos y determinar el sentido y la magnitud de la aceleración. Su precisión es tan grande que se los utiliza para medir vibraciones o para construir mandos de juegos. Muchos móviles o reproductores de medios han comenzado también a incluir acelerómetros.

Para este ejemplo el sensor acelerometro MMA8551 convierte de manera interna los datos y nos los entrega de manera digital a través del protocolo I2C.

CARACTERÌSTICAS DEL SENSOR

  • Voltaje de alimentación de 1.95V a 3.6V
  • Voltaje lógico de 1.6V a 3.6V
  • Selección de escala de trabajo ±2g/±4g/±8g
  • Tasa de salida de datos (ODR) de 1.56 Hz a 800 Hz
  • Salida digital de 8 y 14-bits
  • Interfaz digital I2C (TWI)
  • 2 interrupciones programables
  • Filtro pasa altas disponible
  • Ruido 99 µg/√Hz

 I2C o TWI

I2C es un bus de comunicaciones en serie. Su nombre viene de Inter-Integrated Circuit (Circuitos Inter-Integrados). La versión 1.0 data del año 1992 y la versión 2.1 del año 2000, su diseñador es Philips. La velocidad es de 100 Kbits por segundo en el modo estándar, aunque también permite velocidades de 3.4 Mbit/s. Es un bus muy usado en la industria, principalmente para comunicar microcontroladores y sus periféricos en sistemas integrados (Embedded Systems) y generalizando más para comunicar circuitos integrados entre si que normalmente residen en un mismo circuito impreso.

 La principal característica de I²C es que utiliza dos líneas para transmitir la información: una para los datos y por otra la señal de reloj. También es necesaria una tercera línea, pero esta sólo es la referencia GND.

Las líneas para transmitir datos mencionadas anteriormente son:

SDA: datos.

SCL: reloj.

GND: Referencia.

En la siguiente imagen se puede ver un ejemplo de conexión de un Microcontrolador, en modo maestro y varios otros dispositivos conectados como esclavos, como ADCs DACs otros microcontroladores, sensores etc.

 

sensor acelerometro

sensor acelerometro

Para adquirir el sensor acelerometro, visite nuestra tienda en linea: http://hetpro-store.com/sensores-es/inerciales/tarjeta-acelerometro-mma8451.html

LABVIEW

DESCRIPCIÓN

LabVIEW es una herramienta gráfica para pruebas, control y diseño mediante la programación. El lenguaje que usa se llama lenguaje G, donde la G simboliza que es lenguaje Gráfico. Este programa fue creado por National Instruments (1976) para funcionar sobre máquinas MAC, salió al mercado por primera vez en 1986.

Ahora está disponible para las plataformas WindowsUNIXMAC y GNU/Linux. La última versión es la 2011.

Los programas desarrollados con LabVIEW se llaman Instrumentos Virtuales, o VIs, y su origen provenía del control de instrumentos, aunque hoy en día se ha expandido ampliamente no sólo al control de todo tipo de electrónica (Instrumentación electrónica) sino también a su programación embebida. Un lema tradicional de LabVIEW es: “La potencia está en el Software“, que con la aparición de los sistemas multinúcleo se ha hecho aún más potente. Entre sus objetivos están el reducir el tiempo de desarrollo de aplicaciones de todo tipo (no sólo en ámbitos de Pruebas, Control y Diseño) y el permitir la entrada a la informática a profesionales de cualquier otro campo. LabVIEW consigue combinarse con todo tipo de software y hardware, tanto del propio fabricante (tarjetas de adquisición de datos, PAC, Visión, instrumentos y otro Hardware) como de otros fabricantes. Para adquirir el Software, visite el siguiente enlace: http://www.ni.com/labview/esa/

 

Principales usos

○ Adquisición de datos y análisis matemático.

○ Comunicación y control de instrumentos de cualquier fabricante.

○ Automatización industrial y programación de PACs (Controlador de Automatización Programable).

○ Diseño de controladores: simulación, prototipaje rápido, hardware-en-el-ciclo (HIL) y validación.

○ Diseño embebido de micros y chips.

○ Control y supervisión de procesos.

○ Visión artificial y control de movimiento.

○ Robótica.

 A continuación tenemos el programa en lenguaje C, fue desarrollado en  AVR Studio y compilado con WinAVR. En el código se describe la inicialización de los módulos de comunicación del Microcontrolador al Sensor acelerómetro MMA8451 que es por protocolo I2C y del Microcontrolador a la Computadora que es por transmisión  de modo serial.

Para este ejemplo se utilizo el Microcontrolador ATmega8535 ya que su artitectura nos permite la comunicación por el protocolo I2C, que son los pines 22(SCL) y 23(SDA) y la transmisión de los datos obtenidos del Sensor acelerómetro de modo serial, que es por los pines 14(Rx) y 15(Tx).

 PROGRAMA EN C

#include<avr/io.h>			//Librería necesaria para las entradas y salidas
#include<útil/delay.h> 		//Librería para usar los retardos de tiempo
#include<avr/interrupt.h>
#include<útil/twi.h>
#define Clock 8000000 		//Frecuencia de trabajo del Microcontrolador

void TWI_config (unsigned long int);			//Declarar las funciones

char i2c_read(char,char);
int dato;
void InitUART (unsigned char baudrate)			//Configurando la UART
{
UBRRL = baudrate;                               //Seleccionando la velocidad
UCSRB = (UCSRB | _BV(RXEN) | _BV(TXEN));        //Habilitando la transmisión y recepción
}
unsigned char ReceiveByte(void)                 //Función para recibir un byte
{
while ( !(UCSRA & (1<<RXC)) );                  //Esperar la recepción
return UDR;                                     //Retornar el dato tomado de la UART
}
void TransmitByte(unsigned char data )          //Función para transmitir dato
{
while ( !( UCSRA & (1<<UDRE)) );                //Esperar transmisión completa
UDR = data;                                     //Depositar el dato para transmitirlo
}
int main (void)
{
InitUART( 51 );                                 //Inicializar la UART
TWI_config(100000);                             //Configurar el I2C o TWI
unsigned char valor=0;
while(1)
{
TransmitByte('O');
_delay_ms(20);
i2c_transmit(0x3A,0x2A,0x01);                   //Transmitir: dirección 0x3A, registro 0x2A, dato 0x01
_delay_ms(10);
valor = i2c_read(0x3A,0x01);                    //leer: dirección 0x3A, registro 0x01
TransmitByte(valor);
_delay_ms(10);
valor = i2c_read(0x3A,0x03);                    //leer: dirección 0x3A, registro 0x03
TransmitByte(valor);
_delay_ms(10);
valor = i2c_read(0x3A,0x05);                    //leer: dirección 0x3A, registro 0x05
TransmitByte(valor);
_delay_ms(10);
}
}
void TWI_config(unsigned long int frecuencia)
{
TWBR = ((Clock/frecuencia) - 16)/8;             // Registro para la frecuencia de SCL
TWSR=(0<<TWPS1)+(0<<TWPS0);                     // Preescala 1
}
char i2c_read(char address, char reg)
{
char read_data = 0;
TWCR = 0xA4;                         // Mandar el bit de inicio para el bus I2C
while(!(TWCR & 0x80));               // Esperando la confirmación
TWDR = address;                      // Cargar dirección (adress) en el dispositivo
TWCR = 0x84;                         // Transmitir
while(!(TWCR & 0x80));               // Esperar confirmación de la transmisión
TWDR = reg;                          // Enviar número de registro a leer
TWCR = 0x84;                         // Transmitir
while(!(TWCR & 0x80));               // Esperar confirmación de la transmisión
TWCR = 0xA4;                         // Volver a mandar un bit de inicio
while(!(TWCR & 0x80));               // Esperar confirmación de la transmisión
TWDR = address+1;                    // Transmitir dirección por I2C con la lectura habilitada
TWCR = 0xC4;                         // Borrar la bandera de interrupción de transmisión
while(!(TWCR & 0x80));               // Esperar confirmación de la transmisión
TWCR = 0x84;                         // Transmitir (Solicitud del último byte)
while(!(TWCR & 0x80));               // Esperar confirmación de la transmisión
read_data = TWDR;                    // Tomar el dato
TWCR = 0x94;                         // Mandar un bit de paro al bus I2C
return read_data;
}
void i2c_transmit(char address, char reg, char data)
{
TWCR = 0xA4;                        // Mandar el bit de inicio para el bus I2C
while(!(TWCR & 0x80));              // Esperar confirmación de la transmisión
TWDR = address;                     // Cargar dirección (adress) en el dispositivo
TWCR = 0x84;                        // Transmitir
while(!(TWCR & 0x80));              // Esperar confirmación de la transmisión
TWDR = reg;
TWCR = 0x84;                        // Transmitir
while(!(TWCR & 0x80));              // Esperar confirmación de la transmisión
TWDR = data;
TWCR = 0x84;                        // Transmitir
while(!(TWCR & 0x80));              // Esperar confirmación de la transmisión
TWCR = 0x94;                        // Mandar un bit de paro al bus I2C
}

LABVIEW

Como se mencionó anteriormente el LabView es una herramienta gráfica para pruebas, control, etc. Optamos por utilizar este Software porque es muy fácil de usar y hacer la comunicación con el Microcontrolador de modo serial, para el procesamiento y presentación de datos gráficamente.

En la siguiente imagen es donde se mostraran los datos que obtendremos del sensor. Tenemos 3 indicadores principalmente, uno en el que se muestra una gráfica lineal con los valores de los ejes que se están leyendo del Sensor, las barras muestran los mismos valores de la grafica pero de una manera más sencilla de visualizar. Y los gauges nos indican la inclinación que se tiene en ese momento la Tarjeta con el Sensor acelerómetro.

 

sensor acelerometro

sensor acelerometro

 

En las siguientes imágenes se muestra el diagrama de bloques, que es el programa propiamente dicho, donde se define su funcionalidad, aquí se colocan íconos que realizan una determinada función y se interconectan (el código que controla el programa). Suele haber una tercera parte icono/conector que son los medios utilizados para conectar un VI con otros VIs.

Sensor Aceleròmetro

sensor acelerometro

 

En la siguiente imagen se muestra la configuracion que se hace en el Labview para comunicar el microcontrolador con la computadora mediante el cable USB-RS232.

Sensor Aceleròmetro

sensor acelerometro

 

En la siguiente imagen se muestra el procesamiento de los datos que nos envía el Microcontrolador que son en forma de  caracteres.

Sensor Aceleròmetro

sensor acelerometro

 

En la siguiente imagen se muestra en Registro en el que se van almacenando los datos para ser mostrados más adelante en una grafica y algunos indicadores.

Sensor Aceleròmetro

sensor acelerometro

 

En la siguiente imagen se muestra el final del programa que es donde se muestran los datos en una grafica e indicadores. Los gauges muestran la inclinación que tiene el sensor con respecto a los ejes X y Y.

Sensor Aceleròmetro

sensor acelerometro

 

Sensor Aceleròmetro

sensor acelerometro

En el caso que se produzca un error en la transmisión de datos se mostraran los datos anteriores en los indicadores, y el error simplemente saldrá del ciclo. En la siguiente imagen se muestra lo explicado anteriormente.

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *