Перейти к содержимому

Датчик температуры и влажности SD123-T10 для шины RS485 Modbus RTU

Добрый день, уважаемые читатели!

Представляю вам небольшой обзор очередного чуда электронной промышленности Китая под названием SD123-T10. Небольшая перфорированная коробочка представляет собой датчик температуры и влажности SHT30 с выходом на шину RS482 и протоколом Modbus RTU. 

Корпус довольно небольшой и предназначен для установки на DIN-рейку. Но можно закрепить и обычными саморезами.

Датчик легко вскрыть без использования инструмента, что я сразу же и сделал, внутри коробочки установлена небольшая плата с детальками:

Колодка для подключения кабеля разъемная, что удобно. Несмотря на то, что контактов 5, используется только 4 – А, В, +питания и “земля”. Причем китайцы умудрились перепутать описание разъемов в документации и на всех рисунках, имеющихся в сети. Реальное расположение представлено на фото ниже:

Датчик позиционируется как средство измерения температуры и влажности для: промышленных объектов, базовых станций телекоммуникаций, производственных цехов, складов, сельскохозяйственных теплиц, больниц, лабораторий, отелей, ресторанов, контроля температуры и влажности на складах, строительных площадок и т.д. Но никто не запрещает использовать его и в домашних условиях, разве что цена “кусается” по сравнению с простейшими I2C датчиками.

Если сравнить данное изделие с самым обычным датчиком для шины I2C, то можно сделать такие выводы:

Достоинства:

  • Шина RS485 Modbus RTU позволяет не заботится о длине проводов (длина до 1км при определенных условиях) и напряжении питания (от 5 до 28 в).
  • Шина RS485 позволяет подключить к одной шине одновременно несколько однотипных сенсоров, так как адреса задаются программно пользователем.
  • Готовый вентилируемый корпус

Недостатки:

  • Цена
  • Мы теряем доступ к некоторому функционалу сенсоров, доступный по шине I2C, например встроенному нагревателю для самопросушки.

 


Внутреннее устройство и характеристики

В датчике температуры и влажности SD123-T10 используется цифровой I2C датчик температуры и влажности SHT30, поэтому основные характеристики данного датчика следует смотреть по данным из даташита на SHT30:

Напряжение питания: от 5 до 28 В
Потребляемая мощность:
0.1 Вт
Диапазон измерения температуры
: от -40 до +125 °C
Шаг измерения температуры (разрешение): 0.01°C
Погрешность измерения температуры (точность): ±0.2°C (max ±0.6°C)
Диапазон измерения влажности: от 0 до 100% RH
Шаг измерения влажности (разрешение): 0.01% RH
Погрешность измерения влажности (точность): ±2.0% RH (max ±4.0% RH)

Собственно сам датчик установлен не на основной плате с микроконтроллером, а не промежуточной, что очень хорошо и теоретически должно уменьшить влияние  нагрева микроконтроллера и стабилизатора на измерения.

 

Для обработки данных используется маломощный микроконтроллер с ядром M0 для сбора данных и вычисления температуры точки росы и температуры по влажному термометру в режиме реального времени PHY6222:

PHY6222  — это система на кристалле (SoC) для приложений Bluetooth 5.2/IEEE 802.15.4. Он оснащен 32-битным процессором ARM® Cortex™-M0 с 64 КБ SRAM, флэш-памятью 128–8 МБ, ПЗУ 96 КБ, 256-битной памятью и многорежимным радиомодулем со сверхнизким энергопотреблением. Это объясняет, зачем на плате разведена печатная антенна. Но в прошивке, по всей видимости, она не используется.

Измеренные значения температуры и влажности можно считывать в режиме реального времени через шину RS485, используя протокол Modbus RTU. За это отвечает другая микросхемка:

Но вот никаких защитных элементов (диоды, самовосстанавливающиеся предохранители) на плате не установлено. Так что надежность работы такого сенсора в промышленных условиях с высоким уровнем помех можно поставить под сомнение.

Датчик оснащен внутренним стабилизатором, который преобразует напряжение питания в диапазоне от 5 до 28В в внутреннее напряжение необходимого уровня.

 


