Данный пост посвящён DIY разработке Ethernet-RS485 шлюза. Цель данного шлюза – обеспечение централизованного управления нодами Mysensors со стороны контроллера умного дома.
Недавно меня таки достали провода, дюпоны, навесная пайка и т.п. и было принято давно оттягиваемое решение — сделать свои платы с нуля, т.е. всё по серьёзному. :)
Сказано — сделано!
Первым делом была разработана и нарисована принципиальная схема шлюза, в которой я постарался учесть все свои хотелки и пожелания. Далее произведена компоновка и подгонка платы под требуемые размеры (50x50мм). И последний этап, это заказ плат на производстве. Я заказывал на фабрике JLCPCB, 5 плат — 2$ + доставка.
Данный шлюз построен на базе МК
STM32F103CB(8)T6. В качестве Ethernet чипа выступает достаточно известная микросхема от WIZnet —
W5500. Транспортом данного шлюза в сети Mysensors является проводной интерфейс RS485. В качестве драйвера RS485 был выбран чип —
MAX13488EESA+T, в том числе и в связи с наличием у него режима автоматического выбора направления приёма/передачи.
Итак пройдёмся поподробнее по основным частям шлюза.
Сердцем шлюза является МК STM32F103CBT6 в корпусе 48LQFN. МК построен на ядре Cortex-M3, имеет 128Кб встроенной флэш памяти и 20Кб ОЗУ. Штатная частота МК — 72МГц, но если не использовать встроенный USB порт, то частоту можно разогнать и до 128МГц, он на ней вполне стабильно работает. МК питается от 3.3В. Для полноценной работы нужны два кварца, на 8МГц и 32.768КГц. Для программирования и отладки имеется интерфейс SWD. МК можно заменить и на STM32F103C8T6, он на данный момент по памяти вполне проходит.
Ethernet чип W5500. Внутри имеет ядро Cortex M0, для связи с внешним миром присутствует порт SPI (скорость до 80 МГц). При скорости 100Mbps Full Link имеет потребление в 132мА. Есть поддержка Wake on LAN, для обозначения своего режима умеет управлять 4 светодиодами 4 (SPD / DUP / ACT / Link). В наличии 32 кбайт буферной памяти RAM для обеспечения процесса передачи TCP/IP пакетов, аппаратно обеспечивает до 8 независимых TCP/UDP сокетов (канальных соединений). Аппаратно поддерживает следующие коммутационные протоколы обработки проводного TCP/IP стека: TCP, UDP, MAC, ICMP, IPv4, ARP, IGMP, PPPoE. Диапазон рабочих температур -40...85°C. Напряжение питания — 3.3В.
И наконец драйвер RS485 — MAX13488EESA+T. Микросхема в корпусе SOIC-8 150mil. Скорость передачи данных до 16 Mb/s. Рабочее напряжение — 5В, потребляемый ток — 4.5 мA. Позволяет подключать до 128 узлов на одну линию RS485. Из главных особенностей это возможность включения режима автоматического определения направления приёма/передачи, т.е. данный драйвер может подключаться напрямую к порту UART и всё! Никаких лишних телодвижений совершать не надо.
Принципиальная схема шлюза разбита на три части:
Схема RS485 части шлюза.
Схема МК и его периферии.
Схема части Ethernet.
Т.к. шлюз в сети Mysensors является единой точкой отказа, то к нему предъявляются повышенные требования по надёжности и безопасности. И в первую очередь он должен быть гальванически развязан от самой линии RS485. Для гальванической развязки линии данных была установлена микросхема — цифровой изолятор от TEXAS INSTRUMENTS — ISO7321CDR. Для развязки по питанию был использован изолированный DC/DC преобразователь от Traco Power – TME0505S. Защита драйвера RS485 от высоковольтных импульсов при необходимости реализовывается отдельной платой. Единственно, в виду своей компактности был оставлен защитный диод (подавитель ЭСР) VD1.
В результате многочисленных оптимизаций и передвижек, был получен следующий результат:
Рендеринг шлюза
Верхний слой.
Нижний слой.
3D — вид сверху.
3D — вид снизу.
Теперь поподробнее о схеме. Для функционирования шлюза, от МК нам необходим один порт USART и один порт SPI. МК STM32F103CBT6 имеет 3 порта USART с максимальной скоростью до 4.5Mbits/s. И два SPI порта. В результате компромисса (компоновка деталей на плате), для взаимодействия с драйвером RS485 был выбран порт USART1 (ноги PB6, PB7 с ремапом). А для взаимодействия с W5500 — порт SPI1 (ноги PA4-7).
Подключение Ethernet контроллера W5500 выполнено в соответствии с рекомендациями производителя. Единственное, что может вызвать некоторые сложности, это высокоточные резисторы, которых может не оказаться в наличии в местном радиоларьке. Но на сайте lcsc.com и ему подобных с данными резисторами всё в порядке. Для Ethernet разъёма был выбран широко распространённый бюджетный модуль — HR911105A, имеющий на борту трансформатор и два светодиода.
Самое сложное в данной плате, это запаять две 48-ножечные lqfp микросхемы. Если с этим справились, то дальнейшая сборка не представляет никаких сложностей. Настроек плата не требует и сразу после сборки готова к работе.
Хоть это и шлюз, но чтобы не пропадать добру на плате были разведены практически все пины МК, разведён ресет, и два светодиода (один из них RGB). Сделаны две площадки под микросхемы, одна под I2C EEPROM и вторая для цифрового термометра/измерителя влажности HDC1080. Термометр конечно будет измерять общую температуру по больнице, так как он установлен рядом с двумя чипами, но мало ли, вдруг кому понадобиться.
В качестве разъёма для RS485 был выбран, трёх пиновый зелёный разъём DB2EV-5.08-3P, с шагом 5.08мм. Он конечно великоват, но удобен в использовании. Остальные разъёмы за исключение microUSB выбраны — 1.25мм JST, они достаточно компактны и хорошо фиксируются.
Фото собранного шлюза
Вид сверху
Вид снизу
Для питания платы необходимы 5В, которые можно подать через разъём microUSB, либо через разъём Power. 5В питание необходимо драйверу RS485, микросхеме гальванической развязки и DC/DC преобразователю. Т.к. МК STM32 и Ethernet чип требуют питания 3.3В, на плате предусмотрен LDO регулятор — на базе микросхемы LDL1117S33R. На линиях питания 5 и 3.3В установлены танталовые и керамические конденсаторы. Большинство используемых смд компонентов — 0603.
Т.к. у всех всегда ситуации и подходы бывают разные, то некоторые вещи оставлены на откуп пользователю. Если нам не нужна гальваническая развязка от линии RS485, то мы можем не устанавливать изолирующий DC/DC преобразователь — D1, микросхему опторазвязки — D3. В таком случае надо напаять «соплей» в предназначенные для этого места на плате.
По необходимости устанавливаем резисторы R31, R32 и R2, защитный диод VD3.
При первом включении на столе, шлюз нормально видел ноду, прошивки в неё залетали за 30 секунд, всё было хорошо. И да, планируемая мной скорость сети RS485 — 0.5-1Mbit. В доме будет 1Mbit, на улице 0.5Mbit. Так вот когда я поставил шлюз на его рабочее место в серверную, а ноду подключил к устройству на улице, я вполне ожидаемо столкнулся с тем, что они друг друга не увидели. С помощью осциллографа я мог наблюдать весьма удручающую картину линии RS485, но пара подтягивающих резисторов R31 и R32 быстро решила данную проблему. На фото шлюза, данные резисторы подпаяны проводками. Дело в том, что изначально я не планировал ставить их на шлюз, т.к. они нужны только на концах линии RS485, а шлюз у меня планировался в середине. Но когда подключена только одна нода, они всё же нужны и поэтому они были добавлены во второй ревизии. Терминирующий резистор на 120Ом устанавливается прямо в разъём RS485, так его проще переносить от устройства к устройству при наращивании линии.
Как это ни удивительно, но плата первой ревизии показала полную работоспособность и стабильную работу. За несколько месяцев не произошло ни одного зависания. Но с другой стороны ещё не было и гроз, а данный шлюз у меня смотрит как-раз на улицу.
Но — поживём увидим! :)
Таким образом была выполнена основная задача — создать компактный, высокоскоростной и надёжный Ethernet-RS485 шлюз. Чтобы не расплываться мыслями по древу, статья сосредоточена только на железной части, а программная часть сознательно вынесена за скобки.
Репозиторий с проектом шлюза.
С радостью отвечу на конструктивные вопросы.
Для интересующихся постройкой УД на базе Mysensors существует русскоязычная группа в телеграмм и русскоязычный сайт.
P.S. Цель данной статьи показать, что нет ничего сложного в разработке и создании своих собственных плат и готовых устройств. Главное ставить цель и идти к ней!
Очень не хватает описания назначения и возможностей устройства «на пальцах» для непосвященных в начале статьи.
2. Т.к. это шлюз, то ему не нужно никакого питания кроме 5В. Т.к. он стоит либо в серверной, либо в аналогичном месте, т.е. там где есть стабильное гарантированное питание.
А вот для нод, там да, сделан понижающий DC/DC 12-60В -> 5В.
Если вопрос был про перемычки из МГТФ, то в статье про это написано:
Т.е. при установке шлюза в центр линии они не нужны, а нужны только на самом первом этапе, при работе с одной нодой. Хотя если сразу ставить две ноды по краям линии, то и в начале не нужны.
Но зачем нам внимательно читать?! :/
Приболел, вот и показалось что речь о другом, у Вас так не бывает?
Есть ограниченное число аналоговых ног, надо снимать аналоговые показания с термисторов которых больше чем ног. Как быть? чем дешевле коммутировать датчики на ногу? дешевле во всех смыслах.
Таким образом, ценность статьи стремится к нулю, если не считать ссылки на телеграмм-канал в комментариях. Ну да — " покупайте наших слонов"… ой, извините — «идите на наш канал».
И когда не неё напаяют детали, она
Не выполняет.
Никакой.
Работы.
Без программы это ноль. Да дорогой, да красивый, но — ноль. Да, работает стабилизатор напряжения… и… и всё.
Ваша демагогия мне очень напоминает американца из фильма «Начальник Чукотки», который вместо граммофона продавал чукче только трубу от него.
навязчивая.
И дать ссылку прямо в статье на нужный гит и проект религия не позволила?
а можно в поиске вбить — mysensors github
:)))))))
Но я был послан куда подальше. Мол, это норма, так и должно быть.
Вспомнилось выступление Жванецкого:
Стиль спора
Хватит спорить о вариантах зернопогрузчика. Долой диспуты вокруг технических вопросов.
Мы овладеваем более высоким стилем спора. Спор без фактов. Спор на темпераменте. Спор, переходящий от голословного утверждения на личность партнера.
Что может говорить хромой об искусстве Герберта фон Караяна? Если ему сразу заявить, что он хромой, он признает себя побежденным.
О чем может спорить человек, который не поменял паспорт? Какие взгляды на архитектуру может высказать мужчина без прописки? Пойманный с поличным, он сознается и признает себя побежденным.
И вообще, разве нас может интересовать мнение человека лысого, с таким носом? Пусть сначала исправит нос, отрастит волосы, а потом и выскажется.
Поведение в споре должно быть простым: не слушать собеседника, а разглядывать его или напевать, глядя в глаза. В самый острый момент попросить документ, сверить прописку, попросить характеристику с места работы, легко перейти на «ты», сказать: «А вот это не твоего собачего ума дело», и ваш партнер смягчится, как ошпаренный.
В наше время, когда уничтожают вредных насекомых, стерилизуя самцов, мы должны поднять уровень спора до абстрактной высоты. Давайте рассуждать о крахе и подъеме Голливуда, не видя ни одного фильма. Давайте сталкивать философов, не читая их работ. Давайте спорить о вкусе устриц и кокосовых орехов с теми, кто их ел, до хрипоты, до драки, воспринимая вкус еды на слух, цвет на зуб, вонь на глаз, представляя себе фильм по названию, живопись по фамилии, страну по «Клубу кинопутешествий», остроту мнений по хрестоматии.
Выводя продукцию на уровень мировых стандартов, которых никто не видел, мы до предела разовьем все семь чувств плюс интуицию, которая с успехом заменяет информацию. С чем и приходится себя поздравить. Прошу к столу — вскипело! ©
Логичней на ЖЖ выкладывать: там никакой нехороший человек не прибежит и в топку содержимое не отправит!
Вот я когда-то писал на ЖЖ и копии выкладывал на быдлохабру. Но быстро понял, что там контингент — по большей части то самое быдло. И очень мало реальных людей, которые что-то нормальное пишут и оставляют дельные комментарии (пусть даже с матом).
Например, установить лимит количества сообщений в чужих топиках, равный количеству своих обзоров, помноженный на 10.
В своих топиках — безлимит по ответам.
И все тролли отвалились бы автоматически.
Народ то веселиться, чего ещё надо?!
А мы будем, как голуби, отмечать их обзоры. )))
Народ поворчал, но ничего, всё улеглось.
Теперь все замечательно живут.
Кстати, хейтеры и минусаторы негодуют. Только ответить ничего не могут, т.к. стесняются засветиться.
«О чем может спорить человек, который не поменял паспорт? Какие взгляды на архитектуру может высказать мужчина без прописки? Пойманный с поличным, он сознается и признает себя побежденным.» — от этого ведь не так далеко до «Какие взгляды на вопросы электроники может иметь человек, не написавший ни одного обзора?»
Но на Вашем гитхабе ссылка только на него. Поэтому фраза про «ни слова» не принимается. :))))))))
А за помощь спасибо.
Действительно перепутал.
Вечер воскресенья :)))
И очень в тему. Сейчас строю дом и тоже проектирую систему умный дом.
Пришел к аналогичному решению.
Но планирую на плате установить
* 2 реле для управления сервоприводами,
* 1 аналоговый вход для усилителя микрофона
* интерфейс к dali-bus
* вывести 2 цифровых входа для считывания цифровых датчиков:
— герконов,
— pir сенсора,
— microwawe сенсора,
Пока собрал часть на макетке и все в стадии отладки.
Спасибо за то что делитесь опытом.
В чем рисовали, трассировали создавали gerber?
Это шлюз, он только собирает данные с нод и транслирует всё это в контроллер и наоборот.
А вот в нодах, там да, к ним много чего можно подключить. Попозже постараюсь статью про ноду написать, там поинтереснее.
И да, разъёмы тоже есть, но это если надо что-то ещё подключить.
А, вижу, логины одинаковые и здесь, и там. Видимо, один и тот же человек. Но зачем размножать — не понимаю. Тогда уж разместил бы в ЖЖ оригинал, а на всякие хабры копировал бы оттуда, чтобы хоть где-то можно было нормально обсудить!
P.S. Первый коммент на быдлохабре: «ТС, на кой черт тебе часовой кварц?». Ответ просто убил: «для запуска вотчдога!».
Я под столом!!!
Впервые узнал про микросхему MAX13488 с автоматическим управлением направлением передачи. Интересно.
Это не совсем шлюз… Хотя… В общем контроллер управления сауной. Синие коннекторы — CAN шина.
На ней же модуль реле + модуль температуры/влажности.
То есть шина из трёх блоков и благодаря esp-01 всё это хозяйство коннектится к локалке/инету. Так что наверное все же шлюз :)
Вкратце, на борту много вкусностей:
— основной МК PIC18F46K80 64МГц
— часики DS3231 i2c с батарейкой
— ферритовая память FM24C04 i2c с божественным количеством циклов перезаписи и временем записи
— MCP2551 в виде передатчика CAN
— PIC32MX170F256B 50МГц в виде VGA-адаптера к матрице IPS 8" (видеокарта в общем) 640x480 1bps
— 12 GPIO под тач-кнопки
— 2 хороших DC-DC на MP1584 5.0в и 3.3в
— 2 силовых транзисторных выхода, один подает питание на матрицу
— пищалка
В общем хобби у меня такое. Запридумать, зарисовать, запаять, запрограммить.
Тут и так пакетов в секунду можно протолкнуть столько, что не успеешь обработать.
Я использую 250кбит/с — длина соответственно до 250м, мне хватает для любой разработки.
Жаль только, у STM32F0 нет такого ☹
AMS1117-3.3 экономичнее. Не?
Линейные стабилизаторы ну не люблю. Вот прям выворачивает от их не фен-шуйности. Руки потом тщательно мою после них.
Кстати, если нужен достойный питальник — HX1314G. Обвязки поменьше, защиты все есть.
Сказка а не микросхема.
Для местного питания цифры самое то.
Уже в каждом обзоре DIY находится троль, который напишет «так интересно, но я ничего не понял» (и фото тупой мордой приаттачит). Всё, успех троллю гарантирован.
По-моему, что-то не сходится при такой точке зрения ;)))
у каждого двадцатилетнего руководителя крупной компании 30 лет стажа в разработке.
Нельзя писать как сильно ты устал делая эту железку, потому что они там по 10шт таких в час рисуют и паяют.
А потом поставить кикад и начать что-нибудь для себя рисовать. ЛУТом попробовать платы делать, убедиться, что фигня получается, перейти на фоторезист. А когда надоест переходные отверстия паять, заказывать у китайцев (правда, тут тоже подумаешь, что проще: ждать плату прототипа 2-3 месяца, либо же за 2-3 дня сделать ее самому).
Кстати, параллельно с трассировкой платы-прототипа нужно активно пользоваться даташитом и RM на микроконтроллер, т.к. неоднократно возникает необходимость перебросить что-то с одних ног на другие — для простоты трассировки и вообще возможности впихнуть все на два слоя. Я вот последний раз рисовал контроллер шагового двигателя, так SPI для работы с драйвером, а также ШИМ-выход таймера для генерации CLK-импульсов раза четыре переносил на другие ноги… Благо, с GPIO для ногодрыга все намного проще (разве что иной раз нужны 5v-tolerant).
А ведь в стм32 уже давно завезли эзернет. Но надо всё равно лепить костыли в виде визнета. Просто потому что ардуинщики наклепали библиотек.
И толку с этого эзернета, если с ним можно только напрямую работать? Даже элементарные udp самому писать придется…
И не надо мне про всякие жиробасы вроде lwip говорить!!! Не годится оно.
Вся жиробасность в lwIP нормально регулируется настройками. Можно что угодно подрезать/отключить. Портируется на нужную архитектуру быстро. Качественно и надежно сделано (код плотно анализировал, т.к. не раз его портировал под разные архитектуры).
Wiznet конечно сейчас сильно лучше, чем во времена 3100 (тогда просто шляпа по глюкам была), но все равно медленное и глюковатое поделие. И действительно выживающее за счет ардуинщиков и прочих 8-битников.
Какой смысл использования связки TME0505S + ISO7321CDR+MAX13488E +T вместо одного ADM2587? Скорость?
Неужто такие большие прошивки?
Всё же это DIY разработка для дома :)
И накой там нужен вырез?
Девайс не предназначен для сетей высокого напряжения, и изолятор там не для безопасности, а для устранения помех в интерфейсе RS485, вызванных разностью потенциалов земли у разнесённых в пространстве устройств.
Кстати, такое же автоматическое управление направлением передачи делается для любого приемопередатчика RS485 на 1 инверторе (74HC04), RC цепочке и диоде.
Хотя сейчас уже периодически задумываюсь о CAN шине. CAN FD очень интересен, но линейка F1 её не поддерживает. :(
с виду очень напоминают описываеый здесь шлюз
www.ldm-systems.ru/catalog/urob
на выбор — со встроенным сетевым контролером и с отдельным
can тоже вроде можно допилить в них.
железо готовое но софта нет так что радости от програмисткого творчества можно поиметь…