Долго искал в Интернете схему, связи компьютера с микроконтроллёром, работающую в двунаправленном режиме по интерфейсу RS485.
Ссылок много, но на них крутятся 3 – 4 одинаковые схемы, по тем или иным причинам меня не устраивающие.
Тимофей Носов, на форуме предложил схему со своего сайта. Может быть она и достойная, но, в ней применяются редко появляющиеся в продаже оптопары.
Долго искал в Интернете схему, связи компьютера с микроконтроллёром, работающую в двунаправленном режиме по интерфейсу RS485.
Ссылок много, но на них крутятся 3 – 4 одинаковые схемы, по тем или иным причинам меня не устраивающие.
Тимофей Носов, на форуме предложил схему со своего сайта. Может быть она и достойная, но, в ней применяются редко появляющиеся в продаже оптопары.
Я зашёл в «ЧИП и ДИП», там сказали, что одна оптопара была в наличии 3 года назад, а другой, вообще никогда не было.
Поэтому пришёл к выводу, что надо придумать, что-то своё.
Немного теории, и информации о применяемых микросхемах.
рисунок MAX232 взят с сайта prog-leon.narod.ru,
описание интерфейса RS485 взято с сайта mayak-bit.narod.ru
Микросхема MAX232, представляет собой четырёх канальный преобразователь уровня RS232 TTЛ.
Два канала, преобразуют ТТЛ-уровни в RS232-уровни, и два канала, преобразуют RS232 в ТТЛ.
Сеть, построенная на интерфейсе RS-485, представляет собой приемопередатчики, соединенные при помощи витой пары — двух скрученных проводов.
В основе интерфейса RS-485 лежит принцип дифференциальной (балансной) передачи данных.
Суть его заключается в передаче одного сигнала по двум проводам.
Причем по одному проводу (условно A) идет оригинальный сигнал, а по другому (условно B) — его инверсная копия.
Другими словами, если на одном проводе «1», то на другом «0» и наоборот.
Таким образом, между двумя проводами витой пары всегда есть разность потенциалов: при «1» она положительна, при «0» — отрицательна.
Именно этой разностью потенциалов и передается сигнал. Такой способ передачи обеспечивает высокую устойчивость к синфазной помехе.
Синфазной называют помеху, действующую на оба провода линии одинаково. К примеру, электромагнитная волна, проходя через участок линии связи, наводит в обоих проводах потенциал.
Если сигнал передается потенциалом в одном проводе относительно общего, как в RS-232, то наводка на этот провод может исказить сигнал относительно хорошо поглощающего наводки общего («земли»).
Кроме того, на сопротивлении длинного общего провода будет падать разность потенциалов земель — дополнительный источник искажений.
А при дифференциальной передаче искажения не происходит.
В самом деле, если два провода пролегают близко друг к другу, да еще перевиты, то наводка на оба провода одинакова.
Потенциал в обоих одинаково нагруженных проводах изменяется одинаково, при этом информативная разность потенциалов остается без изменений.
RS-485 — полудуплексный интерфейс.
Прием и передача идут по одной паре проводов с разделением по времени.
В сети может быть много передатчиков, так как они, могут отключаться в режиме приема.
Микросхема MAX485
Номера и обозначения выводов
(1) — RO (receiver output) — цифровой выход приемника;
(2) — RE (receiver enable) — разрешение работы приемника;
(3) — DE (driver enable) — разрешение работы передатчика;
(4) — DI (driver input) — цифровой вход передатчика;
(5) – GND
(6) — A — прямой дифференциальный вход/выход;
(7) — B — инверсный дифференциальный вход/выход;
(8) — + питания
D (driver) – передатчик, R (receiver) – приемник.
Переключение микросхемы на приём и передачу, осуществляется подачей на выводы
RE и DE уровней 0 и 1, следующим образом:
RE = 1 – приём запрещён
RE = 0 – приём разрешён
DE = 1 – передача разрешена
DE = 0 – передача запрещена.
Если соединить выводы
Компьютер передаёт данные микроконтроллёру во много раз медленнее чем, микроконтроллёр компьютеру.
В моём случае, длительность передаваемых байтов данных и пауз между ними, при передаче КОМП — > PIC ,была в четыре раза больше, чем при передаче PIC — > КОМП.
Суть в следующем.
Компьютер, каждые две секунды, отсылает одному из нескольких PIC–ов (каждый имеет свой индификационный номер) пачку из пяти байт.
В ответ, PIC должен выдать программе пять байт информации.
Смотрю осциллографом – PIC данные принимает и передаёт.
А программа на компьютере пишет – НЕТ СВЯЗИ.
Для отлаживания процедуры приёма-передачи установил на компьютер программу COM Port Toolkit.
С её помощью я передавал с компьютера PIC–у те же самые пять байт запроса. Но в ответ от PIC-a компьютеру приходило только три байта.
Два байта, где-то терялись.
Поэтому и НЕТ СВЯЗИ.
Переключение с приёма на передачу и обратно, со стороны PIC-a, производится отдельно выделенным для этого портом RC4.
После передачи всех байтов информации PIC, на своей стороне меняет уровень на RC4, тем самым, переводя микросхему МАX485 на приём.
Оказалось, что два байта терялись из-за преждевременного переключения МАX485 на приём.
Дело в том, что модуль USART в микроконтроллере реализован аппаратно и работает сам по себе независимо от выполнения основной программы. Программа лишь управляет работой этого модуля.
Запись данных в регистр TXREG не означает, что эти данные мгновенно будут переданы. По даташиту поднятие флага TXIF означает лишь то, что данные считались из регистра TXREG и записались в сдвиговый регистр
Если, сразу после записи очередного байта в регистр TXREG, перевести MAX485 на приём то ни этот байт, ни предшествующий ему (находящийся в это время в сдвиговом регистре TSR не будут переданы. Модулем USART они естественно выпихнутся на передачу, но приёмо-передатчик то ведь уже переключен на приём.
После ввода программной задержки, между записью последнего байта в TXREG , и сменой уровня на RC4, всё пришло в норму.
Со стороны компьютера, переключение с приёма на передачу и обратно, производится с помощью транзистора, включённого в цепь передачи данных преобразованных в ТТЛ-уровни.
Данные есть – сигнал на передачу. Данных нет – сигнал на приём.
Так как компьютер затягивает длительность посылок и пауз, то МАХ485 успевает, во время переключится.
Конденсатор С1, сглаживает импульсы на базе транзистора, тем самым надёжно открывая его. Без него, связь неустойчивая.
Схема, работает и без рекомендуемого, третьего общего провода.
Но на большие расстояния, всё же нужно его использовать, и установить на концах витой пары защитные стабилитроны.
В случае, необходимости согласования сопротивления витой пары с входом/выходом МАХ485, предусмотрены перемычки.
С их помощью, можно подключить параллельно витой паре согласующие резисторы сопротивлением 120 Ом.
Ссылка для скачивания доступна только авторизованным пользователям сайта !
chipmk.ru
Корпус | SO-8 SO8-150-1.27 | |
---|---|---|
Поддерживаемый протокол | ||
Поддерживаемые режимы работы | ||
Количество передатчиков | ||
Количество приёмников | ||
Максимальная скорость передачи данных | ||
Нагрузочная способность (узлов) | ||
Напряжение питания | ||
Номинальный ток потребления | ||
ESD защита | ||
Отказобезопасность |
Нашли ошибку? Выделите её курсором и нажмите CTRL + ENTER
www.compel.ru
|
|
Ссылка на страницу (HTML): 1 2 3 4 5 6 |
Номер в каталоге | Описание (Функция) | производитель | |
MAX485CPA | Low-Power, Slew-Rate-Limited RS-485/RS-422 Transceivers | Tiger Electronic | |
ADM3493 | 3.3 V Slew Rate Limited, Half Duplex RS-485/RS-422 Transceiver | Analog Devices | |
3.3V-Powered, ±15kV ESD-Protected, 12Mbps and Slew-Rate-Limited True RS- 485/RS-422 Transceivers | Maxim Integrated | ||
ADM383 | 5 V Low Power, Slew-Rate Limited RS-485/RS-422 Transceiver | Analog Devices | |
MAX1487E | ±15kV ESD-Protected, Slew-Rate-Limited, Low-Power, RS-485/RS-422 Transceivers | Maxim Integrated | |
3170EIBZ | ±15kV ESD Protected, 3.3V, Full Fail-Safe, Low Power, High Speed or Slew Rate Limited, RS-485/RS-422 Transceivers | Intersil | |
MAX3483 | 3.3V-Powered, 10Mbps and Slew-Rate-Limited True RS-485/RS-422 Transceivers | Maxim Integrated | |
RS-422 | RS-422 AND RS-485 APPLICATION NOTE | Unspecified | |
SP3493CN | +3.3V Low Power RS-485/RS-422 Transceivers | Signal Processing Technologies | |
ADM3483 | 3.3 V Slew Rate Limited, Half- and Full-Duplex, RS-485/RS-422 Transceivers | Analog Devices |
English 한국어 简体中文 日本語 español
ru.datasheetbank.com
Для передачи данных между устройствами чаще всего используется витая пара. По одной паре данные идут в обе стороны, но не одновременно, а по очереди. Все устройства, с которыми необходимо общаться, «садятся» на линию параллельно. Интерфейс использует дифференциальные входы-выходы. Вот основные положения…
Что нам может дать использование этого интерфейса? Из плюсов:
— Возможность передачи на большие расстояния;
— Среда передачи получается достаточно помехозащищенная;
— Простота добавления устройств к уже имеющимся линиям;
— Передача на высокой скорости…
Из минусов — нужно продумать политику арбитража. Продумать протокол так, чтобы либо не возникало ситуаций, когда передать данные пытаются одновременно два устройства, либо пути выхода из подобных ситуаций. Я пошел по первому, более простому пути. Выбрал вариант общения контроллеров Single Master (один контроллер является мастером и либо отправляет информацию любому другому, либо запрашивает от устройства передачу информации)
Классическая схема подключения контроллера к сети RS485 выглядит так:
Здесь используется микросхема MAX485 (ad485, st485 или аналогичные). Нога 1 — принятые данные, нога 4 — данные для передачи в линию, а 2 и 3 (на рисунке объединены) для включения приемника или передатчика. При объединении изменением уровня мы меняем направление передачи данных (к нам — от нас). Намеренно не пишу о том, какой из уровней включает приемник, а какой передатчик ибо здесь я сам поймал грабли лбом.
На представленной картинке все правильно нарисовано — здесь приемник включается низким уровнем сигнала, а передатчик — высоким. Я же как-то не обратил на это внимание и решил «улучшить» схему таким образом:
Косяк был обнаружен уже после разводки платы и сборки устройства: в дежурном режиме на выходе TxD постоянно «дежурит» логический «1», а в процессе передачи данных появляются «нули». Таким образом у меня все время выключен приемник и включен передатчик.
Мною было придумана два варианта выхода из этой ситуации:
1. Программный. Вместо аппаратного последовательного порта использовать программный, в котором все данные были бы инвертированы на выходе. Плюс — очевиден: не нужно заново изготавливать платы (а их у меня было целых пять).
2. Аппаратный. Поставить инвертор между выходом контроллера и входом преобразователя. Плюсы — тоже очевидны: не нужно писать свои кривые эмуляции последовательного порта.
Был еще и третий вариант — вернуться к изначальной, «не оптимизированной» схеме — но он повлек бы сразу и изменения в плате и изменения в программе — потому был сразу отброшен. Сам трудности создал — сам и преодолевать буду.
Забегу вперед — ничего я не переписывал и платы новые не разводил. Правду говорят — лень двигатель прогресса. Инвертор на одном транзисторе я собрал, ну так, в плане эксперимента, прям на разрезанной дорожке.
Получилось страшно, но оно заработало!
Итоговая схема:
Дабы сохранить колорит доделки из smd транзистора и двух выводных сопротивлений, схема нарисована в паинте.
В живую смотрелось так-же неаккуратно и страшно, но после трех слоев лака…
В общем я и по настоящее время таким-же образом экономлю одну ногу микроконтроллера, правда схема претерпела несколько изменений и посадочные площадки я стал разводить заранее.
Это часть схемы. Был добавлен резистор, который удержит транзистор в открытом состоянии, в случае отсутствия управления с ноги контроллера. (Если контроллер вынуть из панельки — это не помешает общению остальных устройств).
И кстати, та, самая первая система, вот уже скоро пойдет третий год, как работает.
habr.com
General Description __Next Generation Device Features Applications |
ru.datasheetbank.com
Этот модуль является преобразователем интерфейса UART TTL уровня (транзисторно-транзисторная логика) в интерфейс “RS-485”.
Устройство также содержит светодиод питания и терминальный резистор 120 Ом между линиями “A” и “B”. Преобразователь выполнен на базе микросхемы “MAX485”. Для тяжелых уличных условий можно использовать конвертер интерфейса RS-485 — UART TTL с грозо-защитой и автоматическим-контролем потока.
Фото модуля преобразователя интерфейсов UART TTL – RS-485№ вывода | назв. вывода | описание |
1 | RO (Receiver Output) | выход приемника |
2 | RE (receiver enable) | Разрешение работы приемника. Лог. ноль на этом входе, тогда выход RO разрешен. Лог. единица на этом входе, тогда выход RO в состоянии высокого импеданса. |
3 | DE (driver enable) | разрешение работы передатчика Лог. ноль на этом входе, тогда прямой и инверсный выходы DO в состоянии высокого импеданса. Лог. единица на этом входе, тогда прямой и инверсный выходы DO работают на передачу. |
4 | DI (driver input) | вход передатчика |
5 | GND | общий (-) |
6 | A | прямой вход приемника (RI) / прямой выход передатчика (DO) |
7 | B | инверсный вход приемника (RI) / инверсный выход передатчика (DO) |
8 | VCC+ | + питание 4.75 – 5.25 |
Модуль может использоваться как конвертер интерфейсов, для связи через RS-485 между микроконтроллером и датчиками, микроконтроллером и другим микроконтроллером, для управления поворотными видеокамерами с помощью протокола “Pelco-D” и т.д.
Для преобразования USB в RS-485 подойдет другой конвертер.
Описание на MAX485 (datasheet)
umnyjdomik.ru