Переходник USB->RS485
Мне внезапно понадобился переходник из USB в RS485. На мое удивление, на местном радиорынке найти его я не смог, поэтому решил ваять свое. По ходу выяснилось несколько подробностей.
Сначала я думал просто взять готовый переходник USB->RS232 и прицепить к нему платку с преобразователем уровней в RS485. Не тут то было – посмотрите, с какой задержкой компьютер переключает сигнал RTS (а именно он обычно используется для переключения прием-передача):
голубой – данные, желтый – RTS.
Естественно, это никуда не годиться – почти 100мс, в то время как задержка между приемом и передачей Modbus – 2мс.
Покопавшись в интернете, нашел очень интересный способ автопереключения приема и передачи для RS485:
Используется 555 таймер в режиме ждущего мультивибратора. Когда сигнал на входе становится низким (стартовый бит), таймер запускается и переключает драйвер RS485 на передачу. Если в течении 40мкс не появится нового низкого уровня, таймер переключит драйвер на прием. А как быть с длинной передачей единиц? Все очень просто – на выходе драйвера RS485 стоят подтягивающие резисторы, которые по умолчанию держат линию в единичном состоянии.
Так к чему это я… Ах, да – в итоге я нашел оочень простое включение всеми любимой, но вечно дорогой FT232. Оказывается, у нее есть ножка которая переключается в момент фактической передачи. Работает это на отлично:
голубой – сигнал с ножки передачи, желтый – данные.
Вот – итоговая схема, перемычками P2 подключается терминатор:
Если кто захочет повторить – вот схема и плата, плата делается двусторонней, вторая сторона полностью играет роль земли:
В варианте с таймером думаю вполне можно держать передачу в течении времени передачи всего байта, на случай байта из одних единиц. Тогда в худшем случае, если последний бит передачи будет 0, драйвер 485й шины просто продержит её ещё чуть-чуть в режиме передачи, что никак не скажется на работе. Мне кажется такой вариант надежнее, чем полагаться на подтяжку.
Был у меня один раз такой глюк, программил софт, опрос промышленного модуля по rs-485. Адаптер к компу тоже был готовый, купленный. Долго пытался понять, почему у меня ответы от устройства приходят с запоротым последним байтом. Как потом выяснил, модуль ввода отпускал линию в конце передачи, если там шли единичные биты, рассчитывая на подтяжку линии, которой не было ни в нём, ни в usb-адаптере. Добавил подтяжку, всё стало хорошо, но как-то это не аккуратненько.
А помоему — аккуратно. Вообще, без подтяжки шина работать не обязана.
По спецификации драйверов rs485, поведение в диапазоне диф. сигнала +-200мВ не определено. Тоесть, шина без подтяжки шиной называться не может. Конечно я понимаю, что сейчас появились драйвреа со «смещенным центром тяжести», но ровняться всеравно приходится на старые спецификации.
Да, про 200мВ вполне верно. Также из спецификации берём: до 32 устройств, каждое по 12 кОм, параллельно. Итого 375 Ом в худшем случае. Ещё два раза по 120 Ом терминальных резисторов с каждой стороны. И подтягивающие резисторы по 560 Ом отклоняют линию уже и не так сильно, не намного то больше этих самых 200мВ. А ещё бывает и подтягивающие резисторы поменьше ставят.
Дак, отклонение на 200мВ уже хватает чтобы зафиксировать лог 1. Так-что, если стоит по 560ом, то все нормально даже при 32 устройствах.
Друге дело, как это монтажникам объяснить ))
У меня вопрос, какой софт юзается?
Для чего?
для работы с модбас, просто гипертерминал?
Не, хаченный modbus poll, ну, и терминал.
Ни как не получаешься подобрать масштаб для распечатки пдф, тот что в файле не соответствует размеру элементов. (((
да, это известный глюк альтиума. Добавил плату в нормальном масштабе к статье.
Огромное спасибо, то что надо))
А как насчет гальваноразвязки?
На длинных линиях думаю будет просто необходима.
У меня нет длинной линии. Для моих целей такого переходника более, чем достаточно.
Вместо Max485 поставить ADM2582E/ADM2587E — вот вам гальваноразвязка
Спаял переходник по этой схеме. Тока микруха max485 в дип корпусе, и линию RX притянул к питанию. В териминале на компе посылаю символ — возвращается эхо 0x00. Терминирующие джампера надеты. Это нормально? Другого утройства на rs-485 пока нету, проверить неначем.
Это нормально.
Эхо исчезнет, когда я подключу другие устройства к линии 485? или эхо отсекать програмно?
Пожди, какую именно линию RX ты притянул?
https://clip2net.com/s/1yTWg вот тут резистор R3. Подтянул RX линию микрухи ft232rl. И еще в своей схеме не использовал напругу 3.3 вольт для питанию I/O пинов этой микрухи. У вас с какой целью это было сделано?
>Подтянул RX линию микрухи ft232r
Похоже, макс при переключении в режим передатчика, выдает ноль на Rx.
>У вас с какой целью это было сделано?
Да просто скопировал кусок схемы из другого проекта.
у вас тоже ноль приходит при передаче? воткнул для интереса max481, аналогично приходит ноль.
спасибо за ответы.
У меня сейчас нет этого переходника, проверить не могу.
Для чего TxD подтянут к питанию, а CBUS2 к земле?
Для того, чтобы после включения питания и до инициализации микросхемы, выходы вели себя как вход, выдающий логическую 1 — это состояние покоя UART’а
Доброго времени суток.
Есть вопрос практического плана. Собрал преобразователь на FT232 — UART TTL. При подключении комп пишет — устройство неизвестное… Но! Если отключить и тут же воткнуть — все пашет нормально. Я так понимаю проблема с питанием, но схема передрана с даташита 1 к 1. Да и собирал уже подобное устройство. Навеса который бы потреблял что-нибудь еще кроме FT232 нет… Не сталкивался с подобным явлением? Электролит на 22 мкФ и керамика по питанию стоят.
Электролит пробовал отпаивать, ставить и больше и меньше — результаты не изменились… грешу на паленую микру…
Нет, с таким не встречался. FTDI всегда отлично работали.
Вечер добрый))
Давно тут не появлялся. Рад, что ресурс живёт и развивается))))
Как-то делал переходник из USB в RS485/RS422 на FT232RL и ADM2483. Если интересно, могу выложить схему.
Схема с гальванической развязкой.
Привет, конечно интересует. Можешь даже статью написать по этому поводу 🙂 Мои контакты тут: https://bsvi.me/about/
Попробую)
Написал «статью» (даже 2). Отправил на мыло. Не знаю как получилось, но я старался)))))
L1 — какова величина индуктивности?
Всем доброго времени. Недавно начал делать этот переходник, столкнулся с проблемой.
Подскажите пожалуйста что такое на схеме L1, и его номинал.
И еще вопросик, нужно ли в данном переходнике, что то прошивать ?
Заранее спасибо!
Спасибо нашел