- Forskel mellem UART og RS485-kommunikation
- Komponenter, der kræves
- Kredsløbsdiagram for kabelforbundet langdistancekommunikation
- MAX485 UART-RS485 konverteringsmodul
- Ethernet CAT-6E kabel
- Arduino-kode Forklaring
- Konklusion
Vi har brugt Microcontroller Development Boards som Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 osv. I lang tid nu i vores små projekter, hvor det meste af tiden afstanden mellem sensorer og kort ikke er mere end få centimeter ved maks. på disse afstande kan kommunikationen mellem de forskellige sensormoduler, relæer, aktuatorer og controllere let ske via enkle jumperledninger uden at vi er bekymrede over signalforvrængningen i mediet og de elektriske lyde, der kryber ind i det. Men hvis du bygger et kontrolsystem med disse udviklingskort over en afstand større end 10 til 15 meter, skal du tage støj og signaleffekt i betragtning, for hvis du vil have dit system til at fungere pålideligt, har du ikke råd til at miste data under overførsel.
Der er mange forskellige typer serielle kommunikationsprotokoller som I2C og SPI, som let kan implementeres med Arduino, og i dag skal vi se på en anden mest almindeligt anvendte protokol kaldet RS485, som meget almindeligt bruges i industrielle miljøer med høj støj til at overføre data over en lang afstand. I denne vejledning skal vi lære om RS485-kommunikationsprotokollen, og hvordan vi implementerer den med de to Arduino Nano, vi har med os, og hvordan man bruger MAX485 RS485 til UART-konverteringsmodul. Tidligere har vi også udført MAX485 kommunikation med Arduino og også MAX485 kommunikation med Raspberry pi, du kan også tjekke dem ud, hvis du er interesseret.
Forskel mellem UART og RS485-kommunikation
De fleste af de billige sensorer og andre moduler som GPS, Bluetooth, RFID, ESP8266 osv., Som ofte bruges med Arduino, Raspberry Pi på markedet bruger UART TTL-baseret kommunikation, fordi det kun kræver 2 ledninger TX (Transmitter) og RX (Modtager). Det er ikke en standard kommunikationsprotokol, men det er et fysisk kredsløb, som du kan sende og modtage serielle data med andre perifere enheder. Det kan kun sende / modtage data serielt, så det konverterer først de parallelle data til serielle data og sender derefter dataene.
UART er en asynkron transmissionsenhed, derfor er der intet ursignal til at synkronisere dataene mellem de to enheder i stedet for at bruge start- og stopbits i henholdsvis starten og slutningen af hver datapakke for at markere ekstremiteterne af de data, der overføres. UART-transmitterede data er organiseret i pakker. Hver pakke indeholder 1 startbit, 5 til 9 databit (afhængigt af UART), en valgfri paritetsbit og 1 eller 2 stopbit. Det er meget veldokumenteret og meget udbredt, og det har også en paritetsbit, der muliggør fejlkontrol. Men der er nogle begrænsninger for det, da det ikke kan understøtte flere slaver og flere mestre og den maksimale dataramme er begrænset til 9 bit. For overførsel af data skal baudhastighederne for både Master og Slave være mellem 10% af hinanden. Nedenfor vises eksemplet på, hvordan et tegn er en sender over en UART-datalinje. Signal High and Lows måles mod GND-niveauet, så forskydning af GND-niveauet vil have en katastrofal indvirkning på dataoverførslen.
På den anden side er RS485 mere branchebaseret kommunikation, der er udviklet til et netværk af flere enheder, der også kan bruges over lange afstande og ved større hastigheder. Det fungerer på en differentieret signalmetode i stedet for spændingsmåling med GND-pin. RS485-signalerne flyder, og hvert signal transmitteres over en Sig + -linje og en Sig-line.
RS485-modtageren sammenligner spændingsforskellen mellem begge linjer i stedet for det absolutte spændingsniveau på en signallinje. Dette fungerer godt og forhindrer eksistensen af jordsløjfer, en almindelig kilde til kommunikationsproblemer. De bedste resultater opnås, hvis Sig + og Sig-linjer er snoet, da vridning ophæver effekten af elektromagnetisk støj induceret i et kabel og giver en meget bedre immunitet mod støj, som gør det muligt for RS485 at overføre data op til 1200 m rækkevidde. Twisted pair tillader også, at transmissionshastighederne er meget højere end hvad der er muligt med lige kabler. Ved små transmissionsafstande kan hastigheder op til 35 Mbps realiseres med RS485, selvom transmissionshastigheden falder med afstanden. Ved 1200 m transmissionshastighed kan du kun bruge 100 kbps transmissionshastighed. Du har brug for et specielt Ethernet-kabel for at realisere denne kommunikationsprotokol. Der er mange kategorier af Ethernet-kabler, vi kan bruge som CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A osv. I vores vejledning skal vi bruge CAT-6E-kabel som har 4 snoede par 24AWG-ledninger og kan understøtte op til 600MHz. Den afsluttes i begge ender af et RJ45-stik. Typiske netspændingsniveauer fra ledningsdriverne er mindst ± 1,5 V til et maksimum på ca. ± 6 V. Modtagers indgangsfølsomhed er ± 200 mV. Støj i området ± 200 mV er i det væsentlige blokeret på grund af støjreduktion i almindelig tilstand. Et eksempel på, hvordan en byte (0x3E) overføres over de to linjer i RS485-kommunikation.
Komponenter, der kræves
- 2 × MAX485 konverteringsmodul
- 2 × Arduino Nano
- 2 × 16 * 2 Alfanumerisk LCD
- 2 × 10k viskerpotentiometre
- Cat-6E Ethernet-kabel
- Brødbrædder
- Jumper Wires
Kredsløbsdiagram for kabelforbundet langdistancekommunikation
Nedenstående billede viser kredsløbsdiagrammet til transmitteren og modtageren til Arduinos langdistancekablede kommunikation. Vær opmærksom på, at både sender- og modtager kredsløb ser ens ud, det eneste der adskiller sig er koden skrevet i den. Også til demonstrationen bruger vi et kort som sender og et kort som modtager, men vi kan nemt programmere kortene til at fungere som både sender og modtager med samme opsætning
Forbindelsesdiagrammet for ovenstående kredsløb er også angivet nedenfor.
Som du kan se ovenfor er der to næsten identiske par kredsløb, der hver har en Arduino nano, 16 * 2 alfanumerisk LCD og MAX485 UART til RS485 konverter IC tilsluttet til hver ende af et Ethernet Cat-6E kabel via et RJ45 stik. Kablet, som jeg har brugt i vejledningen, er 25 meter langt. Vi sender nogle data fra sendersiden over kablet fra Nano, der konverteres til RS485-signaler via MAX RS485-modul, der fungerer i mastertilstand.
I den modtagende ende fungerer MAX485-konverteringsmodulet som en slave, og lytter til transmissionen fra masteren konverterer det igen de RS485-data, det modtog, til standard 5V TTL UART-signaler, der skal læses af den modtagende Nano og vises på 16 * 2 Alfanumerisk LCD tilsluttet den.
MAX485 UART-RS485 konverteringsmodul
Dette UART-RS485 omformermodul har en indbygget MAX485-chip, som er en laveffekt og svinghastighedsbegrænset transceiver, der bruges til RS-485-kommunikation. Det fungerer ved en enkelt + 5V strømforsyning, og den nominelle strøm er 300 μA. Det fungerer på halv-duplex-kommunikation for at implementere funktionen til at konvertere TTL-niveauet til RS-485-niveau, hvilket betyder, at det enten kan sende eller modtage når som helst, ikke begge dele, det kan opnå en maksimal overførselshastighed på 2,5 Mbps. MAX485 transceiver trækker en forsyningsstrøm på mellem 120μA og 500μA under ubelastede eller fuldt belastede forhold, når driveren er deaktiveret. Driveren er begrænset til kortslutningsstrøm, og driverudgangene kan placeres i en høj impedans-tilstand gennem det termiske nedlukningskredsløb. Modtagerindgangen har en fejlsikker funktion, der garanterer logisk høj output, hvis indgangen er åben kredsløb.Derudover har den en stærk anti-interferens ydeevne. Det har også indbyggede lysdioder til at vise chipens aktuelle tilstand, dvs. om chippen er tændt eller dens transmission eller modtagelse af data, hvilket gør det nemmere at debugge og bruge.
Ovenstående kredsløbsdiagram forklarer, hvordan den indbyggede MAX485 IC er forbundet til forskellige komponenter og giver 0,1-tommer standard afstandshoveder, der kan bruges med brødbræt, hvis du vil.
Ethernet CAT-6E kabel
Når vi tænker på langdistanceoverførsel, tænker vi øjeblikkeligt på at oprette forbindelse til internettet via Ethernet-kabler. I dag bruger vi for det meste Wi-Fi til internetforbindelse, men tidligere brugte vi Ethernet-kabler til hver pc til at forbinde det til internettet. Hovedårsagen til brugen af disse Ethernet-kabler over normale ledninger er, at de giver meget bedre beskyttelse mod støj, der kryber ind og forvrængning af signalet over store afstande. De har afskærmningsjakke over isoleringslaget for at beskytte mod den elektromagnetiske interferens, og hvert ledningspar er også snoet sammen for at forhindre enhver strømsløjfe dannelse og dermed meget bedre beskyttelse mod støj. De afsluttes ofte med 8-bens RJ45-stik i begge ender. Der er mange kategorier af Ethernet-kabler, vi kan bruge som CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A osv. I vores vejledning skal vi bruge CAT-6E-kabel, der har 4 snoede par 24AWG-ledninger og kan understøtte op til 600 MHz.
Billede, der viser, hvordan et par ledninger snoet sig inde i isoleringslaget på CAT-6E-kablet
RJ-45-stik beregnet til CAT-6E Ethernet-kabel
Arduino-kode Forklaring
I dette projekt bruger vi to Arduino Nano, en som sender og en som modtager, der hver kører en 16 * 2 alfanumerisk LCD til at vise resultaterne. Så i Arduino-koden vil vi fokusere på at sende dataene og vise de sendte eller modtagne data på LCD-skærmen.
Til sendersiden:
Vi starter med at inkludere standardbiblioteket til kørsel af LCD og erklære D8-stiften på Arduino Nano som en udgangsstif, som vi senere vil bruge til at erklære MAX485-modulet som en sender eller modtager.
int enablePin = 8; int potval = 0; #omfatte
Kommer nu til installationsdelen. Vi trækker aktiveringsstiften højt for at sætte MAX485-modulet i sendertilstand. Da det er en halvdupleks-IC, kan den derfor ikke både sende og modtage på samme tid. Vi initialiserer også LCD'et her og udskriver en velkomstbesked.
Serial.begin (9600); // initialiser seriel ved baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Transmitter Nano"); forsinkelse (3000); lcd.clear ();
Nu i sløjfen skriver vi en konstant stigende heltalværdi på serielinjerne, som derefter transmitteres til den anden nano. Denne værdi er også trykt på LCD'et til visning og fejlretning.
Serial.print ("Sendt værdi ="); Serial.println (potval); // Serial Write POTval til RS-485 Bus lcd.setCursor (0,0); lcd.print ("Sendt værdi"); lcd.setCursor (0,1); lcd.print (potval); forsinkelse (1000); lcd.clear (); potval + = 1;
Modtagerside:
Her starter vi igen med at inkludere standardbiblioteket til kørsel af LCD og erklære D8-stiften på Arduino Nano som en udgangsstif, som vi senere vil bruge til at erklære MAX485-modulet som en sender eller modtager.
int enablePin = 8; #omfatte
Kommer nu til installationsdelen. Vi trækker aktiveringsstiften højt for at sætte MAX485-modulet i modtagertilstand. Da det er en halvdupleks-IC, kan den derfor ikke både sende og modtage på samme tid. Vi initialiserer også LCD'et her og udskriver en velkomstbesked.
Serial.begin (9600); // initialiser seriel ved baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Modtager Nano"); forsinkelse (3000); digitalWrite (enablePin, LOW); // (Pin 8 altid LAV for at modtage værdi fra Master)
Nu i sløjfen kontrollerer vi, om der er noget tilgængeligt på den serielle port og læser derefter dataene, og da de indgående data er et heltal, analyserer vi dem og vises på den tilsluttede LCD.
int pwmval = Serial.parseInt (); // Modtag INTEGER-værdi fra Master gennem RS-485 Serial.print ("Jeg fik værdi"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Modtaget værdi"); lcd.setCursor (0,1); lcd.print (pwmval); forsinkelse (1000); lcd.clear ();
Konklusion
Den testopsætning, vi brugte til dette projekt, kan findes nedenfor.
Den komplette bearbejdning af dette projekt kan findes i nedenstående video. Denne metode er en af de enkle og nemme at implementere metoder til at overføre data over lange afstande. I dette projekt har vi kun brugt en baudrate på 9600, hvilket er langt under den maksimale overførselshastighed, vi kan opnå med MAX-485-modulet, men denne hastighed er velegnet til de fleste sensormoduler derude, og vi har ikke rigtig brug for alle de maksimale hastigheder, mens du arbejder med Arduino og andre udviklingskort, medmindre du bruger kablet som en Ethernet-forbindelse og har brug for al den båndbredde og overførselshastighed, du kan få. Spil rundt med overførselshastighed alene og prøv også andre Ethernet-kabeltyper. Hvis du har spørgsmål, skal du lade dem være i kommentarfeltet nedenfor eller bruge vores fora, så vil jeg gøre mit bedste for at besvare dem. Indtil da adios!