Добрый день, уважаемые читатели!
Думаю, никто не будет спорить со мной, что ни один “умный” (и даже “не очень умный”) дом не обойдется без датчиков. Разнообразные датчики для устройств домашней автоматизации являются теми самыми “органами чувств”, на основании данных с которых алгоритмы управляют теми или иными процессами. И самыми популярными датчиками, пожалуй, являются датчики температуры – с их помощью регулируется температура в доме, погребе, гараже, аквариуме и т.д. Я уже не раз писал статьи про подобные датчики, эта тема мне весьма близка. Одним из действительно народных датчиков, безусловно, является цифровой датчик температуры DS18B20, обладающий достаточной точностью даже в “китайском исполнении”. Одна проблема – все локальные шины, основанные на подтяжке линий данных к земле (I2C, 1Wire, SingleBus) обладают небольшой “дальностью” и стабильность их работы резко снижается при возрастании паразитной емкости соединительного кабеля.
Читатели, регулярно читающие мой сайт, наверное уже заметили, что в последнее время я довольно плотно подсел на шину RS485 / Modbus RTU, которая позволяет особо не задумываться о длине соединительного кабеля, в том числе и на производстве.
В связи во всем вышесказанным, представляю вам обзор отечественного продукта: адаптер RS485 Modbus RTU для 3 (трех) датчиков температуры DS18B20. То есть данный адаптер позволяет измерять температуру воздуха, почвы, воды и т.д. в одной, двух или трех точках и выдает полученные данные на master-устройство по запросу последнего.
Почему такое название? Поскольку здесь мы имеем три “головы” (DS18B20), один “хвост” (RS485), и одну “тушку” (сам адаптер), то сие устройство небезосновательно получило название “Горыныч“, или “TE-Gorynych“. Головы можно “отрубать”, то есть вы можете использовать один, два или три датчика.
Разработано оно в России и выпускается малыми партиями на полуострове Ямал, о чем, собственно и сказано на печатной плате адаптера. Хотя, справедливости ради, стоит отметить, что комплектующие используются не российские, а вполне себе китайские, о чем будет сказано ниже. Это не совсем “независимый” обзор, так как я виртуально знаком с автором проекта, и даже немного поучаствовал в совершенствовании его прошивки – по моей просьбе была добавлена новая функция. Но я постараюсь сделать обзор максимально беспристрастным. Все контакты и ссылки – как обычно в конце статьи.
В отличие от большинства китайских аналогов с неизвестной “одноразовой” прошивкой внутри, рассматриваемое устройство активно обсуждается в чате, дорабатывается, и его можно довольно легко перепрошить уже после покупки – понадобится только недорогой USB-адаптер и некоторое количество свободного времени. При должном подходе устройство можно использовать не только как адаптер для датчиков, но и как макетную плату для изучения китайского микроконтроллера CH32V003 и написания собственных прошивок.
Внешний вид и описание
Адаптер собран в вентилируемом корпусе промышленного изготовления 65 x 45 x 28 миллиметров без учета разъемов или 85 x 45 x 28 мм с разъемами. Корпус может быть закреплен на стандартной DIN-рейке либо винтами / саморезами через специально предусмотренные отверстия. Подобные корпуса – не редкость, я уже как-то писал обзор на подобный адаптер.
На мой взгляд, применение вентилируемого корпуса не всегда оправдано, так как в “боевых” условиях оно может (и по идее как раз и должно) быть вынесено за пределы “комфортной зоны”, например на улицу. И тогда его всё равно придется прятать в более – менее герметичном корпусе. Но… корпус этот весьма распространен и дешев, так что его применение вполне оправдано. Я же для себя напечатал бокс, в котором заодно разместился “разветвитель” RS485 с питанием.
На условно “верхней” грани расположен разъем-клеммник на 9 контактов для подключения от одного до трех датчиков DS18B20. На нижней – такой же разъем для подключения проводов шины передачи данных и подачи питания. Клеммники хорошего качества, витая пара держится надежно; а при необходимости и 0,75 мм2 легко входит.
Их “распиновка” нанесена на верхней крышке корпуса, но есть обозначения и на печатной плате:
Характеристики устройства
Взято с официального сайта производителя
- Питание данного устройства заявлено производителем в диапазоне от +9 до +24в, хотя оно вполне стабильно работает и при +5В от “компьютерного” USB-RS485 адаптера.
- Подключение од одного до трех датчиков DS18B20 по трехпроводной или двухпроводной схеме подключения
- Контроль состояния подключенных датчиков: как то обрыв кабеля, короткое замыкание, ошибка CRC, нехватка питания.
- Возможность задания интервала опроса датчиков от 1 до 30 секунд. Цикл опроса датчиков не зависит от времени запроса данных мастером
- Выдача данных о температуре в трех режимах
- с округлением до целого (наименьшая точность)
- с одним знаком после запятой в виде целого числа (как во всех китайских адаптерах), для получения значения температуры необходимо разделить считанное число на 10
- в RAW-виде (максимальная точность), для получения значения температуры необходимо умножить полученное число на 625 и разделить на 10000:
t = v * 625 /10000
- Передача данных по шине RS485 с использованием протокола Modbus RTU
- Скорость передачи данных 1200 / 2400 / 4800 / 9600 / 19200 / 28400 / 57600 / 115200 baud
- 8 бит данных
- Режимы чётности NONE / EVEN / ODD
- Количество стоповых бит 0.5 / 1 / 1.5 / 2
По умолчанию используются параметры передачи: 9600, 8, None, 1, адрес на шине 0x01
Богатый внутренний мир
Перейдем к внутреннему устройству. Крышка адаптера довольно легко снимается без применения специнструмента, нужно только нажать сбоку на верхнюю половинку корпуса. Внутри мы видим небольшую плату, на которой расположен микроконтроллер, DC-DC импульсный преобразователь и RS485-приемопередатчик, не считая “рассыпухи”.
Разъемы и перемычки
Кроме кучки радиодеталей сразу же бросаются в глаза несколько штыревых разъемов и перемычек. С них и начнем…
- J1 – перемычка, отвечающая за подключение к линии связи терминатора 120 Ом с целью гашения стоячих волн. На коротких дистанциях лучше отключить
- J2 и J3 – с их помощью можно подтянуть линии данных А и В к питанию через резисторы 1.2 кОм. Но обычно такие резисторы уже установлены на стороне мастера, так что их чаще всего тоже можно отключить
- J7 служит для сброса микроконтроллера к заводским настройкам: для сброса необходимо переставить перемычку с контактов 4–3 гребёнки J7 на контакты 3-2 (красный и зелёный светодиоды загорятся одновременно), а затем вернуть перемычку в исходное положение на контакты 4 – 3.
- J8 может быть использован для подключения программатора микроконтроллера, это может понадобиться при выходе новых версий прошивки. На обратной стороне платы есть обозначения: GND, SWD, VCC, RST.
Схема питания
Вход питания защищен от переполюсовки защитным диодом. В качестве внутреннего стабилизатора в данном экземпляре использован “готовый” импульсный DC-DC преобразователь HW-613. Во первых “импульсник” не греется в отличие от линейного стабилизатора (который рассеивает все избыточное напряжение на себе), а во вторых – это достаточно дешево. Хотя базовая плата предусматривает и другие варианты – можно поставить линейный стабилизатор с обвязкой.
Контроллер
“Сердцем”, а вернее “мозгами”, платы служит бюджетный микроконтроллер CH32V003F4P6: 32-х битный RV32EC микроконтроллер с 16КБ Flash памяти. Тактовая частота задана внешним кварцем 24 MHz. К контролеру, как и положено, подключены три линии 1WIRE, причем каждая из них защищена с помощью спаренных диодов Шоттки BAV99.
RS485
В качестве сигнального приемопередатчика RS485 применен китайский чип CS48520S:
Схема вполне стандартная, разве что добавлены перемычки для подтяжки сигнальных линий к +5В и земле. Китайцы с такими вещами не заморачиваются, а иногда и TVS-диоды не ставят. Здесь с базовой защитой все в полном порядке.
Имеется на плате и парочка светодиодов. Зелёный светодиод начинает равномерно мигать сразу после подачи питания, показывая, что устройство работает. Красный светодиод вспыхивает на короткое время если устройство получило команду со своим адресом. Как по мне – в практическом применении Горыныча это лишний расход электроэнергии (пусть и очень небольшой), особенно если адаптер где-то в коробке на пыльном чердаке. Но при настройке и подключении они очень даже полезны. Поэтому я попросил автора добавить служебный регистр, который управляет их состоянием.
Для интересующихся электроникой приведу полную схему рассматриваемого устройства:
Регистры modbus
Вообще регистры и способы получения информации с адаптера очень хорошо описаны в документации автора, например здесь etrivia.ru/goods/TE-GORYNYCH. Как говориться, ни убавить, ни прибавить. Да и со временем в новых версиях прошивки могут появиться новые регистры. Но я всё-таки скопирую их список “для полноты картины”.
Адрес DEC | Адрес HEX | Допустимые значения | Описание |
---|---|---|---|
Команда 0x03 – чтение данных | |||
0 | 0x0000 | 0~127 при ошибках датчика -32768 или 0x8000 |
Датчик 1. Целая часть значения температуры. |
1 | 0x0001 | Датчик 2. Целая часть значения температуры. |
|
2 | 0x0002 | Датчик 3. Целая часть значения температуры. |
|
3 | 0x0003 | t = (value * 625) / 10000 при ошибках датчика -32768 или 0x8000 |
Датчик 1. Значение температуры с максимальным разрешением (RAW). |
4 | 0x0004 | Датчик 2. Значение температуры с максимальным разрешением (RAW). |
|
5 | 0x0005 | Датчик 3. Значение температуры с максимальным разрешением (RAW). |
|
6 | 0x0006 | t = value / 10.0 при ошибках датчика -32768 или 0x8000 |
Датчик 1. Значение температуры с одним десятичным знаком. |
7 | 0x0007 | Датчик 2. Значение температуры с одним десятичным знаком. |
|
8 | 0x0008 | Датчик 3. Значение температуры с одним десятичным знаком. |
|
14 | 0x000E | Версия прошивки | |
15 | 0x000F | Сумма бит: 0x00 – Все хорошо 0x01 – Обрыв линии 0x02 – Короткое замыкание на линии 0x04 – Ошибка контрольной суммы 0x08 – Датчику не хватило питания |
Датчик 1. Код текущей ошибки 0x01 – 0x08. |
16 | 0x0010 | Датчик 2. Код текущей ошибки 0x01 – 0x08. |
|
17 | 0x0011 | Датчик 3. Код текущей ошибки 0x01 – 0x08. |
|
18 | 0x0012 | Датчик 1. Количество ошибок с момента включения. |
|
19 | 0x0013 | Датчик 2. Количество ошибок с момента включения. |
|
20 | 0x0014 | Датчик 3. Количество ошибок с момента включения. |
|
Команды 0x03 & 0x06 – чтение и запись данных | |||
21 | 0x0015 | 0x0001 – 0x00F7 | Modbus ID устройства (адрес) По умолчанию 0x0001 |
22 | 0x0016 | 0x0001 – 1200 0x0002 – 2400 0x0003 – 4800 0x0004 – 9600 0x0005 – 19200 0x0006 – 28400 0x0007 – 57600 0x0008 – 115200 |
Скорость передачи данных по шине По умолчанию 0x0004 (9600) |
23 | 0x0017 | 0x0001 – NONE 0x0002 – EVEN 0x0003 – ODD |
Контроль чётности NONE/EVEN/ODD По умолчанию 0x0001 (NONE) |
24 | 0x0018 | 0x0001 – 1 0x0002 – 0.5 0x0003 – 2 0x0004 – 1.5 |
Количество стоп-бит По умолчанию 0x0001 (1) |
25 | 0x0019 | 0x0000 – светодиоды выключены 0x0001 – светодиоды включены |
Управление индикацией. По умолчанию индикация включена |
26 | 0x001A | 0xFF60 – 0x00A0 | Датчик 1. Коэффициент коррекции в RAW-виде |
27 | 0x001B | 0xFF60 – 0x00A0 | Датчик 2. Коэффициент коррекции в RAW-виде |
28 | 0x001C | 0xFF60 – 0x00A0 | Датчик 3. Коэффициент коррекции в RAW-виде |
29 | 0x001D | 0x0001 – 0x001E (1 – 30) | Интервал внутреннего опроса датчиков |
Про то, как читать регистры modbus, я думаю, не нужно рассказывать, я уже описывал этот процесс например здесь. Оставлю только скриншот обмена данными с помощью программы Modbus Poll
Как обновить прошивку
Со временем в прошивку автором могут быть внесены изменения. Например вы сами можете стать их инициатором, написав в группу telegram @etrivia. И вам понадобиться перепрошить адаптер. В отличие от подобных китайских устройств вы таки сможете это сделать.
Для этого вам понадобится:
- USB-программатор WCH-LinkE, например тут aliexpress.ru
- IDE для программирования “MounRiver Studio“: mounriver.com/download
- файл прошивки, который лежит в “закрепе” канала @etrivia
- немного времени и терпения
Описание есть у автора продукта здесь. Но если кратко, то последовательность следующая:
1. Скачиваем студию и устанавливаем на ваш компьютер. В это время должны установиться драйвера и на программатор.
2. Подключаем программатор к адаптеру. Всего двумя проводками. А программатор – к компьютеру.
Программатор должен определиться в системе и занять какой-либо COM-порт. Номер порта можно узнать, посмотрев в диспетчере устройств.
3. Запускаем WCH-LinkUtility. Найти её можно здесь ?\MounRiver_Studio\ExTool\SWDTool\WCH-LinkUtility.exe. Интерфейс, как китайцы любят – множество кнопочек и органов управления. Чем не Боинг?
- Вначале выбираем из списка микроконтроллер ch32v003
- В поле Firmware указываем путь к распакованному файлу прошивки
- Нажимаем кнопку на панели “Connect” или в меню Target – Connect WCH-Link
- Для проверки можно запросить информацию о чипе через Query Chip Info
- Если утилита успешно достучалась до МК, последовательно выбираем команды Erase chip -> Program -> Verify -> Reset
У меня почему-то после первой прошивки адаптер как будто перестал отвечать, но после повторной попытки заработал как ни в чем не бывало. Бывает.
Выводы
Лично на мой взгляд, получился очень даже удобный продукт, с набором защиты по всем направлениям и максимумом настроек. Недостаток по сравнению с китайскими конкурентами только один – сравнительно высокая цена. Но тут следует понимать, что у китайских аналогов более массовое производство, более дешевые компоненты и экономия на всем и вся, в том числе и на надежности.
Ссылка на адаптер: etrivia.ru/goods/TE-GORYNYCH
Канал автора: dzen.ru/etrivia
Группа telegram, где вы можете задать вопросы: @etrivia
Пожалуйста, оцените статью:
Модуль, судя по платам и схеме сделан хорошо. Так же замечательно, что есть авторская поддержка.
Лично мне не совсем понятно его назначение. Ведь сама шина 1-wire позволяет подключить значительно больше, чем три датчика температуры и при использовании специальных драйверов (DS2480B) длина линии может достигать ста метров. Конечно, при этом нужно приводить в соответствие номера датчиков и их физическое расположение. Так же проблема в том, что шина не любит ответвлений и уж совсем не терпит топологии “звезда”, а здесь втыкаешь три любые датчика и они адресуются по разъёму. Вопрос в том, какой длины может быть линия до датчика в данной реализации? Какой температурный диапазон устройства?
В общем, если устройство выпускается, значит оно необходимо, особенно отечественного производства. Было бы неплохо, чтобы прошивку можно было бы передать по тому же модбасу, не открывая корпус.
Хотелось бы так же впоследствии увидеть результаты полевых испытаний.
Доброго дня!
Справедливый комментарий. Часто вопросов, конечно, нужно переадресовать автору, я лишь тестировал устройство (но сейчас оно работает на постоянной основе на улице, но в относительно герметичном корпусе). Но попробую ответить и я.
Итак…
Я понимаю, что 1Wire может работать с использованием спец.драйверов и до 100м. Но. Во-первых нужны сами драйвера. Во вторых – к этой шине, кроме собственно DS1820 и не подключить ничего. А к RS485 – полная свобода развлечений. Например в моем случае к ней подключено уже больше десятка датчиков всех мастей. Конкретно “одна из голов” горыныча проводом ~15 м считывает температуру в отстойнике канализации, а датчик уровня – уровень воды. В общем иногда гораздо проще поставить вот такой адаптер, чем покупать DS2480B и использовать лишнюю ногу микроконтроллера.
Длина провода датчика, думаю будет точно такая же как и в случае “обычного” подключения к МК, то есть 10~20м, дальше начинаются периодические “глюки”. По крайней мере у меня в теплице так. И следующим летом, вероятнее всего, прикуплю еще одного “горыныча” (и освобожу одну ногу ESP)
Остальные вопросы передам автору и отвечу позже. Либо вы сами можете их задать в группе техподдержки.
Обновление прошивки сделать по той же самой линии rs485 теоретически можно, но достаточно сложно. Многие путают применённый китайконтроллер ch32v003 с stm32f003. В китайском тоже предусмотрен бутлоадер, но на самом деле его нет. Даже специальный раздел под него есть и туда что то залито, но увы. Китайцы может когда и поправят, но когда… Можно свой написать, но оно явно того не стоит. По поводу температурного диапазона, там в конструкции только один элемент который боится низких температур, это электролитический конденсатор. По отдельному заказу можно поставить туда твердотелый. А так устройство задумано для применений в отапливаемых помещениях. Но по зиме ради интереса попробуем заморозить. Про 1wire могу сказать, что не то что 100 но был опыт и больше. А вот для rs485 километр это просто штатная возможность без всякого экстрима. Ну разумеется и возможность подключать на одну линию самые разнообразные датчики. Те же датчики ветра, влажности, всевозможные реле да что угодно вплоть до датчиков радиации 🙂
У меня ещё такой вопрос: выводы PC1 и PC2 вы оставили для будущих расширений для устройств с I2C?
Было бы совсем не плохо в качестве удлинителя I2C через 485-й.
И ещё можно предусмотреть увеличение числа 1-W устройств. Это, конечно, если есть место во флеши для дополнительных функций.
Для датчиков влажности с i2c запланировано немого другое устройство. С названием пока не определились но рабочее “Горыныч 2”. Пока думаем какой использовать корпус. Какие использовать датчики и подобное. Можете поучаствовать в обсуждении в нашем телеграм чатике. По поводу 1wire устройств, мы много лет выпускаем устройства где датчики ds18b20 соединяются в цепочки. И у большинства пользователей это ничего кроме головной боли не вызывает. Поэтому было принято решение отказаться от этой практики.