- Протокол послідовного зв'язку RS-485
- RS-485 в Arduino
- Потрібні компоненти
- Кругова діаграма
- Програмування Arduino UNO та Arduino Nano для послідовного зв'язку RS485
- Керування яскравістю світлодіодів за допомогою послідовного зв'язку RS485
Вибір протоколу зв'язку для зв'язку між мікроконтролерами та периферійними пристроями є важливою частиною вбудованої системи. Це важливо, оскільки загальна продуктивність будь-якого вбудованого додатка залежить від засобів зв'язку, оскільки це пов’язано зі зменшенням витрат, швидшою передачею даних, покриттям на великі відстані тощо
У попередніх навчальних посібниках ми дізналися про протокол зв'язку I2C та протоколи зв'язку SPI в Arduino. Зараз існує ще один протокол послідовного зв'язку, який називається RS-485. Цей протокол використовує асинхронний послідовний зв'язок. Головною перевагою RS-485 є передача даних на великі відстані між двома пристроями. І вони найчастіше використовуються в електрично шумних виробничих умовах.
У цьому підручнику ми дізнаємося про послідовний зв’язок RS-485 між двома Arduino, а потім продемонструємо його, керуючи яскравістю світлодіода, підключеного до підлеглого Arduino від Master Arduino, надсилаючи значення ADC через модуль RS-485. Потенціометр 10k використовується для варіювання значень АЦП в Master Arduino.
Почнемо з розуміння роботи послідовного зв'язку RS-485.
Протокол послідовного зв'язку RS-485
RS-485 - це асинхронний послідовний протокол зв'язку, який не вимагає тактового імпульсу. Він використовує техніку, яка називається диференціальним сигналом для передачі двійкових даних з одного пристрою на інший.
Отже, що це за метод диференціальної передачі сигналу ??
Метод диференціального сигналу працює шляхом створення диференціальної напруги за допомогою позитивних і негативних 5В. Це забезпечує напівдуплексний зв’язок при використанні двох проводів, а для повного дуплексу потрібні 4 чотири дроти.
За допомогою цього методу
- RS-485 підтримує більш високу швидкість передачі даних максимум 30 Мбіт / с.
- Він також забезпечує максимальну відстань передачі даних у порівнянні з протоколом RS-232. Він передає дані максимум до 1200 метрів.
- Головною перевагою RS-485 перед RS-232 є кілька ведених з одним ведучим, тоді як RS-232 підтримує лише одного веденого.
- Він може мати максимум 32 пристрої, підключені до протоколу RS-485.
- Ще однією перевагою RS-485 є те, що він захищений від шуму, оскільки для передачі вони використовують метод диференціального сигналу.
- RS-485 швидший у порівнянні з протоколом I2C.
RS-485 в Arduino
Для використання RS-485 в Arduino потрібен модуль під назвою 5V MAX485 TTL - RS485, який базується на Maxim MAX485 IC, оскільки він дозволяє здійснювати послідовний зв’язок на великій відстані 1200 метрів і є двонаправленим. У напівдуплексному режимі швидкість передачі даних становить 2,5 Мбіт / с.
Модуль 5V MAX485 TTL до RS485 вимагає напруги 5 В і використовує логічні рівні 5 В, щоб він міг взаємодіяти з апаратними послідовними портами мікроконтролерів, таких як Arduino.
Він має такі особливості:
- Робоча напруга: 5 В
- Вбудований чіп MAX485
- Низьке споживання енергії для зв'язку RS485
- Прийомопередавач з обмеженою швидкістю
- Термінал 2P з кроком 5,08 мм
- Зручна комунікаційна проводка RS-485
- Всі штифти мікросхеми, до яких було проведено, можна контролювати за допомогою мікроконтролера
- Розмір дошки: 44 х 14 мм
Пін-аут RS-485:
Ім'я PIN-коду |
Використовуйте |
VCC |
5 В |
A |
Вхід неінвертуючого приймача Неінвертуючий вихід драйвера |
B |
Інвертування вхідного сигналу приймача Інвертування вихідних даних драйвера |
GND |
GND (0 В) |
R0 |
Вихід приймача (RX-штифт) |
RE |
Вихід приймача (LOW-Enable) |
DE |
Вихід драйвера (HIGH-Enable) |
DI |
Вхід драйвера (штекер TX) |
Цей модуль RS-485 можна легко підключити до Arduino. Давайте використовувати апаратні послідовні порти Arduino 0 (RX) та 1 (TX) (в UNO, NANO). Програмування також просте, просто використовуйте Serial.print () для запису в RS-485 та Serial.Read () для читання з RS-485.
Частина програмування детально пояснюється далі, але спочатку давайте перевіримо необхідні компоненти та принципову схему.
Потрібні компоненти
- Arduino UNO або Arduino NANO (2)
- Модуль перетворювача MAX485 TTL в RS485 - (2)
- Потенціометр 10K
- РК-дисплей 16x2
- СВІТЛОДІОДНИЙ
- Макет
- Підключення проводів
У цьому посібнику Arduino Uno використовується як Master, а Arduino Nano використовується як Slave. Тут використовуються дві плати Arduino, тому потрібні два модулі RS-485.
Кругова діаграма
Схема з'єднання між першим RS-485 та Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5 В |
GND |
GND |
A |
До А раба RS-485 |
B |
До B Slave RS-485 |
Зв'язок між другим RS-485 та Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5 В |
GND |
GND |
A |
До А майстра RS-485 |
B |
До В майстра RS-485 |
Схема з'єднання між РК-дисплеєм 16x2 та Arduino Nano:
РК-дисплей 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5В |
V0 |
До центрального штифта потенціометра для контролю контрастності РК-дисплея |
RS |
D2 |
RW |
GND |
Е |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5В |
К |
GND |
Потенціометр 10K підключений до аналогового виводу A0 Arduino UNO для забезпечення аналогового входу, а світлодіод підключений до виводу D10 Arduino Nano.
Програмування Arduino UNO та Arduino Nano для послідовного зв'язку RS485
Для програмування обох плат використовується Arduino IDE. Але переконайтеся, що ви вибрали відповідний ПОРТ в меню Інструменти-> Порт та Дошка з Інструменти-> Дошка.
Повний код із демонстраційним відео наведено в кінці цього посібника. Тут ми пояснюємо важливу частину коду. У цьому посібнику є дві програми, одна для Arduino UNO (Master) та інша для Arduino Nano (Slave).
Пояснення коду для Master: Arduino UNO
На стороні ведучого просто візьміть аналоговий вхід на виводі A0, змінивши потенціометр, а потім SerialWrite ці значення на шину RS-485 через апаратні послідовні порти (0,1) Arduino UNO.
Щоб розпочати послідовний зв’язок на апаратних послідовних виводах (0,1), використовуйте:
Serial.begin (9600);
Для зчитування аналогового значення на штифті A0 Arduino UNO та збереження їх у змінному використанні potval :
int potval = analogRead (pushval);
Перш ніж записувати значення потвала в послідовний порт, штифти DE & RE RS-485 повинні бути ВИСОКИМ, який підключений до висновку 8 Arduino UNO, щоб зробити висновок 8 ВИСОКИМ:
digitalWrite (enablePin, HIGH);
Далі, щоб помістити ці значення в послідовний порт, підключений до модуля RS-485, використовуйте наступне твердження
Serial.println (потвал);
Пояснення коду для підлеглого: Arduino NANO
На підлеглій стороні ціле число отримується від Master RS-485, яке доступне на апаратному послідовному порту Arduino Nano (висновки -0,1). Просто прочитайте це значення та збережіть у змінній. Значення мають форму (0 -1023). Таким чином, він перетворюється на (0-255), оскільки ШІМ-техніка використовується для управління яскравістю світлодіодів.
Потім AnalogWrite перетворене значення на світлодіодний штифт D10 (це ШІМ-штифт). Отже, залежно від значення ШІМ, яскравість світлодіода змінюється, а також відображає ці значення на РК-дисплеї 16x2.
Щоб RS-485 Slave Arduino отримав значення від ведучого, просто зробіть штифти DE & RE RS-485 LOW. Отже, штифт D8 (enablePin) Arduino NANO зроблений НИЗКИМ.
digitalWrite (enablePin, LOW);
І читати цілочисельні дані, доступні на послідовному порту, та зберігати їх у змінному використанні
int pwmval = Serial.parseInt ();
Далі перетворіть значення з (0-1023 в 0-255) і збережіть їх у змінній:
int convert = map (pwmval, 0,1023,0,255);
Далі запишіть аналогове значення (ШІМ) на контакт D10, де підключений світлодіодний анод:
analogWrite (ledpin, конвертувати);
Для друку цих значень ШІМ на РК-дисплеї 16x2 використовуйте
lcd.setCursor (0,0); lcd.print ("ШІМ від майстра"); lcd.setCursor (0,1); lcd.print (конвертувати);
Керування яскравістю світлодіодів за допомогою послідовного зв'язку RS485
Коли за допомогою потенціометра для значення ШІМ встановлено значення 0, світлодіод вимикається.
І коли за допомогою потенціометра для значення ШІМ встановлено значення 251: світлодіод вмикається з повною яскравістю, як показано на малюнку нижче:
Отже, таким чином RS485 може бути використаний для послідовного зв'язку в Arduino.