Меню Закрыть

Микросхема max485 описание на русском

Долго искал в Интернете схему, связи компьютера с микроконтроллёром, работающую в двунаправленном режиме по интерфейсу 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 уровней и 1 , следующим образом:

RE = 1 – приём запрещён

RE = – приём разрешён

DE = 1 – передача разрешена

DE = – передача запрещена.

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

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

В моём случае, длительность передаваемых байтов данных и пауз между ними, при передаче КОМП — > 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 Ом.

Долго искал в Интернете схему, связи компьютера с микроконтроллёром, работающую в двунаправленном режиме по интерфейсу 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 уровней и 1 , следующим образом:

RE = 1 – приём запрещён

RE = – приём разрешён

DE = 1 – передача разрешена

DE = – передача запрещена.

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

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

В моём случае, длительность передаваемых байтов данных и пауз между ними, при передаче КОМП — > 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 Ом.

Однажды мне понадобилось связать между собой больше двух контроллеров, да еще и сделать это на довольно приличном расстоянии. В процессе гугления выбор пал на протокол ModBus в реализации поверх интерфейса RS485. Описания ModBus-а встречаются повсеместно, и в данной статье не рассматриваются. Остановимся более подробно на интерфейсе RS485.

Для передачи данных между устройствами чаще всего используется витая пара. По одной паре данные идут в обе стороны, но не одновременно, а по очереди. Все устройства, с которыми необходимо общаться, «садятся» на линию параллельно. Интерфейс использует дифференциальные входы-выходы. Вот основные положения…

Что нам может дать использование этого интерфейса? Из плюсов:
— Возможность передачи на большие расстояния;
— Среда передачи получается достаточно помехозащищенная;
— Простота добавления устройств к уже имеющимся линиям;
— Передача на высокой скорости…

Из минусов — нужно продумать политику арбитража. Продумать протокол так, чтобы либо не возникало ситуаций, когда передать данные пытаются одновременно два устройства, либо пути выхода из подобных ситуаций. Я пошел по первому, более простому пути. Выбрал вариант общения контроллеров Single Master (один контроллер является мастером и либо отправляет информацию любому другому, либо запрашивает от устройства передачу информации)

Классическая схема подключения контроллера к сети RS485 выглядит так:

Здесь используется микросхема MAX485 (ad485, st485 или аналогичные). Нога 1 — принятые данные, нога 4 — данные для передачи в линию, а 2 и 3 (на рисунке объединены) для включения приемника или передатчика. При объединении изменением уровня мы меняем направление передачи данных (к нам — от нас). Намеренно не пишу о том, какой из уровней включает приемник, а какой передатчик ибо здесь я сам поймал грабли лбом.
На представленной картинке все правильно нарисовано — здесь приемник включается низким уровнем сигнала, а передатчик — высоким. Я же как-то не обратил на это внимание и решил «улучшить» схему таким образом:

Косяк был обнаружен уже после разводки платы и сборки устройства: в дежурном режиме на выходе TxD постоянно «дежурит» логический «1», а в процессе передачи данных появляются «нули». Таким образом у меня все время выключен приемник и включен передатчик.

Мною было придумана два варианта выхода из этой ситуации:
1. Программный. Вместо аппаратного последовательного порта использовать программный, в котором все данные были бы инвертированы на выходе. Плюс — очевиден: не нужно заново изготавливать платы (а их у меня было целых пять).

2. Аппаратный. Поставить инвертор между выходом контроллера и входом преобразователя. Плюсы — тоже очевидны: не нужно писать свои кривые эмуляции последовательного порта.

Был еще и третий вариант — вернуться к изначальной, «не оптимизированной» схеме — но он повлек бы сразу и изменения в плате и изменения в программе — потому был сразу отброшен. Сам трудности создал — сам и преодолевать буду.

Забегу вперед — ничего я не переписывал и платы новые не разводил. Правду говорят — лень двигатель прогресса. Инвертор на одном транзисторе я собрал, ну так, в плане эксперимента, прям на разрезанной дорожке.

Получилось страшно, но оно заработало!

Дабы сохранить колорит доделки из smd транзистора и двух выводных сопротивлений, схема нарисована в паинте.
В живую смотрелось так-же неаккуратно и страшно, но после трех слоев лака…

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

Это часть схемы. Был добавлен резистор, который удержит транзистор в открытом состоянии, в случае отсутствия управления с ноги контроллера. (Если контроллер вынуть из панельки — это не помешает общению остальных устройств).

И кстати, та, самая первая система, вот уже скоро пойдет третий год, как работает.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.