Переходник USB->RS485

Опубликовано в рубрике "Инструменты", 11 марта, 2011.
Тэги: , , автор:

Мне внезапно понадобился переходник из USB в RS485. На мое удивление, на местном радиорынке найти его я не смог, поэтому решил ваять свое. По ходу выяснилось несколько подробностей.

usb_485

Сначала я думал просто взять готовый переходник USB->RS232 и прицепить к нему платку с преобразователем уровней в RS485. Не тут то было – посмотрите, с какой задержкой компьютер переключает сигнал RTS (а именно он обычно используется для переключения прием-передача):

голубой – данные, желтый – RTS.

image

Естественно, это никуда не годиться – почти 100мс, в то время как задержка между приемом и передачей Modbus – 2мс.

Покопавшись в интернете, нашел очень интересный способ автопереключения приема и передачи для RS485:

image

Используется 555 таймер в режиме ждущего мультивибратора. Когда сигнал на входе становится низким (стартовый бит), таймер запускается и переключает драйвер RS485 на передачу. Если в течении 40мкс не появится нового низкого уровня, таймер переключит драйвер на прием. А как быть с длинной передачей единиц? Все очень просто – на выходе драйвера RS485 стоят подтягивающие резисторы, которые по умолчанию держат линию в единичном состоянии.

 

Так к чему это я… Ах, да – в итоге я нашел оочень простое включение всеми любимой, но вечно дорогой FT232. Оказывается, у нее есть ножка которая переключается в момент фактической передачи. Работает это на отлично:

голубой – сигнал с ножки передачи, желтый – данные.

image

 

Вот – итоговая схема, перемычками P2 подключается терминатор:

image

Если кто захочет повторить – вот схема и плата, плата делается двусторонней, вторая сторона полностью играет роль земли:

 




