- Καρφίτσες PWM στο μικροελεγκτή AVR Atmega16
- Τι είναι το σήμα PWM;
- Απαιτούμενα στοιχεία
- Διάγραμμα κυκλώματος
- Προγραμματισμός Atmega16 για PWM
Pulse Width Modulation (PWM) είναι μια ισχυρή τεχνική όπου το πλάτος του παλμού αλλάζει διατηρώντας τη συχνότητα σταθερή. Η τεχνική χρησιμοποιείται σήμερα σε πολλά συστήματα ελέγχου. Η εφαρμογή του PWM δεν είναι περιορισμένη και χρησιμοποιείται σε ένα ευρύ φάσμα εφαρμογών όπως έλεγχος ταχύτητας κινητήρα, μέτρηση, έλεγχος ισχύος και επικοινωνία κ.λπ. Στην τεχνική PWM, μπορεί κανείς να παράγει εύκολα αναλογικό σήμα εξόδου χρησιμοποιώντας ψηφιακά σήματα. Αυτό το σεμινάριο θα σας βοηθήσει να κατανοήσετε το PWM, τις ορολογίες του και πώς μπορούμε να το εφαρμόσουμε χρησιμοποιώντας έναν μικροελεγκτή. Σε αυτό το σεμινάριο θα παρουσιάσουμε PWM με AVR Atmega16 Microcontroller μεταβάλλοντας την ένταση ενός LED.
Για να κατανοήσετε λεπτομερώς τα βασικά του PWM, μεταβείτε στα προηγούμενα σεμινάρια σχετικά με το PWM με διάφορους μικροελεγκτές:
- ARM7-LPC2148 PWM Tutorial: Έλεγχος φωτεινότητας LED
- Διαμόρφωση πλάτους παλμού (PWM) χρησιμοποιώντας MSP430G2: Έλεγχος φωτεινότητας LED
- Δημιουργία PWM χρησιμοποιώντας μικροελεγκτή PIC με MPLAB και XC8
- Διαμόρφωση πλάτους παλμού (PWM) στο STM32F103C8: Έλεγχος ταχύτητας ανεμιστήρα DC
- Δημιουργία σημάτων PWM σε ακροδέκτες GPIO του μικροελεγκτή PIC
- Εκμάθηση Raspberry Pi PWM
Καρφίτσες PWM στο μικροελεγκτή AVR Atmega16
Το Atmega16 διαθέτει τέσσερις εξειδικευμένους ακροδέκτες PWM. Αυτές οι ακίδες είναι PB3 (OC0), PD4 (OC1B), PD5 (OC1A), PD7 (OC2).
Επίσης, το Atmega16 έχει δύο χρονοδιακόπτες 8-bit και ένα χρονόμετρο 16 bit. Οι Timer0 και Timer2 είναι χρονοδιακόπτες 8-bit ενώ ο Timer1 είναι χρονοδιακόπτης 16-bit. Για τη δημιουργία PWM πρέπει να έχουμε μια επισκόπηση των χρονομέτρων, καθώς οι χρονομετρητές χρησιμοποιούνται για τη δημιουργία PWM. Όπως γνωρίζουμε ότι η συχνότητα είναι αριθμός κύκλων ανά δευτερόλεπτο στον οποίο λειτουργεί ο χρονοδιακόπτης. Έτσι, η υψηλότερη συχνότητα θα μας δώσει ένα γρηγορότερο χρονόμετρο. Κατά τη δημιουργία PWM, μια ταχύτερη συχνότητα PWM θα δώσει καλύτερο έλεγχο στην έξοδο, επειδή μπορεί να ανταποκριθεί ταχύτερα σε νέους κύκλους λειτουργίας PWM.
Σε αυτό το σεμινάριο Atmega16 PWM θα χρησιμοποιήσουμε το Timer2. Μπορείτε να επιλέξετε οποιονδήποτε κύκλο εργασίας. Εάν δεν γνωρίζετε τι είναι ο κύκλος λειτουργίας στο PWM, τότε ας συζητήσουμε εν συντομία.
Τι είναι το σήμα PWM;
Το Pulse Width Modulation (PWM) είναι ένα ψηφιακό σήμα που χρησιμοποιείται συχνότερα στα κυκλώματα ελέγχου. Ο χρόνος κατά τον οποίο το σήμα παραμένει υψηλό ονομάζεται "on time" και ο χρόνος κατά τον οποίο το σήμα παραμένει χαμηλό ονομάζεται "off time". Υπάρχουν δύο σημαντικές παράμετροι για ένα PWM όπως συζητείται παρακάτω:
Κύκλος λειτουργίας του PWM
Το ποσοστό χρόνου στο οποίο το σήμα PWM παραμένει ΥΨΗΛΟ (στην ώρα) ονομάζεται κύκλος λειτουργίας.
Όπως στα παλμικά σήματα 100ms, εάν το σήμα είναι ΥΨΗΛΟ για 50ms και LOW για 50ms, αυτό σημαίνει ότι ο παλμός ήταν μισός χρόνος ΥΨΟΣ και μισός χρόνος ΧΑΜΗΛΟΣ. Μπορούμε λοιπόν να πούμε ότι ο κύκλος λειτουργίας είναι 50%. Ομοίως, εάν ο παλμός βρίσκεται σε κατάσταση 25ms ΥΨΗΛΟΣ και 75ms σε κατάσταση χαμηλής από τα 100ms, τότε ο κύκλος λειτουργίας θα είναι 25%. Σημειώστε ότι υπολογίζουμε μόνο τη διάρκεια της κατάστασης ΥΨΗΛΗΣ. Μπορείτε να δείτε την παρακάτω εικόνα για οπτική κατανόηση. Ο τύπος για τον κύκλο εργασίας είναι τότε,
Κύκλος εργασίας (%) = On Time / (On Time + Off Time)
Έτσι, αλλάζοντας τον κύκλο λειτουργίας μπορούμε να αλλάξουμε το πλάτος του PWM με αποτέλεσμα την αλλαγή της φωτεινότητας των LED. Θα έχουμε επίδειξη χρήσης διαφορετικού κύκλου λειτουργίας για τον έλεγχο της φωτεινότητας των LED. Ελέγξτε το δοκιμαστικό βίντεο στο τέλος αυτού του σεμιναρίου.
Αφού επιλέξετε τον κύκλο λειτουργίας, το επόμενο βήμα θα ήταν η επιλογή της λειτουργίας PWM. Η λειτουργία PWM καθορίζει ότι πώς θέλετε να λειτουργεί το PWM. Υπάρχουν κυρίως 3 τύποι τρόπων PWM. Αυτά είναι τα εξής:
- Γρήγορη PWM
- Phase Correct PWM
- Σωστό PWM φάσης και συχνότητας
Το γρήγορο PWM χρησιμοποιείται όταν η αλλαγή φάσης δεν έχει σημασία. Χρησιμοποιώντας το Fast PWM, μπορούμε να εξάγουμε τις τιμές PWM γρήγορα. Το γρήγορο PWM δεν μπορεί να χρησιμοποιηθεί όπου η αλλαγή φάσης επηρεάζει τη λειτουργία όπως ο έλεγχος κινητήρα, οπότε σε τέτοια εφαρμογή χρησιμοποιούνται άλλες λειτουργίες PWM. Δεδομένου ότι θα ελέγχουμε τη φωτεινότητα των LED όπου η αλλαγή φάσης δεν θα επηρεάσει πολύ, έτσι θα χρησιμοποιήσουμε τη λειτουργία Fast PWM
Τώρα για τη δημιουργία PWM θα ελέγξουμε τον εσωτερικό χρονοδιακόπτη για να μετράμε και στη συνέχεια θα επανέλθουμε στο μηδέν σε μια συγκεκριμένη μέτρηση, έτσι ο χρονοδιακόπτης θα μετράει και στη συνέχεια θα επανέρχεται ξανά στο μηδέν. Αυτό καθορίζει την περίοδο. Τώρα έχουμε την επιλογή να ελέγξουμε έναν παλμό, να ενεργοποιήσουμε έναν παλμό σε μια συγκεκριμένη μέτρηση στο χρονόμετρο ενώ ανεβαίνει. Όταν ο μετρητής επιστρέψει στο 0, τότε απενεργοποιήστε τον παλμό. Υπάρχει μεγάλη ευελιξία με αυτό, επειδή μπορείτε πάντα να έχετε πρόσβαση στο πλήθος του χρονοδιακόπτη και να παρέχετε διαφορετικούς παλμούς με ένα χρονόμετρο. Αυτό είναι υπέροχο όταν θέλετε να ελέγχετε πολλά LED ταυτόχρονα. Τώρα ας αρχίσουμε να συνδέουμε ένα LED με Atmega16 για PWM.
Δείτε όλα τα σχετικά έργα PWM εδώ.
Απαιτούμενα στοιχεία
- Atmega16 AVR Μικροελεγκτής IC
- 16Mhz Crystal Oscillator
- Δύο πυκνωτές 100nF
- Δύο πυκνωτές 22pF
- Πλήκτρο
- Καλώδια αλτών
- Ψωμί
- USBASP v2.0
- 2 Led (οποιοδήποτε χρώμα)
Διάγραμμα κυκλώματος
Χρησιμοποιούμε το OC2 για PWM, δηλαδή Pin21 (PD7). Συνδέστε λοιπόν ένα LED στον πείρο PD7 του Atmega16.
Προγραμματισμός Atmega16 για PWM
Το πλήρες πρόγραμμα δίνεται παρακάτω. Κάψτε το πρόγραμμα στο Atmega16 χρησιμοποιώντας το JTAG και το Atmel studio και δείτε το εφέ PWM στο LED. Η φωτεινότητά του θα αυξηθεί και θα μειωθεί αργά λόγω του διαφορετικού κύκλου λειτουργίας του PWM. Ελέγξτε το βίντεο που δίνεται στο τέλος.
Ξεκινήστε τον προγραμματισμό Atmega16 με τη ρύθμιση Timer2 Register. Τα bit του Timer2 είναι τα εξής και μπορούμε να ορίσουμε ή να επαναφέρουμε τα bit ανάλογα.
Τώρα θα συζητήσουμε για όλα τα bit του Timer2, ώστε να μπορούμε να πάρουμε το επιθυμητό PWM χρησιμοποιώντας γραπτό πρόγραμμα.
Υπάρχουν κυρίως τέσσερα μέρη στο Timer2 register:
FOC2 (Σύγκριση εξόδου δύναμης για το Χρονοδιακόπτη2): Το bit FOC2 ρυθμίζεται όταν τα bit WGM καθορίζουν μια λειτουργία εκτός PWM.
WGM2 (Λειτουργία δημιουργίας κυμάτων για το Χρονοδιακόπτη2): Αυτά τα δυαδικά ψηφία ελέγχουν την ακολουθία μέτρησης του μετρητή, την πηγή για τη μέγιστη τιμή μετρητή (TOP) και τον τύπο παραγωγής κυματομορφής που θα χρησιμοποιηθεί.
COM2 (Σύγκριση λειτουργίας εξόδου για χρονοδιακόπτη2): Αυτά τα bits ελέγχουν τη συμπεριφορά εξόδου. Η πλήρης περιγραφή bit εξηγείται παρακάτω.
TCCR2 - = (1 <
Ορίστε τα bit WGM20 και WGM21 ως ΥΨΗΛΑ για να ενεργοποιήσετε τη λειτουργία γρήγορης λειτουργίας PWM. Το WGM σημαίνει λειτουργία δημιουργίας κυματομορφής. Τα bit επιλογής είναι τα παρακάτω.
WGM00 |
WGM01 |
Λειτουργία Timer2 Mode |
0 |
0 |
Κανονική λειτουργία |
0 |
1 |
CTC (Εκκαθάριση χρονοδιακόπτη σε σύγκριση αγώνα) |
1 |
0 |
PWM, σωστή φάση |
1 |
1 |
Γρήγορη λειτουργία PWM |
Για περισσότερες λεπτομέρειες σχετικά με τη λειτουργία δημιουργίας κυματομορφής, μπορείτε να ανατρέξετε στο επίσημο δελτίο δεδομένων του Atmega16.
TCCR2 - = (1 <
Επίσης, δεν έχουμε χρησιμοποιήσει καμία προ-κλιμάκωση, επομένως έχουμε ορίσει το ρολόι πηγής ρολογιού ως «001».
Τα bit επιλογής ρολογιού έχουν ως εξής:
CS22 |
CS21 |
CS20 |
Περιγραφή |
0 |
0 |
0 |
Χωρίς πηγή ρολογιού (Διακόπτης χρονομέτρου / μετρητή) |
0 |
0 |
1 |
clk T2S / (Χωρίς Προκατασκευή) |
0 |
1 |
0 |
Clk T2S / 8 (Από Prescaler) |
0 |
1 |
1 |
Clk T2S / 32 (Από Prescaler) |
1 |
0 |
0 |
Clk T2S / 64 (Από Prescaler) |
1 |
0 |
1 |
Clk T2S / 128 (Από Prescaler) |
1 |
1 |
0 |
Clk T2S / 256 (Από το Prescaler) |
1 |
1 |
1 |
Clk T2S / 1024 (Από Prescaler) |
Επίσης, το OC2 εκκαθαρίζεται στην σύγκριση αγώνα, ορίζοντας το COM21 bit ως «1» και το COM20 ως «0».
Οι επιλογές επιλογής σύγκρισης λειτουργίας εξόδου (COM) για τη λειτουργία γρήγορης λειτουργίας PWM δίνονται παρακάτω:
COM21 |
COM21 |
Περιγραφή |
0 |
0 |
Κανονική λειτουργία θύρας, αποσυνδέθηκε το OC2. |
0 |
1 |
Κατοχυρωμένα |
1 |
0 |
Εκκαθάριση OC2 στο Σύγκριση αγώνα, Ορίστε OC2 στο TOP |
1 |
1 |
Ορίστε το OC2 στο συγκρίσιμο αγώνα, καθαρίστε το OC2 στο TOP |
Αυξήστε τον κύκλο λειτουργίας από 0% σε 100%, ώστε η φωτεινότητα να αυξηθεί με την πάροδο του χρόνου. Πάρτε την τιμή από 0-255 και στείλτε την στην καρφίτσα OCR2.
για (duty = 0; duty <255; duty ++) // 0 to max duty cycle { OCR2 = duty; // αυξήστε αργά τη φωτεινότητα LED _delay_ms (10). }
Ομοίως, μειώστε τον κύκλο λειτουργίας από 100% σε 0% για να μειώσετε σταδιακά τη φωτεινότητα των LED.
για (duty = 0; duty> 255; duty--) // max to 0 duty cycle { OCR2 = duty; // μειώστε αργά τη φωτεινότητα LED _delay_ms (10). }
Αυτό ολοκληρώνει τον Οδηγό μας για τη χρήση PWM στο Atmega16 / 32.