1. [ BMP085 - Barómetro ] El kit incluye el sensor de presión y temperatura BMP085 de la marca Bosch, el mismo es normalmente utilizado en plataformas electrónicas como Arduino, por lo que fácilmente se puede encontrar material de aplicación, y por otro lado también, se comercializa el sensor integrado en una placa con pines que facilita su soldado y conexión. Este modulo incluye el sensor el cual es del tipo piezorresistivo (que nos ofrece una gran inmunidad al ruido electromagnético, alta precisión y linealidad), un ADC, un sensor de temperatura (utilizado para compensar las mediciones de presión) y una unidad de control la cual utiliza una memoria E2PROM desde la cual se pueden incluir valores de compensación que aumentaran la precisión de la medición realizada. El rango de medición es de 300hPa a 1100hPa para presión y de 0°C a 65°C para temperatura, estos valores resultan adecuados para hacer mediciones de presión y temperatura atmosférica. Su tensión de alimentación puede variar entre 1.8V y 3.6V. La precisión en la medición de presión, en el rango establecido por el fabricante es de , mientras que para la medición de temperatura será la resolución para cada medición será de 0.01hPa y 0.1°C para presión y temperatura respectivamente. La interfaz de comunicación que utiliza es I2C y el dispositivo posee una dirección fija 0x77, imposible de modificar. Esto significa que cualquier dispositivo conectado al BUS I2C no puede poseer la misma dirección del barómetro o se generaran conflictos durante la comunicación. Los valores de temperatura y presión que entrega el dispositivo son valores que deben ser corregidor utilizando los coeficientes de calibración. Los coeficientes de calibración se encuentran almacenados en la memoria interna del dispositivo y son necesarios para hacer las correcciones finales de presión y temperatura. 1.1. [ Lectura de los coeficientes de calibración ] Cada dispositivo cuenta con 11 coeficientes de calibración propios y es importante conocer los coeficientes del dispositivo en uso. Para acceder a ello se debe realizar una lectura sobre la memoria interna del sensor. Los coeficientes son palabras de 16 bits cada una, almacenados en 2 bytes correspondientes a su parte más significativa (MSB) y menos significativa (LSB). Los valores se almacenan uno a continuación del otro a partir del registro 0xAA. En la siguiente tabla se especifican los coeficientes y los registros donde se encuentras su parte MSB y LSB. 1 Introducción a BMP085 Versión 1.0 Si bien todos los coeficientes son de 16 bits, algunos de ellos son signados y otros no lo son, en la siguiente tabla se especifican como deben ser procesador cada uno de los coeficientes. AC1 AC2 AC3 AC4 AC5 AC6 B1 B2 MB MC MD short short short unsigned short unsigned short unsigned short short short short short short Antes de realizar una conversión de los valores obtenidos por las mediciones del sensor debe realizarse la lectura de estos valores. A continuación se muestra una secuencia (UML) de lectura de coeficientes a través de las distintas capas de firmware: De esta manera el usuario tiene acceso a los coeficientes de calibración a través de la función BMP085_Inicializar() desde su aplicación. 2 Introducción a BMP085 Versión 1.0 1.2. [ Lectura del valor de temperatura ] Del dispositivo se podrá leer el valor de temperatura sin corrección. Luego se realizaran los cálculos necesarios para realizar la corrección en base a los coeficientes de calibración. Para realizar una lectura del valor de temperatura se debe seguir los siguientes pasos: 1. Escribir 0x2E en el registro 0xF4 2. Esperar 4,5ms 3. Leer el registro 0xF6 (MSB) y 0xF7 (LSB) A continuación se muestra la secuencia (UML) de acceso a los valores de temperatura del sensor a través de las distintas capaz de firmware. Donde desde la aplicación de trabajo el usuario puede acceder a los valores de temperatura en el sensor a través de las funciones BMP085_Temperatura_Medir(), para ordenar ejecutar una medición de temperatura, y BMP085_Temperatura_LeerMedicion(), para leer la medición realizada. El valor de temperatura será una variables de 16 bits, representada de la siguiente manera: Valor de temperatura sin corrección - UT MSB[15:8] LSB[7:0] Para realizar la corrección del valor de temperatura leído, es necesario realizar la siguiente operación, donde la variable UT representa el valor de la temperatura sin corrección obtenido de los registros 0xF6 (MSB) y 0xF7 (LSB) y T el valor de temperatura real en decimas de grados centígrados [0.1ºC]. X1 = ((UT -AC6) *AC5) >> 15; if((X1 + MD) == 0) return ERROR; X2 = (MC << 11) / (X1 +MD); B5 = X1 + X2; t = (B5 + 8) >> 4; T = t / 10; 3 Introducción a BMP085 Versión 1.0 1.3. [ Lectura del valor de presión ] Para realizar una lectura del valor de presión, se deben seguir pasos similares al proceso de lectura de temperatura. Se puede determinar el nivel de precisión de la lectura mediante el parámetro oversampling_setting (OSS). El fabricante ofrece las siguientes características según el valor OSS seleccionado para la lectura: Para comenzar una lectura del valor de temperatura, se debe seguir los siguientes pasos: 1. Escribir el valor (0x2E + (OSS << 6)) en el registro 0xF4 2. Esperar el tiempo especificado por el fabricante según el valor OSS. Por ejemplo para un OSS = 0, de debe esperar 4,5ms, y para un OSS = 3 se debe esperar 25,5ms. 3. Leer el registro 0xF6 (MSB), el registro 0xF7 (LSB) y el registro 0xF8(XLSB) A continuación se muestra la secuencia (UML) de acceso a los valores de presión del sensor a través de las distintas capaz de firmware. 4 Introducción a BMP085 Versión 1.0 Donde desde la aplicación de trabajo el usuario puede acceder a los valores de presión en el sensor a través de las funciones BMP085_Presion_Medir(), para ordenar ejecutar una medición de presión, y BMP085_Presion_LeerMedicion(), para leer la medición realizada. El valor de presión será una variables de 16 bits, representada de la siguiente manera: UP = (MSB << 16 + LSB << 8 + XLSB) >> (8-OSS) Es importante contar un con registro con la cantidad de bits suficientes para no provocar un desborde al realizar la operación. Para realizar la corrección del valor de presión leído, es necesario realizar la siguiente operación, donde la variable UP representa el valor de la presión sin corrección, obtenido de los registros 0xF6 (MSB), 0xF7 (LSB) y 0xF8 (XLSB), B5 : Valor calculado durante la corrección de temperatura y p el valor de presión real medida en Pascales [Pa]. B6 X1 X2 X3 B3 X1 X2 X3 = = = = = = = = B5 - 4000; (B2 * ((B6*B6) >> 12)) >> 11; (AC2 * B6) >> 11; X1 + X2; (((AC1 * 4 + X3) << oss) + 2) >> 2; (AC3 * B6) >> 13; (B1 * ((B6*B6) >> 12)) >> 16; ((X1 + X2) + 2) >> 2; B4 = AC4 * (X3 + 32768) >> 15; B7 = (UP - B3) * (50000 >> oss); if ( B7 < 0x80000000 ) { if(B4 == 0) return ERROR; p = (B7 * 2) / B4; } else { p = (B7 / B4) * 2; } X1 = (p >> 8) * (p >> 8); X1 = (X1 * 3038) >> 16; X2 = (-7357 * p) >> 16; P = p + ((X1 + X2 + 3791) >> 4); 1.4. [ Secuencia de operación ] En las secciones anteriores se describieron los procesos de lectura y conversión de valores para el sensor, estos procesos conforman una secuencia de operación del mismo. Es importante realizar los mismos en el siguiente orden a fin de obtener lecturas consistentes y válidas. 1. 2. 3. Inicio y lectura de coeficientes: Al momento de iniciar el sensor deben consultarse los valores de los coeficientes de calibración a fin de realizar futuras conversiones. Medición: es recomendable realizar las mediciones de presión y temperatura consecutivas, ya que en el proceso de calibración estas mediciones se relacionan . Corrección y conversión. 5 Introducción a BMP085 Versión 1.0 Las esperas presentes en la ilustración del proceso corresponden al tiempo entre la inicialización del dispositivo y el comienzo de las tareas de medición (Espera 1) y el tiempo entre el fin del proceso y el comienzo del próximo (Espera 2). La espera 1 se realiza una única vez y no es necesario repetirla en cada medición, por lo cual es recomendable realizarla al comienzo del inicio del sistema. Es recomendable que la misma sea superior a 100ms. La espera 2 depende estrictamente de la aplicación en la que se trabaje y los objetivos de misión y es recomendable que la misma sea superior a 100ms. Como se explicó en las secciones anteriores para realizar una medición las secuencias de medición abarcan diversas las capas de firmware, y conllevan un tiempo de ejecución para finalizar las mismas. Es conveniente entonces almacenar las mediciones luego de realizarlas para tener un aceso rapido a las mismas. En contreto, las fuciones presentadas en las seccuencias de medición almacenan las ultimas mediciones realizadas, asímiemos la función BMP085_ProcesarLecturas() realiza la conversión descripta y almacena los datos procesados, en el siguiente diagrama UML se muestra como tener acceso a las mismas. De esta forma, una vez realizada la medición, el usuario puede tener acceso a los valores a través de las funciones BMP085_LeerTemperatura() y BMP085_LeerPresion(). 6 Introducción a BMP085 Versión 1.0 1.5. [ Pinout y Conexión ] El barómetro BMP085 se encuentra montado en una placa de expansión que facilita su conexionado y montado. La misma ordena los pines del salida del sensor y los presenta en una fila de 6 pines. Asimismo, la placa viene integrada con un regulador 662K, para adaptar las tensiones de alimentación y referencias necesarias para el sensor, y las resistencias de pull-up, queridas para la comunicación I2C. Placa de expansión GND EOC VDDA VDDD NC SCL SDA XCLR BMP085 GND EOC Vcc SCL SDA XCLR Descripción Tierra Fin de conversión Tensión de alimentación Tensión de alimentación Sin conexión interna Bus de entrada de clock I2C Bus de datos I2C Reset Tipo Power Salida digital Power Power Entrada digital Entrada/Salida digital Entrada digital A continuación se muestra un esquema de conexión para el sensor: Donde P1 corresponde al puerto de expansión 1 de la placa EDU-CIAA. 7 Introducción a BMP085 Versión 1.0