- Atšķirība starp UART un RS485 komunikāciju
- Nepieciešamās sastāvdaļas
- Liela attāluma vadu sakaru shēma
- MAX485 UART-RS485 pārveidotāja modulis
- Ethernet CAT-6E kabelis
- Arduino koda skaidrojums
- Secinājums
Mēs jau ilgu laiku savos mazajos projektos izmantojam tādas mikrokontrolleru izstrādes plāksnes kā Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 utt. šajos attālumos saziņu starp dažādiem sensoru moduļiem, relejiem, izpildmehānismiem un kontrolieriem var viegli veikt, izmantojot vienkāršus džempera vadus, neuztraucoties par signāla sagrozīšanu vidē un tajā iekļūstošajiem elektriskajiem trokšņiem. Bet, ja jūs veidojat vadības sistēmu ar šīm izstrādes plāksnēm attālumā, kas pārsniedz 10 līdz 15 metrus, jums jāņem vērā troksnis un signāla jauda, jo, ja vēlaties, lai jūsu sistēma darbotos droši, jūs nevarat atļauties zaudēt datu pārsūtīšanas laikā.
Ir daudz dažādu sērijveida sakaru protokolu veidu, piemēram, I2C un SPI, kurus var viegli ieviest ar Arduino, un šodien mēs aplūkosim vēl vienu visbiežāk izmantoto protokolu RS485, ko ļoti bieži izmanto rūpnieciskā vidē ar lielu trokšņu līmeni, lai pārsūtītu datus liels attālums. Šajā apmācībā mēs uzzināsim par RS485 sakaru protokolu un to, kā to ieviest ar diviem Arduino Nano, kas mums ir, un kā izmantot MAX485 RS485 uz UART pārveidošanas moduli. Iepriekš mēs esam veikuši arī MAX485 saziņu ar Arduino un arī MAX485 komunikāciju ar Raspberry pi, ja vēlaties, varat tos arī pārbaudīt.
Atšķirība starp UART un RS485 komunikāciju
Lielākā daļa lēto sensoru un citu moduļu, piemēram, GPS, Bluetooth, RFID, ESP8266 utt., Kurus parasti izmanto kopā ar Arduino, tirgū Raspberry Pi izmanto UART TTL sakarus, jo tam nepieciešami tikai 2 vadi TX (raidītājs) un RX (Uztvērējs). Tas nav standarta sakaru protokols, bet tā ir fiziska shēma, ar kuras palīdzību jūs varat pārsūtīt un saņemt sērijas datus ar citām perifērijas ierīcēm. Tas var pārsūtīt / saņemt datus tikai sērijveidā, tāpēc vispirms konvertē paralēlos datus sērijveida un pēc tam datus.
UART ir asinhrona pārraides ierīce, tāpēc nav pulksteņa signāla, lai sinhronizētu datus starp abām ierīcēm, tā vietā, lai atzīmētu pārsūtāmo datu ekstremitātes, tā izmanto sākuma un beigu bitus katra datu paketes sākumā un beigās. UART pārsūtītie dati tiek sakārtoti paketēs. Katrā paketē ir 1 sākuma bits, 5 līdz 9 datu biti (atkarībā no UART), izvēles paritātes bits un 1 vai 2 stop biti. Tas ir ļoti labi dokumentēts un plaši izmantots, un tam ir arī paritātes bits, kas ļauj pārbaudīt kļūdas. Bet tam ir daži ierobežojumi, jo tas nevar atbalstīt vairākus vergus un vairākus kungus un maksimālais datu ietvars ir ierobežots līdz 9 bitiem. Datu pārsūtīšanai gan Master, gan Slave datu pārraides ātrumam jābūt starp 10% viens no otra. Zemāk parādīts piemērs tam, kā raksturs ir raidītājs pa UART datu līniju. Signāla augstais un zemākais līmenis tiek mērīts pret GND līmeni, tāpēc GND līmeņa maiņai būs katastrofāla ietekme uz datu pārsūtīšanu.
No otras puses, RS485 ir vairāk uz nozari balstīta komunikācija, kas izstrādāta vairāku ierīču tīklam, ko var izmantot arī lielos attālumos un arī ar lielāku ātrumu. Tas darbojas ar mērīšanas diferenciālās signalizācijas metodi, nevis ar sprieguma mērīšanu, uzrakstītu GND tapu. RS485 signāli ir peldoši, un katrs signāls tiek pārraidīts pa Sig + līniju un Sig-līniju.
RS485 uztvērējs salīdzina sprieguma starpību starp abām līnijām, nevis signāla līnijas absolūtā sprieguma līmeni. Tas darbojas labi un novērš zemes cilpu esamību, kas ir kopīgs komunikācijas problēmu avots. Vislabākie rezultāti tiek sasniegti, ja Sig + un Sig- līnijas ir savītas, jo griešanās novērš kabeļa radītā elektromagnētiskā trokšņa ietekmi un nodrošina daudz labāku imunitāti pret troksni, kas ļauj RS485 pārraidīt datus līdz pat 1200 m diapazonam. Vītais pāris ļauj arī pārraides ātrumam būt daudz lielākam, nekā iespējams ar taisniem kabeļiem. Mazos pārraides attālumos ar RS485 var sasniegt ātrumu līdz 35Mbps, lai gan pārraides ātrums samazināsies līdz ar attālumu. Pie 1200m pārraides ātruma jūs varat izmantot tikai 100kbps pārraides ātrumu. Šī komunikācijas protokola realizēšanai jums ir nepieciešams īpašs Ethernet kabelis. Ir daudzas Ethernet kabeļu kategorijas, kuras mēs varam izmantot, piemēram, CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A utt. Mūsu apmācībā mēs izmantosim CAT-6E kabeli kurai ir 4 savīti 24AWG vadu pāri un kas var atbalstīt līdz 600MHz. Abos galos to izbeidz RJ45 savienotājs. Tipiskie līnijas sprieguma līmeņi no līnijas draiveriem ir vismaz ± 1,5 V līdz maksimāli aptuveni ± 6 V. Uztvērēja ieejas jutība ir ± 200 mV. Troksnis ± 200 mV diapazonā būtībā tiek bloķēts kopējā režīma trokšņu slāpēšanas dēļ. Piemērs tam, kā baits (0x3E) tiek pārsūtīts pa divām RS485 komunikācijas līnijām.
Nepieciešamās sastāvdaļas
- 2 × MAX485 pārveidotāja modulis
- 2 × Arduino Nano
- 2 × 16 * 2 burtciparu LCD
- 2 × 10k tīrītāju potenciometri
- Cat-6E Ethernet kabelis
- Maizes dēļi
- Džemperu vadi
Liela attāluma vadu sakaru shēma
Zemāk redzamajā attēlā parādīta raidītāja un uztvērēja shēma Arduino tālsatiksmes vadu sakariem. Ņemiet vērā, ka gan raidītāja, gan uztvērēja ķēdes izskatās identiskas, atšķirīgais ir tikai tajā ierakstītais kods. Arī demonstrācijai mēs izmantojam vienu dēli kā raidītāju un vienu dēli kā uztvērēju, taču mēs varam viegli ieprogrammēt tāfeles darboties gan kā raidītāju, gan kā uztvērēju ar tādu pašu iestatījumu
Zemāk ir dota arī iepriekš minētās shēmas savienojuma shēma.
Kā redzat iepriekš, ir divi gandrīz identiski ķēžu pāri, no kuriem katram ir Arduino nano, 16 * 2 burtciparu LCD un MAX485 UART – RS485 pārveidotāja IC, kas savienoti ar Ethernet Cat-6E kabeļa abiem galiem, izmantojot RJ45 savienotāju. Kabelis, kuru esmu izmantojis apmācībā, ir 25 m garš. Mēs nosūtīsim dažus datus no raidītāja puses pa Nano kabeli, kas tiek pārveidots par RS485 signāliem, izmantojot MAX RS485 moduli, kas darbojas Master režīmā.
Saņemšanas galā MAX485 pārveidotāja modulis darbojas kā vergs, un, klausoties pārraidi no Master, tas atkal pārveido saņemtos RS485 datus par standarta 5V TTL UART signāliem, kurus uztverošais Nano var nolasīt un parādīt uz 16 * Tam pievienots 2 burtciparu LCD.
MAX485 UART-RS485 pārveidotāja modulis
Šim UART-RS485 pārveidotāja modulim ir iebūvēta MAX485 mikroshēma, kas ir mazjaudas un ar ierobežotu ātrumu ierobežots uztvērējs, ko izmanto RS-485 sakariem. Tas darbojas ar vienu + 5V barošanas avotu, un nominālā strāva ir 300 μA. Tas darbojas ar pusduplekso komunikāciju, lai ieviestu TTL līmeņa pārveidošanas funkciju RS-485 līmenī, kas nozīmē, ka tas var vai nu pārraidīt, vai saņemt jebkurā laikā, nevis abus, bet tas var sasniegt maksimālo pārraides ātrumu 2,5 Mbps. MAX485 raiduztvērējs piesaista barošanas strāvu no 120μA līdz 500μA neuzlādētos vai pilnībā noslogotos apstākļos, kad vadītājs ir izslēgts. Vadītājam ir ierobežota īssavienojuma strāva, un vadītāja izejas var novietot ar lielu pretestības stāvokli, izmantojot termiskās izslēgšanās ķēdi. Uztvērēja ieejai ir droša funkcija, kas garantē loģiski augstu jaudu, ja ieeja ir atvērta ķēde.Turklāt tam ir spēcīga pret traucējumu darbība. Tam ir arī iebūvētas gaismas diodes, lai parādītu mikroshēmas pašreizējo stāvokli, ti, vai mikroshēma ir darbināta, vai arī tā pārraida vai saņem datus, kas atvieglo atkļūdošanu un lietošanu.
Iepriekš sniegtā shēmas shēma izskaidro, kā borta MAX485 IC ir savienots ar dažādiem komponentiem, un nodrošina 0,1 collu standarta atstarpes galvenes, kuras, ja vēlaties, izmantosiet ar maizes dēli.
Ethernet CAT-6E kabelis
Domājot par tālsatiksmes datu pārsūtīšanu, mēs uzreiz domājam par savienojuma izveidi ar internetu, izmantojot Ethernet kabeļus. Mūsdienās interneta savienojumam mēs galvenokārt izmantojam Wi-Fi, bet agrāk mēs izmantojām Ethernet kabeļus, kas iet uz katru personālo datoru, lai to savienotu ar internetu. Galvenais iemesls, kāpēc šos Ethernet kabeļus izmanto parastajos vados, ir tas, ka tie nodrošina daudz labāku aizsardzību pret trokšņa iekļūšanu un signāla sagrozīšanu lielos attālumos. Viņiem virs izolācijas slāņa ir pasargājoša jaka, lai pasargātu no elektromagnētiskajiem traucējumiem, un katrs vadu pāris ir savīti kopā, lai novērstu strāvas cilpas veidošanos un tādējādi daudz labāku aizsardzību pret troksni. Tos bieži izbeidz ar 8 kontaktu RJ45 savienotājiem abos galos. Ir daudzas Ethernet kabeļu kategorijas, kuras mēs varam izmantot, piemēram, CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A utt. Mūsu apmācībā mēs izmantosim CAT-6E kabeli, kurā ir 4 savīti pāri 24AWG vadi un kas var atbalstīt līdz 600MHz.
Attēls, kurā redzams, kā CAT-6E kabeļa izolācijas slānī ir savīti vadu pāri
RJ-45 savienotājs domāts CAT-6E Ethernet kabelim
Arduino koda skaidrojums
Šajā projektā mēs izmantojam divus Arduino Nano, vienu kā raidītāju un vienu kā uztvērēju, katrs braucot ar 16 * 2 burtciparu LCD, lai parādītu rezultātus. Tātad, Arduino kodā mēs koncentrēsimies uz datu nosūtīšanu un displeju, kas nosūtīja vai saņēma datus LCD ekrānā.
Raidītāja pusē:
Mēs vispirms iesakām iekļaut LCD displeja bibliotēku un paziņot, ka Arduino Nano D8 tapa ir izejas tapa, kuru vēlāk izmantosim, lai paziņotu, ka MAX485 modulis ir raidītājs vai uztvērējs.
int iespējPin = 8; int potval = 0; # iekļaut
Tagad nāk uz iestatīšanas daļu. Mēs pacelsim iespējošanas tapu augstu, lai nodotu MAX485 moduli raidītāja režīmā. Tā kā tas ir pusduplekss IC, tas vienlaikus nevar gan pārraidīt, gan saņemt. Mēs arī šeit inicializēsim LCD un izdrukāsim sveiciena ziņojumu.
Sērijas sākums (9600); // inicializēt sēriju pie baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Raidītājs Nano"); kavēšanās (3000); lcd.clear ();
Tagad ciklā mēs sērijas līnijās ierakstām nepārtraukti pieaugošu vesela skaitļa vērtību, kas pēc tam tiek pārsūtīta uz otru nano. Šī vērtība tiek uzdrukāta arī LCD, lai parādītu un atkļūdotu.
Serial.print ("Nosūtītā vērtība ="); Serial.println (potval); // Seriālā rakstīšana POTval uz RS-485 kopni lcd.setCursor (0,0); lcd.print ("Nosūtītā vērtība"); lcd.setCursor (0,1); lcd.print (potval); kavēšanās (1000); lcd.clear (); potval + = 1;
Uztvērēja puse:
Šeit atkal mēs iesakām iekļaut standarta bibliotēku LCD vadīšanai un paziņojam, ka Arduino Nano D8 tapa ir izejas tapa, kuru mēs vēlāk izmantosim, lai paziņotu, ka MAX485 modulis ir raidītājs vai uztvērējs.
int iespējPin = 8; # iekļaut
Tagad nāk uz iestatīšanas daļu. Mēs pacelsim iespējošanas tapu augstu, lai MAX485 moduli ievietotu uztvērēja režīmā. Tā kā tas ir pusduplekss IC, tas vienlaikus nevar gan pārraidīt, gan saņemt. Mēs arī šeit inicializēsim LCD un izdrukāsim sveiciena ziņojumu.
Sērijas sākums (9600); // inicializēt sēriju pie baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Uztvērējs Nano"); kavēšanās (3000); digitalWrite (enablePin, LOW); // (8. kontakts vienmēr ir LOW, lai saņemtu vērtību no Master)
Tagad ciklā mēs pārbaudām, vai seriālajā portā ir kaut kas pieejams, un pēc tam nolasām datus, un, tā kā ienākošie dati ir vesels skaitlis, mēs tos parsējam un parādām savienotajā LCD.
int pwmval = Seriālais.parseInt (); // saņemt INTEGER vērtību no Master throught RS-485 Serial.print ("Es saņēmu vērtību"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Saņemtā vērtība"); lcd.setCursor (0,1); lcd.print (pwmval); kavēšanās (1000); lcd.clear ();
Secinājums
Testa iestatīšana, kuru izmantojām šim projektam, ir atrodama zemāk.
Pilnīga šī projekta darbība ir atrodama zemāk esošajā video. Šī metode ir viena no vienkāršām un viegli īstenojamām metodēm datu pārsūtīšanai lielos attālumos. Šajā projektā mēs esam izmantojuši tikai 9600 datu pārraides ātrumu, kas ir krietni zem maksimālā pārsūtīšanas ātruma, ko varam sasniegt ar MAX-485 moduli, taču šis ātrums ir piemērots lielākajai daļai sensoru moduļu, kas tur atrodas, un mums tas patiesībā nav vajadzīgs visu maksimālo ātrumu, strādājot ar Arduino un citiem izstrādes paneļiem, ja vien kabeli neizmantojat kā Ethernet savienojumu un jums nav nepieciešams viss joslas platums un pārsūtīšanas ātrums, ko varat iegūt. Spēlējies pats ar pārsūtīšanas ātrumu un izmēģini arī citus Ethernet kabeļu tipus. Ja jums ir kādi jautājumi, atstājiet tos komentāru sadaļā zemāk vai izmantojiet mūsu forumus, un es centīšos pēc iespējas labāk atbildēt uz tiem. Līdz tam, adios!