Первая итерация

This commit is contained in:
2026-06-27 00:39:04 +03:00
parent 2009035bb4
commit c4ec2b64cd
12 changed files with 951 additions and 180 deletions
+85
View File
@@ -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`.