Программный интерфейс Modbus RTU

Датчик довольно интересен в программном плане.

  • Во-первых, номера регистров отличаются от подавляющего большинства китайских датчиков температуры и влажности (как правило это 0x0001 и 0x0002).
  • Во-вторых, это единственный датчик для RS485, с которым мне лично удалось пообщаться, который имеет регистры для выдачи данных в FLOAT-формате. Это позволяет получать данные ровно в том виде, в каком они были получены непосредственно с шины I2C, без потери точности. При этом используется порядок байт “Float32 – Little endian byte swap”. 
  • В-третьих, этот датчик кроме собственно измеряемых данных, выдает и вычисляемые: температуру точки росы и температуру по влажному термометру.

Список регистров приведен в таблице:

Адрес hex Адрес dec Тип данных Длина Описание
Команды 0x03 или 0x04 – чтение данных
0x01ff 511 INT16 2 Температура по влажному термометру (10-кратное значение)
0x0200 512 INT16 2 Температура по сухому термометру (10-кратное значение)
0x0201 513 INT16 2 Влажность (10-кратное значение)
0x0202 514 INT16 2 Температура точки росы (10-кратное значение)
0x0203 515 FLOAT 4 Температура с плавающей запятой
0x0205 517 FLOAT 4 Влажность с плавающей запятой
0x0207 519 FLOAT 4 Температура точки росы с плавающей запятой
0x0209 521 FLOAT 4 Температура по влажному термометру с плавающей запятой
Команды 0x03 – чтение данных, 0x06 или 0x10 – запись данных
0x0100 256 INT16 2 Адрес устройства на шине Modbus, по умолчанию 1
0x0101 257 INT16 2 Cкорость передачи данных: 0-1200,1-2400,2-4800,3-9600,4-57600,5-115200, по умолчанию 3
0x0102 258 INT16 2 Корректировка влажности (смещение) (10-кратное значение)
0x0103 259 INT16 2 Корректировка температуры (смещение) (10-кратное значение)

 

Проведем небольшое тестирование. Китайцы написали программу для настройки и тестирования датчика, но пользоваться ей невозможно – только каракули, только хардкор. Нет даже корявого английского перевода:

Поэтому проще использовать общеизвестную программу Modbus Poll. По умолчанию адрес датчика 1 при скорости передачи данных 9600. Но я уже изменил адрес датчика на 3, так как он будет использоваться в одном проекте (о котором я обязательно расскажу).

Чтение регистров данных:

Как видите, здесь документация почти не врёт. Но ниже “отзываются” и недокументированные регистры, данные в которых немного отличаются от основных. Что в них отображается – не совсем понятно. 

Точность, которую дает FLOAT32, в общем-то и не нужна в большинстве бытовых (и даже промышленных) применениях, поэтому я пока что ограничился своим универсальным драйвером для RS485-сенсоров. Понадобится большая точность – несложно написать новый.

Очную ставку с другими сенсорами и сравнение их показаний я планирую осуществить в ближайшее время, результаты будут опубликованы в отдельной статье.

 

Теперь убедимся в правильности документации насчет регистров настроек:

С заданием адреса устройства на шине и скорости передачи никаких сложностей не возникло – всё работает ровно так, как и ожидалось.

Корректировки влажности и температуры должны быть заданы в формате INT16 , при этом значение корректировки перед передачей необходимо умножить на 10. То есть для смещения температуры на -2,5 градуса мы должны записать в регистр 259 значение -25.

Но вот с корректировками – “засада”. Сколько бы я не записывал туда данные, на выходные результаты это никак не влияло. И после перезагрузки так же. Впрочем, я уже сталкивался с подобным поведением на другом похожем китайском изделии.

Возможно, в адресном пространстве регистров присутствуют и такие, через которые можно управлять встроенным в сенсор нагревателем, но мне не удалось их обнаружить на текущий момент.

 


Ссылки

Документацию и софт (всё на китайском) вы можете найти по этой ссылке.

 

На этом разрешите откланяться, до новых встреч!

💠 Полный архив статей вы найдете здесь


Пожалуйста, оцените статью:
[ 5 из 5, всего 2 оценок ]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *