Πίνακας περιεχομένων:

RGB LED μήτρα: 5 βήματα
RGB LED μήτρα: 5 βήματα

Βίντεο: RGB LED μήτρα: 5 βήματα

Βίντεο: RGB LED μήτρα: 5 βήματα
Βίντεο: Σετ LED RGB Ταινία με Controller και Driver με Πανεύκολη Σύνδεση | DEPO CENTER 2024, Ιούλιος
Anonim
Image
Image
Σχεδιασμός υλικού
Σχεδιασμός υλικού

Αναζήτηση με οδηγίες, και μπορείτε να βρείτε πολλά έργα μήτρας LED. Κανένα από αυτά δεν ήταν αυτό που ήθελα, που ήταν να διερευνήσω τις αλληλεπιδράσεις του σχεδιασμού υλικού και λογισμικού για να παράγω κάτι και να παράγω το τελικό προϊόν σε ένα καθαρό PCB με ένα πρόγραμμα οδήγησης που θα μου επιτρέψει να τραβήξω στην "οθόνη LED" χρησιμοποιώντας υψηλού επιπέδου κατασκευές (π.χ. σχεδίαση γραμμής σε αντίθεση με τη ρύθμιση συγκεκριμένων εικονοστοιχείων). Αυτό το μέρος ήταν σημαντικό για μένα, καθώς πολλοί από τους οδηγούς μήτρας LED είναι γυμνά και δεν παρέχουν πολλά στον προγραμματισμό της δημιουργίας μιας εικόνας ή κινούμενης εικόνας. Αυτό δεν σημαίνει ότι δεν μπορείτε να δημιουργήσετε εικόνες και κινούμενα σχέδια με τα άλλα προγράμματα οδήγησης, απλά ότι θα πρέπει να κάνετε περισσότερες επαναλαμβανόμενες εργασίες από έργο σε έργο.

Έτσι ξεκίνησα να πραγματοποιήσω το όραμά μου. Το πρώτο βήμα ήταν ο σχεδιασμός του υλικού. Αυτό ήταν ίσως το πιο δύσκολο για μένα, καθώς το υπόβαθρο μου είναι περισσότερο λογισμικό. Και πάλι, υπήρχαν πολλά προ-ψημένα σχέδια, και σίγουρα τα χρησιμοποίησα για έμπνευση, αλλά ήθελα να μάθω μέσω του έργου, οπότε πρωτοτύπησα μια μήτρα 4x4 σε ένα breadboard. Έμαθα πολλά μέσα από αυτήν τη διαδικασία, καθώς οι πρώτες μου επαναλήψεις δεν λειτούργησαν. Αλλά, έκανα σχεδιασμό υλικού που λειτούργησε, το οποίο με τη σειρά του μου επέτρεψε να ξεκινήσω την ανάπτυξη ενός προγράμματος οδήγησης.

Επέλεξα το Arduino ως πλατφόρμα προγράμματος οδήγησης, επειδή είναι ευρέως διαθέσιμο και έχει πολλές αναφορές στο διαδίκτυο. Ενώ η εμπειρία της καριέρας μου επέτρεψε να φτάσω σε μια λειτουργική έκδοση ενός προγράμματος οδήγησης πιο επιδέξια από τις προσπάθειές μου στο υλικό, υπήρχαν ακόμα πολλές επαναλήψεις ενώ βελτιστοποίησα την απόδοση του οδηγού για τον μικροελεγκτή ATMega και ανέπτυξα ένα API προγραμματισμού που μου άρεσε.

Αυτό το Instructuctable τεκμηριώνει το σχέδιο και μερικές βασικές γνώσεις από το έργο μου. Περισσότερες πληροφορίες σχετικά με αυτό το έργο μπορείτε να βρείτε στον ιστότοπό μου εδώ, συμπεριλαμβανομένων πλήρων κιτ που μπορείτε να αγοράσετε για να δημιουργήσετε τη δική σας μήτρα RGB LED.

Βήμα 1: Σχεδιασμός υλικού

Ο πρωταρχικός στόχος του σχεδιασμού υλικού μου ήταν να δημιουργήσω μια σειρά LED RGB που θα μπορούσα να προγραμματίσω, αλλά επίσης δεν ήθελα να ξοδέψω πολλά χρήματα. Η προσέγγιση στην οποία κατέληξα ήταν να χρησιμοποιήσω καταχωρητές βάρδιας 74HC595 για τον έλεγχο των LED. Προκειμένου να ελαχιστοποιηθεί ο αριθμός των καταχωρητών βάρδιας που χρειάζομαι, τακτοποίησα τα LED RGB σε μια διάταξη μήτρας όπου οι κοινές άνοδοι ήταν δεμένες μεταξύ τους σε σειρές και τα κόκκινα, πράσινα και μπλε καλώδια καθόδου ήταν δεμένα μαζί σε στήλες. Για τη μήτρα 4x4, το διάγραμμα κυκλώματος έμοιαζε με το συνημμένο διάγραμμα κυκλώματος.

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

Δεδομένου ότι χρησιμοποιώ κοινά LED ανόδου, αυτό σημαίνει ότι οι σειρές παρέχουν θετική ισχύ και οι στήλες βυθίζονται στη γείωση. Τα καλά νέα είναι ότι οι καταχωρητές βάρδιας 74HC595 μπορούν να τροφοδοτήσουν και να βυθίσουν ισχύ, αλλά τα άσχημα νέα είναι ότι έχουν όριο στην ποσότητα ισχύος που μπορούν να τροφοδοτήσουν ή να βυθίσουν. Οι μεμονωμένοι ακροδέκτες του 74HC595 έχουν μέγιστη ισχύ ρεύματος 70 mA, αλλά είναι καλύτερο να διατηρήσετε λιγότερα από 20 mA. Τα μεμονωμένα χρώματα στις λυχνίες LED RGB το καθένα έχει περίπου 20 mA. Αυτό σημαίνει ότι το 74HC595 δεν μπορεί να τροφοδοτήσει απευθείας μια ολόκληρη σειρά LED, εάν θέλω να τα ενεργοποιήσω όλα.

Έτσι, αντί να τροφοδοτεί απευθείας τη σειρά, το 74HC595 θα αντλεί αντίθετα ένα τρανζίστορ για κάθε σειρά και το τρανζίστορ θα ενεργοποιεί ή απενεργοποιεί το ρεύμα που τροφοδοτεί τη σειρά. Δεδομένου ότι ο σχεδιασμός χρησιμοποιεί κοινά LED ανόδου, το τρανζίστορ μεταγωγής θα είναι PNP. Εάν χρησιμοποιούσαμε ένα κοινό LED καθόδου, το τρανζίστορ μεταγωγής θα ήταν NPN. Σημειώστε ότι με τη χρήση ενός τρανζίστορ PNP για να οδηγήσετε μια σειρά, η ρύθμιση του καταχωρητή αλλαγής για να την ενεργοποιήσετε γίνεται τώρα χαμηλή καθώς ένα τρανζίστορ PNP χρειάζεται μια αρνητική τάση μεταξύ του πομπού και της βάσης για να ενεργοποιηθεί, η οποία θα επιτρέψει τη ροή θετικού ρεύματος στο σειρά.

Ένα άλλο πράγμα που πρέπει να λάβετε υπόψη είναι η επιθυμητή διάταξη bit των καταχωρητών αλλαγής. Δηλαδή, μεταξύ των καταχωρητών μετατόπισης, τα οποία bit ελέγχουν ποιες γραμμές ή στήλες στον πίνακα. Ο σχεδιασμός με τον οποίο έστειλα είναι όπου το πρώτο κομμάτι, ή "το πιο σημαντικό κομμάτι", που αποστέλλεται στους καταχωρητές βάρδιας με μαργαρίτα, ελέγχει τη στήλη του κόκκινου στοιχείου LED, το δεύτερο bit ελέγχει το πράσινο στοιχείο της πρώτης στήλης, το τρίτο bit ελέγχει την πρώτη στήλη μπλε στοιχείο, το τέταρτο bit ελέγχει το κόκκινο στοιχείο της δεύτερης στήλης,… αυτό το μοτίβο επαναλαμβάνεται στις στήλες από αριστερά προς τα δεξιά. Στη συνέχεια, το επόμενο κομμάτι που αποστέλλεται ελέγχει την τελευταία ή την κάτω σειρά, την επόμενη τη δεύτερη έως την τελευταία σειρά,… αυτό επαναλαμβάνεται μέχρι το τελευταίο κομμάτι που αποστέλλεται, ή "λιγότερο σημαντικό κομμάτι", ελέγχει την πρώτη ή την κορυφαία σειρά στη μήτρα Το

Τέλος, έπρεπε να καθορίσω ποιες αντιστάσεις θα χρησιμοποιούσα για καθένα από τα LED στο LED RGB. Ενώ μπορούσατε να χρησιμοποιήσετε τον τυπικό τύπο που συνδυάζει την τάση προς τα εμπρός και το επιθυμητό ρεύμα για να υπολογίσετε την απαιτούμενη αντίσταση, διαπίστωσα ότι η ρύθμιση του ρεύματος κάθε LED στα 20 milliamps είχε ως αποτέλεσμα ένα υπόλευκο χρώμα όταν όλα τα κόκκινα, πράσινα και μπλε LED ήταν αναμμένα Το Άρχισα λοιπόν να το βλέπω με τα μάτια. Το πολύ κόκκινο στο λευκό σήμαινε αύξηση των αντιστάσεων ωμ του κόκκινου LED για μείωση του ρεύματος. Επανέλαβα την εναλλαγή αντιστάσεων διαφορετικών ωμ μέχρι που βρήκα έναν συνδυασμό που παρήγαγε ένα λευκό χρώμα και ένιωσα ότι ήταν σωστός. Ο τελικός συνδυασμός ήταν 180 Ω για το κόκκινο LED, 220 Ω για το πράσινο LED και 100 Ω για το μπλε LED.

Βήμα 2: Κατασκευή υλικού - Breadboard

Κατασκευή υλικού - Breadboard
Κατασκευή υλικού - Breadboard
Κατασκευή υλικού - Breadboard
Κατασκευή υλικού - Breadboard

Η πρώτη φάση του κατασκευαστή υλικού ήταν η επιβίβαση στο ψωμί. Εδώ έφτιαξα μια μήτρα 4x4 με τα LED RGB. Αυτός ο πίνακας απαιτεί 16 bit για έλεγχο, 12 για τις στήλες RGB και 4 για κάθε σειρά. Δύο καταχωρητές βάρδιας 74HC595 μπορούν να τα χειριστούν όλα. Αρχικά έκανα έρευνα και σχεδίασα ένα κύκλωμα που πίστευα ότι θα λειτουργήσει, και στη συνέχεια το έχτισα στο ψωμί.

Σως η μεγαλύτερη πρόκληση της κατασκευής του breadboard ήταν η διαχείριση όλων των καλωδίων. Πήρα ένα προσχηματισμένο κιτ σύρμα για σανίδες ψωμιού, αλλά το γεγονός τότε ήταν λίγο δυσκίνητο. Ένα κόλπο που βρήκα χρήσιμο ήταν να δημιουργήσω μια "θύρα" για σύνδεση με τον πίνακα Arduino. Δηλαδή, αντί να συνδέσετε τις καρφίτσες στο Arduino απευθείας με τις διάφορες ακίδες IC στο breadboard, αφιερώστε μερικές σειρές στο breadboard ως το σημείο σύνδεσης για το Arduino και, στη συνέχεια, συνδέστε τις αντίστοιχες καρφίτσες ID σε αυτές τις σειρές. Για αυτό το έργο, χρειάζεστε μόνο πέντε συνδέσεις με το Arduino: +5V, γείωση, δεδομένα, ρολόι και μάνδαλο.

Μόλις ολοκληρωθεί η κατασκευή του breadboard, έπρεπε να το δοκιμάσω. Ωστόσο, χωρίς κάποιο πρόγραμμα οδήγησης για την αποστολή των σωστών σημάτων στους καταχωρητές βάρδιας, δεν μπόρεσα να δοκιμάσω για να δω εάν η διάταξη υλικού λειτουργεί.

Βήμα 3: Σχεδιασμός λογισμικού προγράμματος οδήγησης

Image
Image

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

  • Παρέχετε ένα API υψηλού επιπέδου για να μπορείτε να δημιουργείτε εικόνες μέσω προγραμματισμού και κινούμενα σχέδια. Οι περισσότεροι οδηγοί που είδα ήταν πιο συγκεντρωμένοι σε σκληρά κωδικοποιημένες εικόνες. Επίσης, δεδομένου ότι είμαι προγραμματιστής C ++ στο επάγγελμα, ήθελα να χρησιμοποιήσω καλό σχεδιασμό αντικειμένων για την υλοποίηση και τη διαχείριση των δραστηριοτήτων σχεδίασης στη μήτρα LED.
  • Χρησιμοποιήστε μια προσέγγιση με διπλό ρυθμιστικό για να διαχειριστείτε την εικόνα στην οθόνη. Το ένα buffer είναι αυτό που παρασύρεται προγραμματικά, ενώ το άλλο αντιπροσωπεύει την κατάσταση των εικονοστοιχείων μήτρας σε κάθε δεδομένη στιγμή. Το πλεονέκτημα αυτής της προσέγγισης είναι ότι δεν απαιτείται να πραγματοποιήσετε πλήρως την επόμενη ενημέρωση πλαισίου για την οθόνη μεταξύ των κύκλων ενημέρωσης της πολυπλεξίας.
  • Χρησιμοποιήστε το PWM για να επιτρέψετε περισσότερα από τα επτά πρωτόγονα χρώματα που μπορεί να αποδώσει ένα RGB μέσω απλών συνδυασμών κόκκινων, πράσινων και μπλε στοιχείων.
  • Γράψτε το πρόγραμμα οδήγησης έτσι ώστε να "δουλεύει" με διαφορετικούς μεγέθους πίνακες RGB LED που ακολούθησαν τη γενική μου προσέγγιση σχεδιασμού μήτρας. Σημειώστε ότι ενώ ο σχεδιασμός υλικού μου χρησιμοποιεί καταχωρητές βάρδιας 74HC595, θα περίμενα ότι ο οδηγός μου θα εργαζόταν με οποιονδήποτε μηχανισμό ενεργοποίησης/απενεργοποίησης στυλ καταχωρητή που έχει σχεδιαστεί χρησιμοποιώντας παρόμοια διάταξη δυαδικών ψηφίων όπως το σχέδιο υλικού μου. Για παράδειγμα, θα περίμενα ότι ο οδηγός μου θα εργαζόταν με σχεδιασμό υλικού που χρησιμοποιούσε τσιπ DM13A για τον έλεγχο των στηλών και ένα τσιπ 74HC595 για τον έλεγχο των σειρών.

Εάν θέλετε να μεταβείτε κατευθείαν στον κώδικα του προγράμματος οδήγησης, μπορείτε να τον βρείτε στο GitHub εδώ.

Η πρώτη επανάληψη του οδηγού μου ήταν μια καμπύλη εκμάθησης σχετικά με τις δυνατότητες της πλατφόρμας Arduino. Ο πιο προφανής περιορισμός είναι η μνήμη RAM, η οποία είναι 2K byte για τα Arduino Uno και Nano. Η χρήση αντικειμένων C ++ σε ένα τέτοιο σενάριο δεν συνιστάται συχνά λόγω της γενικής μνήμης των αντικειμένων. Ωστόσο, ένιωσα ότι αν γίνει σωστά, το όφελος των αντικειμένων σε C ++ υπερέβη το κόστος τους (στη μνήμη RAM).

