Четверг, 15 ноября 2012 04:44

Об особенностях работы по интерфейсу RS485 Featured

Written by
Rate this item
(0 votes)

alt  Долго искал в Интернете схему, связи компьютера с микроконтроллёром, работающую в двунаправленном режиме по интерфейсу RS485.

Ссылок много, но на них крутятся 3 – 4 одинаковые схемы, по тем или иным причинам меня не устраивающие.

Тимофей Носов, на форуме предложил схему со своего сайта. Может быть она и достойная, но, в ней применяются редко появляющиеся в продаже оптопары.

 

 

 

 

 

Я зашёл в «ЧИП и ДИП», там сказали, что одна оптопара была в наличии 3 года назад, а другой, вообще никогда не было.

Поэтому пришёл к выводу, что надо придумать, что-то своё.

Немного теории, и информации о применяемых микросхемах.

рисунок MAX232 взят с сайта prog-leon.narod.ru,

описание интерфейса RS485 взято с сайта mayak-bit.narod.ru

 

Микросхема MAX232, представляет собой четырёх канальный преобразователь уровня RS232 TTЛ.

Два канала, преобразуют ТТЛ-уровни в RS232-уровни, и два канала, преобразуют RS232 в ТТЛ.  

 

alt

 

Сеть, построенная на интерфейсе RS-485, представляет собой приемопередатчики, соединенные при помощи витой пары - двух скрученных проводов.

В основе интерфейса RS-485 лежит принцип дифференциальной (балансной) передачи данных.

Суть его заключается в передаче одного сигнала по двум проводам.

Причем по одному проводу (условно A) идет оригинальный сигнал, а по другому (условно B) - его инверсная копия.

Другими словами, если на одном проводе "1", то на другом "0" и наоборот.

Таким образом, между двумя проводами витой пары всегда есть разность потенциалов: при "1" она положительна, при "0" - отрицательна.

alt

 

Именно этой разностью потенциалов и передается сигнал. Такой способ передачи обеспечивает высокую устойчивость к синфазной помехе.

Синфазной называют помеху, действующую на оба провода линии одинаково. К примеру, электромагнитная волна, проходя через участок линии связи, наводит в обоих проводах потенциал.

Если сигнал передается потенциалом в одном проводе относительно общего, как в RS-232, то наводка на этот провод может исказить сигнал относительно хорошо поглощающего наводки общего ("земли").

Кроме того, на сопротивлении длинного общего провода будет падать разность потенциалов земель - дополнительный источник искажений.

А при дифференциальной передаче искажения не происходит.

В самом деле, если два провода пролегают близко друг к другу, да еще перевиты, то наводка на оба провода одинакова.

Потенциал в обоих одинаково нагруженных проводах изменяется одинаково, при этом информативная разность потенциалов остается без изменений.

RS-485 - полудуплексный интерфейс.

Прием и передача идут по одной паре проводов с разделением по времени.

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

 

Микросхема MAX485

 

Номера и обозначения выводов

alt

(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 – передача запрещена.

 

Если соединить выводы RE и DE между собой, то управление состоянием "приём/передача”, осуществляется следующим образом:

 

alt

               

Компьютер передаёт данные микроконтроллёру во много раз медленнее чем, микроконтроллёр компьютеру.

В моём случае, длительность передаваемых байтов данных и пауз между ними, при передаче КОМП -- > PIC ,была в четыре раза больше, чем при передаче PIC -- > КОМП.

 

Суть в следующем.

Компьютер, каждые две секунды, отсылает одному из нескольких PIC–ов (каждый имеет свой индификационный номер)  пачку из пяти байт.

В ответ, PIC должен выдать программе пять байт информации.

Смотрю осциллографом – PIC данные принимает и передаёт.

А программа на компьютере пишет – НЕТ СВЯЗИ.

Для отлаживания процедуры  приёма-передачи установил на компьютер  программу COM Port Toolkit.

С её помощью я передавал с компьютера PIC–у те же самые пять байт запроса. Но в ответ от PIC-a компьютеру приходило только три байта.

Два байта, где-то терялись.

Поэтому и НЕТ СВЯЗИ.

Переключение с приёма на передачу и обратно, со стороны PIC-a, производится отдельно выделенным для этого портом  RC4.

После передачи всех байтов информации PIC, на своей стороне меняет уровень на RC4, тем самым, переводя микросхему МАX485 на приём.

Оказалось, что два байта терялись из-за преждевременного переключения МАX485 на приём.

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

 Запись  данных в регистр TXREG не означает, что эти данные мгновенно будут переданы. По даташиту поднятие флага TXIF означает лишь то, что данные считались из регистра TXREG и записались в сдвиговый регистр TSR для передачи и TXREG пуст. Это значит, что программно (с помощью плавающей задержки опроса флага TXIF) отследить завершение передачи последнего байта не представляется возможным.

Если, сразу  после записи очередного байта в регистр TXREG, перевести MAX485 на приём то ни этот байт, ни предшествующий ему (находящийся в это время в сдвиговом регистре TSR  не будут переданы.  Модулем USART они естественно выпихнутся  на передачу, но приёмо-передатчик то ведь уже переключен на приём.

 

После ввода программной задержки, между записью  последнего байта в TXREG , и  сменой уровня на RC4, всё пришло в норму.

Со стороны компьютера, переключение с приёма на передачу и обратно, производится с помощью транзистора, включённого в цепь передачи данных преобразованных в ТТЛ-уровни.

Данные есть – сигнал на передачу. Данных нет – сигнал на приём.

Так как компьютер затягивает длительность посылок и пауз, то МАХ485 успевает, во время переключится.

Конденсатор С1, сглаживает импульсы на базе транзистора, тем  самым надёжно открывая его. Без него, связь неустойчивая.

Схема, работает и без рекомендуемого, третьего общего провода.

Но на большие расстояния, всё же нужно его использовать, и установить на концах витой пары защитные стабилитроны.

В случае, необходимости согласования сопротивления витой пары с входом/выходом МАХ485, предусмотрены перемычки.

С их помощью, можно подключить параллельно витой паре согласующие резисторы сопротивлением 120 Ом. 

Ссылка для скачивания доступна только авторизованным пользователям сайта !

Read 4832 times Last modified on Среда, 03 сентября 2014 11:45

Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru