Первая итерация
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
# Драйвер высокоточного датчика температуры DS_TMP112
|
||||
|
||||
Низкоуровневый драйвер на Си для работы с ультракомпактным цифровым датчиком температуры **TMP112** (а также совместимыми TMP102 / TMP112A/B) по интерфейсу I2C. Датчик обладает высокой точностью (до 0.5°C) и возможностью работы в 12-битном или 13-битном (Extended) режимах.
|
||||
|
||||
## 📌 Особенности реализации
|
||||
* **Объектно-ориентированный дескриптор**: Драйвер инкапсулирует конфигурацию и указатель на шину I2C, позволяя опрашивать несколько физических датчиков TMP112 на разных адресах.
|
||||
* **Прямая оцифровка**: Функция чтения автоматически собирает два байта данных из регистра температуры (`0x00`), учитывая формат Big-Endian и знаковые биты (дополнение до двух), возвращая готовое вещественное значение температуры.
|
||||
* **Минимальное энергопотребление**: Поддержка перевода датчика в режим Shutdown Mode для экономии батарейного питания между замерами.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Способ добавления в ваш проект (Git Submodule)
|
||||
|
||||
Библиотека подключается к вашему текущему проекту как подмодуль Git. Это позволяет фиксировать рабочую версию драйвера и обновлять её независимо от основного кода.
|
||||
|
||||
### 1. Подключение подмодуля
|
||||
Откройте терминал в корневом каталоге вашего проекта и выполните команду:
|
||||
```bash
|
||||
git submodule add https://git.domstudent.ru/Library/DS_TMP112 Library/DS_TMP112
|
||||
```
|
||||
*После этого Git создаст в папке `Library/` директорию `DS_TMP112` и скачает актуальные файлы драйвера.*
|
||||
|
||||
### 2. Автоматическое обновление сборки CMake
|
||||
Перейдите в папку с вашими автоматизированными утилитами и запустите PowerShell-скрипт обновления (из репозитория `DS_UpdateCMakeList`):
|
||||
```powershell
|
||||
cd tools/
|
||||
./UpdateCMakeList.ps1
|
||||
```
|
||||
Скрипт рекурсивно обойдет добавленную папку подмодуля, автоматически найдет пути к заголовочным файлам `Library/DS_TMP112/Inc` и исходному коду `DS_TMP112.c`, интегрируя их в ваш `CMakeLists.txt`.
|
||||
|
||||
---
|
||||
|
||||
## 🔌 Схема подключения (I2C)
|
||||
|
||||
Стандартный 7-битный адрес датчика на шине I2C по умолчанию равен `0x48` (если пин `ADD0` подключен к GND). Для передачи в функции HAL адрес необходимо смещать влево на 1 бит (`0x48 << 1 = 0x90`).
|
||||
|
||||
| Вывод датчика TMP112 | Вывод STM32 | Назначение |
|
||||
| :--- | :--- | :--- |
|
||||
| **V+ / VCC** | 3.3V | Питание датчика (1.4V — 3.6V) |
|
||||
| **GND** | GND | Общая земля |
|
||||
| **SCL** | I2Cx_SCL | Тактовая линия шины I2C |
|
||||
| **SDA** | I2Cx_SDA | Линия данных шины I2C |
|
||||
| **ALT** | Любой GPIO_Input | Выход аппаратного оповещения ALERT (опционально) |
|
||||
|
||||
---
|
||||
|
||||
## 💻 Пример использования в `main.c`
|
||||
|
||||
```c
|
||||
#include "DS_TMP112.h"
|
||||
|
||||
extern I2C_HandleTypeDef hi2c1;
|
||||
DS_TMP112 cabinet_sensor;
|
||||
|
||||
int main(void) {
|
||||
// ... Автоматическая инициализация HAL, GPIO, I2C ...
|
||||
|
||||
/* 1. Инициализация датчика (адрес 0x48 сдвигаем для HAL: 0x90) */
|
||||
DS_TMP112_Init(&cabinet_sensor, &hi2c1, 0x90);
|
||||
|
||||
/* 2. Конфигурирование (например, включение 12-битного режима, частота обновления 4 Гц) */
|
||||
DS_TMP112_Configure(&cabinet_sensor);
|
||||
|
||||
while (1) {
|
||||
/* 3. Чтение реальной температуры в градусах Цельсия */
|
||||
float current_temp = DS_TMP112_ReadTemperature(&cabinet_sensor);
|
||||
|
||||
// Переменная current_temp готова для логирования или вывода на дисплей
|
||||
HAL_Delay(1000);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 Справочник API функций
|
||||
|
||||
### `void DS_TMP112_Init(DS_TMP112 *sensor, I2C_HandleTypeDef *hi2c, uint8_t DevAddr)`
|
||||
Выполняет первичную логическую привязку дескриптора датчика к конкретной аппаратной шине I2C и I2C-адресу чипа на плате.
|
||||
|
||||
### `void DS_TMP112_Configure(DS_TMP112 *sensor)`
|
||||
Записывает базовые настройки в 16-битный регистр конфигурации `0x01` (установка шага конвертации, режима работы и порогов компаратора).
|
||||
|
||||
### `float DS_TMP112_ReadTemperature(DS_TMP112 *sensor)`
|
||||
Выполняет чтение регистра температуры `0x00`, сдвигает 12-битное/13-битное значение, восстанавливает математический знак температуры для отрицательных величин и умножает сырое значение на шаг шкалы (`0.0625 °C`). Возвращает результат типа `float`.
|
||||
Reference in New Issue
Block a user