Seriālā saziņa ir viens no visizplatītākajiem datu apmaiņas veidiem starp elektroniskām ierīcēm. Tomēr, ja attālumi palielinās vai vidē ir elektromagnētiski traucējumi, sakaru signāli var būt pakļauti kļūdām. Šeit tiek izmantots RS485 sakaru standarts, kas piedāvā stabilu un efektīvu alternatīvu. Arduino ar savu daudzpusību ļauj mums pilnībā izmantot šī protokola priekšrocības diezgan vienkāršā veidā.
Šajā rakstā mēs redzēsim, kā RS485 komunikāciju var ieviest starp vairākiem Arduinos, izmantojot moduļus, kuru pamatā ir integrētais MAX485 — mikroshēma, kas pārveido TTL signālus (no Arduino) uz RS485 un otrādi. Šajā apmācībā mēs apskatīsim gan pamatjēdzienus, gan praktiskos piemērus, kas ļaus ieviest vienpusējo, pusduplekso un pilnduplekso komunikāciju starp Arduino mikrokontrolleriem, un paskaidrosim, kā jūs varat paplašināt šo sakaru sistēmu, lai apstrādātu vairākas ierīces vienā. RS485 autobuss.
Kas ir RS485?
RS485 ir nozarē plaši izmantots sakaru standarts, kas pazīstams ar savu stingrība un tā spēju izturēt gara distance pārraidi, pat trokšņainā rūpnieciskā vidē. Atšķirībā no citiem seriālās komunikācijas veidiem, piemēram, RS232, RS485 ļauj pieslēgt vairākas ierīces vienā kopnē, padarot to ideāli piemērotu rūpnieciskās automatizācijas un vadības lietojumprogrammām.
Šis protokols ir izturīgs pret elektromagnētisko troksni, pateicoties tam, ka tas izmanto a diferenciālās signalizācijas sistēma, kas nozīmē, ka dati tiek nosūtīti pa diviem vadiem A un B, kas ir pretējas sprieguma versijas. Tas ļauj viegli atcelt jebkuru troksni, kas uztver kabeļus, nodrošinot signāla integritāti.
Viena no galvenajām RS485 priekšrocībām ir tā atbalsta attālumus līdz 1200 metriem un ātrums līdz 35 Mb/s nelielos attālumos, padarot to par ideālu protokolu rūpnieciskiem un kontroles lietojumiem vidēs, kur ir nepieciešams ilgs kabeļu savienojums.
RS485 sakaru režīmi
RS485 komunikācijā sistēmu varam konfigurēt trīs dažādos veidos: simplex, half-duplex un full-duplex. Katram ir savas īpatnības un tas tiek īstenots atbilstoši projekta vajadzībām.
Vienkārša komunikācija
Simpleksā režīmā sakari notiek tikai vienā virzienā, tas ir, viena ierīce darbojas kā emitents un vēl viens līdzīgs saņēmējs. Tas ir noderīgi situācijās, kad vēlaties vienkārši nosūtīt vai saņemt datus, neizmantojot atsauksmes.
Piemēram, mēs varam iestatīt sistēmu, kurā Arduino nolasa sensora vērtību un nosūta to uz citu ierīci, kas to vienkārši saņem. Šajā gadījumā, tā kā dati pārvietojas tikai vienā virzienā, var atteikties no atsevišķiem papildu vadības elementiem, padarot sistēmu vienkāršāku un ekonomiskāku.
Pusdupleksā komunikācija
Lielākā daļa RS485 lietojumprogrammu Arduino tiek ieviestas pusdupleksa režīmā, jo tas ir nepieciešams divi vadi, un ļauj gan sūtīt, gan saņemt datus, lai gan ne vienlaicīgi. Tas ir, ja viena ierīce sūta datus, pārējām ierīcēm jābūt uztveršanas režīmā un otrādi.
Lai pārslēgtos starp pārraides un saņemšanas režīmu, izmantojiet papildu tapas (RE/DE) modulī MAX485, kuru vadīsit no koda, lai noteiktu, vai ierīcei jebkurā laikā ir jāsūta vai jāsaņem.
Šis režīms ir īpaši noderīgs, ja vienā kopnē ir vairākas ierīces, kurām ir jāsazinās savā starpā, bet ne vienlaicīgi.
Pilna dupleksā komunikācija
Pilndupleksajā režīmā ierīces var sūtīt un saņemt datus vienlaikus. Tomēr, lai ieviestu pilnu dupleksu RS485, divi savīti vadu pāri, kas palielina elektroinstalācijas izmaksas un sarežģītību. Turklāt jums būs nepieciešami divi MAX485 moduļi katrai ierīcei, lai atsevišķi pārvaldītu pārraides un saņemšanas kanālus.
Komponenti, kas nepieciešami RS485 saziņai ar Arduino
Lai Arduino ieviestu RS485 sakaru sistēmu, jums būs nepieciešami šādi komponenti:
- Viens vai vairāki Arduinos: Derēs jebkurš Arduino modelis, taču šajā apmācībā mēs to izmantosim Arduino UNO un Arduino MEGA kā piemērus.
- MAX485 moduļi: Šie moduļi ļauj pārveidot TTL signālus no Arduino uz RS485 un otrādi. Tie ir ļoti lēti un viegli atrodami tādos veikalos kā AliExpress vai eBay.
- Izbeigšanas rezistori: Rezistors starp 120 omi parasti tiek novietots katrā kopnes galā, lai izvairītos no atstarošanas signālā. Nelielos attālumos var iztikt bez tiem, bet garākās instalācijās tie ir būtiski, lai saglabātu signāla integritāti.
- Vītā pāra kabeļi: Ieteicams izmantot vītā pāra kabeļus, lai samazinātu elektromagnētiskos traucējumus, īpaši trokšņainā rūpnieciskā vidē.
Vispārējā savienojuma shēma
Pievienojiet MAX485 moduļus Arduino ir diezgan vienkārši. Vissvarīgākās tapas ir A un B, kas atbilst RS485 kopnes līnijām. Šīm tapām jābūt savienotām ar visām kopnes ierīcēm. Turklāt modulim ir RE un DE tapas, kas kontrolē, vai modulis ir uztvērēja vai raidītāja režīmā.
Kopumā moduļu savienošana ar Arduino tiek veikta šādi:
- Moduļa VCC un GND savienojas ar VCC un GND Arduino.
- Moduļa DI (datu ievade) tiek savienots ar Arduino TX tapu, ja modulis darbojas kā emitētājs.
- Moduļa RO (uztvērēja izeja) tiek savienots ar Arduino RX tapu, ja modulim ir jādarbojas kā uztvērējam.
- DE un RE ir jāvada no Arduino digitālās tapas, lai pārslēgtos starp pārraides un saņemšanas režīmu.
Ja modulis ir nepieciešams tikai, lai tas darbotos kā sūtītājs vai uztvērējs, varat savienot RE un DE tieši pie HIGH vai LOW. Tomēr sarežģītākiem sakariem, kuros ierīcei ir jāpārslēdzas starp pārraidi un saņemšanu, vislabāk ir vadīt šīs tapas no programmatūras.
Kodu piemēri RS485 komunikācijai
Tālāk ir sniegti vairāki piemēri, kas aptver dažādas sakaru konfigurācijas ar RS485 uz Arduino.
Vienkārša komunikācija
Izdevēja kods
Pamatsistēmai, kurā ir tikai viens sūtītājs un viens saņēmējs, sūtītāja kods varētu izskatīties šādi:
void setup() { Serial.begin(9600); } void loop() { Serial.write(analogRead(0)); delay(500); }
Uztvērēja kods
Uztvērējs vienkārši nolasīs datus, kas nonāk caur seriālo portu:
void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }
Pusdupleksā komunikācija
Šajā piemērā mēs ieviešam pusduplekso sistēmu, kurā ierīces pārmaiņus sūta un saņem datus.
Skolotāja kods
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); } }
Vergu kods
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); } }
Pilna dupleksā komunikācija
Lai īstenotu pilnu duplekso komunikāciju, katram Arduino būs nepieciešami divi MAX485 moduļi. Katrs moduļu pāris apstrādās vienu datu līniju: viena pārraidei un viena saņemšanai.
Kods būs līdzīgs iepriekšējos piemēros, taču šajā gadījumā abas ierīces vienmēr raidīs un saņems vienlaicīgi.
Paplašināšana uz vairākām ierīcēm, izmantojot RS485
RS485 ir iespēja savienot līdz 32 ierīcēm vienā kopnē, un īpašos gadījumos tas var sasniegt vairāk. Tas padara to par lielisku izvēli projektiem, kuros iesaistīti vairāki mikrokontrolleri vai ierīces. Lai identificētu katru no tiem tīklā, parasti katrai ierīcei tiek ieviesta adrese vai ID.
Šajā gadījumā kapteinis nosūtīs ziņojumu ar tās ierīces adresi, ar kuru tas vēlas sazināties, un tikai šī ierīce būs atbildīga par ziņojuma apstrādi un atbildes sniegšanu.
Tam ir pievienota izmantošanas iespēja sarežģītāki protokoli piemēram, MODBUS, kas ļauj izveidot ļoti efektīvus un drošus tīklus nozarē.
Mājas projektiem vai mazāk prasīgām lietojumprogrammām varat katram Arduino vienkārši piešķirt identifikatoru un likt tiem atbildēt tikai uz tiem paredzētajiem ziņojumiem.