RS485 комуникация с Arduino: Пълно ръководство с примери

  • Свързване и използване на модула MAX485 за установяване на RS485 комуникация с Arduino.
  • Как да реализирате симплексна, полудуплексна и пълна дуплексна комуникация за различни нужди.
  • Управление на устройства на една и съща шина RS485 с множество Arduinos.

rs485

Серийната комуникация е един от най-разпространените начини за обмен на данни между електронни устройства. Въпреки това, когато разстоянията се увеличават или околната среда има електромагнитни смущения, комуникационните сигнали могат да бъдат податливи на грешки. Това е мястото, където комуникационният стандарт RS485 влиза в действие, предлагайки стабилна и ефективна алтернатива. Arduino, със своята гъвкавост, ни позволява да се възползваме напълно от този протокол по доста прост начин.

В тази статия ще видим как RS485 комуникацията може да бъде реализирана между няколко Arduino с помощта на модули, базирани на интегрирания MAX485, чип, който преобразува TTL сигнали (от Arduino) в RS485 и обратно. В този урок ще покрием както основните концепции, така и практическите примери, които ще ви позволят да реализирате симплексна, полудуплексна и пълна дуплексна комуникация между микроконтролерите на Arduino и ще обясним как можете да разширите тази комуникационна система, за да управлявате множество устройства в едно RS485 шина.

Какво е RS485?

RS485 е комуникационен стандарт, широко използван в индустрията, известен със своите здравина и способността му да издържа голямо разстояние предаване, дори в шумна промишлена среда. За разлика от други типове серийна комуникация, като RS232, RS485 позволява свързването на множество устройства към една и съща шина, което го прави идеален за индустриална автоматизация и приложения за управление.

Този протокол е устойчив на електромагнитен шум благодарение на факта, че използва a диференциална сигнална система, което означава, че данните се изпращат по два проводника, A и B, които са противоположни версии по напрежение. Това позволява всеки шум, уловен в кабелите, да бъде лесно премахнат, като се гарантира целостта на сигнала.

Едно от основните предимства на RS485 е това поддържа разстояния до 1200 метра и скорост до 35 Mbps на къси разстояния, което го прави идеален протокол за индустриални и контролни приложения в среди, където е необходимо дълго окабеляване.

RS485 комуникационни режими

щифтове rs485

При RS485 комуникация можем да конфигурираме системата по три различни начина: симплекс, полудуплекс и пълен дуплекс. Всяка една има своите особености и се изпълнява според нуждите на проекта.

Симплексна комуникация

В симплексен режим комуникацията върви само в една посока, тоест едно устройство действа като предавател и друг подобен приемник. Това е полезно в ситуации, в които просто искате да изпращате или получавате данни без нужда от обратна връзка.

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

Полудуплексна комуникация

Повечето RS485 приложения на Arduino се изпълняват в полудуплексен режим, защото това изисква само два проводникаи ви позволява да изпращате и получавате данни, макар и не едновременно. Тоест, ако едно устройство изпраща данни, другите устройства трябва да са в режим на приемане и обратно.

За да превключвате между режимите на предаване и приемане, използвайте допълнителни щифтове (RE/DE) на модула MAX485, който ще контролирате от кода, за да определите дали устройството трябва да изпраща или получава във всеки даден момент.

Този режим е особено полезен, ако имате няколко устройства на една и съща шина, които трябва да комуникират помежду си, но не едновременно.

Пълна дуплексна комуникация

В режим на пълен дуплекс устройствата могат да изпращат и получават данни едновременно. Въпреки това, за да внедрите пълен дуплекс в RS485, две двойки усукани проводници, което увеличава цената и сложността на окабеляването. Освен това ще ви трябват два модула MAX485 за всяко устройство, за да управлявате отделно каналите за предаване и приемане.

Компоненти, необходими за RS485 комуникация с Arduino