Η δεύτερη μεγάλη πρόκληση ήταν να καταλάβουμε πώς να εφαρμόσουμε τη διαμόρφωση πλάτους παλμού μέσω των καταχωρητών αλλαγής, ώστε να μπορέσω να δημιουργήσω περισσότερα από τα επτά πρωτόγονα χρώματα του RGB LED. Έχοντας προγραμματίσει για πολλά χρόνια σε πλατφόρμες Linux, είχα συνηθίσει να χρησιμοποιώ κατασκευές όπως νήματα για τη διαχείριση διαδικασιών που απαιτούν συνεπή χρονισμό. Ο χρόνος της λειτουργίας ενημέρωσης του καταχωρητή βάρδιας καταλήγει να είναι αρκετά κρίσιμος όταν δημιουργείτε ένα πρόγραμμα οδήγησης για μια μήτρα LED που χρησιμοποιεί πολυπλεξία. Ο λόγος είναι ότι παρόλο που η πολυπλεξία συμβαίνει τόσο γρήγορα που τα μάτια σας δεν μπορούν να δουν τα μεμονωμένα LED να αναβοσβήνουν και να σβήνουν, τα ayes σας μπορούν να παρατηρήσουν διαφορές στο συνολικό συνολικό χρόνο που ανάβει οποιοδήποτε LED. Εάν μια σειρά LED είναι συνεχώς αναμμένη για μεγαλύτερο χρονικό διάστημα από τις άλλες, θα φαίνεται πιο φωτεινή κατά τη διάρκεια της πολυπλεξίας. Αυτό μπορεί να οδηγήσει σε ανομοιόμορφη φωτεινότητα στη μήτρα ή περιοδικό χτύπημα της μήτρας συνολικά (αυτό συμβαίνει όταν ένας κύκλος ενημέρωσης διαρκεί περισσότερο από τους άλλους).

Δεδομένου ότι χρειαζόμουν έναν συνεπή μηχανισμό χρονισμού για να επιτρέψω τη συναίνεση των ενημερώσεων του καταχωρητή αλλαγής, αλλά το Arduino δεν υποστηρίζει επίσημα το νήμα, έπρεπε να δημιουργήσω τον δικό μου μηχανισμό που μοιάζει με νήμα. Η πρώτη μου επανάληψη ήταν να δημιουργήσω απλώς έναν χρονοδιακόπτη βρόχου που εξαρτάται από τη συνάρτηση βρόχου Arduino () και θα ενεργοποιούσε μια ενέργεια όταν έχει παρέλθει ένα ορισμένο χρονικό διάστημα από την τελευταία φορά που η ενέργεια ενεργοποιήθηκε. Πρόκειται για μια μορφή "συνεργατικής πολυεργασίας". Ακούγεται καλό, αλλά στην πράξη αυτό αποδείχθηκε ασυνεπές όταν ο ρυθμός βολής μετρήθηκε σε μικροδευτερόλεπτα. Ο λόγος για αυτό είναι ότι εάν είχα δύο από αυτούς τους χρονομετρητές βρόχου, μια από τις ενέργειές τους συχνά έπαιρνε αρκετό χρόνο για να προκαλέσει τη δεύτερη ενέργεια να ενεργοποιηθεί αργότερα από το επιθυμητό.

Διαπίστωσα ότι η λύση σε αυτό το πρόβλημα είναι να χρησιμοποιήσετε τον φυσικό μηχανισμό διακοπής ρολογιού του Arduino. Αυτός ο μηχανισμός σάς επιτρέπει να εκτελείτε ένα μικρό κομμάτι κώδικα σε πολύ σταθερά διαστήματα. Έτσι σχεδίασα τον κώδικα του προγράμματος οδήγησης γύρω από το στοιχείο σχεδίασης με τη χρήση διακοπής ρολογιού για να ενεργοποιήσω τον κώδικα για την αποστολή των καταχωρητών βάρδιας της μήτρας την επόμενη ενημέρωση στον κύκλο πολυπλεξίας. Για να το κάνω αυτό και να επιτρέψω να εμφανιστούν ενημερώσεις στην εικόνα της οθόνης για να μην παρεμβαίνει σε μια ενεργή απόρριψη στους καταχωρητές βάρδιας (κάτι που θα ονομάζαμε "συνθήκη αγώνα"), χρησιμοποίησα μια προσέγγιση να έχω δύο buffer για τα δυαδικά ψηφία shift, ένα για γραφή και ένα για διάβασμα. Όταν ο χρήστης ενημερώνει την εικόνα μήτρας, αυτές οι λειτουργίες εμφανίζονται στο buffer εγγραφής. Όταν ολοκληρωθούν αυτές οι λειτουργίες, οι διακοπές αναστέλλονται προσωρινά (αυτό σημαίνει ότι η διακοπή ρολογιού δεν μπορεί να ενεργοποιηθεί) και το buffer εγγραφής εναλλάσσεται με το προηγούμενο buffer ανάγνωσης και δεν είναι το νέο buffer ανάγνωσης, τότε οι ερμηνείες ενεργοποιούνται εκ νέου. Στη συνέχεια, όταν ενεργοποιηθεί η διακοπή ρολογιού υποδεικνύοντας ότι είναι καιρός να στείλετε την επόμενη διαμόρφωση bit στους καταχωρητές shift, αυτές οι πληροφορίες διαβάζονται από το τρέχον buffer ανάγνωσης. Με αυτόν τον τρόπο, δεν εμφανίζεται ποτέ εγγραφή σε ένα buffer από το οποίο μπορεί να διαβάζεται αυτήν τη στιγμή κατά τη διάρκεια μιας διακοπής ρολογιού, το οποίο θα μπορούσε να καταστρέψει τις πληροφορίες που αποστέλλονται στους καταχωρητές βάρδιας.

Ο σχεδιασμός του υπόλοιπου οδηγού ήταν μια σχετικά απλή περίπτωση αντικειμενοστραφούς σχεδιασμού. Για παράδειγμα, δημιούργησα ένα αντικείμενο για τη διαχείριση της εικόνας bit του καταχωρητή μετατόπισης για οποιαδήποτε δεδομένη κατάσταση οθόνης. Με την ενσωμάτωση του κώδικα που αφορά τη διαχείριση της εικόνας bit, η δημιουργία της προαναφερθείσας προσέγγισης διπλών buffer ήταν από μόνη της μια απλή άσκηση. Αλλά δεν έγραψα αυτό το Instructable για να εξυμνώ τις αρετές του αντικειμενοστραφούς σχεδιασμού. Άλλα στοιχεία σχεδίασης περιλαμβάνουν την έννοια της Glyph και της RGB Image. Ένα Glyph είναι μια βασική κατασκευή εικόνας που δεν έχει έμφυτες πληροφορίες χρώματος. Μπορείτε να το σκεφτείτε ως ασπρόμαυρη εικόνα. Όταν το Glyph τραβιέται στην οθόνη LED, δίνονται πληροφορίες χρώματος για να υποδείξουν πώς πρέπει να χρωματίζονται τα "λευκά" pixel. Μια εικόνα RGB είναι μια εικόνα όπου κάθε εικονοστοιχείο έχει τις δικές του πληροφορίες χρώματος.

Σας ενθαρρύνω να διαβάσετε τα παραδείγματα σκίτσων Arduino και να αναθεωρήσετε την τεκμηρίωση της κεφαλίδας του προγράμματος οδήγησης για να εξοικειωθείτε με τον τρόπο χρήσης του προγράμματος οδήγησης για τη δημιουργία εικόνων και κινούμενων εικόνων σε έναν πίνακα LED RGB.

Βήμα 4: LED Ghosting

LED Ghosting
LED Ghosting
LED Ghosting
LED Ghosting

Σε μια μήτρα LED, το "ghosting" είναι το φαινόμενο μιας λυχνίας LED στη μήτρα να λάμπει όταν δεν είναι επιθυμητό, συνήθως σε πολύ μειωμένο επίπεδο. Ο αρχικός μου σχεδιασμός υλικού ήταν επιρρεπής σε ghosting, κυρίως στην τελευταία σειρά. Η αιτία αυτού οφείλεται σε δύο πράγματα: τα τρανζίστορ δεν απενεργοποιούνται αμέσως και η παρασιτική χωρητικότητα στα LED RGB.

Καθώς σαρώνουμε τις γραμμές, λόγω του ότι τα τρανζίστορ δεν απενεργοποιούνται αμέσως, η προηγούμενη σειρά στον κύκλο σάρωσης εξακολουθεί να τροφοδοτείται εν μέρει όταν ενεργοποιηθεί η επόμενη σειρά. Εάν μια δεδομένη στήλη που ήταν απενεργοποιημένη στην προηγούμενη σειρά ενεργοποιηθεί πρόσφατα όταν η νέα σειρά τροφοδοτηθεί, η λυχνία LED αυτής της στήλης στην προηγούμενη σειρά θα ανάψει για λίγο ενώ το τρανζίστορ μεταγωγής της προηγούμενης σειράς είναι ακόμα σε διαδικασία περιστροφής μακριά από. Αυτό που προκαλεί το τρανζίστορ να πάρει αρκετό χρόνο για να απενεργοποιηθεί είναι ο κορεσμός στη βάση του τρανζίστορ. Αυτό προκαλεί τη διαδρομή τρανζίστορ συλλέκτη-εκπομπής να συνεχίσει να αγωγείται όταν αφαιρείται ρεύμα από τη βάση, τουλάχιστον μέχρι να διαλυθεί ο κορεσμός. Δεδομένου ότι ο κύκλος ενημέρωσης πολυπλεξίας μας προκαλεί σκόπιμα ενεργοποίηση των σειρών για χρονικό διάστημα μετρημένο σε μικροδευτερόλεπτα, το χρονικό διάστημα που το κορεσμένο τρανζίστορ της προηγούμενης σειράς παραμένει αγώγιμο μπορεί να είναι ένα αξιοσημείωτο κλάσμα αυτού. Ως αποτέλεσμα, το μάτι σας μπορεί να αντιληφθεί το πολύ μικρό χρονικό διάστημα που είναι ενεργοποιημένο το LED της προηγούμενης σειράς.

Για να διορθώσετε το πρόβλημα κορεσμού του τρανζίστορ, μια δίοδος Schottky μπορεί να προστεθεί στο τρανζίστορ μεταξύ της βάσης και του συλλέκτη για να προκαλέσει λίγο αντίθετο ρεύμα στη βάση όταν το τρανζίστορ είναι ενεργοποιημένο, εμποδίζοντας το τρανζίστορ να κορεστεί. Αυτό με τη σειρά του θα κάνει το τρανζίστορ να απενεργοποιηθεί πιο γρήγορα όταν αφαιρεθεί το ρεύμα από τη βάση. Δείτε αυτό το άρθρο για μια λεπτομερή εξήγηση αυτού του αποτελέσματος. Όπως μπορείτε να δείτε από την εικόνα σε αυτήν την ενότητα, χωρίς τη δίοδο το ghosting είναι αρκετά αισθητό, αλλά η προσθήκη της διόδου στο κύκλωμα για κάθε σειρά αφαιρεί σημαντικά το ghosting.

Τα LED RGB είναι ευαίσθητα σε ένα άλλο φαινόμενο που ονομάζεται παρασιτική χωρητικότητα. Η βασική αιτία αυτού είναι το γεγονός ότι καθένα από τα τρία έγχρωμα LED στη μονάδα LED RGB το καθένα έχει διαφορετικές τάσεις εμπρός. Αυτή η διαφορά στις τάσεις εμπρός μπορεί να προκαλέσει την επίδραση της ηλεκτρικής χωρητικότητας μεταξύ καθενός από τα μεμονωμένα χρώματα LED. Δεδομένου ότι ένα ηλεκτρικό φορτίο δημιουργείται στη μονάδα LED όταν τροφοδοτείται, όταν αποσυνδέεται η ισχύς, η παρασιτική χωρητικότητα πρέπει να αποφορτιστεί. Εάν αυτή η στήλη LED είναι διαφορετικά ενεργοποιημένη για να τροφοδοτηθεί μια άλλη σειρά, το παρασιτικό φορτίο θα εκφορτιστεί μέσω αυτών των στηλών LED και θα προκαλέσει σύντομη λάμψη. Αυτό το αποτέλεσμα εξηγείται όμορφα σε αυτό το άρθρο. Η λύση είναι να προσθέσετε μια διαδρομή εκφόρτισης για αυτό το παρασιτικό φορτίο εκτός από το ίδιο το LED και, στη συνέχεια, να δώσετε στο LED χρόνο να εκφορτιστεί πριν τροφοδοτηθεί ξανά η στήλη. Στο σχεδιασμό του υλικού μου, αυτό επιτυγχάνεται προσθέτοντας μια αντίσταση στη γραμμή ισχύος κάθε σειράς που συνδέει τη δύναμη με τη γείωση. Αυτό θα προκαλέσει έλξη περισσότερου ρεύματος με την τροφοδοσία της σειράς, αλλά παρέχει διαδρομή εκφόρτισης για την παρασιτική χωρητικότητα όταν η σειρά δεν τροφοδοτείται.

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

