сайт для палких паяльників

Небольшой обзор датчика атмосферного давления BMP280.

Хочу сказать, что я довольно давно использую датчики давления, а последние несколько лет перешел на датчики Bosch Sensortec. Я использовал BMP085, BMP180, и теперь BMP280.

BMP085 и BMP180 очень похожи между собой, даже библиотека от BMP085 подходит к BMP180. BMP280 на их фоне – это довольно заметный шаг вперед.

Итак, перейдем от разговоров к фактам. Первое, что сразу замечаешь, – размер корпуса датчика. Он существенно уменьшился. Его 8-контактный корпус имеет размеры 2×2.5мм и высоту 0.95мм. Это требует аккуратности и некоторого опыта при монтаже.

Датчик имеет интерфейсы I2C и SPI. (BMP085 имеет только I2C, BMP180 были модели с I2C или SPI). Я использовал только I2C.

Вообще, логика работы датчика осталась такой же, но претерпела некоторые долгожданные улучшения. Как и прежде, в начале работы надо считать с датчика коэффициенты (они уникальны для каждого экземпляра). Затем считывать показатели АЦП для температуры и давления и вычислять реальные значения температуры и давления по формулам, которые представлены в документации к датчику. У BMP280 существенно улучшили температурную стабильность и увеличили разрешение АЦП до 20 бит для температуры и давления.

BMP280 имеет три режима работы:

  • SLEEP – режим сна,
  • FORCED – режим аналогичен BMP085 и BMP180. То есть, дали команду на измерение, подождали, считали значения, датчик перешел в спящий режим.
  • NORMAL – этот режим наиболее интересен и загоняет датчик в циклическую работу. То есть, он самостоятельно через определенное время, которое можно задать, выходит из режима сна и выполняет измерения, сохраняет данные в регистры памяти и вновь засыпает на указанное время.

Для считывания данных с датчика теперь не нужно ждать завершения измерений. Кроме того, датчик имеет фильтр, который можно настраивать под свои задачи. Фильтр работает с учетом предыдущего значения. Его работа описывается следующей формулой:

bmp280_filter
Таким образом, для ваших конкретных задач, можно настроить программный фильтр и точность измерений с помощью следующих параметров:

  • OVERSAMPLING для температуры (16,17,18,19,20 бит)
  • OVERSAMPLING для давления (16,17,18,19,20 бит)
  • TSB – время ожидания датчика между измерениями (0.5,62.5,125,250,500,1000,2000,4000 мс)
  • FILTER_COEFFICIENT – коэффициент фильтра

Все эти изменения привели к таким улучшениям характеристик:

bmp180_bmp280

Перейдем к реальным тестам. Схема подключения:

bmp280_circuit

Тестовая плата:

bmp280

Кстати, в протоколе I2C должны присутствовать подтягивающие резисторы 4,7Ком на линиях SDA, SCL. На плате их нет. Я использую внутренние резисторы микроконтроллера. Их номинал значительно больше, но такой прием работает с BMP085, BMP180 и BMP280. Обратите внимание, что такой номер может не пройти с другими микроконтроллерами.

Код для примера:

#include <stdio.h>
#include <avr/io.h>

#include "atmega_bmp280_lib.h"
#include "uart.h"

int main(void)
{
    int32_t temperature;
    int32_t pressure;
    int32_t altitude;
    uint8_t error_code=0;

    int32_t var1, var2;

    // Initialize UART0
    uart_init();

    // Initialize TWI
    i2cSetBitrate(1000);

    // Initialize BMP280
    BMP280_Begin(&error_code);

    if (error_code > 0) {
        printf("Error code: %d \n",error_code);
        return -1;
    }

    while(1)
    {
        bmp280Convert(&temperature, &pressure, &error_code);
        altitude = bmp280CalcAltitude(pressure);

        var1 = temperature/10;
        var2 = temperature - var1*10;
        printf("Temperature: %ld.%ld\n", var1, var2);

        printf("Pressure: %ld Pa\n", pressure);

        var1 = altitude/100;
        var2 = (altitude - var1*100)/10;
        printf("Altitude: %ld.%ld\n\n", var1, var2);

        _delay_ms(200);
    }
}

Скачать документацию на BMP280

Скачать bmp280.lay

Скачать библиотеку GCC для AVR и пример

Официальная информация производителя

Успехов.

См. также:

 

Translate
Архіви

© 2011-2018 Андрій Корягін, Кременчук - Київ, Україна