Files
DS_Library_Docs/docs/DS_BMP180.md
T
2026-06-27 00:39:04 +03:00

82 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Драйвер датчика давления и температуры DS_BMP180
Драйвер на Си для работы с цифровым барометрическим датчиком **BMP180** (а также совместимым BMP085) по интерфейсу I2C. Библиотека обеспечивает чтение заводских калибровочных коэффициентов из EEPROM чипа и производит математическую компенсацию нелинейности показаний.
## 📌 Особенности реализации
* **Полная аппаратная компенсация**: Драйвер содержит внутреннюю структуру `Calibration` для хранения 11 уникальных заводских коэффициентов (`AC1``MD`) и промежуточного фактора `B5`.
* **Поддержка Oversampling (OSS)**: Реализована возможность выбора точности измерения давления от экономичного (0) до сверхвысокого разрешения (3) через функцию конфигурирования.
* **Целочисленная математика**: Все формулы вычисления оптимизированы под битовые сдвиги и целочисленные типы данных `long`/`uint32_t`, что исключает нагрузку на блок плавающей точки (FPU) микроконтроллера.
---
## 🔌 Схема подключения (I2C)
Адрес устройства на шине I2C фиксирован аппаратно и равен `0x77` (в функциях HAL адрес необходимо передавать со сдвигом: `0x77 << 1`).
| Вывод датчика BMP180 | Вывод STM32 | Назначение |
| :--- | :--- | :--- |
| **VCC** | 3.3V / 5V | Питание модуля (зависит от наличия стабилизатора на плате) |
| **GND** | GND | Общая земля |
| **SCL** | I2Cx_SCL | Тактовая линия шины I2C |
| **SDA** | I2Cx_SDA | Линия данных шины I2C |
---
## 💻 Пример использования в `main.c`
Датчик является асинхронным: сначала подается команда на запуск преобразования, затем выдерживается пауза на замер, и только после этого считывается результат.
```c
#include "DS_BMP180.h"
extern I2C_HandleTypeDef hi2c1;
DS_BMP180 barometer;
int main(void) {
// ... Автоматическая инициализация HAL, GPIO, I2C ...
/* 1. Инициализация и вычитка калибровочных коэффициентов */
// Передаем сдвинутый адрес: 0x77 << 1 = 0xEE
DS_BMP180_Init(&barometer, &hi2c1, 0xEE);
while (1) {
/* 2. Измерение ТЕМПЕРАТУРЫ */
DS_BMP180_StartConversionTemperature(&barometer);
HAL_Delay(5); // Пауза на преобразование температуры по даташиту (min 4.5 мс)
long raw_temp = DS_BMP180_GetTemperature(&barometer);
float real_temp = raw_temp / 10.0f; // Результат возвращается в десятых долях градуса
/* 3. Измерение ДАВЛЕНИЯ */
// Запуск в режиме ультравысокого разрешения OSS = 3
DS_BMP180_StartConversionPressure(&barometer, 3);
HAL_Delay(26); // Пауза для режима OSS=3 (min 25.5 мс)
long pressure_pa = DS_BMP180_GetPressure(&barometer); // Результат в Паскалях (Па)
float pressure_mmhg = pressure_pa / 133.3224f; // Перевод в мм ртутного столба
// Полученные данные real_temp и pressure_mmhg готовы для вывода
HAL_Delay(1000);
}
}
```
---
## 📋 Справочник API функций
### `void DS_BMP180_Init(DS_BMP180 *DS_BMP180, I2C_HandleTypeDef *hi2c, uint8_t address)`
Выполняет первичную привязку дескриптора к шине I2C и вычитывает массив из 22 байт из регистра `0xAA` для заполнения таблицы калибровочных констант.
### `void DS_BMP180_StartConversionTemperature(DS_BMP180 *DS_BMP180)`
Записывает команду `0x2E` в управляющий регистр `0xF4`, запуская внутренний аналого-цифровой замер температуры.
### `long DS_BMP180_GetTemperature(DS_BMP180 *DS_BMP180)`
Считывает регистры данных `0xF6`-`0xF7`, рассчитывает промежуточный фактор компенсации `B5` и возвращает температуру.
* **Выходное значение**: Целое число (например, значение `245` соответствует температуре `24.5 °C`).
### `void DS_BMP180_StartConversionPressure(DS_BMP180 *DS_BMP180, uint8_t OversamplingRatio)`
Запускает замер давления с указанным коэффициентом аппроксимации `OversamplingRatio` (значения от `0` до `3`).
### `long DS_BMP180_GetPressure(DS_BMP180 *DS_BMP180)`
Вычитывает 3 байта сырых данных давления, выполняет полную компенсацию нелинейности по формулам Bosch с использованием ранее рассчитанного фактора `B5`.
* **Выходное значение**: Давление в Паскалях (`Pa`).