Перейти к содержанию

BME680 — датчик газа, давления, влажности и температуры Bosch

BME680 — четыре датчика в корпусе 3 × 3 мм: к давлению, влажности и температуре, как у BME280, Bosch добавила металлооксидный газовый датчик с нагревателем. Его берут для оценки качества воздуха в помещении. Разбираем по даташиту выводы, точность, порядок измерения, что на самом деле выдаёт газовый датчик и зачем для индекса IAQ нужна библиотека BSEC.

Обновлено Редакция GAW

BME680 продолжает линейку BMP280 и BME280: тот же принцип — сырые коды и калибровочные коэффициенты в памяти, компенсация по формулам из даташита, — но с газовым датчиком на нагреваемой пластинке. Карта регистров у BME680 своя, поэтому библиотеки для BME280 к нему не подходят (наш вывод). Пересчёт давления в высоту — в калькуляторе барометрической высоты, сравнение барометров — в статье «Датчики давления», датчиков влажности — в статье «Датчики влажности».

Коротко

  • Питание — VDD 1,71–3,6 В (оптимум 1,8 В), VDDIO 1,2–3,6 В; предел 4,25 В.
  • Интерфейс — I²C до 3,4 МГц (адреса 0x76 и 0x77) или SPI до 10 МГц, 3 или 4 провода.
  • Давление — 300–1100 гПа, ±0,6 гПа абсолютная и ±0,12 гПа относительная точность (тип.).
  • Влажность — ±3 % тип. при 20–80 % и 25 °C, отклик τ63 — 8 с.
  • Температура — ±0,5 °C при 25 °C, ±1,0 °C при 0…65 °C.
  • Газ — сопротивление слоя в омах; нагреватель 200–400 °C, 12 мА тип. при 320 °C.
  • Ток — 3,7 мкА при измерении давления, влажности и температуры раз в секунду; 0,15 мкА во сне.
  • Корпус — LGA-8 3,0 × 3,0 × 0,93 мм с металлической крышкой и отверстием.

Выводы

Нумерация такая же, как у BME280 и BMP280 по их даташитам: по часовой стрелке в виде сверху и против часовой — в виде снизу, со стороны площадок (рис. 11 даташита). Вентиляционное отверстие в крышке — у края корпуса, противоположного выводу 1.

ВыводОбозначениеНазначениеПри I²CПри SPI (4 провода)При SPI (3 провода)
1GNDобщийGNDGNDGND
2CSBвыбор микросхемы, внутренняя подтяжка 70–190 кОмVDDIOCSCS
3SDIданныеSDAMOSIданные
4SCKтактовый сигналSCLSCKSCK
5SDOданные / младший бит адресаGND — 0x76, VDDIO — 0x77MISOне подключать
6VDDIOпитание интерфейсаVDDIOVDDIOVDDIO
7GNDобщийGNDGNDGND
8VDDпитание датчиковVDDVDDVDD

Интерфейс выбирается по CSB: первый же ноль на нём включает SPI до следующего включения питания. Поэтому для I²C вывод CSB соединяют прямо с VDDIO — так требует раздел 7.2. На оба питания ставят по 100 нФ, подтяжки шины — обычно 4,7 кОм (разд. 7.2). По разделу 6.2 BME680 не растягивает такт (clock stretching): вывод SCL у него — только вход с высоким сопротивлением, без выхода на общий провод.

Параметры

По таблицам 1, 6–8 даташита. Типичные токи — при 25 °C; минимумы и максимумы дрейфов и смещений — ±3σ за срок службы.

ПараметрЗначение
Ток во сне0,15 мкА тип., 1 мкА макс.
Ток при измерении влажности / давления / температуры340 / 714 / 350 мкА тип.; макс. 450 мкА (влажность, при 85 °C) и 849 мкА (давление, при −40 °C)
Ток при 1 измерении в секунду2,1 мкА (влажность и температура), 3,1 мкА (давление и температура), 3,7 мкА (все три)
Время до первого обменадо 2 мс после VDD > 1,58 В и VDDIO > 0,65 В
Давление: диапазон полной точности300–1100 гПа при 0…65 °C
Давление: абсолютная точность±0,6 гПа при 300–1100 гПа и 0…65 °C
Давление: относительная точность±0,12 гПа при 700–1100 гПа, 25…40 °C и постоянной влажности
Давление: шум1,4 Па в полной полосе, 0,2 Па в уменьшенной (11 и 1,7 см), наибольшая передискретизация
Давление: ТКС смещения / дрейф после пайки±1,3 Па/К / от −0,5 до +2,0 гПа
Влажность: полная точность10–90 % при 0…65 °C
Влажность: точность / гистерезис / нелинейность±3 % / ±1,5 % / 1,7 %
Влажность: разрешение / стабильность0,008 % / 0,5 % в год
Температура: точность / разрешение±0,5 °C при 25 °C, ±1,0 °C при 0…65 °C / 0,01 °C

