Πίνακας περιεχομένων:
- Βήμα 1: Χρησιμοποιημένοι πόροι
- Βήμα 2: CAN (Network Controller Network)
- Βήμα 3: CAN - Χαρακτηριστικά
- Βήμα 4: Χρησιμοποιείται κύκλωμα
- Βήμα 5: Τάσεις γραμμής μετάδοσης (διαφορική ανίχνευση)
- Βήμα 6: ΜΠΟΡΕΙΤΕ ΜΟΡΦΗ ΠΡΟΤΥΠΩΝ ΚΑΙ ΠΛΑΙΣΙΩΝ
- Βήμα 7: ΜΠΟΡΕΙΤΕ ΜΟΡΦΗ Πρότυπα και Πλαίσια
- Βήμα 8: ΜΠΟΡΕΙΤΕ ΜΟΡΦΗ ΠΡΟΤΥΠΩΝ ΚΑΙ ΠΛΑΙΣΙΩΝ
- Βήμα 9: Τέσσερις τύποι πλαισίων (πλαίσια)
- Βήμα 10: Κύκλωμα - Λεπτομέρειες συνδέσεων
- Βήμα 11: Κύκλωμα - Λήψη δεδομένων
- Βήμα 12: Κύκλωμα - Λήψη δεδομένων
- Βήμα 13: Κύκλωμα - Καταγραφή δεδομένων
- Βήμα 14: Βιβλιοθήκη Arduino - CAN
- Βήμα 15: Github
- Βήμα 16: Πηγαίος κώδικας πομπού
- Βήμα 17: Πηγαίος κώδικας: Loop (), Αποστολή τυπικού πακέτου CAN 2.0
- Βήμα 18: Πηγαίος κώδικας: Loop (), Αποστολή ενός εκτεταμένου πακέτου CAN 2.0
- Βήμα 19: Πηγαίος κώδικας δέκτη
- Βήμα 20: Πηγαίος κώδικας: Loop (), Λήψη του πακέτου και Έλεγχος της μορφής
- Βήμα 21: Πηγή: Loop (), Έλεγχος για να διαπιστωθεί εάν πρόκειται για απομακρυσμένο πακέτο
- Βήμα 22: Πηγαίος κώδικας: Loop (), Μήκος δεδομένων που ζητήθηκε ή λήφθηκε
- Βήμα 23: Πηγαίος κώδικας: Loop (), Εάν τα δεδομένα ληφθούν, τότε εκτυπώνει
- Βήμα 24: Κατεβάστε τα αρχεία
Βίντεο: Πρωτόκολλο CAN - Ναι, μπορούμε !: 24 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:37
Ένα άλλο θέμα που πρότειναν πρόσφατα οι ακόλουθοι του καναλιού μου στο YouTube ήταν το πρωτόκολλο CAN (Controller Area Network), στο οποίο θα εστιάσουμε σήμερα. Είναι σημαντικό να εξηγήσουμε ότι το CAN είναι ένα ταυτόχρονο πρωτόκολλο σειριακής επικοινωνίας. Αυτό σημαίνει ότι ο συγχρονισμός μεταξύ των μονάδων που είναι συνδεδεμένες στο δίκτυο εκτελείται σε σχέση με την αρχή κάθε μηνύματος που αποστέλλεται στο δίαυλο. Θα ξεκινήσουμε με την εισαγωγή των βασικών εννοιών του πρωτοκόλλου CAN και θα εκτελέσουμε μια απλή συναρμολόγηση με δύο ESP32.
Στο κύκλωμά μας, τα ESP μπορούν να λειτουργήσουν και ως Master και ως Slave. Μπορείτε να έχετε πολλούς μικροελεγκτές που εκπέμπουν ταυτόχρονα, επειδή το CAN αντιμετωπίζει αυτόματα τη σύγκρουση όλων. Ο πηγαίος κώδικας αυτού του έργου είναι εξαιρετικά απλός. Τσέκαρέ το!
Βήμα 1: Χρησιμοποιημένοι πόροι
- Δύο μονάδες ESP WROOM 32 NodeMcu
- Δύο πομποδέκτες CAN από το WaveShare
- Μπλουζάκια για συνδέσεις
- Λογικός αναλυτής για λήψη
- Τρία καλώδια USB για ESP και αναλυτή
- 10 μέτρα στριμμένο ζευγάρι για να λειτουργήσει ως λεωφορείο
Βήμα 2: CAN (Network Controller Network)
- Αναπτύχθηκε από τη Robert Bosch GmbH τη δεκαετία του 1980 για να εξυπηρετήσει την αυτοκινητοβιομηχανία.
- Έχει διαδοθεί με την πάροδο των ετών λόγω της ευρωστίας και της ευελιξίας εφαρμογής. Χρησιμοποιείται με στρατιωτικό εξοπλισμό, γεωργικά μηχανήματα, βιομηχανικούς και αυτοματισμούς κτιρίων, ρομποτική και ιατρικό εξοπλισμό.
Βήμα 3: CAN - Χαρακτηριστικά
- Σειριακή επικοινωνία δύο συρμάτων
- Έως 8 byte χρήσιμων πληροφοριών ανά πλαίσιο, με δυνατότητα κατακερματισμού
- Διεύθυνση που κατευθύνεται στο μήνυμα και όχι στον κόμβο
- Εκχώρηση προτεραιότητας σε μηνύματα και αναμετάδοση μηνυμάτων "σε αναμονή"
- Αποτελεσματική ικανότητα εντοπισμού και σηματοδότησης σφαλμάτων
- Δυνατότητα Multi-Master (όλοι οι κόμβοι μπορούν να ζητήσουν πρόσβαση διαύλου)
- Δυνατότητα πολλαπλής διανομής (ένα μήνυμα για πολλούς δέκτες ταυτόχρονα)
- Ποσοστά μεταφοράς έως 1Mbit / s σε λεωφορείο 40 μέτρων (μείωση του ρυθμού με την αύξηση του μήκους του διαύλου)
- Ευελιξία διαμόρφωσης και εισαγωγής νέων κόμβων (έως 120 κόμβοι ανά δίαυλο)
- Τυπικό υλικό, χαμηλό κόστος και καλή διαθεσιμότητα
- Ρυθμιζόμενο πρωτόκολλο: ISO 11898
Βήμα 4: Χρησιμοποιείται κύκλωμα
Εδώ, έχω τους πομποδέκτες. Υπάρχει ένα σε κάθε πλευρά και συνδέονται με ένα ζεύγος καλωδίων. Ο ένας είναι υπεύθυνος για την αποστολή και ο άλλος για τη λήψη δεδομένων.
Βήμα 5: Τάσεις γραμμής μετάδοσης (διαφορική ανίχνευση)
Στο CAN, το κυρίαρχο bit είναι το Zero.
Διαφορική ανίχνευση γραμμής μειώνει την ευαισθησία θορύβου (EFI)
Βήμα 6: ΜΠΟΡΕΙΤΕ ΜΟΡΦΗ ΠΡΟΤΥΠΩΝ ΚΑΙ ΠΛΑΙΣΙΩΝ
Τυπική μορφή με αναγνωριστικό 11-bit
Βήμα 7: ΜΠΟΡΕΙΤΕ ΜΟΡΦΗ Πρότυπα και Πλαίσια
Εκτεταμένη μορφή με αναγνωριστικό 29-bit
Βήμα 8: ΜΠΟΡΕΙΤΕ ΜΟΡΦΗ ΠΡΟΤΥΠΩΝ ΚΑΙ ΠΛΑΙΣΙΩΝ
Είναι σημαντικό να σημειωθεί ότι ένα πρωτόκολλο υπολογίζει ήδη το CRC και στέλνει σήματα ACK και EOF, τα οποία είναι πράγματα που έχουν ήδη γίνει από το πρωτόκολλο CAN. Αυτό εγγυάται ότι το μήνυμα που αποστέλλεται δεν θα φτάσει με λάθος τρόπο. Αυτό οφείλεται στο γεγονός ότι εάν εμφανίσει πρόβλημα στο CRC (Redundant Cyclic Check or Redundancy Check), το οποίο είναι ίδιο με ένα ψηφίο ελέγχου πληροφοριών, θα αναγνωριστεί από το CRC.
Βήμα 9: Τέσσερις τύποι πλαισίων (πλαίσια)
Είναι σημαντικό να σημειωθεί ότι ένα πρωτόκολλο υπολογίζει ήδη το CRC και στέλνει σήματα ACK και EOF, τα οποία είναι πράγματα που έχουν ήδη γίνει από το πρωτόκολλο CAN. Αυτό εγγυάται ότι το μήνυμα που αποστέλλεται δεν θα φτάσει με λάθος τρόπο. Αυτό οφείλεται στο γεγονός ότι εάν εμφανίσει πρόβλημα στο CRC (Redundant Cyclic Check or Redundancy Check), το οποίο είναι ίδιο με ένα ψηφίο ελέγχου πληροφοριών, θα αναγνωριστεί από το CRC.
Τέσσερις τύποι πλαισίων (πλαίσια)
Η μετάδοση και λήψη δεδομένων στο CAN βασίζεται σε τέσσερις τύπους πλαισίων. Οι τύποι πλαισίων θα αναγνωρίζονται από παραλλαγές στα bits ελέγχου ή ακόμα και από αλλαγές στους κανόνες γραφής πλαισίου για κάθε περίπτωση.
- Πλαίσιο δεδομένων: Περιέχει δεδομένα πομπού για τον (τους) δέκτη (ες)
- Απομακρυσμένο πλαίσιο: Αυτό είναι ένα αίτημα για δεδομένα από έναν από τους κόμβους
- Error Frame: Είναι ένα πλαίσιο που αποστέλλεται από οποιονδήποτε από τους κόμβους κατά τον εντοπισμό ενός σφάλματος στο δίαυλο και μπορεί να ανιχνευθεί από όλους τους κόμβους
- Πλαίσιο υπερφόρτωσης: Εξυπηρετεί την καθυστέρηση της κυκλοφορίας στο δίαυλο λόγω υπερφόρτωσης δεδομένων ή καθυστέρησης σε έναν ή περισσότερους κόμβους.
Βήμα 10: Κύκλωμα - Λεπτομέρειες συνδέσεων
Βήμα 11: Κύκλωμα - Λήψη δεδομένων
Μήκη κύματος που λαμβάνονται για τυπικό CAN με 11-bit ID
Βήμα 12: Κύκλωμα - Λήψη δεδομένων
Μήκη κύματος που λαμβάνονται για εκτεταμένο CAN με 29-bit ID
Βήμα 13: Κύκλωμα - Καταγραφή δεδομένων
Δεδομένα που λαμβάνονται από τον αναλυτή λογικής
Βήμα 14: Βιβλιοθήκη Arduino - CAN
Δείχνω εδώ τις δύο επιλογές όπου μπορείτε να εγκαταστήσετε τη Βιβλιοθήκη προγράμματος οδήγησης CAN
Arduino IDE Library Manager
Βήμα 15: Github
github.com/sandeepmistry/arduino-CAN
Βήμα 16: Πηγαίος κώδικας πομπού
Πηγαίος κώδικας: Περιλαμβάνει και εγκαθιστά ()
Θα συμπεριλάβουμε τη βιβλιοθήκη CAN, θα ξεκινήσουμε τη σειρά για τον εντοπισμό σφαλμάτων και θα ξεκινήσουμε το δίαυλο CAN στα 500 kbps.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println ("Transmissor CAN"); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // δεν υπάρχει δυνατότητα να ελέγξετε τον έλεγχο ενώ (1); }}
Βήμα 17: Πηγαίος κώδικας: Loop (), Αποστολή τυπικού πακέτου CAN 2.0
Χρησιμοποιώντας το πρότυπο CAN 2.0, στέλνουμε ένα πακέτο. Το αναγνωριστικό 11-bit προσδιορίζει το μήνυμα. Το μπλοκ δεδομένων πρέπει να έχει έως 8 byte. Ξεκινά το πακέτο με ID 18 σε δεκαεξαδικό. Συσκευάζει 5 byte και κλείνει τη λειτουργία.
void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em δεκαεξαδικό CAN.write ('h'); // 1º byte CAN.write ('e'); // 2º byte CAN.write ('l'); // 3º byte CAN.write ('l'); // 4º byte CAN.write ('o'); // 5º byte CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); καθυστέρηση (1000)?
Βήμα 18: Πηγαίος κώδικας: Loop (), Αποστολή ενός εκτεταμένου πακέτου CAN 2.0
Σε αυτό το βήμα, το ID έχει 29 bit. Αρχίζει να στέλνει 24 bits ID και, για άλλη μια φορά, συσκευάζει 5 byte και τερματίζεται.
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote estendido…"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 δεκαδικά (abcdef em hexa) = 24 bits preenchidos até aqui CAN.write ('w'); // 1º byte CAN.write ('o'); // 2º byte CAN.write ('r'); // 3º byte CAN.write ('l'); // 4º byte CAN.write ('d'); // 5º byte CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); καθυστέρηση (1000)? }
Βήμα 19: Πηγαίος κώδικας δέκτη
Πηγαίος κώδικας: Περιλαμβάνει και εγκαθιστά ()
Και πάλι, θα συμπεριλάβουμε τη βιβλιοθήκη CAN, θα ξεκινήσουμε τη σειρά εντοπισμού σφαλμάτων και θα ξεκινήσουμε το δίαυλο CAN στα 500 kbps. Εάν παρουσιαστεί σφάλμα, αυτό το σφάλμα θα εκτυπωθεί.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println ("Receptor CAN"); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // δεν υπάρχει δυνατότητα να ελέγξετε τον έλεγχο ενώ (1); }}
Βήμα 20: Πηγαίος κώδικας: Loop (), Λήψη του πακέτου και Έλεγχος της μορφής
Προσπαθήσαμε να ελέγξουμε το μέγεθος του πακέτου που ελήφθη. Η μέθοδος CAN.parsePacket () μου δείχνει το μέγεθος αυτού του πακέτου. Έτσι, εάν έχουμε ένα πακέτο, θα ελέγξουμε εάν είναι επεκταμένο ή όχι.
void loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); εάν (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
Βήμα 21: Πηγή: Loop (), Έλεγχος για να διαπιστωθεί εάν πρόκειται για απομακρυσμένο πακέτο
Εδώ, ελέγχουμε αν το λαμβανόμενο πακέτο είναι αίτημα δεδομένων. Σε αυτή την περίπτωση, δεν υπάρχουν δεδομένα.
εάν (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
Βήμα 22: Πηγαίος κώδικας: Loop (), Μήκος δεδομένων που ζητήθηκε ή λήφθηκε
Εάν το ληφθέν πακέτο είναι αίτημα, δηλώνουμε το ζητούμενο μήκος. Στη συνέχεια λαμβάνουμε τον κωδικό μήκους δεδομένων (DLC), ο οποίος υποδεικνύει το μήκος των δεδομένων. Τέλος, υποδεικνύουμε το μήκος που ελήφθη.
Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); if (CAN.packetRtr ()) {// se o pacote recebido é de requisição, indicamos o comprimento solicitado Serial.print ("e requsitou o comprimento"); Serial.println (CAN.packetDlc ()); // obtem o DLC (Data Length Code, que indica o comprimento dos dados)} else {Serial.print ("e comprimento"); // aqui somente indica o comprimento Recebido Serial.println (packetSize);
Βήμα 23: Πηγαίος κώδικας: Loop (), Εάν τα δεδομένα ληφθούν, τότε εκτυπώνει
Εκτυπώνουμε (στη σειριακή οθόνη) τα δεδομένα, αλλά μόνο εάν το ληφθέν πακέτο δεν είναι αίτημα.
// Imprime os dados somente se o pacote Recebido não foi de requisição while (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}
Βήμα 24: Κατεβάστε τα αρχεία
ΕΓΩ ΔΕΝ
Συνιστάται:
Pringles Can Guitar Amp: 7 Βήματα
Pringles Can Guitar Amp: Μερικές φορές θέλω να πιάσω την ηλεκτρική κιθάρα μόνο για να παίξω μερικά riff χωρίς να χρειαστεί να στήσω τον κανονικό μου ενισχυτή. Wantedθελα λοιπόν να δημιουργήσω έναν φθηνό, εύκολο στην κατασκευή και πολύ απλό ενισχυτή κιθάρας: The Pringles Can Amp
Μετρητής στροφόμετρου/σάρωσης χρησιμοποιώντας Arduino, OBD2 και CAN Bus: 8 βήματα
Μετρητής στροφόμετρου/σάρωσης με χρήση Arduino, OBD2 και CAN Bus: Οποιοσδήποτε ιδιοκτήτης Toyota Prius (ή άλλου υβριδικού/ειδικού οχήματος) θα γνωρίζει ότι ενδέχεται να λείπουν μερικοί πίνακες από τα ταμπλό τους! Το prius μου δεν έχει στροφές στροφών κινητήρα ή δείκτη θερμοκρασίας. Εάν είστε τύπος απόδοσης, μπορεί να θέλετε να μάθετε πράγματα όπως η προώθηση του χρόνου και
Internet Clock: Εμφάνιση ημερομηνίας και ώρας με OLED χρησιμοποιώντας ESP8266 NodeMCU με πρωτόκολλο NTP: 6 βήματα
Internet Clock: Εμφάνιση ημερομηνίας και ώρας με OLED με χρήση ESP8266 NodeMCU Με πρωτόκολλο NTP: Γεια σας παιδιά σε αυτά τα εκπαιδευτικά θα δημιουργήσουμε ένα ρολόι διαδικτύου που θα παίρνει χρόνο από το διαδίκτυο, οπότε αυτό το έργο δεν θα χρειαστεί RTC για να τρέξει, θα χρειαστεί μόνο ένα λειτουργική σύνδεση στο Διαδίκτυο Και για αυτό το έργο χρειάζεστε ένα esp8266 το οποίο θα διαθέτει
Nextion Display - Διεπαφή και πρωτόκολλο που εξηγείται με PIC και Arduino: 10 βήματα
Nextion Display | Διεπαφή και πρωτόκολλο που εξηγείται με PIC και Arduino: Η οθόνη Nextion είναι πολύ εύκολη στη χρήση και εύκολη διασύνδεση με μικροελεγκτές. Με τη βοήθεια του επεξεργαστή Nextion μπορούμε να διαμορφώσουμε την οθόνη και μπορούμε να σχεδιάσουμε UI στην οθόνη. Έτσι, με βάση συμβάντα ή εντολές Επόμενη οθόνη θα ενεργήσει για την εμφάνιση του
Boardηφιακός πίνακας ανακοινώσεων χρησιμοποιώντας Raspberry Pi και πρωτόκολλο MQTT: 8 βήματα
Digital Notice Board Using Raspberry Pi and MQTT Protocol: Οι πίνακες ανακοινώσεων χρησιμοποιούνται σχεδόν παντού, όπως γραφεία, σχολεία, νοσοκομεία και ξενοδοχεία. Μπορούν να χρησιμοποιηθούν ξανά και ξανά για την εμφάνιση σημαντικών ειδοποιήσεων ή τη διαφήμιση μελλοντικών εκδηλώσεων ή συναντήσεων. Αλλά η ειδοποίηση ή οι διαφημίσεις πρέπει να είναι βασικές