- Різниця між UART та RS485
- Потрібні компоненти
- Принципова схема для міжміського дротового зв'язку
- Модуль перетворювача MAX485 UART-RS485
- Кабель Ethernet CAT-6E
- Пояснення коду Arduino
- Висновок
Ми вже давно використовуємо плати розробки мікроконтролерів, такі як Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 та ін., В наших невеликих проектах, де більшість випадків відстань між датчиками та платою не перевищує декількох сантиметрів та на цих відстанях зв’язок між різними модулями датчиків, реле, виконавчими механізмами та контролерами може бути легко здійснений за допомогою простих дротів перемичок, не турбуючись про спотворення сигналу в середовищі та проникаючі в нього електричні шуми. Але якщо ви будуєте систему управління з цими платами розробки на відстані більше 10 - 15 метрів, то вам слід враховувати потужність шуму та сигналу, оскільки якщо ви хочете, щоб ваша система працювала надійно, ви не можете дозволити собі втратити дані під час передачі.
Існує багато різних типів послідовних протоколів зв'язку, таких як I2C та SPI, які можна легко реалізувати за допомогою Arduino, і сьогодні ми розглянемо інший найбільш часто використовуваний протокол RS485, який дуже часто використовується в промислових середовищах з високим рівнем шуму для передачі даних через на велику відстань. У цьому посібнику ми збираємось дізнатись про протокол зв'язку RS485 та про те, як його реалізувати за допомогою двох Arduino Nano, які ми маємо з собою, та як використовувати модуль перетворення MAX485 RS485 в UART. Раніше ми також здійснювали зв’язок MAX485 з Arduino, а також зв’язок MAX485 з Raspberry pi, ви також можете перевірити їх, якщо зацікавлені.
Різниця між UART та RS485
Більшість недорогих датчиків та інших модулів, таких як GPS, Bluetooth, RFID, ESP8266 та ін., Які зазвичай використовуються з Arduino, Raspberry Pi на ринку, використовують зв'язок на основі UART TTL, оскільки для цього потрібні лише 2 дроти TX (передавач) та RX (Приймач). Це не стандартний протокол зв'язку, але це фізична схема, за допомогою якої ви можете передавати та отримувати послідовні дані з іншими периферійними пристроями. Він може передавати / приймати дані лише послідовно, тому спочатку перетворює паралельні дані в послідовні, а потім передає дані.
UART - це асинхронний пристрій передачі, отже, немає синхронізуючого сигналу для синхронізації даних між двома пристроями, замість цього він використовує біти запуску та зупинки на початку та в кінці кожного пакету даних, щоб позначити кінці переданих даних. Дані, передані UART, організовані в пакети. Кожен пакет містить 1 стартовий біт, від 5 до 9 бітів даних (залежно від UART), необов’язковий біт парності та 1 або 2 стопових біта. Він дуже добре задокументований і широко використовується, а також має біт паритету, що дозволяє перевіряти помилки. Але у нього є деякі обмеження, оскільки він не може підтримувати декількох рабів і кількох господарів і максимальний кадр даних обмежений 9 бітами. Для передачі даних швидкість передачі даних як головного, так і підлеглого повинна бути між 10% одна від одної. Нижче наведено приклад того, як персонаж є передавачем по лінії даних UART. Високий і мінімальний сигнали вимірюються відносно рівня GND, тому зміна рівня GND матиме згубний вплив на передачу даних.
З іншого боку, RS485 - це більш галузевий зв’язок, який розроблений для мережі безлічі пристроїв, які також можуть використовуватися на великі відстані та на більших швидкостях. Він працює на методі вимірювання диференціальної сигналізації, а не на вимірюванні напруги з виводом GND. Сигнали RS485 плаваючі, і кожен сигнал передається по лінії Sig + та Sig-line.
Приймач RS485 порівнює різницю напруг між обома лініями замість абсолютного рівня напруги на сигнальній лінії. Це добре працює і запобігає існуванню наземних циклів, загальних джерел комунікаційних проблем. Найкращі результати досягаються, якщо Sig + та Sig- лінії скручуються, оскільки скручування зводить нанівець вплив електромагнітного шуму, що індукується в кабелі, і забезпечує набагато кращий захист від шуму, що дозволяє RS485 передавати дані до 1200 м діапазону. Скручена пара також дозволяє швидкості передачі бути набагато вищими, ніж це можливо за допомогою прямих кабелів. На малих відстанях передачі за допомогою RS485 можна реалізувати швидкість до 35 Мбіт / с, хоча швидкість передачі зменшується із відстанню. На 1200 м швидкості передачі ви можете використовувати лише 100 кбіт / с. Вам потрібен спеціальний кабель Ethernet для реалізації цього протоколу зв'язку. Є багато категорій кабелів Ethernet, які ми можемо використовувати, такі як CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A тощо. У нашому підручнику ми будемо використовувати кабель CAT-6E який має 4 скручені пари проводів 24AWG і може підтримувати частоту до 600 МГц. Він закінчується на обох кінцях роз’ємом RJ45. Типові рівні напруги лінійних лінійних драйверів становлять мінімум від ± 1,5 В до максимум приблизно ± 6 В. Вхідна чутливість приймача становить ± 200 мВ. Шум в діапазоні ± 200 мВ по суті блокується через загальнорежимне шумопоглинання. Приклад того, як байт (0x3E) передається через дві лінії зв'язку RS485.
Потрібні компоненти
- 2 × конвертерний модуль MAX485
- 2 × Arduino Nano
- 2 × 16 * 2 буквено-цифровий РК-дисплей
- 2 × 10k потенціометри склоочисника
- Кабель Ethernet Cat-6E
- Макети
- Провід перемички
Принципова схема для міжміського дротового зв'язку
На зображенні нижче показано схему передавача та приймача для міжміського дротового зв'язку Arduino. Зверніть увагу, що схеми передавача та приймача виглядають однаково. Єдине, що відрізняється, це код, записаний в них. Також для демонстрації ми використовуємо одну плату як передавач і одну плату як приймач, але ми можемо легко запрограмувати плати так, щоб вони працювали як передавач, так і приймач з однаковою настройкою
Схема підключення для вищезазначеної схеми також наведена нижче.
Як ви можете бачити вище, є дві майже однакові пари схем, кожна з яких має Arduino nano, 16 * 2 буквено-цифровий РК-дисплей і мікросхему перетворювача UART до RS485 MAX485, підключену до кожного кінця кабелю Ethernet Cat-6E через роз'єм RJ45. Кабель, який я використав у підручнику, довжиною 25 м. Ми надішлемо деякі дані з боку передавача по кабелю від Nano, який перетворюється в сигнали RS485 через модуль MAX RS485, що працює в режимі Master.
На приймальному кінці модуль перетворювача MAX485 працює як підлеглий, і при прослуховуванні передачі від ведучого він знову перетворює отримані дані RS485 у стандартні 5V TTL UART-сигнали, які зчитує приймаючий Nano і відображається на 16 * 2 підключений до нього буквено-цифровий РК-дисплей.
Модуль перетворювача MAX485 UART-RS485
Цей модуль перетворювача UART-RS485 має вбудований чіп MAX485, який є трансивером з низькою потужністю та обмеженою швидкістю, що використовується для зв'язку RS-485. Він працює від одного джерела живлення + 5 В, а номінальний струм становить 300 мкА. Він працює на напівдуплексному зв'язку, щоб реалізувати функцію перетворення рівня TTL на рівень RS-485, що означає, що він може або передавати, або приймати в будь-який час, а не обидва, він може досягти максимальної швидкості передачі 2,5 Мбіт / с. Приймач MAX485 подає струм живлення від 120 мкА до 500 мкА в ненавантажених або повністю завантажених умовах, коли драйвер відключений. Драйвер обмежений струмом короткого замикання, і виходи драйвера можуть бути розміщені на високому опорі через контур теплового відключення. Вхід приймача має захисну функцію, яка гарантує високий рівень логічного виходу, якщо вхід розімкнутоОкрім того, він має сильні характеристики проти перешкод. Він також має вбудовані світлодіоди, які відображають поточний стан мікросхеми, тобто чип живиться, чи передає чи приймає дані, що полегшує налагодження та використання.
Наведена вище принципова схема пояснює, як вбудована мікросхема MAX485 підключена до різних компонентів, і забезпечує 0,1-дюймові стандартні міжрядкові заголовки, які можна використовувати з макетною панеллю, якщо хочете.
Кабель Ethernet CAT-6E
Коли ми думаємо про передачу даних на великі відстані, ми моментально замислюємось про підключення до Інтернету за допомогою кабелів Ethernet. В даний час ми в основному використовуємо Wi-Fi для підключення до Інтернету, але раніше ми використовували кабелі Ethernet, що підходять до кожного персонального комп'ютера, щоб підключити його до Інтернету. Основною причиною використання цих кабелів Ethernet через звичайні дроти є те, що вони забезпечують набагато кращий захист від проникнення шуму та спотворення сигналу на великі відстані. Вони мають захисну оболонку над шаром ізоляції для захисту від електромагнітних перешкод, а також кожна пара проводів скручена між собою, щоб запобігти утворенню струмових шлейфів і, таким чином, набагато кращого захисту від шуму. Вони часто закінчуються 8-контактними роз'ємами RJ45 на обох кінцях. Є багато категорій кабелів Ethernet, які ми можемо використовувати, такі як CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A тощо. У нашому підручнику ми будемо використовувати кабель CAT-6E, який має 4 скручені пари проводів 24AWG і може підтримувати до 600 МГц.
Зображення, на якому показано, як пара проводів скручується всередині ізоляційного шару кабелю CAT-6E
Роз'єм RJ-45, призначений для кабелю Ethernet CAT-6E
Пояснення коду Arduino
У цьому проекті ми використовуємо два Arduino Nano, один як передавач і Один як приймач, кожен з яких керує буквено-цифровим РК-дисплеєм 16 * 2 для відображення результатів. Отже, в коді Arduino ми зосередимося на відправленні даних та відображенні тих, які надіслані або отримані дані на РК-екрані.
Для сторони передавача:
Ми починаємо з включення стандартної бібліотеки для керування РК-дисплеєм і оголошуємо штифт D8 Arduino Nano вихідним штифтом, який згодом будемо використовувати для оголошення модуля MAX485 як передавача або приймача.
int enablePin = 8; int potval = 0; #включати
Тепер переходимо до частини налаштування. Ми високо потягнемо контактний штифт, щоб перевести модуль MAX485 в режим передавача. Оскільки це напівдуплексний ІС, отже, він не може одночасно передавати і приймати. Ми також ініціалізуємо РК-дисплей тут і надрукуємо привітальне повідомлення.
Serial.begin (9600); // ініціалізуємо послідовність на швидкості передачі даних 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("СХЕМ ДАЙДЖЕСТУ"); lcd.setCursor (0,1); lcd.print ("Transmitter Nano"); затримка (3000); lcd.clear ();
Тепер у циклі ми пишемо постійно зростаюче ціле значення на послідовних рядках, яке потім передається іншому нано. Це значення також друкується на РК-дисплеї для відображення та налагодження.
Serial.print ("Відправлене значення ="); Serial.println (потвал); // Послідовний запис POTval на шину RS-485 lcd.setCursor (0,0); lcd.print ("Відправлене значення"); lcd.setCursor (0,1); lcd.print (potval); затримка (1000); lcd.clear (); потвал + = 1;
Сторона приймача:
Тут ми знову починаємо з включення стандартної бібліотеки для керування РК-дисплеєм і оголошуємо штифт D8 Arduino Nano вихідним штифтом, який ми згодом будемо використовувати для оголошення модуля MAX485 як передавача або приймача.
int enablePin = 8; #включати
Тепер переходимо до частини налаштування. Ми високо потягнемо контактний штифт, щоб перевести модуль MAX485 в режим приймача. Оскільки це напівдуплексний ІС, отже, він не може одночасно передавати і приймати. Ми також ініціалізуємо РК-дисплей тут і надрукуємо привітальне повідомлення.
Serial.begin (9600); // ініціалізуємо послідовність на швидкості передачі даних 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("СХЕМ ДАЙДЖЕСТУ"); lcd.setCursor (0,1); lcd.print ("Receiver Nano"); затримка (3000); digitalWrite (enablePin, LOW); // (Pin 8 завжди LOW для отримання значення від Master)
Тепер у циклі ми перевіряємо, чи є щось доступне на послідовному порту, а потім зчитуємо дані, а оскільки вхідні дані є цілими числами, ми аналізуємо їх і відображаємо на підключеному РК-дисплеї.
int pwmval = Serial.parseInt (); // Отримати значення INTEGER від Master через RS-485 Serial.print ("Я отримав значення"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Отримана вартість"); lcd.setCursor (0,1); lcd.print (pwmval); затримка (1000); lcd.clear ();
Висновок
Налаштування тесту, які ми використовували для цього проекту, можна знайти нижче.
Повну роботу цього проекту можна знайти у відеозаписі нижче. Цей метод є одним з простих і простих у реалізації методів передачі даних на великі відстані. У цьому проекті ми використали лише швидкість передачі даних 9600, що набагато нижче максимальної швидкості передачі, яку ми можемо досягти за допомогою модуля MAX-485, але ця швидкість підходить для більшості модулів датчиків, і там нам насправді не потрібно усі максимальні швидкості під час роботи з Arduino та іншими платами розробки, якщо ви не використовуєте кабель як підключення Ethernet і не вимагаєте всієї пропускної здатності та швидкості передачі, яку ви можете отримати. Пограйте самостійно зі швидкістю передачі та спробуйте інші типи кабелів Ethernet. Якщо у вас є які-небудь запитання, залиште їх у розділі коментарів нижче або скористайтеся нашими форумами, і я спробую з усіх сил відповісти на них. До цього часу, Адіо!