- Διαφορά μεταξύ επικοινωνίας UART και RS485
- Απαιτούμενα στοιχεία
- Διάγραμμα κυκλώματος για ενσύρματη επικοινωνία μεγάλης απόστασης
- Μονάδα μετατροπέα MAX485 UART-RS485
- Καλώδιο Ethernet CAT-6E
- Επεξήγηση κώδικα Arduino
- συμπέρασμα
Χρησιμοποιούμε Πίνακες Ανάπτυξης Μικροελεγκτών όπως Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 κ.λπ. εδώ και πολύ καιρό τώρα στα μικρά μας έργα όπου οι περισσότερες φορές η απόσταση μεταξύ των αισθητήρων και της πλακέτας δεν είναι μεγαλύτερη από λίγα εκατοστά σε Σε αυτές τις αποστάσεις, η επικοινωνία μεταξύ των διαφόρων μονάδων αισθητήρων, των ρελέ, των ενεργοποιητών και των ελεγκτών μπορεί εύκολα να γίνει μέσω απλών καλωδίων βραχυκυκλωτήρα χωρίς να ανησυχούμε για την παραμόρφωση σήματος στο μέσο και τους ηλεκτρικούς θορύβους που εισέρχονται σε αυτό. Αλλά εάν δημιουργείτε ένα σύστημα ελέγχου με αυτούς τους πίνακες ανάπτυξης σε απόσταση μεγαλύτερη από 10 έως 15 μέτρα, τότε θα πρέπει να λάβετε υπόψη την ισχύ του θορύβου και του σήματος, επειδή εάν θέλετε το σύστημά σας να λειτουργεί αξιόπιστα, τότε δεν μπορείτε να χάσετε το δεδομένα κατά τη μεταφορά.
Υπάρχουν πολλοί διαφορετικοί τύποι πρωτοκόλλων σειριακής επικοινωνίας όπως το I2C και το SPI που μπορούν να εφαρμοστούν εύκολα με το Arduino και σήμερα πρόκειται να εξετάσουμε ένα άλλο πιο συχνά χρησιμοποιούμενο πρωτόκολλο που ονομάζεται RS485, το οποίο χρησιμοποιείται πολύ συχνά σε βιομηχανικά περιβάλλοντα υψηλού θορύβου για τη μεταφορά δεδομένων μεγάλη απόσταση. Σε αυτό το σεμινάριο, θα μάθουμε για το πρωτόκολλο επικοινωνίας RS485 και πώς να το εφαρμόσουμε με τα δύο Arduino Nano που έχουμε μαζί μας και πώς να χρησιμοποιήσουμε τη μονάδα μετατροπής MAX485 RS485 σε UART. Προηγουμένως είχαμε πραγματοποιήσει επίσης MAX485 επικοινωνία με το Arduino και MAX485 Επικοινωνία με Raspberry pi, μπορείτε επίσης να τα ελέγξετε αν ενδιαφέρεστε.
Διαφορά μεταξύ επικοινωνίας UART και RS485
Οι περισσότεροι από τους αισθητήρες χαμηλού κόστους και άλλες μονάδες όπως GPS, Bluetooth, RFID, ESP8266 κ.λπ. που χρησιμοποιούνται συνήθως με το Arduino, το Raspberry Pi στην αγορά χρησιμοποιεί επικοινωνία με βάση το UART TTL επειδή απαιτεί μόνο 2 καλώδια TX (Transmitter) και RX (Δέκτης). Δεν είναι ένα τυπικό πρωτόκολλο επικοινωνίας, αλλά είναι ένα φυσικό κύκλωμα με το οποίο μπορείτε να μεταδίδετε και να λαμβάνετε σειριακά δεδομένα με άλλα περιφερειακά. Μπορεί να μεταδίδει / λαμβάνει δεδομένα μόνο σειριακά, επομένως μετατρέπει πρώτα τα παράλληλα δεδομένα σε σειριακά δεδομένα και μετά μεταδίδει τα δεδομένα.
Το UART είναι μια ασύγχρονη συσκευή μετάδοσης, επομένως δεν υπάρχει σήμα ρολογιού για συγχρονισμό των δεδομένων μεταξύ των δύο συσκευών, αντί να χρησιμοποιεί bits έναρξης και διακοπής στην αρχή και στο τέλος κάθε πακέτου δεδομένων αντίστοιχα για να επισημάνει τα άκρα των δεδομένων που μεταφέρονται. Τα δεδομένα που μεταδίδονται από το UART οργανώνονται σε πακέτα. Κάθε πακέτο περιέχει 1 bit έναρξης, 5 έως 9 bit δεδομένων (ανάλογα με το UART), ένα προαιρετικό bit ισοτιμίας και 1 ή 2 bit διακοπής. Είναι πολύ καλά τεκμηριωμένο και ευρέως χρησιμοποιούμενο και έχει επίσης ένα bit ισοτιμίας που επιτρέπει τον έλεγχο σφαλμάτων. Αλλά υπάρχουν ορισμένοι περιορισμοί σε αυτό, καθώς δεν μπορεί να υποστηρίξει πολλούς σκλάβους και πολλούς δασκάλους και το μέγιστο πλαίσιο δεδομένων περιορίζεται σε 9 bit. Για τη μεταφορά δεδομένων, οι ρυθμοί baud τόσο του Master όσο και του Slave πρέπει να κυμαίνονται μεταξύ 10% μεταξύ τους. Παρακάτω φαίνεται το παράδειγμα του πώς ένας χαρακτήρας είναι ένας πομπός μέσω μιας γραμμής δεδομένων UART. Το σήμα High και Lows μετράται έναντι του επιπέδου GND, οπότε η μετατόπιση του επιπέδου GND θα έχει καταστροφικές συνέπειες στη μεταφορά δεδομένων.
Από την άλλη πλευρά, το RS485 είναι μια πιο βασισμένη στη βιομηχανία επικοινωνία που έχει αναπτυχθεί για ένα δίκτυο πολλαπλών συσκευών που μπορούν να χρησιμοποιηθούν σε μεγάλες αποστάσεις και σε μεγαλύτερες ταχύτητες. Λειτουργεί με μια μέθοδο μέτρησης διαφορικής σηματοδότησης αντί για μέτρηση τάσης με πείρο GND. Τα σήματα RS485 κυμαίνονται και κάθε σήμα μεταδίδεται μέσω γραμμής Sig + και γραμμής Sig.
Ο δέκτης RS485 συγκρίνει τη διαφορά τάσης μεταξύ των δύο γραμμών, αντί για το απόλυτο επίπεδο τάσης σε μια γραμμή σήματος. Αυτό λειτουργεί καλά και αποτρέπει την ύπαρξη βρόχων εδάφους, μια κοινή πηγή προβλημάτων επικοινωνίας. Τα καλύτερα αποτελέσματα επιτυγχάνονται εάν οι γραμμές Sig + και Sig είναι περιστρεφόμενες καθώς περιστρέφονται ακυρώνουν την επίδραση του ηλεκτρομαγνητικού θορύβου που προκαλείται σε ένα καλώδιο και παρέχουν πολύ καλύτερη ανοσία έναντι του θορύβου που επιτρέπει στο RS485 να μεταδίδει τα δεδομένα έως και 1200m εύρους. Το συνεστραμμένο ζεύγος επιτρέπει επίσης τις ταχύτητες μετάδοσης να είναι πολύ υψηλότερες από ό, τι είναι δυνατό με ευθεία καλώδια. Σε μικρές αποστάσεις μετάδοσης, ταχύτητες έως και 35Mbps μπορούν να πραγματοποιηθούν με RS485 αν και η ταχύτητα μετάδοσης θα μειωθεί με την απόσταση. Στα 1200m ταχύτητα μετάδοσης, μπορείτε να χρησιμοποιήσετε μόνο 100kbps ταχύτητας μετάδοσης. Χρειάζεστε ένα ειδικό καλώδιο Ethernet για την πραγματοποίηση αυτού του πρωτοκόλλου επικοινωνίας. Υπάρχουν πολλές κατηγορίες καλωδίων Ethernet που μπορούμε να χρησιμοποιήσουμε όπως τα CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A κ.λπ. Στο σεμινάριό μας, πρόκειται να χρησιμοποιήσουμε καλώδιο CAT-6E που έχει 4 συνεστραμμένα ζεύγη καλωδίων 24AWG και μπορεί να υποστηρίξει έως και 600MHz. Τερματίζεται και στα δύο άκρα από έναν σύνδεσμο RJ45. Τα τυπικά επίπεδα τάσης γραμμής από τους οδηγούς γραμμής είναι τουλάχιστον ± 1,5 V έως το μέγιστο περίπου ± 6 V. Η ευαισθησία εισόδου δέκτη είναι ± 200 mV. Ο θόρυβος στο εύρος ± 200 mV είναι ουσιαστικά αποκλεισμένος λόγω της ακύρωσης θορύβου κοινής λειτουργίας. Ένα παράδειγμα του τρόπου μεταφοράς ενός byte (0x3E) μέσω των δύο γραμμών της επικοινωνίας RS485.
Απαιτούμενα στοιχεία
- Μονάδα μετατροπέα 2 × MAX485
- 2 × Arduino Nano
- 2 × 16 * 2 Αλφαριθμητική LCD
- Ποτενσιόμετρα υαλοκαθαριστήρα 2 × 10k
- Καλώδιο Ethernet Cat-6E
- Πίνακες ψωμιού
- Καλώδια αλτών
Διάγραμμα κυκλώματος για ενσύρματη επικοινωνία μεγάλης απόστασης
Η παρακάτω εικόνα δείχνει το διάγραμμα κυκλώματος πομπού και δέκτη για την ενσύρματη επικοινωνία μεγάλων αποστάσεων του Arduino. Λάβετε υπόψη ότι και τα δύο κυκλώματα πομπού και δέκτη φαίνονται πανομοιότυπα, το μόνο που διαφέρει είναι ο κωδικός που γράφεται σε αυτό. Επίσης, για την επίδειξη, χρησιμοποιούμε έναν πίνακα ως πομπό και έναν πίνακα ως δέκτης, αλλά μπορούμε εύκολα να προγραμματίσουμε τις πλακέτες να λειτουργούν τόσο ως πομπός όσο και ως δέκτης με την ίδια ρύθμιση.
Το διάγραμμα σύνδεσης για το παραπάνω κύκλωμα δίνεται επίσης παρακάτω.
Όπως μπορείτε να δείτε παραπάνω, υπάρχουν δύο σχεδόν πανομοιότυπα ζεύγη κυκλωμάτων με το καθένα να έχει Arduino nano, 16 * 2 Alphanumeric LCD και MAX485 UART to RS485 IC converter συνδεδεμένο σε κάθε άκρο ενός καλωδίου Ethernet Cat-6E μέσω ενός βύσματος RJ45. Το καλώδιο που έχω χρησιμοποιήσει στο σεμινάριο έχει μήκος 25 μέτρα. Θα στείλουμε ορισμένα δεδομένα από την πλευρά του πομπού πάνω από το καλώδιο από το Nano, το οποίο μετατρέπεται σε σήματα RS485 μέσω της μονάδας MAX RS485 που λειτουργεί σε Master Mode.
Στο τέλος λήψης, η μονάδα μετατροπέα MAX485 λειτουργεί ως Slave και ακούγοντας τη μετάδοση από το Master μετατρέπει ξανά τα δεδομένα RS485 που έλαβε στα τυπικά σήματα 5V TTL UART για ανάγνωση από τον Nano που λαμβάνει και εμφανίζεται σε 16 * 2 Αλφαριθμητική LCD συνδεδεμένη σε αυτήν.
Μονάδα μετατροπέα MAX485 UART-RS485
Αυτή η μονάδα UART-RS485 Converter διαθέτει ενσωματωμένο τσιπ MAX485 το οποίο είναι ένας πομποδέκτης χαμηλής ισχύος και περιορισμένης ταχύτητας που χρησιμοποιείται για την επικοινωνία RS-485. Λειτουργεί σε ένα μόνο τροφοδοτικό + 5V και το ονομαστικό ρεύμα είναι 300 μA. Λειτουργεί σε ημι-αμφίδρομη επικοινωνία για να εφαρμόσει τη λειτουργία μετατροπής του επιπέδου TTL σε επίπεδο RS-485 που σημαίνει ότι μπορεί είτε να μεταδώσει είτε να λάβει ανά πάσα στιγμή, όχι και τα δύο, μπορεί να επιτύχει μέγιστο ρυθμό μετάδοσης 2,5Mbps. Ο πομποδέκτης MAX485 αντλεί ρεύμα τροφοδοσίας μεταξύ 120μA και 500μA υπό τις εκφορτωμένες ή πλήρως φορτωμένες συνθήκες όταν ο οδηγός είναι απενεργοποιημένος. Ο οδηγός περιορίζεται για ρεύμα βραχυκυκλώματος και οι έξοδοι του οδηγού μπορούν να τοποθετηθούν σε κατάσταση υψηλής αντίστασης μέσω του κυκλώματος θερμικού τερματισμού. Η είσοδος του δέκτη έχει ένα χαρακτηριστικό ασφαλούς αστοχίας που εγγυάται λογική υψηλή έξοδο εάν η είσοδος είναι ανοιχτό κύκλωμα.Επιπλέον, έχει ισχυρή απόδοση κατά των παρεμβολών. Διαθέτει επίσης ενσωματωμένα LED για να εμφανίσει την τρέχουσα κατάσταση του τσιπ, δηλαδή εάν το τσιπ τροφοδοτείται ή μεταδίδει ή λαμβάνει δεδομένα καθιστώντας ευκολότερη την αποσφαλμάτωση και τη χρήση.
Το διάγραμμα κυκλώματος που δίνεται παραπάνω εξηγεί πώς το ενσωματωμένο MAX485 IC συνδέεται με διάφορα εξαρτήματα και παρέχει τυπικές επικεφαλίδες αποστάσεων 0,1 ιντσών για χρήση με το breadboard αν θέλετε.
Καλώδιο Ethernet CAT-6E
Όταν σκεφτόμαστε μεταφορά δεδομένων σε μεγάλες αποστάσεις, σκεφτόμαστε αμέσως τη σύνδεση στο Διαδίκτυο μέσω καλωδίων Ethernet. Σήμερα, χρησιμοποιούμε κυρίως Wi-Fi για σύνδεση στο Διαδίκτυο, αλλά νωρίτερα χρησιμοποιούσαμε καλώδια Ethernet που πηγαίνουν σε κάθε προσωπικό υπολογιστή για να το συνδέσουμε στο Διαδίκτυο. Ο κύριος λόγος για τη χρήση αυτών των καλωδίων Ethernet πάνω από κανονικά καλώδια είναι ότι παρέχουν πολύ καλύτερη προστασία έναντι του θορύβου που εισέρχεται και της παραμόρφωσης του σήματος σε μεγάλες αποστάσεις. Έχουν σακάκι θωράκισης πάνω από το στρώμα μόνωσης για προστασία έναντι των ηλεκτρομαγνητικών παρεμβολών και επίσης κάθε ζεύγος καλωδίων περιστρέφεται μαζί για να αποτρέψει τυχόν σχηματισμό βρόχου ρεύματος και συνεπώς πολύ καλύτερη προστασία από το θόρυβο. Συχνά τερματίζονται με 8 ακροδέκτες RJ45 και στα δύο άκρα. Υπάρχουν πολλές κατηγορίες καλωδίων Ethernet που μπορούμε να χρησιμοποιήσουμε όπως τα CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A, κ.λπ. Στο σεμινάριό μας, πρόκειται να χρησιμοποιήσουμε καλώδιο CAT-6E το οποίο έχει 4 συνεστραμμένα ζεύγη καλωδίων 24AWG και μπορεί να υποστηρίξει έως και 600MHz.
Εικόνα που δείχνει πώς ένα ζεύγος συρμάτων περιστρέφεται μέσα στο στρώμα μόνωσης του καλωδίου CAT-6E
Συνδετήρας RJ-45 για καλώδιο Ethernet CAT-6E
Επεξήγηση κώδικα Arduino
Σε αυτό το έργο, χρησιμοποιούμε δύο Arduino Nano, έναν ως πομπό και έναν ως δέκτη οδηγώντας ο καθένας ένα 16 * 2 αλφαριθμητικό LCD για να εμφανίσουμε τα αποτελέσματα. Έτσι, στον κώδικα Arduino, θα επικεντρωθούμε στην αποστολή των δεδομένων και στην εμφάνιση των δεδομένων που έστειλαν ή έλαβαν στην οθόνη LCD.
Για πλευρά πομπού:
Ξεκινάμε με τη συμπερίληψη της τυπικής βιβλιοθήκης για την οδήγηση της οθόνης LCD και δηλώνουμε τον ακροδέκτη D8 του Arduino Nano ως πείρο εξόδου τον οποίο θα χρησιμοποιήσουμε αργότερα για να δηλώσουμε τη μονάδα MAX485 ως πομπό ή δέκτη.
int enablePin = 8; int potval = 0; #περιλαμβάνω
Τώρα έρχεται στο τμήμα εγκατάστασης. Θα τραβήξουμε τον πείρο ενεργοποίησης για να θέσουμε τη μονάδα MAX485 σε λειτουργία πομπού. Δεδομένου ότι είναι ένα μισό-διπλό IC, ως εκ τούτου δεν μπορεί να μεταδίδει και να λαμβάνει ταυτόχρονα. Θα ξεκινήσουμε επίσης την οθόνη LCD εδώ και θα εκτυπώσουμε ένα μήνυμα καλωσορίσματος.
Serial.begin (9600); // αρχικοποίηση σειριακού σε baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Πομπός Nano"); καθυστέρηση (3000) lcd.clear ();
Τώρα στο βρόχο, γράφουμε μια συνεχώς αυξανόμενη ακέραια τιμή στις σειριακές γραμμές που στη συνέχεια μεταδίδεται στο άλλο νανο. Αυτή η τιμή εκτυπώνεται επίσης στην οθόνη LCD για εμφάνιση και εντοπισμό σφαλμάτων.
Serial.print ("Απεσταλμένη τιμή ="); Serial.println (potval); // Σειριακή εγγραφή POTval σε RS-485 Bus lcd.setCursor (0,0); lcd.print ("Απεσταλμένη τιμή"); lcd.setCursor (0,1); lcd.print (potval); καθυστέρηση (1000) lcd.clear (); potval + = 1;
Πλευρά δέκτη:
Και πάλι, ξεκινάμε με τη συμπερίληψη της τυπικής βιβλιοθήκης για την οδήγηση της οθόνης LCD και δηλώνουμε τον ακροδέκτη D8 του Arduino Nano ως πείρο εξόδου που θα χρησιμοποιήσουμε αργότερα για να δηλώσουμε τη μονάδα MAX485 ως πομπό ή δέκτη.
int enablePin = 8; #περιλαμβάνω
Τώρα έρχεται στο τμήμα εγκατάστασης. Θα τραβήξουμε τον πείρο ενεργοποίησης ψηλά για να θέσουμε τη μονάδα MAX485 σε λειτουργία δέκτη. Δεδομένου ότι είναι ένα μισό-διπλό IC, ως εκ τούτου δεν μπορεί να μεταδίδει και να λαμβάνει ταυτόχρονα. Θα ξεκινήσουμε επίσης την οθόνη LCD εδώ και θα εκτυπώσουμε ένα μήνυμα καλωσορίσματος.
Serial.begin (9600); // αρχικοποίηση σειριακού σε baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Receiver Nano"); καθυστέρηση (3000) digitalWrite (enablePin, LOW); // (Το Pin 8 είναι πάντα ΧΑΜΗΛΟ για να λαμβάνετε αξία από το Master)
Τώρα στο βρόχο, ελέγχουμε αν υπάρχει κάτι διαθέσιμο στη σειριακή θύρα και μετά διαβάζουμε τα δεδομένα και επειδή τα εισερχόμενα δεδομένα είναι ακέραιος, τα αναλύουμε και προβάλλουμε στη συνδεδεμένη οθόνη LCD.
int pwmval = Serial.parseInt (); // Λάβετε τιμή INTEGER από το Master μέσω RS-485 Serial.print ("Έχω τιμή"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Ληφθείσα αξία"); lcd.setCursor (0,1); lcd.print (pwmval); καθυστέρηση (1000) lcd.clear ();
συμπέρασμα
Η δοκιμαστική εγκατάσταση που χρησιμοποιήσαμε για αυτό το έργο βρίσκεται παρακάτω.
Η πλήρης εργασία αυτού του έργου βρίσκεται στο παρακάτω βίντεο. Αυτή η μέθοδος είναι μία από τις απλές και εύχρηστες μεθόδους μεταφοράς δεδομένων σε μεγάλες αποστάσεις. Σε αυτό το έργο, χρησιμοποιήσαμε μόνο ρυθμό baud 9600 που είναι πολύ κάτω από τη μέγιστη ταχύτητα μεταφοράς που μπορούμε να επιτύχουμε με τη μονάδα MAX-485, αλλά αυτή η ταχύτητα είναι κατάλληλη για τις περισσότερες από τις μονάδες αισθητήρων εκεί έξω και δεν χρειαζόμαστε πραγματικά όλες τις μέγιστες ταχύτητες ενώ εργάζεστε με το Arduino και άλλους πίνακες ανάπτυξης, εκτός εάν χρησιμοποιείτε το καλώδιο ως σύνδεση ethernet και χρειάζεστε όλο το εύρος ζώνης και την ταχύτητα μεταφοράς που μπορείτε να πάρετε. Παίξτε μόνοι σας με ταχύτητα μεταφοράς και δοκιμάστε άλλους τύπους καλωδίων ethernet Εάν έχετε οποιεσδήποτε ερωτήσεις, αφήστε τις στην παρακάτω ενότητα σχολίων ή χρησιμοποιήστε τα φόρουμ μας και θα προσπαθήσω να απαντήσω καλύτερα. Μέχρι τότε, adios!