- Forskjellen mellom UART og RS485-kommunikasjon
- Komponenter kreves
- Kretsdiagram for kablet kommunikasjon over lang avstand
- MAX485 UART-RS485 omformermodul
- Ethernet CAT-6E kabel
- Arduino-kode Forklaring
- Konklusjon
Vi har brukt Microcontroller Development Boards som Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430, etc. i lang tid nå i våre små prosjekter der det meste avstanden mellom sensorene og kortet ikke er mer enn noen få centimeter på maks. på disse avstandene kan kommunikasjonen mellom de forskjellige sensormodulene, reléene, aktuatorene og kontrollerne enkelt gjøres over enkle jumperledninger uten at vi er bekymret for signalforvrengningen i mediet og de elektriske lydene som kryper inn i den. Men hvis du bygger et styringssystem med disse utviklingstavlene over en avstand større enn 10 til 15 meter, bør du ta hensyn til støy og signaleffekt, for hvis du vil at systemet ditt skal fungere pålitelig, har du ikke råd til å miste data mens du overfører.
Det er mange forskjellige typer serielle kommunikasjonsprotokoller som I2C og SPI som lett kan implementeres med Arduino, og i dag skal vi se på en annen mest brukte protokoll kalt RS485, som ofte brukes i industrielle miljøer med høy støy for å overføre data over en lang avstand. I denne opplæringen skal vi lære om RS485-kommunikasjonsprotokollen og hvordan du implementerer den med de to Arduino Nano vi har med oss, og hvordan du bruker MAX485 RS485 til UART-konverteringsmodul. Tidligere har vi også utført MAX485 kommunikasjon med Arduino og også MAX485 kommunikasjon med Raspberry pi, du kan også sjekke dem ut hvis du er interessert.
Forskjellen mellom UART og RS485-kommunikasjon
De fleste av lavprissensorene og andre moduler som GPS, Bluetooth, RFID, ESP8266, etc. som ofte brukes med Arduino, Raspberry Pi i markedet bruker UART TTL-basert kommunikasjon fordi det bare krever to ledninger TX (sender) og RX (Mottaker). Det er ikke en standard kommunikasjonsprotokoll, men det er en fysisk krets som du kan overføre og motta seriell data med andre eksterne enheter. Den kan bare overføre / motta data serielt, så den konverterer først de parallelle dataene til serielle data og overfører deretter dataene.
UART er en asynkron overføringsenhet, derfor er det ikke noe klokkesignal for å synkronisere dataene mellom de to enhetene, i stedet for å bruke start- og stoppbiter ved henholdsvis begynnelsen og slutten av hver datapakke for å markere ekstremiteten til dataene som overføres. UART-overførte data er organisert i pakker. Hver pakke inneholder 1 startbit, 5 til 9 databiter (avhengig av UART), en valgfri paritetsbit og 1 eller 2 stoppbiter. Det er veldig godt dokumentert og mye brukt, og det har også en paritetsbit for å tillate feilkontroll. Men det er noen begrensninger i det, da det ikke kan støtte flere slaver og flere mestere og den maksimale datarammen er begrenset til 9 bits. For overføring av data må baudrate for både Master og Slave være mellom 10% av hverandre. Nedenfor vises eksemplet på hvordan et tegn er en sender over en UART-datalinje. Signal High and Lows måles mot GND-nivået, så forskyvning av GND-nivået vil ha en katastrofal effekt på dataoverføringen.
På den annen side er RS485 mer industribasert kommunikasjon som er utviklet for et nettverk av flere enheter som også kan brukes over lange avstander og med større hastigheter. Den opererer på en differensial signalmetode i stedet for spenningsmåling med GND-pin. RS485-signalene flyter, og hvert signal overføres over en Sig + -linje og en Sig-line.
RS485-mottakeren sammenligner spenningsforskjellen mellom begge linjene, i stedet for det absolutte spenningsnivået på en signallinje. Dette fungerer bra og forhindrer eksistensen av bakkesløyfe, en vanlig kilde til kommunikasjonsproblemer. De beste resultatene oppnås hvis Sig + og Sig-linjene blir vridd da vridning opphever effekten av elektromagnetisk støy indusert i en kabel og gir en mye bedre immunitet mot støyen som gjør at RS485 kan overføre dataene opp til 1200 m rekkevidde.. Twisted pair lar også overføringshastighetene være mye høyere enn det som er mulig med rette kabler. Ved små overføringsavstander kan hastigheter opp til 35 Mbps realiseres med RS485, selv om overføringshastigheten vil reduseres med avstanden. Ved 1200 m overføringshastighet kan du bare bruke 100 kbps overføringshastighet. Du trenger en spesiell Ethernet-kabel for å realisere denne kommunikasjonsprotokollen. Det er mange kategorier av Ethernet-kabler vi kan bruke som CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A, etc. I vår veiledning skal vi bruke CAT-6E-kabel som har 4 tvinnede par 24AWG-ledninger og kan støtte opptil 600 MHz. Den avsluttes i begge ender av en RJ45-kontakt. Typiske linjespenningsnivåer fra linjedriverne er minimum ± 1,5 V til maksimalt ca ± 6 V. Mottakerens inngangsfølsomhet er ± 200 mV. Støy i området ± 200 mV er hovedsakelig blokkert på grunn av støyavbrudd i vanlig modus. Et eksempel på hvordan en byte (0x3E) overføres over de to linjene i RS485-kommunikasjon.
Komponenter kreves
- 2 × MAX485 omformermodul
- 2 × Arduino Nano
- 2 × 16 * 2 Alfanumerisk LCD
- 2 × 10k viskerpotensiometre
- Cat-6E Ethernet-kabel
- Brettbrett
- Jumper Wires
Kretsdiagram for kablet kommunikasjon over lang avstand
Bildet nedenfor viser sender- og mottakerkretsdiagrammet for Arduinos langdistanse-kablet kommunikasjon. Vær oppmerksom på at både sender- og mottakerkretsene ser like ut, det eneste som skiller seg er koden som er skrevet inn i den. Også for demonstrasjonen bruker vi ett brett som sender og ett brett som mottaker, men vi kan enkelt programmere brettene til å fungere som både sender og mottaker med samme oppsett
Koblingsskjemaet for kretsen ovenfor er også gitt nedenfor.
Som du kan se ovenfor, er det to nesten identiske par kretser som hver har en Arduino nano, 16 * 2 alfanumerisk LCD og MAX485 UART til RS485 omformer IC koblet til hver ende av en Ethernet Cat-6E-kabel via en RJ45-kontakt. Kabelen som jeg har brukt i veiledningen er 25 meter lang. Vi sender noen data fra sendersiden over kabelen fra Nano som konverteres til RS485-signaler via MAX RS485-modul som fungerer i hovedmodus.
I mottakersiden fungerer MAX485-omformermodulen som en slave, og lytter til overføringen fra masteren konverterer den igjen RS485-data den mottok til standard 5V TTL UART-signaler som skal leses av den mottakende Nano og vises på 16 * 2 Alfanumerisk LCD koblet til den.
MAX485 UART-RS485 omformermodul
Denne UART-RS485-omformermodulen har en innebygd MAX485-brikke som er en laveffekt og begrenset transceiver som brukes til RS-485-kommunikasjon. Det fungerer ved en enkelt + 5V strømforsyning, og merkestrømmen er 300 μA. Det fungerer på halv-dupleks kommunikasjon for å implementere funksjonen for å konvertere TTL-nivået til RS-485-nivå, noe som betyr at det enten kan sende eller motta når som helst, ikke begge deler, det kan oppnå en maksimal overføringshastighet på 2,5 Mbps. MAX485 transceiver trekker en forsyningsstrøm på mellom 120μA og 500μA under ulastede eller fullastede forhold når driveren er deaktivert. Driveren er begrenset for kortslutningsstrøm, og driverutgangene kan plasseres med høy impedans gjennom den termiske avstengningskretsen. Mottakerinngangen har en feilsikker funksjon som garanterer logisk høy effekt hvis inngangen er åpen krets.I tillegg har den sterk anti-interferens ytelse. Den har også innebygde lysdioder for å vise den nåværende tilstanden til brikken, det vil si om brikken er drevet eller dens overføring eller mottak av data, noe som gjør det lettere å feilsøke og bruke.
Kretsskjemaet ovenfor forklarer hvordan MAX485 IC ombord er koblet til forskjellige komponenter og gir 0,1-tommers standardavstandshoder som kan brukes med brødbrett hvis du vil.
Ethernet CAT-6E kabel
Når vi tenker på dataoverføring på lang avstand, tenker vi øyeblikkelig å koble til internett via Ethernet-kabler. I dag bruker vi for det meste Wi-Fi for internettforbindelse, men tidligere brukte vi Ethernet-kabler som gikk til hver personlige datamaskin for å koble den til internett. Hovedårsaken bak bruk av disse Ethernet-kablene over normale ledninger er at de gir mye bedre beskyttelse mot støy som kryper inn og forvrenger signalet over store avstander. De har skjermingsjakke over isolasjonslaget for å beskytte mot elektromagnetisk forstyrrelse, og hvert ledningspar er også vridd sammen for å forhindre strømdannelse og dermed mye bedre beskyttelse mot støy. De blir ofte avsluttet med 8-pin RJ45-kontakter i hver ende. Det er mange kategorier Ethernet-kabler vi kan bruke som CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A, etc. I vår veiledning skal vi bruke CAT-6E-kabel som har 4 tvinnede par 24AWG-ledninger og kan støtte opptil 600 MHz.
Bilde som viser hvordan et par ledninger vrides inne i isolasjonslaget på CAT-6E-kabelen
RJ-45-kontakt beregnet for CAT-6E Ethernet-kabel
Arduino-kode Forklaring
I dette prosjektet bruker vi to Arduino Nano, en som sender og en som mottaker som hver kjører en 16 * 2 alfanumerisk LCD for å vise resultatene. Så i Arduino-koden vil vi fokusere på å sende dataene og vise de sendte eller mottatte dataene på LCD-skjermen.
For sendersiden:
Vi begynner med å inkludere standardbiblioteket for å kjøre LCD-skjermen og erklære D8-pinnen på Arduino Nano som en utgangspinne som vi senere vil bruke til å erklære MAX485-modulen som en sender eller mottaker.
int enablePin = 8; int potval = 0; #inkludere
Kommer nå til oppsettdelen. Vi vil trekke aktiveringspinnen høyt for å sette MAX485-modulen i sendermodus. Siden det er en halvdupleks-IC, kan den derfor ikke både sende og motta samtidig. Vi initialiserer også LCD-skjermen her og skriver ut en velkomstmelding.
Serial.begin (9600); // initialisere seriell 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 ();
Nå i sløyfen skriver vi en kontinuerlig økende heltallsverdi på serielinjene som deretter overføres til den andre nano. Denne verdien er også trykt på LCD-skjermen for visning og feilsøking.
Serial.print ("Sendt verdi ="); Serial.println (potval); // Seriell skrivepotval til RS-485 buss lcd.setCursor (0,0); lcd.print ("Sendt verdi"); lcd.setCursor (0,1); lcd.print (potval); forsinkelse (1000); lcd.clear (); potval + = 1;
Mottakerside:
Også her begynner vi med å inkludere standardbiblioteket for å kjøre LCD-skjermen og erklære D8-pinnen på Arduino Nano som en utgangspinne som vi senere vil bruke til å erklære MAX485-modulen som sender eller mottaker.
int enablePin = 8; #inkludere
Kommer nå til oppsettdelen. Vi vil trekke aktiveringspinnen høyt for å sette MAX485-modulen i mottakermodus. Siden det er en halv dupleks-IC, kan den derfor ikke både sende og motta samtidig. Vi initialiserer også LCD-skjermen her og skriver ut en velkomstmelding.
Serial.begin (9600); // initialisere seriell ved baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Mottaker Nano"); forsinkelse (3000); digitalWrite (enablePin, LOW); // (Pin 8 alltid LAV for å motta verdi fra Master)
Nå i sløyfen, sjekker vi om det er noe tilgjengelig på den serielle porten, og deretter leser vi dataene, og siden innkommende data er et heltall, analyserer vi dem og viser på den tilkoblede LCD-skjermen.
int pwmval = Serial.parseInt (); // Motta INTEGER-verdi fra Master gjennom RS-485 Serial.print ("Jeg fikk verdi"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Mottatt verdi"); lcd.setCursor (0,1); lcd.print (pwmval); forsinkelse (1000); lcd.clear ();
Konklusjon
Testoppsettet vi brukte for dette prosjektet finner du nedenfor.
Fullstendig arbeid med dette prosjektet finner du i videoen som er lenket nedenfor. Denne metoden er en av de enkle og enkle å implementere metoder for å overføre data over lange avstander. I dette prosjektet har vi bare brukt en overføringshastighet på 9600 som er godt under den maksimale overføringshastigheten vi kan oppnå med MAX-485-modulen, men denne hastigheten passer for de fleste sensormodulene der ute, og vi trenger ikke egentlig alle maksimale hastigheter mens du arbeider med Arduino og andre utviklingskort, med mindre du bruker kabelen som et Ethernet-tilkobling og trenger all båndbredde og overføringshastighet du kan få. Spill rundt med overføringshastighet alene, og prøv også andre Ethernet-kabeltyper. Hvis du har spørsmål, kan du legge dem i kommentarfeltet nedenfor eller bruke forumene våre, så vil jeg prøve mitt beste for å svare på dem. Inntil da, adios!