Комментарии
  1. ACE написал(а) 12 марта, 2011 в 16:09

    В варианте с таймером думаю вполне можно держать передачу в течении времени передачи всего байта, на случай байта из одних единиц. Тогда в худшем случае, если последний бит передачи будет 0, драйвер 485й шины просто продержит её ещё чуть-чуть в режиме передачи, что никак не скажется на работе. Мне кажется такой вариант надежнее, чем полагаться на подтяжку.

    Был у меня один раз такой глюк, программил софт, опрос промышленного модуля по rs-485. Адаптер к компу тоже был готовый, купленный. Долго пытался понять, почему у меня ответы от устройства приходят с запоротым последним байтом. Как потом выяснил, модуль ввода отпускал линию в конце передачи, если там шли единичные биты, рассчитывая на подтяжку линии, которой не было ни в нём, ни в usb-адаптере. Добавил подтяжку, всё стало хорошо, но как-то это не аккуратненько.

    BSVi Reply:

    А помоему — аккуратно. Вообще, без подтяжки шина работать не обязана.
    По спецификации драйверов rs485, поведение в диапазоне диф. сигнала +-200мВ не определено. Тоесть, шина без подтяжки шиной называться не может. Конечно я понимаю, что сейчас появились драйвреа со «смещенным центром тяжести», но ровняться всеравно приходится на старые спецификации.

    ACE Reply:

    Да, про 200мВ вполне верно. Также из спецификации берём: до 32 устройств, каждое по 12 кОм, параллельно. Итого 375 Ом в худшем случае. Ещё два раза по 120 Ом терминальных резисторов с каждой стороны. И подтягивающие резисторы по 560 Ом отклоняют линию уже и не так сильно, не намного то больше этих самых 200мВ. А ещё бывает и подтягивающие резисторы поменьше ставят.

    BSVi Reply:

    Дак, отклонение на 200мВ уже хватает чтобы зафиксировать лог 1. Так-что, если стоит по 560ом, то все нормально даже при 32 устройствах.

    Друге дело, как это монтажникам объяснить ))

  2. callous написал(а) 13 марта, 2011 в 14:17

    У меня вопрос, какой софт юзается?

    BSVi Reply:

    Для чего?

    callous Reply:

    для работы с модбас, просто гипертерминал?

    BSVi Reply:

    Не, хаченный modbus poll, ну, и терминал.

  3. dessel написал(а) 10 июня, 2011 в 19:50

    Ни как не получаешься подобрать масштаб для распечатки пдф, тот что в файле не соответствует размеру элементов. (((

    BSVi Reply:

    да, это известный глюк альтиума. Добавил плату в нормальном масштабе к статье.

    dessel Reply:

    Огромное спасибо, то что надо))

  4. DimanVIP написал(а) 26 июня, 2011 в 22:32

    А как насчет гальваноразвязки?
    На длинных линиях думаю будет просто необходима.

    BSVi Reply:

    У меня нет длинной линии. Для моих целей такого переходника более, чем достаточно.

    juvf Reply:

    Вместо Max485 поставить ADM2582E/ADM2587E — вот вам гальваноразвязка

  5. elisey написал(а) 6 февраля, 2012 в 12:30

    Спаял переходник по этой схеме. Тока микруха max485 в дип корпусе, и линию RX притянул к питанию. В териминале на компе посылаю символ — возвращается эхо 0x00. Терминирующие джампера надеты. Это нормально? Другого утройства на rs-485 пока нету, проверить неначем.

    BSVi Reply:

    Это нормально.

    elisey Reply:

    Эхо исчезнет, когда я подключу другие устройства к линии 485? или эхо отсекать програмно?

    BSVi Reply:

    Пожди, какую именно линию RX ты притянул?

    elisey Reply:

    http://clip2net.com/s/1yTWg вот тут резистор R3. Подтянул RX линию микрухи ft232rl. И еще в своей схеме не использовал напругу 3.3 вольт для питанию I/O пинов этой микрухи. У вас с какой целью это было сделано?

    BSVi Reply:

    >Подтянул RX линию микрухи ft232r
    Похоже, макс при переключении в режим передатчика, выдает ноль на Rx.

    >У вас с какой целью это было сделано?
    Да просто скопировал кусок схемы из другого проекта.

    elisey Reply:

    у вас тоже ноль приходит при передаче? воткнул для интереса max481, аналогично приходит ноль.

    спасибо за ответы.

    BSVi Reply:

    У меня сейчас нет этого переходника, проверить не могу.

  6. Aneg написал(а) 16 апреля, 2012 в 12:27

    Для чего TxD подтянут к питанию, а CBUS2 к земле?

    BSVi Reply:

    Для того, чтобы после включения питания и до инициализации микросхемы, выходы вели себя как вход, выдающий логическую 1 — это состояние покоя UART’а

  7. MTh написал(а) 27 мая, 2012 в 17:15

    Доброго времени суток.

    Есть вопрос практического плана. Собрал преобразователь на FT232 — UART TTL. При подключении комп пишет — устройство неизвестное… Но! Если отключить и тут же воткнуть — все пашет нормально. Я так понимаю проблема с питанием, но схема передрана с даташита 1 к 1. Да и собирал уже подобное устройство. Навеса который бы потреблял что-нибудь еще кроме FT232 нет… Не сталкивался с подобным явлением? Электролит на 22 мкФ и керамика по питанию стоят.

    MTh Reply:

    Электролит пробовал отпаивать, ставить и больше и меньше — результаты не изменились… грешу на паленую микру…

    BSVi Reply:

    Нет, с таким не встречался. FTDI всегда отлично работали.

  8. Detruanto написал(а) 10 июня, 2012 в 22:00

    Вечер добрый))
    Давно тут не появлялся. Рад, что ресурс живёт и развивается))))

    Как-то делал переходник из USB в RS485/RS422 на FT232RL и ADM2483. Если интересно, могу выложить схему.

    Detruanto Reply:

    Схема с гальванической развязкой.

    BSVi Reply:

    Привет, конечно интересует. Можешь даже статью написать по этому поводу :) Мои контакты тут: http://bsvi.ru/about/

    Detruanto Reply:

    Попробую)

    Detruanto Reply:

    Написал «статью» (даже 2). Отправил на мыло. Не знаю как получилось, но я старался)))))

  9. Tmak написал(а) 30 августа, 2013 в 6:20

    L1 — какова величина индуктивности?

  10. ilyagood написал(а) 9 марта, 2014 в 19:58

    Всем доброго времени. Недавно начал делать этот переходник, столкнулся с проблемой.
    Подскажите пожалуйста что такое на схеме L1, и его номинал.
    И еще вопросик, нужно ли в данном переходнике, что то прошивать ?
    Заранее спасибо!

    ilyagood Reply:

    Спасибо нашел

Создать новую ветку комментариев


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