CAN Bus

Το πρωτόκολλο CAN αποτελεί ένα διεθνές πρότυπο το οποίο καθορίζεται από το ISO 11898. Εισήχθη το 1983 αρχικά για χρήση σε αυτοκίνητα και έχει εξελιχθεί με τον καιρό σε διάφορα ISO-standards. Το CAN χρησιμοποιείται πια και σε άλλου τύπου οχήματα, σε βιομηχανικούς ελεγκτές και ιατρικούς εξοπλισμούς.

 

Συγγραφέας: Πορλιδάς Δημήτριος

Βιογραφικό Σημείωμα

electronics@porlidas.gr

Facebook

Twitter

Linkedin


 

 

Είναι σύνηθες για ένα όχημα να αποτελείται από πολλά δίκτυα διαφόρων τύπων, τα οποία συνδέονται μεταξύ τους. Αυτό επιτρέπει την εύκολη παρακολούθηση όλων των ηλεκτρικών συστημάτων του οχήματος.Υπάρχουν πολλοί τύποι δικτύων CAN:

ΤΥΠΟΙ ΔΙΚΤΥΩΝ CAN:

  • High-speed (2-wire)

Typical use: Engine, Transmission

  • Low-speed (2-wire)

Typical use: Lights, climate control

  • Single-Wire

Typical use: Seat or Mirror Controls

ΓΕΝΙΚΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ:

  • Το CAN είναι μια τοπολογία bus.
  • Οι κόμβοι δεν έχουν συγκεκριμένες διευθύνσεις. Αντιθέτως, τα ίδια τα μηνύματα έχουν μια ταυτότητα που καθορίζει την προτεραιότητα του καθενός.
  • Το CAN χαρακτηρίζεται από 2 προδιαγραφές:

α) 2.0Α (Basic or Standard CAN): message identifiers (ταυτότητες) των 11 bit. Για λειτουργία στα 250kbit/sec-ISO11519.

β) 2.0B (Full CAN or extended frame CAN): message identifiers (ταυτότητες) των 29 bit. Για λειτουργία στα 1Μbit/sec-ISO11898.

  • Στην περίπτωση του Full CAN (ISO 11898-2), ειδικά για εφαρμογές σε πολύ υψηλές ταχύτητες, είναι απαραίτητο να τερματίζεται ο δίαυλος (bus) και στα δύο άκρα με 120Ω. Οι αντιστάσεις αυτές δεν είναι εκεί μόνο για να αποτρέψουν τις ανακλάσεις αλλά και για να εκφορτίσουν τους οδηγούς (drivers) του πομποδέκτη.

  • Στο πρωτόκολλο CAN αν υπάρχει προσπάθεια δύο μηνύματα να σταλθούν ταυτόχρονα, τότε οι πομποί εντοπίζουν ποιό μήνυμα έχει μεγαλύτερη προτεραιότητα και το μήνυμα με τη μικρότερη καθυστερείται. Με αυτόν τον τρόπο το μήνυμα υψηλότερης προτεραιότητας περνά στο δίαυλο. Πιο συγκεκριμένα, ο τρόπος μέσω του οποίου αποφεύγεται η σύγκρουση των μηνυμάτων έχει να κάνει με το ότι κάθε κόμβος καθώς εκπέμπει το MID του ελέγχει στον δίαυλο να δει ό,τι βλέπουν και οι άλλοι κόμβοι. Αν έρχεται σε σύγκρουση με ένα MID μεγαλύτερης προτεραιότητας (MID με μικρότερο αριθμό), τότε το bit μεγαλύτερης προτεραιότητας μηνυμάτων θα κρατήσει χαμηλά το σήμα (μηδενικό bit) και ο κόμβος χαμηλότερης προτεραιότητας θα σταματήσει να αποστέλλει.

Ένα πακέτο πληροφορίας το οποίο στέλνεται στο δίκτυο ονομάζεται «πλαίσιο». Τα δίκτυα CAN εμπεριέχουν 4 τύπους τέτοιων πλαισίων:

1) DATA FRAME: μεταφέρει την εκπεμπόμενη πληροφορία από κάθε κόμβο (node) στο δίκτυο.

SOF

MESSAGE ID