Температура, как и у BME280, — это температура кристалла: по сноске к таблице 8 она зависит от платы и самонагрева и обычно выше окружающей. Нагреватель газового датчика добавляет к этому собственное тепло (наш вывод) — тем важнее редкие измерения и место подальше от стабилизатора.

Газовый датчик: что он выдаёт

Металлооксидный слой адсорбирует летучие органические вещества; чем больше в воздухе восстанавливающих веществ, тем ниже его сопротивление. Сам BME680 выдаёт только это сопротивление в омах — «сырой» сигнал, который зависит ещё и от влажности. Индекс качества воздуха IAQ (0–500), «статический» IAQ, CO₂- и b-VOC-эквиваленты считает библиотека Bosch BSEC: она распространяется в виде закрытого двоичного кода по лицензионному соглашению, а открытый драйвер BME68x Sensor API на GitHub даёт только обмен и компенсацию. По сноске 3 к таблице 3 все параметры IAQ относятся только к связке BME680 + BSEC. CO₂ датчик не измеряет.

Параметр газового датчикаЗначение
Рабочий диапазон−40…85 °C, 10–95 %
Ток нагревателя при 320 °C9 / 12 / 13 мА (мин. / тип. / макс., VDD ≤ 1,8 В, 25 °C)
Пиковый ток в первую миллисекунду15 / 17 / 18 мА
Средний ток в режимах BSEC0,09 мА (ULP, раз в 300 с), 0,9 мА (LP, раз в 3 с), 12 мА (непрерывный, 1 Гц)
Отклик новых датчиков (τ33–63 %)92 с (ULP), 1,4 с (LP), 0,75 с (непрерывный)
Разрешение / шум сопротивления0,05–0,11 % / 1,5 %

Характеристики сняты на новых датчиках, проработавших не меньше пяти дней на обычном воздухе. Непрерывный режим Bosch рекомендует только для коротких тестов.

Порядок измерения

Режимов два: sleep после включения и forced — один цикл «температура, давление, влажность, газ» (TPHG) по команде, затем снова сон; режима normal, как у BME280, нет. Пример из раздела 3.2.1:

  1. Передискретизация в ctrl_hum (0x72) и ctrl_meas (0x74): влажность ×1, температура ×2, давление ×16; IIR-фильтр — в config (0x75), коэффициенты от 0 до 127.
  2. Время нагрева gas_wait_0 (0x64) = 0x59 — 100 мс; температура нагревателя — код res_heat_0 (0x5A), вычисленный для 300 °C по формуле раздела 3.3.5 из калибровочных par_g1–par_g3, поправок res_heat_range и res_heat_val и температуры окружающего воздуха.
  3. В ctrl_gas_1 (0x71): nb_conv = 0 (уставка 0) и run_gas = 1.
  4. Запуск — mode = 0b01 в ctrl_meas. Готовность — бит new_data_0 в регистре 0x1D; для газа проверяют ещё gas_valid_r и heat_stab_r в 0x2B. Ноль в heat_stab_r значит, что нагреватель не успел выйти на температуру.

Наш расчёт кода gas_wait: старшие два бита задают множитель 1, 4, 16 или 64, младшие шесть — число миллисекунд 0–63. 0x59 = 0b01 011001 — множитель 4 и 25 мс, итого 100 мс; наибольшее время — 63 × 64 = 4032 мс, как и сказано в разделе 3.3.5. По даташиту нагревателю нужно около 20–30 мс, чтобы выйти на температуру.

Сопротивление газа считают так: gas_res = var1 × const_array2[gas_range] / (gas_adc − 512 + var1), где var1 = (1340 + 5 × range_switching_error) × const_array1[gas_range]; константы — в таблице 16. Наш расчёт для gas_range = 4 (const_array1 = 1, const_array2 = 499 500,4995) и range_switching_error = 0: при gas_adc = 512 сопротивление равно 499 500 Ом, при gas_adc = 768 — 1340 × 499 500,4995 / 1596 ≈ 419 380 Ом.

Отличия от BME280 и BMP280

BME280BME680
Газовый датчикнетесть, с нагревателем
Корпус2,5 × 2,5 × 0,93 мм3,0 × 3,0 × 0,93 мм
Режимыsleep, forced, normalsleep, forced
Ток при 1 Гц (все три величины)3,6 мкА3,7 мкА
Давление, абсолютная точность±1,0 гПа±0,6 гПа
Влажность: точность / гистерезис / отклик±3 % / ±1 % / 1 с±3 % / ±1,5 % / 8 с
Регистр ctrl_meas0xF40x74
chip_id (регистр 0xD0)0x600x61

Данные BME280 — из его даташита. Адреса I²C у всех трёх датчиков одинаковые — 0x76 и 0x77, и с BMP280 по адресу 0x77 BME680 совпадает, о чём даташит говорит прямо. Наш вывод: если газ не нужен, BME280 проще — у него есть режим normal и отклик по влажности 1 с против 8 с; BME680 берут ради оценки качества воздуха и готовы для этого подключить BSEC. Об адресах на шине — на странице «Адрес I²C», о шинах — в статьях I²C и SPI.