За да внедрите комуникационна система RS485 на Arduino, ще ви трябват следните компоненти:

  • Едно или повече Arduinos: Всеки модел на Arduino ще свърши работа, но в този урок ще използваме Arduino UNO и Arduino MEGA като примери.
  • MAX485 модули: Тези модули ви позволяват да конвертирате TTL сигнали от Arduino към RS485 и обратно. Те са много евтини и лесни за намиране в магазини като AliExpress или eBay.
  • Крайни резистори: Резистор между 120 ома обикновено се поставя във всеки край на шината, за да се избегнат отражения в сигнала. На къси разстояния е възможно да се мине без тях, но при по-дълги инсталации те са от съществено значение за поддържане на целостта на сигнала.
  • Кабели с усукана двойка: Препоръчително е да използвате кабели с усукана двойка, за да сведете до минимум електромагнитните смущения, особено в шумна промишлена среда.

Обща схема на свързване

Свържете модулите MAX485 към Arduino е доста проста. Най-важните изводи са A и B, които съответстват на шинните линии RS485. Тези щифтове трябва да бъдат свързани към всички устройства в шината. Освен това, модулът има RE и DE щифтове, които контролират дали модулът е в режим на приемник или предавател.

Като цяло свързването на модулите към Arduino се извършва по следния начин:

  • VCC и GND на модула се свързват към VCC и GND на Arduino.
  • DI (вход на данни) на модула се свързва към TX щифта на Arduino, ако модулът трябва да действа като излъчвател.
  • RO (Receiver Output) на модула се свързва към RX щифта на Arduino, ако модулът трябва да действа като приемник.
  • DE и RE трябва да се управляват от цифров щифт на Arduino, за да превключвате между режимите на предаване и приемане.

Ако се нуждаете само от модула, за да функционира като подател или получател, можете да свържете RE и DE директно към HIGH или LOW. Въпреки това, за по-сложни комуникации, при които устройството трябва да превключва между предаване и приемане, най-добре е тези щифтове да се контролират от софтуера.

Примери за кодове за RS485 комуникация

По-долу има няколко примера, покриващи различните комуникационни конфигурации с RS485 на Arduino.

Симплексна комуникация

Код на издателя

За основна симплексна система, където имаме само един изпращач и един получател, кодът за изпращача може да изглежда така:

void setup() { Serial.begin(9600); } void loop() { Serial.write(analogRead(0)); delay(500); }

Код на приемника

Приемникът просто ще прочете данните, пристигащи през серийния порт:

void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }

Полудуплексна комуникация

В този пример прилагаме полудуплексна система, при която устройствата редуват изпращане и получаване на данни.

Код на учителя

const int reDePin = 2; void setup() { pinMode(reDePin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(reDePin, HIGH); Serial.write('H'); delay(100); digitalWrite(reDePin, LOW); if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }

Робски код

const int reDePin = 2; void setup() { pinMode(reDePin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(reDePin, LOW); if (Serial.available()) { int data = Serial.read(); delay(100); digitalWrite(reDePin, HIGH); Serial.write(data + 1); } }

Пълна дуплексна комуникация

За реализиране на пълнодуплексна комуникация ще са необходими два модула MAX485 на Arduino. Всяка двойка модули ще обработва една линия за данни: една за предаване и една за приемане.

Кодът ще бъде подобен на предишните примери, но в този случай и двете устройства винаги ще предават и приемат едновременно.

Разширяване до множество устройства в RS485

RS485 има способността да свързва до 32 устройства на една шина, като в специални случаи може да достигне и повече. Това го прави отличен избор за проекти, включващи множество микроконтролери или устройства. За да се идентифицира всяко едно от тях в мрежата, обичайно е да се внедри адрес или ID за всяко устройство.

В този случай мастерът ще изпрати съобщение с адреса на устройството, с което иска да комуникира, и само това устройство ще отговаря за обработката на съобщението и даване на отговор.

Към това се добавя възможността за използване по-сложни протоколи като MODBUS, които позволяват създаването на високоефективни и сигурни мрежи в индустрията.

За домашни проекти или по-малко взискателни приложения можете просто да зададете идентификатор на всеки Arduino и да ги накарате да отговарят само на съобщения, предназначени за тях.


Бъдете първите, които коментират

Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.