BMP180 – подключение датчика атмосферного давления



BMP180 подключение датчика атмосферного давления
BMP180 представляет собой датчик для измерения атмосферного давления и температуры окружающего воздуха. Поскольку между давлением и температурой существует взаимосвязь, то последняя учитывается при расчете давления. Пределы измеряемого давления составляют 300…1100 мбар, или 225…825 мм рт. ст. Датчик продается в виде модуля GY-68 под Arduino, представляет собой миниатюрную плату на которой установлен стабилизатор напряжения 3,3 В, обвязка и непосредственно сам датчик.

Модуль можно заказать здесь. Напряжение питания датчика может находиться в пределах 1,8…3,6 В. Обмен данными, осуществляется с помощью распространенного интерфейса I2C, скорость передачи может достигать 3,4 Мбит/сек (3,4 МГц). Ток потребления и время преобразования зависят от точности (разрешения) результата преобразования давления и подразделены на режимы, которые отражены в следующей таблице:

Режим преобразования
(oss)
Описание Время преобразования, тип. (макс.) Ток потребления
(частота преобразования 1 Гц)
Длина результата преобразования давления
0 Режим пониженного потребления 3 мс (4,5 мс) 3 мкА 16 бит
1 Стандартный режим 5 мс (7,5 мс) 5 мкА 17 бит
2 Режим высокого разрешения 9 мс (13,5 мс) 7 мкА 18 бит
3 Режим ультравысокого разрешения 17 мс (25,5 мс) 12 мкА 19 бит

Ток потребления в таблице указан для частоты преобразования в 1 Гц, при увеличении частоты, ток возрастает прямо пропорционально.

Для температуры время преобразования фиксировано, и составляет 3 мс (макс. 4,5 мс), длина результата 16 бит.

Ниже представлена карта памяти датчика:

Адрес Название Описание
0xAA – 0xBF Calib_xx Калибровочные константы
0xD0 Chip-id Регистр содержит число 0x55, и может использоваться для проверки интерфейса передачи данных
0xE0 Soft reset Регистр программного сброса, для выполнения которого необходимо записать число 0xB6
0xF4 Measurement control Регистр управления преобразованием
0xF6 Out_msb Регистр результата преобразования, старший байт
0xF7 Out_lsb Регистр результата преобразования, младший байт
0xF8 Out_ xlsb Регистр результата преобразования, дополнительный младший байт

Всего в памяти датчика хранятся 11 калибровочных констант, необходимых для расчета температуры и давления. Константы двухбайтные, названия и адреса приведены в следующей таблице:

Константа Адрес в памяти
MSB LSB
AC1 0xAA 0xAB
AC2 0xAC 0xAD
AC3 0xAE 0xAF
AC4 0xB0 0XB1
AC5 0XB2 0XB3
AC6 0XB4 0XB5
B1 0XB6 0XB7
B2 0XB8 0XB9
MB 0XBA 0XBB
MC 0XBC 0XBD
MD 0XBE 0XBF

Регистр управления преобразованием (Measurement control) содержит следующие биты:

Бит Название Значение бита Описание
7-6 oss
Режим преобразования
00 Пониженное потребление
01 Стандартный режим
10 Высокое разрешение
11 Ультравысокое разрешение
5 sco
Бит состояния преобразования
1 Начать преобразование
0 Преобразование закончено
4-0 meas_ctrl 01110 Измерение температуры
10100 Измерение давления

В общем, для измерения температуры в регистр Measurement control необходимо записать число 0x2E, результат считать из регистров out_msb и out_lsb (16 бит). Для измерения давления записать числа 0x34, 0x74, 0xB4, 0xF4 в зависимости от режима преобразования (oss: 0, 1, 2, 3), при этом длина результата варьируется в пределах от 16 до 19 бит. Для режимов (oss: 1, 2, 3), младшие биты результата находятся в дополнительном регистре Out_ xlsb (7-5 биты). Окончание преобразования можно определить, прочитав значение бита sco.

Результаты преобразования температуры и давления представляют собой некомпенсированные (сырые) данные. Для получения правильных значений необходимо произвести довольно много расчетов с использованием калибровочных констант, причем вычисления идут с 32-х разрядными числами.

