Σε αυτό το έργο θα χρησιμοποιήσουμε ένα από τα χαρακτηριστικά του ATmega32A για να ρυθμίσουμε τη φωτεινότητα των 1 Watt LED. Η μέθοδος που χρησιμοποιείται για τη ρύθμιση της ταχύτητας των LED είναι PWM (Pulse Width Modulation). Αυτό το σεμινάριο AVR Microcontroller PWM εξηγεί λεπτομερώς την έννοια PWM και τη δημιουργία PWM (Μπορείτε επίσης να ελέγξετε αυτό το απλό κύκλωμα γεννήτριας PWM). Σκεφτείτε ένα απλό κύκλωμα όπως φαίνεται στο σχήμα.
Τώρα, εάν ο διακόπτης στην παραπάνω εικόνα κλείνει συνεχώς για μια χρονική περίοδο, τότε ο λαμπτήρας θα ανάβει συνεχώς κατά τη διάρκεια αυτής της περιόδου. Εάν ο διακόπτης είναι κλειστός για 8ms και ανοίξει για 2ms σε έναν κύκλο 10ms, τότε ο λαμπτήρας θα είναι ΟΝ μόνο στη διάρκεια των 8ms. Τώρα ο μέσος τερματικός σταθμός πέρα από μια περίοδο 10ms = Χρόνος ΕΝΕΡΓΟΠΟΙΗΣΗΣ / (Χρόνος ΕΝΕΡΓΟΠΟΙΗΣΗΣ + Χρόνος απενεργοποίησης), αυτό ονομάζεται κύκλος λειτουργίας και είναι 80% (8 / (8 + 2)), έτσι ο μέσος Η τάση εξόδου θα είναι 80% της τάσης της μπαταρίας.
Στη δεύτερη περίπτωση, ο διακόπτης είναι κλειστός για 5ms και ανοίγει για 5ms για περίοδο 10ms, οπότε η μέση τάση τερματικού στην έξοδο θα είναι 50% της τάσης της μπαταρίας. Πείτε εάν η τάση της μπαταρίας είναι 5V και ο κύκλος λειτουργίας είναι 50% και έτσι η μέση τάση τερματικού θα είναι 2,5V.
Στην τρίτη περίπτωση ο κύκλος λειτουργίας είναι 20% και η μέση τάση τερματικού είναι 20% της τάσης της μπαταρίας.
Στο ATMEGA32A έχουμε τέσσερα κανάλια PWM, δηλαδή OC0, OC1A, OC1B και OC2. Εδώ πρόκειται να χρησιμοποιήσουμε το κανάλι OC0 PWM για να αλλάξουμε τη φωτεινότητα του LED.
Απαιτούμενα στοιχεία
Σκεύη, εξαρτήματα:
Μικροελεγκτής ATmega32
Τροφοδοσία (5v)
Προγραμματιστής AVR-ISP
Πυκνωτής 100uF, LED 1Watt
Τρανζίστορ TIP127
Κουμπιά (2 τεμάχια)
Πυκνωτής 100nF (104) (2 τεμάχια), 100Ω και 1kΩ αντιστάσεις (2 τεμάχια).
Λογισμικό:
Atmel studio 6.1
Progisp ή flash μαγεία
Διάγραμμα κυκλώματος και εξήγηση εργασίας
Η παραπάνω εικόνα δείχνει το διάγραμμα κυκλώματος του dimmer LED με τον μικροελεγκτή AVR (Μπορείτε επίσης να ελέγξετε αυτό το απλό κύκλωμα dimmer LED).
Στο ATmega, για τέσσερα κανάλια PWM, έχουμε ορίσει τέσσερις ακίδες. Μπορούμε να πάρουμε μόνο έξοδο PWM σε αυτές τις ακίδες μόνο. Από τη στιγμή που χρησιμοποιείτε PWM0 θα πρέπει να λαμβάνουν το σήμα PWM σε OC0 pin (PORTB 3 ος PIN). Όπως φαίνεται στο σχήμα, συνδέουμε τη βάση του τρανζίστορ με τον ακροδέκτη OC0 για να οδηγήσουμε το LED ισχύος. Εδώ ένα άλλο πράγμα είναι πάνω από τέσσερα κανάλια PWM, δύο είναι κανάλια PWM 8-bit. Θα χρησιμοποιήσουμε ένα κανάλι PWM 8-bit εδώ.
Ένας πυκνωτής συνδέεται σε καθένα από τα κουμπιά για να αποφευχθεί η αναπήδηση. Κάθε φορά που πατάτε ένα κουμπί θα υπάρχει θόρυβος στο πείρο. Αν και αυτός ο θόρυβος σταθεροποιείται σε χιλιοστά του δευτερολέπτου. Για έναν ελεγκτή οι αιχμηρές κορυφές πριν από τη σταθεροποίηση ενεργούν ως σκανδάλη. Αυτό το αποτέλεσμα μπορεί να εξαλειφθεί είτε μέσω λογισμικού ή υλικού, ώστε το πρόγραμμα να είναι απλό. Χρησιμοποιούμε τη μέθοδο υλικού προσθέτοντας πυκνωτή απόρριψης.
Οι πυκνωτές ακυρώνουν το αποτέλεσμα της αναπήδησης των κουμπιών.
Στο ATMEGA υπάρχουν μερικοί τρόποι δημιουργίας PWM, είναι:
1. Σωστή φάση PWM
2. Γρήγορο PWM
Εδώ πρόκειται να κρατήσουμε τα πάντα απλά, οπότε θα χρησιμοποιήσουμε τη μέθοδο FAST PWM για τη δημιουργία του σήματος PWM.
Πρώτα για να επιλέξετε τη συχνότητα του PWM, Αυτό εξαρτάται από την εφαρμογή συνήθως, για μια LED οποιαδήποτε συχνότητα μεγαλύτερη από 50Hz θα έκανε. Για αυτόν τον λόγο επιλέγουμε το ρολόι 1MHZ. Γι 'αυτό δεν επιλέγουμε κανένα προκάτοχο. Ένα prescalar είναι ένας αριθμός που είναι τόσο επιλεγμένος για να πάρει ένα μικρότερο ρολόι μετρητή. Για παράδειγμα, εάν το ρολόι ταλαντωτή είναι 8Mhz, μπορούμε να επιλέξουμε μια προκαταρκτική τιμή του «8» για να πάρουμε ένα ρολόι 1MHz για μετρητή. Η προεπιλογή επιλέγεται με βάση τη συχνότητα. Αν θέλουμε περισσότερους παλμούς χρονικής περιόδου πρέπει να επιλέξουμε υψηλότερα prescalar.
Τώρα για να βγάλουμε το FAST PWM του ρολογιού 50Hz από το ATMEGA, πρέπει να ενεργοποιήσουμε τα κατάλληλα bits στο μητρώο " TCCR0 ". Αυτός είναι ο μόνος καταχωρητής που πρέπει να ενοχλήσουμε, για να λάβουμε 8bit FAST PWM.
Εδώ, 1. CS00, CS01, CS02 (ΚΙΤΡΙΝΟ) - επιλέξτε το prescalar για την επιλογή ρολογιού. Ο πίνακας για την κατάλληλη προκαταρκτική εμφανίζεται στον παρακάτω πίνακα. Έτσι, για την προεπιλογή ενός (ρολόι ταλαντωτή = ρολόι μετρητή).
έτσι CS00 = 1, άλλα δύο bit είναι μηδέν.
2. Τα WGM01 και WGM00 τροποποιούνται για να επιλέξουν τρόπους δημιουργίας κυματομορφών, με βάση τον παρακάτω πίνακα, για γρήγορο PWM. Έχουμε WGM00 = 1 και WGM01 = 1;
3. Τώρα γνωρίζουμε ότι το PWM είναι ένα σήμα με διαφορετική αναλογία λειτουργίας ή διαφορετικούς χρόνους απενεργοποίησης. Μέχρι τώρα έχουμε επιλέξει τη συχνότητα και τον τύπο PWM. Το κύριο θέμα αυτού του έργου βρίσκεται σε αυτήν την ενότητα. Για να έχουμε διαφορετική αναλογία λειτουργίας, θα επιλέξουμε μια τιμή μεταξύ 0 και 255 (2 ^ 8 λόγω 8 bit). Ας υποθέσουμε ότι επιλέγουμε μια τιμή 180, καθώς ο μετρητής αρχίζει να μετράει από το 0 και φτάνει στην τιμή 180, η απόκριση εξόδου μπορεί να ενεργοποιηθεί. Αυτή η σκανδάλη μπορεί να είναι αντιστροφή ή μη αναστροφή. Δηλαδή, η έξοδος μπορεί να ειπωθεί ότι ανεβαίνει κατά την επίτευξη του αριθμού, ή μπορεί να ειπωθεί για να τραβήξει προς τα κάτω κατά την επίτευξη του αριθμού.
Αυτή η επιλογή τραβήγματος προς τα πάνω ή προς τα κάτω επιλέγεται από CM00 και CM01 bits.
Όπως φαίνεται στον πίνακα, για σύγκριση της εξόδου σε σύγκριση και η έξοδος θα παραμείνει υψηλή έως τη μέγιστη τιμή (όπως φαίνεται στην εικόνα στο κάτω μέρος). Πρέπει να επιλέξουμε τη λειτουργία αντιστροφής για να το κάνουμε αυτό, έτσι COM00 = 1; COM01 = 1.
Όπως φαίνεται στο παρακάτω σχήμα, το OCR0 (Output σύγκριση Register 0) είναι το byte που αποθηκεύει την επιλεγμένη από τον χρήστη τιμή. Αν αλλάξουμε OCR0 = 180, ο ελεγκτής ενεργοποιεί την αλλαγή (υψηλή) όταν ο μετρητής φτάσει το 180 από το 0.
Τώρα για τη μεταβολή της φωτεινότητας των LED πρέπει να αλλάξουμε το DUTY RATIO του σήματος PWM. Για να αλλάξουμε την αναλογία δασμού, πρέπει να αλλάξουμε την τιμή OCR0. Όταν αλλάζουμε αυτήν την τιμή του OCR0, ο μετρητής χρειάζεται διαφορετικό χρόνο για να φτάσει στο OCR0. Έτσι, ο ελεγκτής τραβά την έξοδο σε διαφορετικούς χρόνους.
Έτσι, για PWM διαφορετικών κύκλων λειτουργίας, πρέπει να αλλάξουμε την τιμή OCR0.
Στο κύκλωμα έχουμε δύο κουμπιά. Ένα κουμπί είναι για την αύξηση της τιμής OCR0 και έτσι το DUTY RATIO του σήματος PWM, άλλο είναι για τη μείωση της τιμής OCR0 και έτσι το DUTY RATIO του σήματος PWM.