Γράφει ο Αλέξανδρος Καλτσάς, Διευθυντής του Σχολής Μηχανολογίας του ΙΕΚ ΔΕΛΤΑΣτο εργαστήριο μοτοσυκλετών του ΙΕΚ ΔΕΛΤΑ χρησιμοποιούμε για το μάθημα της διάγνωσης βλαβών ένα Fazer (FZ-1) 1000 cc της Yamaha. Στο συγκεκριμένο δίκυκλο δημιουργούνται τεχνητές βλάβες τις οποίες πρέπει να επιλύσουν οι σπουδαστές. Σε μερικές περιπτώσεις προκύπτουν και αληθινές (ανεπιθύμητες ως επί το πλείστον) βλάβες. Προέκυψε λοιπόν μία τέτοια βλάβη…
Εικόνα 1. Yamaha FZ-1
Η συγκεκριμένη βλάβη δεν επέτρεπε στην αντλία καυσίμου να λειτουργήσει με αποτέλεσμα να μην μπορεί να γίνει εκκίνηση του κινητήρα. Στο πλαίσιο του μαθήματος οι σπουδαστές διέγνωσαν πως ο ηλεκτρονόμος (relay) της αντλίας δεν δέχεται εντολή ώστε να οπλίσει και να ενεργοποιηθεί η αντλία καυσίμου. Η εντολή αυτή έρχεται απευθείας από την ηλεκτρονική μονάδα ελέγχου (ECU) του κινητήρα. Αφού βεβαιώθηκε πως δεν υπάρχει κάποιο πρόβλημα στην καλωδίωση του οχήματος, καταλήξαμε στο συμπέρασμα πως έχει υποστεί βλάβη το τμήμα της ECU που ελέγχει το relay της αντλίας. Αυτό γίνεται γειώνοντας το ένα άκρο του τυλίγματος διέγερσης (πηνίο). Το άλλο άκρο βρίσκεται υπό τροφοδοσία των 12 volt. Η ECU τον έλεγχο αυτόν τον πραγματοποιεί με έναν ηλεκτρονικό διακόπτη (συνήθως κάποιο διπολικό τρανζίστορ ή κάποιο MOSFET). Κατά πάσα πιθανότητα λοιπόν έχει υποστεί βλάβη αυτός ο ηλεκτρονικός διακόπτης.Εικόνα 2. Απλοποιημένο διάγραμμα της καλωδίωσης
Σε αρκετές περιπτώσεις η βλάβη αυτή είναι σχετικά εύκολο να αποκατασταθεί σε επίπεδο πλακέτας, ανοίγοντας την ECU. Στην δική μας περίπτωση όμως η ECU είναι εμφυτευμένη σε εποξική ρητίνη και δεν μπορεί να υπάρξει πρόσβαση σε επίπεδο πλακέτας. Από το σημείο αυτό και μετά η αντικατάσταση της ECU είναι μονόδρομος. Η αντικατάσταση μία ECU όμως δεν είναι και η πιο απλή διαδικασία λόγω της παρουσία του αντικλεπτικού συστήματος ακινητοποίησης του οχήματος (Immobilizer). Μία σωστή αντικατάσταση θα απαιτούσε ταυτόγχρονη αντικατάσταση και της μονάδας του immobilizer που θα έπρεπε να διαθέτει και κλειδιά. ECU, immobilizer και κλειδιά θα πρέπει να είναι από το ίδιο όχημα. Μία άλλη λύση θα ήταν η αντικατάσταση της ECU με μία οποιαδήποτε ECU από ένα FZ-1 και απενεργοποίηση του συστήματος ακινητοποίησης. Υπάρχουν διάφοροι τρόποι (Immo Off, Immo Emulation κτλ). Αυτό είναι και η πιο συνηθισμένη λύση που επιλέγουν οι πελάτες σε τέτοιες περιπτώσεις. Κυρίως λόγω του μικρότερου συγκριτικά κόστους αποκατάστασης της βλάβης. Στο πλαίσιο του μαθήματος πρότεινα στους σπουδαστές να κάνουμε κάτι διαφορετικό. Να σχεδιάσουμε και να υλοποιήσουμε μία δική μας ηλεκτρονική μονάδα ελέγχου που θα αντικαθιστά το τμήμα της ECU που έχει υποστεί βλάβη. Ένα “πρόσθετο μέλος” για μία ECU. Πρέπει να σημειωθεί πως η συγκεκριμένη λύση έχει καθαρά εκπαιδευτική αξία. Σε κάθε σχεδιασμό ενός προϊόντος-εξαρτήματος για την λύση ενός προβλήματος έχει τεράστια σημασία η κατανόηση του προβλήματος που πρέπει να λυθεί. Πρέπει να σχεδιάσουμε μία μονάδα ελέγχου που θα πραγματοποιεί τον έλεγχο της αντλίας καυσίμου όπως ακριβώς και η ECU. Στην συγκεκριμένη μοτοσυκλέτα, η αντλία καυσίμου ενεργοποιείται μόλις ο διακόπτης έκτακτης απενεργοποίησης του κινητήρα (Kill Switch) βρεθεί στην θέση RUN. Μόλις συμβεί αυτό τροφοδοτείται με τάση των 12 volt η κανονικά ανοικτή (N.O. Normally Open) επαφή του relay της αντλίας καυσίμου και το ένα άκρο του τυλίγματος διέγερσης. Ταυτόγχρονα, η ECU αντιλαμβάνεται την θέση RUN του Kill Switch και γειώνει το άλλο άκρο του τυλίγματος διέγερσης. Η αντλία ξεκινά και λειτουργεί για τρία περίπου δευτερόλεπτα πραγματοποιώντας την αρχική πλήρωση με καύσιμο της ράγας (rail, φλογέρα) των εγχυτήρων (μπεκ).Εικόνα 3. Διακόπτης Έκτακτης Απενεργοποίησης του Κινητήρα
Μετά την αρχική πλήρωση με καύσιμο (priming) η αντλία καυσίμου θα ξεκινήσει πάλι μόλις η ECU αντιληφθεί (μέσω του αισθητήρα στροφάλου) πως ο κινητήρας περιστρέφεται και θα μείνει ενεργοποιημένη καθ’ όλη την διάρκεια της λειτουργίας του κινητήρα. Πρέπει λοιπόν να σχεδιάσουμε ένα υπολογιστικό σύστημα που θα εκτελεί την αρχική πλήρωση με καύσιμο και θα κρατά την αντλία καυσίμου ενεργοποιημένη όσο ο κινητήρας περιστρέφεται. Σίγουρα λοιπόν, το κύκλωμά μας θα πρέπει να έχει μία έξοδο προς το relay της αντλίας και μία είσοδο που θα διαβάζει την περιστροφή του κινητήρα. Ο μικροεπεξεργαστής που επιλέξαμε είναι ο AVR ATtiny25 της εταιρίας Microchip.Εικόνα 4. Μικροελεγκτής ATtiny25
Ο μικροελεγκτής αυτός έχει οκτώ ακίδες σύνδεσης. Το όλο κύκλωμα θα τροφοδοτείται από την έξοδο του Kill Switch που είναι 12 volt. Πρέπει να χρησιμοποιηθεί και ένας σταθεροποιητής τάσης που θα μετατρέπει τα 12 volt που προέρχονται από τον διακόπτη σε 5 volt που απαιτούνται για την λειτουργία του μικροελεγκτή. Για τον σκοπό αυτό θα χρησιμοποιηθεί ένα L78L05. Η έξοδος του AVR δεν μπορεί να ελέγξει το relay της αντλίας απευθείας. Οπότε τοποθετήθηκε και ένα NPN τρανζίστορ (BD139) στην έξοδο που θα ελέγχει το relay με εντολή από τον μικροελεγκτή. Σε μία από τις ακίδες τοποθετήθηκε και ένα ενδεικτικό LED που η ύπαρξη του βοηθά στο να καταλάβουμε άμεσα αν ο κώδικας που γράφουμε κάνει αυτό που πρέπει. Το όλο κύκλωμα είναι αρκετά απλό.Εικόνα 5. Το τελικό κύκλωμα
Για τον έλεγχο της περιστροφής του κινητήρα δεν χρησιμοποιήθηκε η έξοδος του αισθητήρα του στροφάλου (CKP). Ο αισθητήρας στροφάλου του συγκεκριμένου οχήματος είναι επαγωγικού τύπου που σημαίνει πως παράγει μία εναλλασσόμενη τάση, που για να γίνει αντιληπτή από τον μικροελεγκτή θα απαιτούσε επιπλέον κυκλώματα. Ο μικροελεγκτής μπορεί να αντιληφθεί μόνο τάση 0 ή 5 volt. Ευτυχώς, στην δική μας περίπτωση υπάρχει ο αισθητήρας εκκεντροφόρου που παράγει παλμούς των 5 volt. Ένα παλμό για κάθε πλήρη περιστροφή του εκκεντροφόρου (κάθε δύο στροφές του στροφαλοφόρου). Για τον κώδικα του μικροελεγκτή χρησιμοποιήθηκε η γλώσσα C (AVR GCC). Αρχικά πρέπει να υλοποιηθεί κώδικας που θα επιτρέπει στον μικροελεγκτή μας να αντιλαμβάνεται το πέρασμα του χρόνου. Κάθε σύγχρονος μικροελεγκτής διαθέτει μία σειρά από χρονιστές/μετρητές που του επιτρέπουν να μετράνε τον χρόνο. Στην δική μας περίπτωση ρυθμίσαμε τον μικροελεγκτή μας με τέτοιο τρόπο που να μετρά χιλιοστά του δευτερολέπτου. Για κάθε ένα χιλιοστό του δευτερολέπτου μία μεταβλητή (το όνομα της μεταβλητής είναι tick) αυξάνει την τιμή της κατά ένα. Εάν για παράδειγμα, θέλουμε να περάσει ένα χρονικό διάστημα των 2 δευτερολέπτων προκειμένου να κάνουμε κάτι, αρκεί να δούμε πως η τιμή της μεταβλητής tick αυξήθηκε κατά 2000 από την προηγούμενη τιμή της. Μία άλλη μεγάλη απόφαση είναι ο τρόπος που θα επηρεάζουν οι παλμοί του αισθητήρα του εκκεντροφόρου τον μικροελεγκτή μας και το πρόγραμμα που τρέχει σε αυτόν. Υπάρχουν δύο μέθοδοι. Η πρώτη μέθοδος είναι να γράψουμε τον κώδικά μας με τέτοιο τρόπο που σε τακτά χρονικά διαστήματα θα ανιχνεύει την τάση (αν είναι 0 ή 5 volt) στην ακίδα που συνδέεται στην έξοδο του αισθητήρα. Η μέθοδος αυτή ονομάζεται έλεγχος ακίδας (pin polling). Είναι μία μέθοδος κατάλληλη για σχετικά αργά συστήματα (πχ. το πάτημα ενός πλήκτρου από άνθρωπο). Σε γρήγορα συστήματα, όπως οι παλμοί ενός αισθητήρα εκκεντροφόρου, η μέθοδος των διακοπών (interrupt) είναι η πλέον κατάλληλη. Στην μέθοδο των διακοπών (ερώτηση πιστοποίησης Μηχανοτρονικής Β53) ισχύουν τα παρακάτω. Σε έναν μικροελεγκτή όλες οι εντολές που απαρτίζουν το πρόγραμμα που “τρέχει” σε αυτόν, εκτελούνται με την σειρά η μία μετά την άλλη. Μόλις εκτελεστεί και η τελευταία εντολή, εκτελείται ξανά η πρώτη. Αυτό επαναλαμβάνεται συνεχώς. Με την μέθοδο των διακοπών υπάρχουν εντολές σε μία ειδική περιοχή του κώδικα που δεν περιμένουν την σειρά τους για να εκτελεστούν. Μόλις οι συνθήκες είναι κατάλληλες (για παράδειγμα παλμός από έναν αισθητήρα) τότε η κανονική ροή εκτέλεσης των εντολών διακόπτεται και εκτελούνται οι εντολές της ειδικής περιοχής. Μόλις εκτελεστούν το πρόγραμμα επιστρέφει στην εντολή πριν την διακοπή. Αυτή η μέθοδος καθιστά το πρόγραμμα που τρέχει σε έναν μικροελεγκτή πιο απλό και αρκετά πιο σταθερό.Εικόνα 6. Διάγραμμα ροής του προγράμματος
Για όποιον επιθυμεί και θέλει να εμβαθύνει περισσότερο, στον παρακάτω σύνδεσμο υπάρχει ο πηγαίος κώδικας ολόκληρου του προγράμματος. Οτιδήποτε είναι μετά από διπλή πλαγιοκάθετο (//) είναι σχόλια. Ο κώδικας αυτός με την βοήθεια ειδικών προγραμμάτων, του συντακτικού αναλυτή (parser) και του μεταγλωττιστή (compiler), θα μετατραπεί σε δυαδικό αρχείο (0 και 1) που θα προγραμματιστεί στον μικροελεγκτή.https://tinyurl.com/2p98nme9Ο ίδιος κώδικας για την πλατφόρμα Arduino μπορεί να βρεθεί στον παρακάτω σύνδεσμο. Είναι πιο κατανοητός για έναν αρχάριο που έχει μία επαφή με την συγκεκριμένη πλατφόρμα.
https://tinyurl.com/skv6j9tvΣτην συνέχεια, κατασκευάσαμε το κύκλωμα πρόχειρα σε μία πλακέτα προτυποποίησης (breadboard) και μετά από την υποχρεωτική αποσφαλμάτωση είχαμε ένα λειτουργικό κύκλωμα που έκανε την δουλειά για την οποία το σχεδιάσαμε. Η μοτοσυκλέτα δούλευε πλέον σωστά χωρίς αντικατάσταση της ECU.
Εικόνα 7. Το κύκλωμα στην πλακέτα προτυποποίησης
Σε καμία περίπτωση όμως το κύκλωμα δεν θα μπορούσε να μείνει σε αυτή την μορφή. Το επόμενο βήμα ήταν να σχεδιαστεί μία κανονική πλακέτα που θα κολληθούν όλα τα εξαρτήματα. Αφού επιλέχθηκε και ένα μικρό κουτί για την φιλοξενία της τελικής πλακέτας, πραγματοποιήθηκε ο σχεδιασμός της σε ειδικό λογισμικό. Συγκεκριμένα στο KiCAD που είναι Ελεύθερο Λογισμικό/Λογισμικό Ανοικτού Κώδικα (ΕΛΛΑΚ).Εικόνα 8. Περιβάλλον σχεδιασμού του KiCAD
Εικόνα 9. Τρισδιάστατη προβολή του τυπωμένου κυκλώματος
Εικόνα 10. Τρισδιάστατη προβολή του τυπωμένου κυκλώματος με εξαρτήματα
Εικόνα 11. Τρισδιάστατη προβολή του τυπωμένου κυκλώματος με εξαρτήματα
Αφού στείλαμε τα αρχεία του σχεδιασμού σε εργοστάσιο κατασκευής τυπωμένων κυκλωμάτων (πλακέτες), μετά από μερικές μέρες είχαμε στα χέρια μας τις πλακέτες και έγινε η κατασκευή του τελικού κυκλώματος.Εικόνα 12. Οι πλακέτες όπως έρχονται από το εργοστάσιο
Εικόνα 13. Τελικό προϊόν προς εγκατάσταση στην μοτοσυκλέτα
Σπούδασε στη Σχολή Μηχανολογίας του ΙΕΚ ΔΕΛΤΑΙΕΚ ΔΕΛΤΑ. ΕΔΩ Μαζί!