5.7 KiB
5.7 KiB
Библиотека для работы с датчиками температуры DS18B20 по 1-Wire
Описание
Данная библиотека предоставляет драйвер для работы с цифровыми температурными датчиками DS18B20, подключёнными по однопроводному интерфейсу 1-Wire. Библиотека поддерживает:
- Инициализация шины 1-Wire и обнаружение всех датчиков на шине
- Инициализация датчика по:
- ROM-адресу
- Пользовательским байтам (TH, TL, UserByte3, UserByte4)
- Индексу (порядковому номеру) найденного устройства
- Запуск преобразования температуры у всех или отдельных датчиков с выбором метода ожидания окончания преобразования (по шине или задержкой)
- Чтение температуры и проверка статуса подключения датчика
- Возможность замены потерянного датчика в структуре
Быстрый старт
1. Настройка порта и таймера для 1-Wire (файл ow_port.h):
#define OW_GPIO_Port GPIOB
#define OW_Pin_Numb 0
#define OW_Pin (1 << OW_Pin_Numb)
#define OW_TIM TIM3
#define OW_TIM_1US_PERIOD 24
2. Подключение библиотеки и инициализация таймера:
#include "dallas_tools.h"
MX_TIM_Init(); // Инициализация таймера (например, TIM3)
3. Инициализация шины и поиск датчиков:
Dallas_BusFirstInit(&htim);
4. Инициализация структуры датчика по одному из методов:
// Объявление хендлов датчиков
DALLAS_SensorHandleTypeDef sens;
// Инициализация по индексу (порядковому номеру найденного датчика)
sens1.Init.init_func = &Dallas_SensorInitByInd;
sens1.Init.InitParam.Ind = 0;
// Инициализация по ROM-адресу
sens.Init.init_func = &Dallas_SensorInitByROM;
sens.Init.InitParam.ROM = rom_address;
// Инициализация по пользовательским байтам
sens.Init.init_func = &Dallas_SensorInitByUserBytes;
sens.Init.InitParam.UserBytes.UserByte1 = 1;
sens.Init.InitParam.UserBytes.UserByte2 = 2;
sens.Init.InitParam.UserBytes.UserByte3 = 3;
sens.Init.InitParam.UserBytes.UserByte4 = 4;
// добавление датчика в структуру sens
Dallas_AddNewSensors(&hdallas, &sens);
5. Запуск измерения и чтение температуры:
Dallas_StartConvertTAll(&hdallas, DALLAS_WAIT_BUS, 0);
Dallas_ReadTemperature(&sens);
Функции
| Функция | Описание |
|---|---|
Dallas_BusFirstInit(&htim) |
Инициализация шины 1-Wire, запуск таймера и поиск датчиков |
Dallas_AddNewSensors(&hdallas, &sensor) |
Инициализация структуры датчика и добавление в работу |
Dallas_ReplaceLostedSensor(&sensor) |
Замена потерянного датчика на новый, если доступен |
Dallas_StartConvertTAll(&hdallas, waitCondition, delay) |
Запуск преобразования температуры на всех датчиках |
Dallas_ConvertT(&sensor, waitCondition) |
Запуск преобразования температуры на одном датчике |
Dallas_ReadTemperature(&sensor) |
Чтение температуры с датчика |
Dallas_IsConnected(&sensor) |
Проверка подключения датчика (чтение scratchpad) |
Dallas_WriteUserBytes(&sensor, bytes12, bytes34, mask) |
Запись пользовательских байт в датчик |
Требуемые зависимости
- Драйвер 1-Wire (
onewire.c/h,ow_port.c/h) - Драйвер DS18B20 (
ds18b20_driver.c/h)
Примечания
- Функции работы с датчиками возвращают статус в формате
HAL_StatusTypeDef. - Ожидание окончания преобразования температуры настраивается через
DALLAS_WaitConvertionTypeDef:DALLAS_WAIT_BUS— ожидание по состоянию линии 1-Wire.DALLAS_WAIT_DELAY— фиксированная задержка, зависящая от выбранного разрешения.DALLAS_WAIT_NONE— без ожидания (асинхронный режим).
- При потере связи с датчиком функция
Dallas_IsConnectedпомечает датчик как потерянный. Для восстановления работы можно вызватьDallas_ReplaceLostedSensor, она будет искать датчик и пытаться его инициализировать по заданной функции инициализации.