Как стать автором
Обновить

IoT шлюз Ethernet-RS485 на базе STM32

Время на прочтение 6 мин
Количество просмотров 26K
Всего голосов 32: ↑30 и ↓2 +28
Комментарии 71

Комментарии 71

Для полноценной работы нужны два кварца, на 8МГц и 32.768КГц


Для полноценной работы в качестве чего? Для текущей задачи — часовой кварц имхо нафиг не нужен. Я уж забыл все и могу ошибаться, но в основном часовой кварц нужен когда у нас есть всякие sleep mode, особенно deep sleep mode — можно всю периферию рубануть, включая конечно и HSE и все что от него тактируется, а оставить только таймер или прерывание, которое завязано на LSE — короче говоря, меньше наноОмпэр будет кушать. Ну и второе применение — точные часы секунда в секунду за года непрерывной работы.

В принципе, здесь даже и HSE кварц не особо нужен, UART'ы и на встройке неплохо работают, даже в большом температурном режиме, ну если не жалко — то пусть будет, конешно -)
Низкочастотный кварц я применяю в основном для вачдога. Понятно, что его можно запустить и без него. Но это шлюз и к нему я предъявляю повышенные требования, да и плату делал для себя, а не для продажи, поэтому на таких мелочах старался не экономить. :)
НЛО прилетело и опубликовало эту надпись здесь
Вачдог ничем. А вот ход часов будет поточнее. Я же в статье указывал, что постарался по максимуму вывести всю периферию, т.к. мало ли чего захочется сделать завтра.
НЛО прилетело и опубликовало эту надпись здесь
Но на конденсаторах вы сэкономили (как и на правильном подключении шилда сетевого разъема). Не знаю, какие у вас знания, но 0,1uF лучше ставить у каждой ноги питания каждой микросхемы.
НЛО прилетело и опубликовало эту надпись здесь
На МК и на W5500 у меня кондёры стоят. Нет только на драйвере RS485 и микросхеме-изоляторе. Хороший тантал с низким ESR я туда поставил, а вот эту мелочь упустил :/ Добавим!
Нет декапов на изоляторе, драйвере, памяти и датчике влажности (у него в даташите, кстати, всё написано в 10-м параграфе, да и в примере трассировки есть площадки под конденсатор). И у W5500 нет декапа на цифровом питании.
Но как всегда в таких проектах — работает и нехай. Но шилд разъема таки надо подключить куда-нибудь. Нехорошо его оставлять в воздухе.
Вот я не понимаю минусаторов в данном случае. Правда глаза режет что ли?
Если нам не нужна гальваническая развязка от линии

А если нужна гальваническая изоляция, то на какое напряжение оно рассчитано? Имеются ли на ПП соответствующие зазоры?
Так я же писал, что для полноценной защиты по желанию можно устанавливать дополнительную защитную плату, например такую — www.compel.ru/lib/83359. Первоначально я думал все эти защиты разместить на шлюзе, но потом понял, что лучше вынести отдельно. Т.к. ситуации бывают разные и например для квартиры такая защита будет излишней, а размер шлюза увеличиться при этом достаточно сильно. А вот для уличных линий защита нужна.
Ссылка на ТВU?
Гальваническая изоляция и защиты от помех с большой энергией, например микросекундные помехи, это разные вещи. Одно другим заменить нельзя.
Как правило используется и другое, чтобы соответствовать промышленным стандартам.
По даташиту TME0505S обеспечивает изоляцию до 1000В, ISO7321 — 3000В.
Но зазоры на плате между изолированными частями такое напряжение не обеспечивают. Вот что говорят по этому поводу в даташите на изолятор:
image
Это да. Но если делать такие зазоры, то теряется универсальность платы. Т.е. сейчас если нет необходимости в изоляции, то достаточно прилепить 4 «сопли» на плате и всё. А если делать большие зазоры, то необходимы перемычки. Это осознанный компромисс. Потому я и поставил на плате защитный диод SM712, ну и TBU никто не отменял.
Как я говорил ранее одно другого не заменяет, так как гальваническая изоляция — это требования по безопасности, а TBU, TVS, газоразрядники — это борьба с помехами. Гальваническая изоляция, TBU, TVS пополняют друг друга, но не заменяют.
Требования по гальванической изоляции предъявляются не только к компонентам, но и к плате, и к элементам конструкции. Поэтому без зазора в плате не обойтись. Кстати и зазора нет под разъёмом интерфейса Ethernet.
Терминатор R2 лучше коммутировать к шине через jumper. Терминаторы нужны только на крайних устройствах.
Ок, про зазоры я тогда ещё покумекаю.
Про терминатор уже было тут.
Дело ваше.

