Files
2026-06-27 00:39:04 +03:00

5.9 KiB

Драйвер высокоточного датчика температуры DS_TMP112

Низкоуровневый драйвер на Си для работы с ультракомпактным цифровым датчиком температуры TMP112 (а также совместимыми TMP102 / TMP112A/B) по интерфейсу I2C. Датчик обладает высокой точностью (до 0.5°C) и возможностью работы в 12-битном или 13-битном (Extended) режимах.

📌 Особенности реализации

  • Объектно-ориентированный дескриптор: Драйвер инкапсулирует конфигурацию и указатель на шину I2C, позволяя опрашивать несколько физических датчиков TMP112 на разных адресах.
  • Прямая оцифровка: Функция чтения автоматически собирает два байта данных из регистра температуры (0x00), учитывая формат Big-Endian и знаковые биты (дополнение до двух), возвращая готовое вещественное значение температуры.
  • Минимальное энергопотребление: Поддержка перевода датчика в режим Shutdown Mode для экономии батарейного питания между замерами.

🚀 Способ добавления в ваш проект (Git Submodule)

Библиотека подключается к вашему текущему проекту как подмодуль Git. Это позволяет фиксировать рабочую версию драйвера и обновлять её независимо от основного кода.

1. Подключение подмодуля

Откройте терминал в корневом каталоге вашего проекта и выполните команду:

git submodule add https://git.domstudent.ru/Library/DS_TMP112 Library/DS_TMP112

После этого Git создаст в папке Library/ директорию DS_TMP112 и скачает актуальные файлы драйвера.

2. Автоматическое обновление сборки CMake

Перейдите в папку с вашими автоматизированными утилитами и запустите PowerShell-скрипт обновления (из репозитория DS_UpdateCMakeList):

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

#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.