SAE-MAN-0004-A - Introduccion a BMP085

Anuncio
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
Descargar