RTR

CONTROL

DATA

CRC

ACK

EOF

  • SOF (Start Of Frame).
  • MID (Message Identifier) : λέξη των 11 ή των 29 bits ανάλογα με την επιλεγμένη κατάσταση.
  • RTR (Remote Transmission Request) = 0 (κυρίαρχο-dominant)
  • CONTROL (Control field): ορίζει τον αριθμό των bytes της πληροφορίας που θα ακολουθήσει (0-8).
  • DATA (Data Field).
  • CRC ( Cyclic Redundancy Check): Περιέχει κώδικα ελέγχου των 15 bit.
  • ACK (Acknowledge): Κενό το οποίο θα γεμίσει από την πληροφορία επιτυχούς λήψης από τον κόμβο λήψης.
  • EOF (End Of Frame).

2) REMOTE FRAME: επιτρέπει σε κάποιον κόμβο να αναζητήσει συγκεκριμένη πληροφορία από οποιονδήποτε κόμβο (αναζήτηση πληροφορίας). Ένας κόμβος μπορεί να αναζητήσει πληροφορία στέλνοντας ένα remote frame με ταυτότητα (identifier) η οποία ταιριάζει με την ταυτότητα του απαιτούμενου data frame. Τότε ο κατάλληλος κόμβος ο οποίος εμπεριέχει τη συγκεκριμένη πληροφορία θα στείλει το αντίστοιχο data frame σαν απάντηση στην παραπάνω αίτηση. Υπάρχουν δύο διαφορές ανάμεσα στο data frame και στο remote frame από άποψη δομής:

  • Το RTR-bit μεταδίδεται σαν κυρίαρχο bit (=0) στο data frame και σαν μη κυρίαρχο bit (=1) στο remote frame. Αυτό συμβαίνει έτσι ώστε το data frame να έχει προτεραιότητα στην περίπτωση που τα δύο πλαίσια έχουν την ίδια ταυτότητα .
  • Στο remote frame δεν υπάρχει πεδίο δεδομένων (data).

3) ERROR FRAME: όταν κάποιος κόμβος εντοπίζει κάποιο λάθος στην πληροφορία (data), στέλνει ένα πλαίσιο λάθους (error frame) για να ενημερώσει όλο το δίκτυο. Αυτό το πλαίσιο ενεργοποιεί τον αρχικό κόμβο (που αποστέλλει) έτσι ώστε να ξαναστείλει την πληροφορία του.

4) OVERLOAD FRAME: με αυτό το πλαίσιο, κάποιος κόμβος μπορεί να ειδοποιήσει το δίκτυο ότι χρειάζεται διακοπή. Με άλλα λόγια, ζητείται από τον πομπό να καθυστερήσει την επόμενη μετάδοση επειδή π.χ. ο αρχικός κόμβος δεν είναι έτοιμος να δεχτεί κι άλλη πληροφορία τη δεδομένη στιγμή.

ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΚΠΟΜΠΗ ΣΗΜΑΤΩΝ ΛΑΘΟΥΣ (ERROR FRAMES):

Σε αντίθεση με άλλα συστήματα bus, το πρωτόκολλο CAN δεν χρησιμοποιεί μηνύματα αναγνώρισης, αλλά αντιθέτως, εκπέμπει σήματα λάθους αμέσως μόλις συμβούν. Για ανίχνευση λαθών, το πρωτόκολλο CAN υλοποιεί τρεις μηχανισμούς στο επίπεδο του μηνύματος:

  • Cyclic Redundancy Check (CRC): Το CRC διαφυλάσσει την πληροφορία στο πλαίσιο προσθέτοντας μια ακολουθία πλαισίου ελέγχου frame check sequence (FCS) στο τέλος της μετάδοσης. Στο δέκτη, αυτό το FCS επαναϋπολογίζεται και ελέγχεται σε σχέση με το λαμβανόμενο FCS. Αν δεν ταιριάζουν, υπάρχει CRC λάθος.
  • Frame check (Έλεγχος πλαισίου): Ο έλεγχος πλαισίου είναι ένας μηχανισμός ο οποίος επαληθεύει τη δομή του πλαισίου που εκπέμπεται ελέγχοντας τα πεδία των bit σε σχέση με τη αναμενόμενη μορφή και μέγεθος πλαισίου σε συγκεκριμένα σημεία. Αν ο δέκτης ανιχνεύσει ένα «λάθος» bit σε ένα από αυτά τα σημεία, τότε θα σημανθεί Format Error.
  • ACK errors: Οι δέκτες ενός μηνύματος αναγνωρίζουν τα πλαίσια που λαμβάνουν. Αν ο πομπός δεν λάβει αυτήν την αναγνώριση, τότε υποδεικνύεται ένα ACK λάθος.

Το πρωτόκολλο CAN υλοποιεί επίσης και δύο μηχανισμούς για ανίχνευση λαθών στο επίπεδο του bit:

  • Monitoring-bit error: Η ικανότητα του πομπού να ανιχνεύει λάθη βασίζεται στην εμφάνιση των σημάτων του διαύλου (bus). Ένας κόμβος πάντα διαβάζει ξανά το μήνυμα καθώς το αποστέλλει. Αν ανιχνεύσει διαφορετική τιμή σε κάποιο bit του διαύλου από αυτό που στάλθηκε, και το bit αυτό δεν ανήκει στο πεδίο της αναγνώρισης, τότε ο κόμβος ανιχνεύει λάθος.
  • Βit-stuffing error: Η κωδικοποίηση των επιμέρους bit ελέγχεται σε επίπεδο bit. Η αναπαράσταση των bit τα οποία χρησιμοποιούνται από το CAN γίνεται σε κωδικοποίηση "Non Return to Zero (NRZ)". Mετά από 5 συνεχόμενα ίσα bit, ο πομπός εισάγει ένα bit γεμίσματος στην ακολουθία των bit για καλό συγχρονισμό ακόμη και στην περίπτωση που έχουμε ακολουθία bit χωρίς αλλαγές (οπότε θα μεταδιδόταν ένα DC σήμα) . Με άλλα λόγια, ο κόμβος που αποστέλλει, θα πρέπει να εισάγει ένα “high” μετά από 5 συνεχόμενα “low” (και αντίστοιχα ένα”low” μετά από 5 συνεχόμενα “high”). Αυτό το bit γεμίσματος έχει μια συμπληρωματική αξία, η οποία αφαιρείται από τους δέκτες.

Αν ανακαλυφθούν ένα ή περισσότερα λάθη από τουλάχιστον έναν κόμβους οι οποίοι χρησιμοποιούν τους παραπάνω μηχανισμούς, η τρέχουσα μετάδοση εγκαταλείπεται στέλνοντας ένα «πλαίσιο λάθους- error frame». Κάτι τέτοιο θα εμποδίσει τη λήψη αυτού του μηνύματος και από άλλους κόμβους και έτσι πετυχαίνουμε τη συνοχή των δεδομένων σε όλο το δίκτυο. Μετά τη μετάδοση ενός λανθασμένου μηνύματος το οποίο εγκαταλείφθηκε, ο αποστολέας αυτόματα επιχειρεί ξανά τη μετάδοση (automatic retransmission). Οι κόμβοι μπορούν και πάλι να διεκδικήσουν την πρόσβαση στον δίαυλο.

CAN TRANSCEIVER – Typical example (82C251):

Καθορίζοντας μόνο τα physical και data link levels στο μοντέλο επικοινωνιών OSI, το πρωτόκολλο CAN αποτελεί βάση για έναν μεγάλο αριθμό βιομηχανικών και κατασκευαστικών εφαρμογών. Τα πιο συνηθισμένα ολοκληρωμένα που χρησιμοποιούν το πρωτόκολλο CAN στα κοινά +5V είναι το 82C251 ή το TJA1040.

 

Το PCA82C251 αποτελεί τη διασύνδεση (interface) ανάμεσα στον ελεγκτή πρωτοκόλλου CAN και στο δίαυλο. Προορίζεται κυρίως για εφαρμογές (μέχρι και 1Mbaud) σε φορτηγά και λεωφορεία. Το ολοκληρωμένο αυτό παρέχει δυνατότητα διαφορικής εκπομπής στο δίαυλο και διαφορικής λήψης στον ελεγκτή CAN.

 