Βήμα 5: Τελική κατασκευή και επόμενα βήματα

Image
Image

Η τελική φάση αυτού του έργου ήταν για μένα να δημιουργήσω μια πλακέτα τυπωμένου κυκλώματος (PCB). Χρησιμοποίησα το πρόγραμμα ανοιχτού κώδικα Fritzing για να σχεδιάσω το PCB μου. Ενώ υπήρχαν πολλές επαναλαμβανόμενες εργασίες για να ολοκληρώσω τη διάταξη 100 LED σε έναν πίνακα 10x10, βρήκα πραγματικά αυτή τη φάση του έργου περίεργα ικανοποιητική. Το να καταλάβουμε πώς θα σχεδιαζόταν κάθε ηλεκτρική οδός ήταν σαν ένα παζλ και η επίλυση αυτού του παζλ δημιούργησε μια αίσθηση ολοκλήρωσης. Δεδομένου ότι δεν έχω σχεδιαστεί για να κατασκευάζω τους πίνακες κυκλωμάτων, χρησιμοποίησα έναν από τους πολλούς διαδικτυακούς πόρους που κάνουν μικρές εκδόσεις προσαρμοσμένων PCB. Η συγκόλληση των εξαρτημάτων μαζί ήταν αρκετά ευθεία, καθώς ο σχεδιασμός μου χρησιμοποιούσε όλα τα τμήματα μέσω οπών.

Κατά τη συγγραφή αυτού του Instructable, έχω τα ακόλουθα σχέδια για τα έργα μου RGB LED Matrix:

  1. Συνεχίστε να βελτιώνετε το πρόγραμμα οδήγησης στο επίπεδο API για να ενεργοποιήσετε περισσότερες λειτουργίες υψηλού επιπέδου στον προγραμματιστή, με κυριότερη την κύλιση κειμένου.
  2. Δημιουργήστε μεγαλύτερα σχέδια μήτρας, όπως 16x16 ή ακόμη και 16x32.
  3. Εξερευνήστε χρησιμοποιώντας MOSFET αντί για BJT για την εναλλαγή ισχύος γραμμής
  4. Εξερευνήστε χρησιμοποιώντας προγράμματα οδήγησης σταθερού ρεύματος DM13A και όχι 74HC595 για την εναλλαγή στηλών
  5. Δημιουργήστε προγράμματα οδήγησης για άλλες πλατφόρμες μικροέλεγχου, όπως το Teensy, το ODROID C2 ή το Raspberry Pi.

Σημειώστε ότι τόσο ο σχεδιασμός υλικού όσο και το πρόγραμμα οδήγησης έχουν κυκλοφορήσει υπό την άδεια ανοικτού κώδικα GPL v3 σε αυτό το αποθετήριο GitHub. Επιπλέον, παρόλο που οι κατασκευαστές PCB κάνουν "μικρές εκδόσεις" του σχεδιασμού PCB μου, εξακολουθώ να παίρνω πολύ περισσότερα από όσα προσωπικά χρειάζομαι. Πουλάω λοιπόν πλήρη πακέτα για τα διάφορα σχέδια μήτρας RGB LED (PCB και όλα τα μέρη που περιλαμβάνονται) από τον ιστότοπό μου εδώ.

Συνιστάται: