BMP180

Lectura de la presión atmosférica y la temperatura:

Presión atmosférica:
Se conoce como presión atmosférica a la presión que ejerce el aire en cualquier punto de la atmósfera. La presión atmosférica varia por la acción de factores como la temperatura, la altitud o la humedad.
  • Altura: La presión atmosférica se debe al peso del aire sobre un punto de la superficie terrestre, por lo tanto  mayor altura la cantidad de aire en menor y la presión disminuye y a menor altura aumenta.
  • Temperatura: La temperatura también hace variar la presión ya que el aire caliente pesa menos que el frío y tiende a elevarse y origina bajas presiones, en cambio cuando el aire se enfría tiende a bajar y ejercer más presión.
El sensor BMP180:

El sensor BMP180 es un sensor digital que nos permite la medida de la presión atmosférica y la temperatura. El protocolo de comunicación que utiliza es el conocido I2C (Inter-Integrated Circuit) que se trata de un bus de datos serial desarrollado por Philips en el año 1992.
El BMP180 consiste en un sensor piezo-resistivo, un convertidor analógico-digital, una unidad de control con memoria E2PROM y una interfaz i2c serie. La E2PROM almacena 176 bits de datos de calibración que se utilizan para compensar el offset, la dependencia de la temperatura y otros parámetros del sensor. La temperatura tiene una resolución de 16 bits y la presión de entre 
16 y 19 bits según el modo de consumo y resolución escogidos.


Características del sensor BMP180:
  • Alimentación de 1.8V a 3.6V
  • Bajo ruido 0.06 hPa en modo ultra bajo consumo
  • Interfaz I2C
  • Completamente calibrado
  • Corriente máxima durante conversión 650 uA
  • Modo de ultra bajo consumo 3 uA @ 1 Sample/s (25ºC)
  • Rango de medición de presión atmosférica 300 hPa-1100 hPa
  • Resolución presión atmosférica 0.01 hPa
  • Precisión presión atmosférica 950 hPa-1050 hPa de  ±0.12 hPa
  • Rango de medición de temperatura 0 ºC - 65 ºC
  • Resolución temperatura 0.1 ºC
  • Precisión temperatura ±1 ºC

Conexión del sensor BMP180 al microcontrolador:




El pin 1 es el bus de datos SDA y va conectado al pin RC4 del micricontrolador, el pin 2 es el reloj de sincronización del bus I2C y va conectado al pin RC3 del microcontrolador. Ambos pines necesitan una resistencia de pull-up para funcionar correctamente. El encapsulado escogido ya las incorporo por lo que facilita el montaje o posterior sustitución del sensor.
El pin 3 va conectado a Gnd y el pin 4 es la alimentación del sensor que como máximo es de 3.6V
Hemos escogido el encapsulado del sensor BMP180 que ya tiene incorporado las resistencias de pull-up de 4.7K para el bus I2C y el regulador de tensión para garantizar una tensión fija de 3.3V al sensor, también incorpora condensadores de desacoplo que eliminan las interferencias y el ruido de la alimentación.

Flowchart para la lectura del sensor BMP180:


Los parámetros de calibración hay que leerlos al inicio antes de la lectura de los datos de temperatura y presión. Estos parámetros se utilizarán después para compensar el las medidas tomadas por el sensor de UT (Uncompensated Temperature) y  UP (Uncompensated Pressure) y solo es necesario leerlos una vez al inicio del sistema ya que estos no cambian, son únicos para cada sensor.

La espera después de la lectura de la presión depende del modo de resolución que hayamos escogido en el sensor. La siguiente tabla muestra un resumen del tiempo de conversión según el modo escogido y el consumo que tiene este. 


Una vez leídos los datos de calibración, los de temperatura y presión no compensada, el fabricante nos proporciona el algoritmo que tenemos que implementar para obtener los valores reales de temperatura y presión atmosférica. La siguiente imagen muestra el algoritmo implementado y un ejemplo de aplicación para obtener correctamente los resultados. Para implementar el código se ha seguido primeramente este ejemplo hasta obtener los resultados correctos y una vez comprobado se ha pasado a realizar una prueba con el sensor real.


Implementación:
  • Diagrama FSM:


El sistema se inicia por defecto en modo ‘Idle’, para ponerlo en funcionamiento tenemos que pulsar el botón ‘RB0’, en este momento se pasa al estado ‘Setup’ donde se configuran los módulos I2C y USART. Una vez configurado el sistema se lee una única vez los parámetros de calibración del sensor. En el estado ‘Read BMP180’ se leen la temperatura y la presión no compensadas y se calcula la real junto con los parámetros de calibración, justo después se envía la información y se vuelve a repetir el proceso de obtención de datos. Para volver al modo ‘Idle’ se tiene que pulsar de nuevo el botón ‘RB0’, en ese momento se pasa al estado ‘Stop’ donde se detienen los módulos y se vuelve al modo inicial ‘Idle’.

    • Sensor en funcionamiento en placa de pruebas DM240313:

    Protocolo de comuicación I2C:
    El protocolo I2C (Inter-Integratet Circuit) es un bus de datos serial desarrollado por Philips en el año 1992. Se utilizaba principalmente para la interconexión entre diferentes partes de un circuito como CPU y dispositivos periféricos (Sensores, memorias, pantallas LCD,..).
    I2C está diseñado como un bus maestro-esclavo. La comunicación se realiza a través de dos hilos , el hilo de datos (SDA) y el hilo del reloj de sincronización (SCL). La transferencia de datos siempre la inicia el maestro y es este el que genera la señal de reloj utilizada para la sincronización y el esclavo responde a las peticiones de este. Cada dispositivo dispone de una única dirección de 7 bits que lo distingue en el bus de comunicación de los otros dispositivos. El protocolo también permite tener más de un maestro en el mismo bus de comunicación (Multimaster-Mode). El modo multimaestro permite comunicarse a dos maestros entre ellos asignando el rol de esclavo a uno de ellos. Cuando está en curso una comunicación solo puede existir un maestro, los demás dispositivos actuarán como esclavos hasta el fin de la comunicación.

    Características del bus I2C:
    • Bus de comunicación síncrono
      • La comunicación es controlada por una señal de reloj común
    • Bus formado por dos hilos
      • SDA (Serial Data Line): Bus de datos
      • SCL (Serial Clack Line): Reloj de sincronización
      • Es necesaria una referencia común de masa para todos los dispositivos que formen parte del mismo bus
    • Velocidad de transmisión
      • Standard: Hasta 100 kbits/s
      • Fast: Hasta 400 Kbits/s
      • High-Speed: Hasta 3.4 Mbits/s
    • Cada dispositivo del bus tiene una dirección única
    • Máxima distancia de transmisión aproximada de 3 metros
    • Protocolo de arbitraje 
    • Detección de colisiones
    • Protocolo de acceso al bus:
      • Maestro - Esclavo
      • Multimaestro
    Conexión física de dispositivos al bus:
    • Todos los dispositivos se conectan al mismo bus
    • Se necesita de dos líneas de señal: el reloj (SCL) y la linea de datos (SDA). 
    • Se requieren resistencias de pull-up en ambas líneas para mantener el nivel alto en el bus cuando ningún dispositivo accede a él o ningún dispositivo transmite un cero.
    • El bus I2C trabaja con lógica positiva, un nivel alto en la línea de datos corresponde a un '1' lógico y un nivel bajo a un '0'.
    • El nivel alto debe ser de al menos 0,7 x Vdd y el nivel bajo no puede exceder de 0,3 x Vdd


    Protocolo de acceso al medio:
    • El maestro controla la comunicación
      • Genera la señal de reloj (SCL)
      • Inicia y termina la comunicación
      • Establece el sentido de la comunicación
    • Se requiere la confirmación de la recepción de cada byte de datos
    • Los bits de datos van por la línea SDA
    • Por cada bit de información es necesario un pulso de SCL
    • Direccionamiento
      • Cada dispositivo tiene una dirección de 7 bits, el octavo bit (R/W) indica al esclavo si tiene que recibir datos del maestro (low,'0') o enviar datos al maestro (high,'1').
      • En el mismo bus se permiten 2^7 (128) dispositivos a la vez, aunque 16 direcciones están reservadas por lo que en la práctica podemos conectar 112 dispositivos simultáneamente.
    El protocolo I2C tiene condiciones especiales de señal de bus. Para iniciar una comunicación el Master envía una señal de Start(S) y para pararla una señal de Stop(P). Cada byte de información requiere una respuesta de confirmación por parte del receptor. Cuando nadie accede al bus tanto SCL como SDA están a nivel alto

    Condiciones de Start y Stop:


    La condición de Start(S) la inicia el Master llevando la linea SDA a cero mientras SCL permanece en nivel alto. Mientras que para la condición de Stop(P) la linea SDA pasa a nivel alto mientras que la línea SCL permanece en alto.

    Transferencia de datos:

    Tras la condición de inicio el Master envía la dirección del esclavo (7 bits) junto con el comando de lectura/escritura (R=1/W=0). El esclavo responde con un ACK (acknowledge) si ha recibido la información. Justo después se inicia la transmisión de datos. La transmisión finaliza cuando el Master envía la condición de Stop.


    Existen diferentes formatos de transmisión:
    • Leer dato: El Master lee datos del esclavo

    • Escribir dato: El Master escribe un dato en el esclavo



    Comments