Το παραπάνω παράδειγμα αποτελεί μια τυπική εφαρμογή του πομποδέκτη 82C250. Ένας ρυθμιστής (protocol controller) συνδέεται με τον πομποδέκτη (transceiver) μέσω μιας σειριακής γραμμής δεδομένων εξόδου (TX) και μιας σειριακής γραμμής δεδομένων εισόδου (RX). Ο πομποδέκτης (transceiver) συνδέεται με το δίαυλο (bus line) μέσω των δύο άκρων CANH και CANL, τα οποία δίνουν δυνατότητα διαφορικής λήψης και αποστολής. Η Rs στην είσοδο χρησιμοποιείται για έλεγχο της δεδομένης κατάστασης λειτουργίας. Η τάση αναφοράς στην έξοδο (Vref) παρέχει μια ονομαστική τάση των 0.5·Vcc . Η τροφοδοσία στον πομποδέκτη είναι +5V.

Ο ελεγκτής (controller) αποστέλλει μια ακολουθία σειριακών δεδομένων στην TxD είσοδο του πομποδέκτη. Η εσωτερική pull-up συνδεσμολογία θέτει την TxD είσοδο σε κατάσταση “high”, δηλαδή ο οδηγός εξόδου του διαύλου είναι αρχικά παθητικός (recessive state). Σε αυτήν την κατάσταση, οι είσοδοι CANL και CANH πολώνονται στα 2.5V μέσω των δικτύων εισόδου του δέκτη με μια τυπική εσωτερική αντίσταση 17kΩ. Ειδάλλως στην περίπτωση που εφαρμοστεί κατάσταση “low” στην είσοδο TxD, ενεργοποιείται το στάδιο εξόδου του διαύλου (dominant signal level). Ο οδηγός εξόδου αποτελείται από μια πηγής και μια εκροή ρεύματος. Η γραμμή CANH συνδέεται με την πηγή ρεύματος εξόδου και η γραμμή CANL συνδέεται με την εκροή ρεύματος εξόδου. Η τάση στο dominant state (ενεργή κατάσταση) είναι 3.5V για τη γραμμή CANH και 1.5V για τη γραμμή CANL.

 

Ο δίαυλος είναι σε παθητική κατάσταση, αν κανένας από τους κόμβους δεν στείλει ένα κυρίαρχο bit, δηλαδή όλες οι TxD είσοδοι στο δίκτυο είναι “high”. Διαφορετικά, αν ένας ή πολλοί κόμβοι του διαύλου εκπέμψουν ένα «κυρίαρχο» bit, δηλαδή αν τουλάχιστον μία από τις TxD εισόδους είναι “low”, τότε ο δίαυλος εισάγεται στην ενεργή κατάσταση, παραμερίζοντας έτσι την παθητική κατάσταση.

Ο συγκριτής του δέκτη μετατρέπει το διαφορικό σήμα του διαύλου σε ένα σήμα σε λογικό επίπεδο το οποίο αποτελεί έξοδο στο RxD. Η ροή της σειριακής πληροφορίας που λαμβάνεται , παρέχεται στον ελεγκτή πρωτοκόλλου του διαύλου για αποκωδικοποίηση. Ο συγκριτής του δέκτη είναι πάντα ενεργός, δηλαδή εμφανίζει τις τιμές του διαύλου όσο ο κόμβος του διαύλου μεταδίδει κάποιο μήνυμα. Αυτό χρειάζεται π.χ. για λόγους ασφαλείας και για να στηριχτεί η διαδικασία «ανταγωνισμού» των κόμβων για τη χρήση του διαύλου. Κάποιοι ελεγκτές παρέχουν μια αναλογική διασύνδεση λήψης (RX0, RX1). Σε αυτήν την περίπτωση το RX0 συνήθως πρέπει να συνδεθεί με την RxD έξοδο και το RX1 θα πρέπει να πολωθεί σε μια κατάλληλη τάση. Αυτό μπορεί να γίνει, π.χ. με τη χρήση της Vref (μπορούμε εναλλακτικά να χρησιμοποιήσουμε διαιρέτη τάσης).

 
 

 

 

© 2014 Πορλιδάς Δημήτριος