Расхождения в документации

  • Ток в режиме normal. Таблица 1 приводит ток ожидания «в паузе режима normal» (0,29 мкА тип.), хотя раздел 3.1 и таблица 10 описывают только режимы sleep и forced. Наш вывод: строку, по-видимому, перенесли из документации BME280 — для BME680 она не применима.
  • Шум давления. На с. 3 — «0,12 Па, или 1,7 см», в таблице 7 тем же 1,7 см соответствуют 0,2 Па при уменьшенной полосе. Берите значение таблицы.
  • Отклик газового датчика. На с. 3 — «меньше 1 с» для новых датчиков, в таблице 2 — 0,75 с только в непрерывном режиме, 1,4 с в режиме LP и 92 с в ULP.
  • Опечатки в регистрах. Раздел 5.3.3.2 называет регистры res_heat_x «res_wait_x»; при пропуске измерения раздел 5.3.2 говорит о значении 0x8000, а разделы 3.3.4 и 5.3.2.4 — о 0x80000 для 20-битных температуры и давления; рис. 2 относит IIR-фильтр только к температуре, разделы 3.3.4 и 5.3.2.4 — к температуре и давлению.

Частые вопросы

Измеряет ли BME680 CO₂?

Нет. Газовый датчик BME680 — металлооксидный: он реагирует на большинство летучих органических соединений и другие восстанавливающие газы, и Bosch прямо называет CO₂ исключением. Значение «CO₂-эквивалента» в библиотеке BSEC — оценка по средней связи между летучими веществами и CO₂ в выдыхаемом воздухе, а не измерение.

Что выдаёт газовый датчик BME680 без библиотеки BSEC?

Сопротивление чувствительного слоя в омах. Его вычисляют из кода АЦП gas_adc и диапазона gas_range по формуле из раздела 3.4.1 даташита. Чем больше в воздухе восстанавливающих летучих веществ, тем меньше сопротивление. Индекс качества воздуха IAQ от 0 до 500 даташит определяет только для связки BME680 с закрытой библиотекой Bosch BSEC.

Какой адрес I²C у BME680?

0x76, если вывод SDO соединён с общим проводом, и 0x77, если с VDDIO; оставлять SDO свободным нельзя. Это те же адреса, что у BME280 и BMP280, поэтому на одной шине помещаются только два таких датчика в любом сочетании. Отличить BME680 можно по регистру 0xD0: в карте памяти даташита для него указано значение 0x61, у BME280 — 0x60.

Можно ли подключить BME680 к Arduino на 5 В?

Саму микросхему — нет: рабочее питание VDD и VDDIO — до 3,6 В, предельное — 4,25 В, а на выводах интерфейса — не выше VDDIO + 0,3 В. Модули под 5 В несут свой стабилизатор и согласование уровней — это проверяют по схеме модуля. Учтите и ток: нагреватель газового датчика при 320 °C потребляет около 12 мА и до 18 мА в момент включения.

Источники

  1. Bosch Sensortec. BME680 Low power gas, pressure, temperature & humidity sensor: Datasheet (BST-BME680-DS001-09, revision 1.9, February 2024) — с. 2–3 — корпус LGA 3,0 × 3,0 × 0,93 мм, интерфейсы, питание, токи при 1 Гц, диапазоны; с. 7, табл. 1 — питание, токи сна и измерения, запуск 2 мс; с. 8, табл. 2 — газовый датчик: ток нагревателя 9/12/13 мА, пик 17 мА, средний ток и отклик в режимах BSEC, разрешение и шум; с. 9, табл. 3–4 и сноска 3 — IAQ только с BSEC; с. 10, табл. 6 — влажность; с. 11, табл. 7 — давление; с. 12, табл. 8 — температура; с. 13, табл. 9 — предельные 4,25 В; с. 14–23, разд. 3 — режимы sleep и forced, быстрый старт, разрядность, нагреватель 200–400 °C и 1–4032 мс, формулы res_heat_x и gas_res; с. 24–26, разд. 4 — BSEC и индекс IAQ; с. 28–37 — карта памяти, chip_id 0x61, регистры; с. 38–39, разд. 6 — выбор интерфейса, адреса 0x76 и 0x77; с. 44–45, рис. 11, табл. 24 — выводы и схемы включения
  2. Bosch Sensortec. BME280 Combined humidity and pressure sensor: Data sheet (BST-BME280-DS001-24, revision 1.24, February 2024) — для сравнения: корпус 2,5 × 2,5 × 0,93 мм, 3,6 мкА при 1 Гц, давление ±1,0 гПа, влажность ±3 %RH, гистерезис ±1 %RH, отклик 1 с, температура ±0,5 °C при 0…65 °C, режим normal, chip_id 0x60, ctrl_meas 0xF4 (с. 2, табл. 2–4, разд. 3.3, 5.4)

Нашли ошибку?