А какое максимальное количество портов rs485 можно организовать? И вопрос в драйвере для работы под виндой. Возможно ли?

Это как — какое количество? На данном шлюзе разведён только один. Если речь про stm32f103cbt6, то там можно три. И о каком драйвере речь, если шлюз заканчивается ethernet портом. До него надо по TCP/UDP достукиваться, а драйвера там нужны только для сетевой карты.
про драйвер — Есть такие преобразователи — rs485/ethernet на базе модулей tibbo — к ним поставляются драйвера, которые эмулируют физический ком порт, а сами стучат в ethernet по сети…
Они же предлагают решения, на 4 rs485/ethernet. Вот захотелось узнать про Ваш модуль…
У меня шлюз делался под Mysensors, поэтому только один порт.
Для вашего случая можно прикинутся 4х портовой MOXOй и работать через ее родной драйвер. (можно реализовать даже на данной плате как мне кажется, если wiznet умеет в неблокирующиеся сокеты для TCP)
А зачем, для универсальности?
Для шлюза Mysensors нужен только один, он реализован.
Это если реализовывать задачу проброса UART в Ethernet, то да, порта 3 наверное можно реализовать.
Комментарий для alex_kag был
W5500 вещь хорошая, делал нечто подобное на ардуинке, (организовав websocket-сервер на ардуинке) с отображением в реальном времени данных в браузере по такой схеме браузер — сервер(java) — ардуинка. 32 кбайт буферной памяти RAM позволяло на 15 сек (больше не пробовал) выдёргивать сетевой кабель без потери данных (данные считывались с лазерного дальномера примерно 10 раз в секунду и отправлялись java-серверу)

А какой лазерный дальномер использовали?

В качестве драйвера RS485 был выбран чип — MAX13488EESA+T, в том числе и в связи с наличием у него режима автоматического выбора направления приёма/передачи.
Для дома наверное норм, но если линия длинная — то это вроде как не совсем полноценный драйвер. Лучше поставить «честный» и дергать TX/RX
Да, видел я некоторые обсуждения. Но честно говоря так и не понял чем он неполноценен. Для дома я думаю ставить по шлюзу на этаж, а улица у меня метров 200 максимум будет. Если вдруг на таком расстоянии вылезут косяки, то поправить плату недолго.
Драйвер полноценный, все с ним хорошо. Единственное что для корректной работы функции автоопределения резисторы растяжки линии необходимы. И если у вас вдруг будет слышно локальное эхо, и вы захотите от него избавиться, то нужно будет подтянуть выход RO вверх.
Я с этим драйвером работал и с этой проблемой столкнулся. Про это есть у меня в статье habr.com/ru/post/486258
Спасибо, учту. В принципе у меня и сейчас эти две дороги соседние, т.е. резистор можно прилепить. Но площадку под него добавлю.
А каким номиналом подтягивать? Или в каких пределах?

Неужели f103 + w5500 дешевле, чем f107 и какой-то phy?

Сложно сказать, это кому что больше нравиться. Но в моём случае это не лучший вариант, т.к. шлюз для Mysensors, а впиливать туда ещё целую Ethernet библиотеку это имхо значит совершать лишние телодвижения и снижать стабильность системы.
Когда-то делал именно на f107 шлюз для modbus — вроде существенных проблем не было. Правда, позже это все переехало на переходник USB-RS-485 да так и живет уже лет 12.
Кстати, для тех кто в теме, наверное очевидно, что нужно заливать в эту плату, но в тексте ссылки на софт вроде нет.
Оба-на! Вот оно. Только вот не отключаемый терминатор это не есть хорошо. Принудительную подтяжку ставлю не у каждого прибора и только на длинных линиях.
RFC2217 поддерживается.
P.S.
Да, да. Сейчас статью почитаю
Вот, вот. Если сразу почитать, то многие вопросы отпадут. :) Этот резистор можно ставить если это конец линии и ничего меняться не будет, в противном случае:

Терминирующий резистор на 120Ом устанавливается прямо в разъём RS485, так его проще переносить от устройства к устройству при наращивании линии.
По схеме такого не скажешь. На рендере [R2] его то же впаивать надо. Ладно, разбежались.
Про RFC2217 — это, кстати, вопрос был:)
Залез сейчас на github, а в репозитории то прошивки нет :(…
Какой прошивки, для чего? Про программную часть речи не шло. Да и прошивки в этом случае не лучший вариант, ибо у всех разные ip адреса.
хм, так прошивка — это же самое интересное :)
выглядит отлично, и хотя каждый автор утверждает что все легко и просто для повторения, подобных проектов безсчетное множество и продолжают плодится.

на плате, для правильности, стоило бы оставить изоляционный зазор 1мм вокруг драйвера до опторазвязки.
а вместо перемычек зачастую удобнее паять резистор 1206 0Ом.
Так у каждого свои требования и хотелки. :)
И если не сильно затруднит, то можно хотя бы 5 ссылок на подобные проекты (STM32+Ethernet+RS485)?
А насчёт зазоров уже обсуждали.
бессчётное, блин! бессчётное!
несомненно вы правы, непонятно за что минусуют

Пропущено соединение "GND isolate" и "RS485_ground".

А зачем их соединять?
Для уравновешивания потенциалов «земель» между двумя устройствами(приемопередатчиками).

Точнее — между двумя изолированными частями двух устройств. Т.е. для двух устройств будет 3 земли — 2 земли у 2 устройств и одна земля у их общего интерфейса.
А нужно это для того, что-бы сигналы на входах приемников не выходили за допустимый синфазный диапазон (типично — от минус 7 до 12 вольт).
Ну и защитный диод не будет работать как следует без этого соединения.

Нет. У меня используется библиотека Mysensors, в ней уже есть поддержка этого чипа.
Спасибо. А на неё можно взглянуть?
Конечно. Основной репозиторий тут. Основной сайт по непонятным причинам в России блочится, доступен его форум. Есть русскоязычные ресурсы, это группа в телеграмм и сайт.
Можете конкретнее указать где в основном репозитории лежит всё что касается именно работы с модулем W5500.
Большое спасибо.
НЛО прилетело и опубликовало эту надпись здесь
На борту будет только MAC, PHY обойдётся ещё в 1-2 доллара. Затем нужно будет притащить в прошивку TCP/IP стек. В случае с W5500 можно просто забирать данные из буфера. Да, менее фичасто, но для данной задачи — вполне достаточно. А при желании можно обойтись восьмибитником.
MSP432 как вариант. Там всё в чипе.
lwIP для STM32 из куба сгенерировать можно.
8-битник в наше-то время?
НЛО прилетело и опубликовало эту надпись здесь
Вопрос не совсем по теме, но… Очень созвучен :)
А как на счет шлюза gsm-RS485? Просто совсем не понимаю, как такое реализуется.
Берем sim900. Загоняем его в режим сервера и просто прозрачно передаем данные, как и в этом проекте. Но..., а как отслеживать, что связь не упала, и что нам не надо рестартануть модем? Как такое реализуется?
НЛО прилетело и опубликовало эту надпись здесь

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


  1. Инициализация модема в режим tcp transperent server. Чтобы все данные, которые будут приходить на модем извне кидались сразу на serial port.
  2. Собираем данные пришедшие на порт, который смотрит в сторону gsm, и передаем их в порт, который смотрит в сторону обслуживаемого устройства. Обратно — точно также. (Собственно, ничем не отличается от топикового устройства). Основной вопрос в следующем: запустили модем в режим сервера. Ждем байтики… и тут бац, связь прервалась. Модем требует переинициализации. Как отследить это? Получается, что я должен не прозрачно перекидывать данные, а предварительно проверять их на сообщения от модема?
НЛО прилетело и опубликовало эту надпись здесь
шлюз сам будет выступать «Сервером».
Инициатор соединения — серверный софт, который должен опрашивать устройство за шлюзом. Опять, таки, какой пинг в прозрачном режиме?
Опросили оборудование — не получили ответ несколько раз — дропнули соединение.
Если на стороне железки — то у модема есть нога состояния подключения к сети, можно ее отслеживать и ребутать модем при пропадании связи.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории