Огляд RS-485
Як і RS-232, RS-485 є стандартом послідовного зв'язку. Його поточне офіційне позначення – TIA-485/EIA-485-A, але зазвичай його називають стандартом RS-485. RS-485 широко використовується в таких галузях, як промислова автоматизація, автомобілебудування та управління будівлями.
Шина RS-485 усуває недоліки RS-232, такі як короткі відстані зв’язку та низькі швидкості передачі даних. RS-485 підтримує швидкість передачі даних до 10 Мбіт/с і має теоретичну відстань зв'язку до 1200 метрів. На відміну від односторонньої передачі RS-232, RS-485 використовує диференціальну передачу через пару витої пари, причому один провід позначається як A, а інший як B.
Фізичний рівень RS-485
Фізичний рівень RS-485 відповідає за передачу необроблених даних між пристроями та фізичним середовищем передачі. Він виконує перетворення електричних сигналів у цифрові дані, а також визначає рівні напруги, синхронізацію, швидкість передачі даних та інші параметри.
① Диференціальні сигнали
-Прокладання кабелів на великій відстані призводить до ослаблення сигналу та збільшує ймовірність шуму та перешкод. Це проявляється у вигляді зміни амплітуди напруги на кабелях A і B. Однак перевага використання диференціальних ліній полягає в тому, що віднімання різниці між двома сигналами скасовує перешкоди, дозволяючи виводити нормальний сигнал. Здатність диференціального приймача ігнорувати ідентичні напруги на обох сигнальних лініях називається відхиленням загального-режиму.


Стандарт визначає, що логічний 1 становить від +2V до +6V, а логічний 0 становить від -6V до -2V.
RS-485 не вимагає певної напруги шини; він враховує лише мінімальну диференціальну напругу. За більшої довжини кабелю напруга, яку отримує приймач, може впасти до +/- 200 мВ, що все ще цілком прийнятно для RS-485 — це одна з переваг RS-485.
Багато трансиверів відповідають або навіть перевищують стандарт TIA/EIA-485A; однак у практичних застосуваннях задані параметри пристрою мають перевагу. Наприклад, мінімальний негативний вхідний поріг для певного трансивера становить -200 мВ.


② Визначення сигналів
Багато перетворювачів RS-485 сьогодні сумісні з RS-422, тому на цих перетворювачах часто можна побачити сигнали, помічені T/R+ і T/R-, які відповідають A+ і B- RS-485.
Для гніздових роз’ємів DB9 визначення з’єднання RS-485 виглядає наступним чином: контакти з 6 по 9 є Н/Д і їх не слід під’єднувати.
| DB9 | Вихідний сигнал | Повнодуплексна проводка RS-422 | Напівдуплексна проводка RS-485 |
| 1 | T/R+ | Надіслати (A+) | RS-485(A+) |
| 2 | T/R- | Надіслати (B-) | RS-485(B-) |
| 3 | RXD+ | Отримати (A+) | Порожній |
| 4 | RXD- | Отримати (B-) | Порожній |
| 5 | GND | Дріт заземлення | Дріт заземлення |
③ Топологія
RS-485 підтримує дво- та чотири-дротові конфігурації. Конфігурація з чотирма-дротами обмежується зв’язком «точка--точка» і сьогодні використовується рідко; двопровідна конфігурація використовується частіше. У цій конфігурації використовується топологія шини, що дозволяє підключати до 32 вузлів на одній шині.
Як і I²C, шина RS-485 працює в режимі головного-підлеглого. Він підтримує як один-підлеглий режим, так і багато-підлеглий режим, але не підтримує режим кількох головних.


Трансивер RS-485
RS-485 використовує диференціальну передачу. Якщо ви хочете керувати пристроєм RS-485 за допомогою мікроконтролера, вам знадобиться трансивер, подібний до шини CAN. На наступній діаграмі показано MCU, що керує пристроєм RS-485.
Усередині трансивера є приймач (верхня половина) і передавач (нижня половина). Нижче наведено коротке пояснення того, як працює трансивер, щоб допомогти вам зрозуміти, як MCU спілкується з пристроєм 485.

Внутрішня структура трансивера RS-485
Де:
А і В — автобус;
R - вхід приймача;
RE – сигнал дозволу приймача;
DE – сигнал дозволу передавача;
D вихід передавача;
Для сигналів увімкнення сигнали з лінією над літерою є активними-низькими (наприклад, RE на малюнку вище), тоді як сигнали без лінії є активними-високими (наприклад, DE).
Таблиця істинності приймача
Для передавача таблиця істинності виглядає наступним чином:
1. Коли висновок DE дозволу драйвера знаходиться на логічному високому рівні, диференціальні виходи A і B відповідають логічному стану на вході даних D. Логічний високий рівень на D призводить до того, що A стає високим, а B - низьким. У цьому випадку диференціальна вихідна напруга, визначена як VOD=VA – VB, є позитивною. Коли D є низьким, вихідний стан інвертується: B стає високим, а A стає низьким, і VOD є негативним.
2. Коли DE низький, обидва виходи стають високими-імпедансами. У цьому випадку логічний стан у D не має значення.
Наступна таблиця істинності застосовується до приймача:
1. Коли контакт дозволу (RE) приймача знаходиться на низькому логічному рівні, приймач активується. Коли диференціальна вхідна напруга, визначена як VID=VA – VB, додатна і перевищує позитивний вхідний поріг VIT+, вихід R приймача стає високим. Коли VID є негативним і нижчим за негативний вхідний поріг VIT-, вихід R приймача стає низьким. Якщо VID знаходиться між VIT+ і VIT-, результат буде невизначеним.
2. Коли RE є логічним високим або плаваючим, вихід приймача має високий імпеданс, незалежно від величини або полярності VID.


Канал передачі даних RS-485
Після обговорення принципів роботи трансивера RS-485 вище, ми коротко опишемо канал передачі даних RS-485. Ви можете спочатку поглянути на простий для розуміння формат кадру протоколу UART.
Незалежно від того, надсилає дані ведучий або підлеглий провідний пристрій, використовуються лінії A і B; отже, RS-485 зазвичай використовується в напівдуплексному режимі.
GPIO хоста керує виводом DE трансивера RS-485 для встановлення режиму передачі. Один байт надсилається з лінії UART TXD на лінію даних (D або DI) трансивера RS-485. Трансивер перетворює односторонній потік бітів UART у диференціальний потік бітів на лініях A і B. Як тільки дані залишають трансивер, хост негайно перемикає трансивер у режим прийому.
Підлеглий працює так само, як і головний. Підлеглий пристрій керує виводом /RE трансивера RS-485, щоб установити його в режим прийому, отримує потік бітів, надісланий головним, перетворює його на односторонній сигнал і отримує його через лінію UART RXD підлеглого пристрою. Коли підлеглий пристрій готовий відповісти, він передає дані так само, як і головний, а головний перемикається в режим прийому.
Перетворення RS-232 на RS-485
Є можливість конвертувати між RS-232 і RS-485. Одним із методів є перетворення RS-232 на TTL, а потім перетворення TTL на RS-485. Звичайно, є також мікросхеми, які підтримують пряме перетворення з RS-232 на RS-485, і багато таких модулів доступні в Інтернеті.
Модулі перетворення RS-232 на RS-485
Відмінності між RS-485 і CAN
Хоча RS-485 не має стандартизованого формату протоколу даних, він багато в чому схожий з шиною CAN. Наприклад, і A&B, і CANH&CANL є диференціальними сигналами; обидва вимагають прийомопередавачі для зв'язку; і в обох, серед інших подібностей, використовуються кінцеві резистори на 120 Ом.
| Характеристики автобуса | CAN автобус | Шина RS-485 |
| Витрати на обладнання | Трохи вище | Недорого |
| Використання автобуса | Автоматичний пріоритетний арбітраж, високий рівень використання | Використовує опитування; низький рівень використання |
| Швидкість передачі даних | Високий | Низький |
| Механізми виявлення помилок | Контролер містить механізм контрольної суми для забезпечення точності передачі даних низького рівня- | Лише специфікації фізичного рівня; немає специфікацій канального рівня |
| Вплив збою одного-вузла | Ніякого впливу на автобус | Автобусний параліч |
| Витрати на розвиток | Гнучка розробка програмного забезпечення, низькі витрати часу | Важко розвиватися |
| Системні витрати | Відносно низький | Високий |
Загальні схеми RS-485
Ось поширена схема RS-485, яку я знайшов в Інтернеті. Слід звернути увагу на два моменти:
1. Сигнали дозволу RE і DE можна контролювати за допомогою одного GPIO для економії ресурсів. Коли GPIO25 видає високий рівень, RE і DE становлять 0 В, і пристрій переходить в режим прийому; коли GPIO25 видає низький рівень, RE і DE становлять 3,3 В, і пристрій переходить у режим передачі.
2. У деяких схемах підтягуючий{1}}резистор додається до висновку A, а підтягувальний{2}}резистор — до контакту B. Основна причина цього полягає в тому, що коли шина RS-485 перебуває в стані очікування, рівень напруги не є фіксованим-, тобто коливається від -200 мВ до +200 мВ, і трансивер може виведення високого або низького рівня. UART має підтримувати високий рівень під час простою; якщо трансивер видає низький рівень у цей час, UART інтерпретує це як стартовий біт, що може спричинити помилки зв’язку. Конкретні значення R_u і R_d тут детально не обговорюватимуться; У майбутньому планую написати детальну статтю на цю тему.

Щодо другого пункту, зверніть увагу на наступне:
① Якщо застосувати підтягуючий-резистор до контакту A та підтягуючий-нижчий резистор до контакту B, передача даних може бути невдалою через перевернуті з’єднання.
② Якщо трансивер має вбудовані-підтягуючі-підйомні та підтягуючі-резистори, немає потреби додавати зовнішні.




