Brujula i2c

5
Conexión de Brújula Digital mediante I 2 C a un PIC En este documento se muestra la implementación de la lectura de una brújula digital CMPS03, que está basada en el sensor magnético Philips KMZ51. La disposición de pines se muestra en la Figura 1. Figura 1 Imagen de brújula CMPS03 Por el pin 4 se puede observar la salida analógica del módulo. Esta señal es una señal de ancho de pulso variable, que se rige por la siguiente expresión: ancho_pulso = (65 + (ángulo en grados)*100) [us]. El periodo de la señal es el ancho del pulso más 1 [ms]. Un diagrama se muestra en la Figura 2. Figura 2 Diagrama de pulsos de salida de brújula Esta señal es útil para realizar acciones de depuración una vez que la brújula ya esté conectada, por ejemplo, para revisar perturbaciones frente a campos magnéticos externos, por ejemplo, de motores.

Transcript of Brujula i2c

Page 1: Brujula i2c

Conexión de Brújula Digital mediante I2C a un PIC

En este documento se muestra la implementación de la lectura de una brújula digital CMPS03, que está basada en el sensor magnético Philips KMZ51. La disposición de pines se muestra en la Figura 1.

Figura 1 Imagen de brújula CMPS03

Por el pin 4 se puede observar la salida analógica del módulo. Esta señal es una señal de ancho de pulso variable, que se rige por la siguiente expresión:

ancho_pulso = (65 + (ángulo en grados)*100) [us].

El periodo de la señal es el ancho del pulso más 1 [ms]. Un diagrama se muestra en la Figura 2.

Figura 2 Diagrama de pulsos de salida de brújula

Esta señal es útil para realizar acciones de depuración una vez que la brújula ya esté conectada, por ejemplo, para revisar perturbaciones frente a campos magnéticos externos, por ejemplo, de motores.

Page 2: Brujula i2c

Funcionamiento mediante I2CPara conectar la brújula a un bus I2C es necesario realizar resistencias pullup de 1.2K (hacia 5V) en los pines 3 y 2. En la Figura 3 se muestra un esquemático de las conexiones con un microcontrolador PIC18F242.

Figura 3 Esquema de Conexiones de Brújula con microcontrolador PIC mediante I2C

La brújula siempre trabaja como esclava (slave). En caso que esté sólo conectado el microcontrolador y la brújula, el primero debe estar configurado como maestro (master). La secuencia de bits que se observa en una comunicación entre la brújula y el microcontrolador se observa en la Figura 4.

Figura 4 Secuencia de valores para la comunicación I2C con la brújula

La secuencia anterior se puede resumir como la siguiente:

Start bitEnviar_dirección brujula, bit lectura en 0 (en este caso 0xC0)Enviar_instrucciónStart bitEnviar_dirección_brújula, bit lectura en 1 (en este caso 0xC1)Recibir_datosStop Bit

Page 3: Brujula i2c

La brújula tiene un total de 16 bytes de registros, algunos de los cuales forman registros de 2 bytes tal y como puede verse en la siguiente tabla:

Registro Función

0 Numero de Revisión del Software

1 Dirección. en 1 byte 0-255 para 0 - 360º

2,3 Dirección. en 2 bytes 0-3599 para 0 - 359,9º

4,5 Test interno señal diferencial sensor 1

6,7 Test interno señal diferencial sensor 2

8,9 Test interno, valor de calibración 1

10,11 Test interno, valor de calibración 2

12 Sin usar, devuelve 0

13 Sin usar, devuelve 0

14 Sin usar, devuelve 0

15 Comando de calibración, escribir 255 para calibrar

Este documento no se realizará la revisión de calibración de la brújula, pues es necesaria una brújula “analógica” para realizar esto.

Código en PICCEl código para ser compilado con PICC se muestra a continuación. Se puede observar que es muy simple:

#include <18F242.h>#use delay(clock=20000000)#fuses NOWDT,WDT128, HS, BORV20, STVREN, NOLVP, NODEBUG, NOBROWNOUT#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3)

int main(){ setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_wdt(WDT_OFF); setup_timer_0(RTCC_INTERNAL); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_16,255,1); setup_timer_3(T3_DISABLED|T3_DIV_BY_1);

i2c_start(); // Condición de inicio i2c_write(0xc0); // Dirección de brújula, data bit 0 i2c_write(0x01); // Instrucción i2c_start(); i2c_write(0xc1); // Dirección de brújula, data bit 1 data1 = i2c_read(0); // recepción de datos i2c_stop(); // detener comunicación delay_ms(200); // delay para refresco}

El compilador de PICC para los PIC de la familia 16 es gratuito, y se puede encontrar en http://www.htsoft.com/products/PICClite.php. Para otras versiones de microcontroladores es necesario cambiar el nombre del dispositivo, la velocidad del cristal y verificar los argumentos de setup que existan o no.

ReferenciasSuperrobótica.com: Sensor Brújula Digital CMPS03 S320160. Entrega una información detallada de este dispositivo.http://www.superrobotica.com/S320160.htm

El bus I2Chttp://www.comunidadelectronicos.com/articulos/i2c.htm