BMP280 — датчик атмосферного тиску від BOSCH


13.01.2015

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

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

BMP085 та BMP180 дуже схожі між собою, навіть бібліотека від BMP085 підходить до BMP180. BMP280 на їх тлі - це досить помітний крок вперед.

Отже, перейдемо від балачок до фактів. Перше, що відразу помічаєш, - розмір корпуса датчика. Він суттєво зменшився. Його 8-контактний корпус має розміри 2x2.5мм та висоту 0.95мм. Це вимагає при монтажі акуратності та деякого досвіду.

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

Взагалі, логіка роботи датчика залишилася такою ж, але зазнала деяких довгоочікуваних покращень (в прямому сенсі цього слова). Як і раніше, на початку роботи треба зчитати з датчика коефіцієнти (вони унікальні для кожного екземпляра). Потім зчитувати показники ADC для температури та тиску та обчислювати реальні значення температури та тиску за формулами, які надані у документації до датчика. У BMP280 суттєво поліпшили температурну стабільність та збільшили роздільну здатність АЦП до 20 біт для температури та тиску.

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

  • SLEEP - режим сну,
  • FORCED - режим аналогічний до роботи BMP085 та BMP180. Тобто, дали команду на вимірювання, зачекали, прочитали показники, датчик перейшов у режим сну.
  • NORMAL - цей режим найбільш цікавий і заганяє датчик у циклічну роботу. Тобто, він самостійно через певний час, який можна задати, виходить з режиму сну та виконує вимірювання, складає дані у регістри пам’яті та знов засинає на вказаний час.
Для зчитування даних з датчика тепер не потрібно чекати завершення вимірювань (мається на увазі режим 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

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

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 ",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", var1, var2);

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

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

        _delay_ms(200);
    }
}

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

Скачати bmp280.lay

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

Офіційна інформація виробника

Успіхів.

Дивись також:

Корисно знати Схеми і прошивки
Коментарі:
Serg_ говорить:
09.04.2015 20:47
Доброго дня! У мене питання - де Ви його придбали і в яку ціну? А також, чи не могли б ви мені допомогти з 180-м?

andre говорить:
10.04.2015 08:32
Доброго дня.
Купував у китайців по $2. Наприклад тут: http://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20150409222319&SearchText=bmp280
В Україні поки не знайшов. Щодо BMP180 пишіть мені: [email protected] чим зможу допоможу.

Додати коментар
Code
* - обов'язкові поля

Архіви