Датчик имеет фиксированный 7-ми битный адрес для работы по шине I2C, двоичное значение адреса: 1110111.

Ниже представлен алгоритм и пример расчета из даташита:
BMP180 - расчет температуры и давления

Как видно в расчетах присутствуют как знаковые, так и беззнаковые числа, написать программу для расчета на языке СИ не сложно, а вот на ассемблере придется постараться, что я и сделал.

На следующей картинке представлена схема подключения датчика давления BMP180 к микроконтроллеру PIC16F628A:
BMP180 схема подключения

Микроконтроллер работает на частоте 4 МГц от внутреннего тактового генератора, для вывода результатов измерений я использовал LCD модуль Nokia 5110.

Ниже представлена часть программы для микроконтроллера PIC16F628A, полный исходник с прошивкой можно скачать в конце статьи:

Интерфейс I2C на стороне микроконтроллера реализован программно. После инициализации дисплея выполняется считывание калибровочных констант из датчика в 1-й банк ОЗУ микроконтроллера, там же расположены все вспомогательные регистры, участвующие в арифметических операциях расчета температуры и давления. Под расчеты и хранение констант выделено 75 регистров, почти весь 1-й банк ОЗУ. В 0-м банке расположены регистры подпрограммы передачи данных интерфейса I2C, регистры подпрограммы преобразования двоичного числа в десятичное по разрядам, а также регистры для работы с дисплеем Nokia 5110.

Далее вызывается подпрограмма получения значения температуры rd_temp, которая отправляет на датчик команду запуска преобразования и затем считывает результат. Для получения величины давления, необходимо предварительно в регистр oss записать число от 0 до 3, в зависимости от требуемой точности результата, затем вызывается подпрограмма rd_pres.

Далее следует вызов подпрограммы расчета давления и температуры rash_T_P. Расчет выполняется при помощи арифметических подпрограмм для знаковых 32-х разрядных чисел. Из-за большого количества вычислений подпрограммы расчета занимают значительный объем памяти программ микроконтроллера PIC16F628A, около 800 слов, 40% памяти программ. Расчет длится около 15 мс, для частоты тактового генератора 4 МГц.

После получения рассчитанных значений температуры и давления выполняется преобразование результата в десятичное значение и вывод на LCD дисплей. На первой строке выводится температура, на второй давление в мм рт. ст., на третьей давление в Паскалях. Пауза между измерениями равна 1 секунде. Вся программа занимает около 1600 слов, то есть 80% памяти программ. При возникновении ошибки передачи данных по интерфейсу I2C загорается светодиод HL1, программа при этом зацикливается.

У меня было 2 экземпляра BMP180, при сравнении показаний давления с прогнозом погоды из интернета, первый датчик показывал на 1 мм рт.ст. меньше значения прогноза, второй на 3 мм рт.ст. меньше, то есть получается некоторый разброс показаний от экземпляра к экземпляру. При сравнении показаний температуры с распространенным датчиком DS18B20, оба экземпляра BMP180 выдавали меньшее значение температуры, первый на 1 градус Цельсия, второй на 1,8.

BMP180 внешний вид модуляBMP180 макетная платаМакетная плата BMP180

Ниже представлен видеоролик с подключенным к микроконтроллеру датчиком BMP180:

Прошивка МК и исходник для подключения датчика BMP180

Последние записи:

Комментариев 9 на “BMP180 – подключение датчика атмосферного давления

  1. Добрый день Руслан.
    Подскажите возможно ли увеличить размер шрифта
    в 2 раза?

    • Приветствую, да это возможно, в этом случае в одну строку уместится 8 символов, всего 3 строки, для этого надо редактировать прошивку, включить таблицу символов 9×14.

  2. Добрый день. Вопрос несколько не по теме, но, скажите пожалуйста, Вам встречались микроконтроллеры серии pic16, работающие при температуре минус 50 градусов Цельсия (по документации на микроконтроллер)?

    • Здравствуйте, я посмотрел документации микроконтроллеров с которыми приходилось иметь дело, из них PIC16F84A, а также серия PIC16F87XA (всего в серии 4 микроконтроллера) могут эксплуатироваться до -55 градусов Цельсия по даташиту.

  3. а можно создать схему с виводом значения мм.рт.ст на семисегментние индикатори?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *