- Βασικά στοιχεία του σήματος PWM
- Ρύθμιση και απαίτηση υλικού
- Διάγραμμα κυκλώματος για αφαίρεση LED μικροελεγκτή Nuvoton N76E003
- PWM Pins στο N76E003 Nuvoton Microcontroller
- Μητρώα και λειτουργίες PWM στο N76E003 Nuvoton Microcontroller
- Τρόποι λειτουργίας PWM στο μικροελεγκτή Nuvoton N6E003
- Προγραμματισμός Nuvoton N76E003 για PWM
- Αναβοσβήνει ο κωδικός και ελέγχεται η έξοδος
Pulse Width Modulation (PWM) είναι μια τεχνική που χρησιμοποιείται συνήθως σε μικροελεγκτές για την παραγωγή συνεχούς παλμικού σήματος με καθορισμένη συχνότητα και κύκλο λειτουργίας. Εν ολίγοις, το PWM αφορά την αλλαγή του πλάτους ενός παλμού ενώ η συχνότητα είναι σταθερή.
Ένα σήμα PWM χρησιμοποιείται κυρίως για τον έλεγχο ενός σερβοκινητήρα ή της φωτεινότητας ενός LED. Επίσης, δεδομένου ότι οι μικροελεγκτές μπορούν να παρέχουν μόνο τη Λογική 1 (Υψηλή) ή τη Λογική 0 (Χαμηλή) στους ακροδέκτες εξόδου της, δεν μπορεί να παρέχει μια διαφορετική αναλογική τάση εκτός εάν χρησιμοποιείται μετατροπέας DAC ή Ψηφιακός σε Αναλογικός. Σε μια τέτοια περίπτωση, ο μικροελεγκτής μπορεί να προγραμματιστεί για έξοδο PWM με ποικίλο κύκλο λειτουργίας που μπορεί στη συνέχεια να μετατραπεί σε μεταβαλλόμενη αναλογική τάση. Έχουμε χρησιμοποιήσει προηγουμένως περιφερειακό PWM σε πολλούς άλλους μικροελεγκτές επίσης.
- ARM7-LPC2148 PWM Tutorial: Έλεγχος φωτεινότητας LED
- Διαμόρφωση πλάτους παλμού (PWM) χρησιμοποιώντας MSP430G2: Έλεγχος φωτεινότητας LED
- Δημιουργία PWM χρησιμοποιώντας μικροελεγκτή PIC με MPLAB και XC8
- Διαμόρφωση πλάτους παλμού (PWM) στο STM32F103C8: Έλεγχος ταχύτητας ανεμιστήρα DC
- Δημιουργία σημάτων PWM σε ακροδέκτες GPIO του μικροελεγκτή PIC
- Εκμάθηση Raspberry Pi PWM
- Εκμάθηση PWM με ESP32
Σε αυτό το σεμινάριο, θα συνδέσουμε ένα LED που θα ελέγχεται χρησιμοποιώντας αυτό το σήμα PWM από τη μονάδα μικροελεγκτή N76E003. Θα αξιολογήσουμε τι είδους ρύθμιση υλικού χρειαζόμαστε και πώς πρέπει να προγραμματίσουμε τον μικροελεγκτή μας. Πριν από αυτό, ας καταλάβουμε ορισμένα βασικά στοιχεία ενός σήματος PWM.
Βασικά στοιχεία του σήματος PWM
Στην παρακάτω εικόνα εμφανίζεται ένα σταθερό σήμα PWM.
Η παραπάνω εικόνα δεν είναι παρά ένα σταθερό τετράγωνο κύμα με τον ίδιο χρόνο ON και τον ίδιο χρόνο OFF. Ας υποθέσουμε ότι η συνολική περίοδος του σήματος είναι 1 δευτερόλεπτο. Έτσι ο χρόνος ώρας και εκτός λειτουργίας είναι 500ms. Εάν ένα LED είναι συνδεδεμένο σε αυτό το σήμα, το LED θα ανάψει για 500ms και θα σβήσει για 500ms. Επομένως, σε προοπτική προβολή, το LED θα ανάψει με το ήμισυ της πραγματικής φωτεινότητας, εάν είναι ενεργοποιημένο σε άμεσο σήμα 5V χωρίς χρόνο διακοπής.
Τώρα όπως φαίνεται στην παραπάνω εικόνα, εάν αλλάξει ο κύκλος λειτουργίας, η λυχνία LED θα ανάψει με το 25% της πραγματικής φωτεινότητας χρησιμοποιώντας την ίδια αρχή όπως συζητήθηκε προηγουμένως. Αν θέλετε να μάθετε περισσότερα και να μάθετε για τη Διαμόρφωση Πλάτους Πλάτους (PWM), μπορείτε να δείτε το συνδεδεμένο άρθρο.
Ρύθμιση και απαίτηση υλικού
Καθώς η απαίτηση αυτού του έργου είναι ο έλεγχος των LED χρησιμοποιώντας PWM Απαιτείται σύνδεση LED με N76E003. Δεδομένου ότι ένα LED είναι διαθέσιμο στον πίνακα ανάπτυξης N76E003, θα χρησιμοποιηθεί σε αυτό το έργο. Δεν απαιτούνται άλλα συστατικά.
Για να μην αναφέρουμε, χρειαζόμαστε την πλακέτα ανάπτυξης με βάση τον μικροελεγκτή N76E003 καθώς και τον προγραμματιστή Nu-Link. Ενδέχεται να απαιτείται πρόσθετη μονάδα τροφοδοσίας 5V εάν ο προγραμματιστής δεν χρησιμοποιείται ως πηγή ισχύος.
Διάγραμμα κυκλώματος για αφαίρεση LED μικροελεγκτή Nuvoton N76E003
Όπως μπορούμε να δούμε στο παρακάτω σχήμα, το LED δοκιμής είναι διαθέσιμο μέσα στην πλακέτα ανάπτυξης και είναι συνδεδεμένο στη θύρα 1.4. Αριστερά αριστερά, εμφανίζεται η σύνδεση διεπαφής προγραμματισμού.
PWM Pins στο N76E003 Nuvoton Microcontroller
Το N76E003 έχει 20 ακίδες από τις οποίες 10 ακίδες μπορούν να χρησιμοποιηθούν ως PWM. Οι παρακάτω εικόνες δείχνουν τις καρφίτσες PWM που επισημαίνονται στο πλαίσιο της κόκκινης πλατείας.
Όπως μπορούμε να δούμε, οι επισημασμένες ακίδες PWM μπορούν επίσης να χρησιμοποιηθούν για άλλους σκοπούς. Ωστόσο, αυτός ο άλλος σκοπός των ακίδων δεν θα είναι διαθέσιμος όταν οι ακίδες έχουν ρυθμιστεί για έξοδο PWM. Pin 1.4 που χρησιμοποιείται ως pin εξόδου PWM, θα χάσει την άλλη λειτουργικότητα. Όμως, αυτό δεν είναι πρόβλημα καθώς δεν απαιτείται άλλη λειτουργικότητα για αυτό το έργο.
Ο λόγος για τον οποίο επιλέξαμε τον πείρο 1.4 ως πείρο εξόδου είναι επειδή το ενσωματωμένο δοκιμαστικό LED είναι συνδεδεμένο σε αυτόν τον πείρο στην πλακέτα ανάπτυξης, επομένως δεν απαιτούμε εξωτερικές λυχνίες LED. Ωστόσο, σε αυτόν τον μικροελεγκτή από 20 ακίδες, 10 ακίδες μπορούν να χρησιμοποιηθούν ως ακροδέκτες εξόδου PWM και οποιοσδήποτε άλλος ακροδέκτης PWM μπορεί να χρησιμοποιηθεί για σκοπούς που σχετίζονται με την έξοδο.
Μητρώα και λειτουργίες PWM στο N76E003 Nuvoton Microcontroller
Το N76E003 χρησιμοποιεί ρολόι συστήματος ή υπερχείλιση χρονοδιακόπτη 1 διαιρούμενο με ρολόι PWM με δυνατότητα επιλογής Prescaler από 1/1 ~ 1/128. Η περίοδος PWM μπορεί να ρυθμιστεί χρησιμοποιώντας τον καταχωρητή περιόδου 16-bit PWMPH και PWMPL.
Ο μικροελεγκτής έχει έξι μεμονωμένους καταχωρητές PWM που παράγουν έξι σήματα PWM που ονομάζονται PG0, PG1, PG2, PG3, PG4 και PG5. Ωστόσο, η περίοδος είναι ίδια για κάθε κανάλι PWM επειδή μοιράζονται τον ίδιο μετρητή περιόδου 16-bit, αλλά ο κύκλος λειτουργίας κάθε PWM μπορεί να είναι διαφορετικός από τους άλλους, καθώς κάθε PWM χρησιμοποιεί διαφορετικό καταχωρητή κύκλου 16-bit που ονομάζεται {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} και {PWM5H, PWM5L}. Έτσι, στο N76E003, έξι έξοδοι PWM μπορούν να δημιουργηθούν ανεξάρτητα με διαφορετικούς κύκλους λειτουργίας.
Σε αντίθεση με άλλους μικροελεγκτές, η ενεργοποίηση του PWM δεν ρυθμίζει αυτόματα τους ακροδέκτες I / O στην έξοδο PWM τους. Έτσι, ο χρήστης πρέπει να διαμορφώσει τη λειτουργία εξόδου I / O.
Έτσι, ό, τι απαιτείται για την εφαρμογή, το πρώτο βήμα είναι να προσδιορίσετε ή να επιλέξετε ποια από τις δύο ή ακόμα και περισσότερες από δύο καρφίτσες I / O ως έξοδο PWM. Μετά την επιλογή ενός, οι ακίδες I / O πρέπει να οριστούν ως λειτουργία Push-Pull ή Quasi-αμφίδρομες για τη δημιουργία του σήματος PWM. Αυτό μπορεί να επιλεγεί χρησιμοποιώντας τον καταχωρητή PxM1 και PxM2. Αυτοί οι δύο καταχωρητές ορίζουν τις λειτουργίες I / O όπου το x σημαίνει τον αριθμό θύρας (Για παράδειγμα, η θύρα P1.0 ο καταχωρητής θα είναι P1M1 και P1M2, για P3.0 θα είναι P3M1 και P3M2 κ.λπ.)
Η διαμόρφωση μπορεί να δει στην παρακάτω εικόνα-
Στη συνέχεια, το επόμενο βήμα είναι να ενεργοποιήσετε το PWM σε αυτούς τους συγκεκριμένους ακροδέκτες I / O. Για να γίνει αυτό, ο χρήστης πρέπει να ορίσει τους καταχωρητές PIOCON0 ή PIOCON1. Ο καταχωρητής εξαρτάται από την αντιστοίχιση ακίδων καθώς οι PIOCON0 και PIOCON1 ελέγχουν διαφορετικές ακίδες που εξαρτώνται από τα σήματα PWM. Η διαμόρφωση αυτών των δύο καταχωρητών φαίνεται στην παρακάτω εικόνα-
Όπως μπορούμε να δούμε, το παραπάνω μητρώο ελέγχει 6 διαμορφώσεις. Για τα υπόλοιπα, χρησιμοποιήστε τον καταχωρητή PIOCON1.
Έτσι, ο παραπάνω καταχωρητής ελέγχει τις υπόλοιπες 4 διαμορφώσεις.
Τρόποι λειτουργίας PWM στο μικροελεγκτή Nuvoton N6E003
Το επόμενο βήμα είναι να επιλέξετε τους τρόπους λειτουργίας PWM. Κάθε PWM υποστηρίζει τρεις τρόπους λειτουργίας - Ανεξάρτητη, Σύγχρονη και Λειτουργία Dead-Time.
Η ανεξάρτητη λειτουργία παρέχει τη λύση όπου τα έξι σήματα PWM μπορούν να δημιουργηθούν ανεξάρτητα. Αυτό απαιτείται το μέγιστο των περιπτώσεων κατά τις οποίες οι λειτουργίες ή οι βομβητές που σχετίζονται με LED πρέπει να ενεργοποιηθούν και να ελεγχθούν.
Η σύγχρονη λειτουργία ρυθμίζει το PG1 / 3/5 στην ίδια έξοδο PWM σε φάση, το ίδιο με το PG0 / 2/4, όπου το PG0 / 2/4 παρέχει ανεξάρτητα σήματα εξόδου PWM. Αυτό απαιτείται κυρίως για τον έλεγχο τριφασικών κινητήρων.
Η λειτουργία εισαγωγής Dead-Time είναι λίγο περίπλοκη και εφαρμόζεται σε πραγματικές εφαρμογές κινητήρα, ειδικά σε βιομηχανικές εφαρμογές. Σε τέτοιες εφαρμογές, μια συμπληρωματική έξοδος PWM πρέπει να είναι εισαγωγή "dead-time" που αποτρέπει την καταστροφή των συσκευών εναλλαγής ισχύος όπως τα GPIBs. Οι διαμορφώσεις ρυθμίζονται σε αυτήν τη λειτουργία με τρόπο που το PG0 / 2/4 παρέχει σήματα εξόδου PWM με τον ίδιο τρόπο όπως η ανεξάρτητη λειτουργία, αλλά το PG1 / 3/5 παρέχει έξοδο "σήματα PWM εκτός φάσης" του PG0 / 2/4 αντίστοιχα και αγνοήστε το PG1 / 3/5 Duty register.
Πάνω από τρεις λειτουργίες μπορούν να επιλεγούν χρησιμοποιώντας την παρακάτω διαμόρφωση μητρώου-
Η επόμενη διαμόρφωση είναι η επιλογή των τύπων PWM χρησιμοποιώντας τον καταχωρητή PWMCON1.
Έτσι, όπως μπορούμε να δούμε, υπάρχουν δύο τύποι PWM που μπορούν να επιλεγούν χρησιμοποιώντας τον παραπάνω καταχωρητή. Στο ευθυγραμμισμένο άκρο, ο μετρητής 16-bit χρησιμοποιεί λειτουργία μονής κλίσης μετρώντας από 0000H έως την καθορισμένη τιμή {PWMPH, PWMPL} και στη συνέχεια ξεκινώντας από 0000H. Η κυματομορφή εξόδου ευθυγραμμίζεται αριστερά.
Όμως, σε κεντρική στοίχιση, ο μετρητής 16 bit χρησιμοποιεί λειτουργία διπλής κλίσης μετρώντας από 0000H έως {PWMPH, PWMPL} και στη συνέχεια πάει πάλι από {PWMPH, PWMPL} σε 0000H με αντίστροφη μέτρηση. Η έξοδος είναι στοίχιση στο κέντρο και είναι χρήσιμη για τη δημιουργία μη επικαλυπτόμενων κυματομορφών. Τώρα επιτέλους οι λειτουργίες ελέγχου PWM που μπορούν να ελεγχθούν στους παρακάτω καταχωρητές-
Για να ρυθμίσετε την πηγή ρολογιού, χρησιμοποιήστε τον καταχωρητή ελέγχου ρολογιού CKCON.
Το σήμα εξόδου PWM μπορεί επίσης να καλυφθεί χρησιμοποιώντας τον καταχωρητή PMEN. Χρησιμοποιώντας αυτόν τον καταχωρητή, ο χρήστης μπορεί να καλύψει το σήμα εξόδου με 0 ή 1.
Στη συνέχεια είναι το Μητρώο Ελέγχου PWM-
Ο παραπάνω καταχωρητής είναι χρήσιμος για την εκτέλεση του PWM, τη φόρτωση νέας περιόδου και το φορτίο λειτουργίας, τον έλεγχο της σημαίας PWM και την εκκαθάριση του μετρητή PWM.
Οι σχετικές διαμορφώσεις bit εμφανίζονται παρακάτω-
Για να ρυθμίσετε το διαχωριστικό ρολογιού, χρησιμοποιήστε τον καταχωρητή PWMCON1 για το διαχωριστικό ρολογιού PWM. Το 5ο bit χρησιμοποιείται για την ομαδική λειτουργία με δυνατότητα ομαδοποίησης PWM και παρέχει τον ίδιο κύκλο λειτουργίας για τα τρία πρώτα ζεύγη PWM.
Προγραμματισμός Nuvoton N76E003 για PWM
Η κωδικοποίηση είναι απλή και ο πλήρης κωδικός που χρησιμοποιείται για αυτό το σεμινάριο βρίσκεται στο κάτω μέρος αυτής της σελίδας. Το LED είναι συνδεδεμένο στον ακροδέκτη P1.4. Έτσι, ο ακροδέκτης P1.4 απαιτείται για να χρησιμοποιηθεί για έξοδο PWM.
Στο κύριο πρόγραμμα, οι ρυθμίσεις γίνονται με την αντίστοιχη σειρά. Οι παρακάτω γραμμές κωδικών ορίζουν το PWM και διαμορφώνουν τον ακροδέκτη P1.4 ως έξοδο PWM.
P14_PushPull_Mode;
Αυτό χρησιμοποιείται για να ρυθμίσετε τον πείρο P1.4 σε λειτουργία push-pull. Αυτό ορίζεται στη βιβλιοθήκη Function_define.h ως
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Οι επόμενες γραμμές που χρησιμοποιήθηκαν για την ενεργοποίηση του PWM στον πείρο P1.4. Αυτό ορίζεται επίσης στη βιβλιοθήκη Function_define.h ως
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- = 0x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; EA = B4 Η έξοδος PWM1 ενεργοποιεί το PWM_IMDEPENDENT_MODE.
Ο παρακάτω κωδικός χρησιμοποιείται για τη ρύθμιση του PWM σε ανεξάρτητη λειτουργία. Στη βιβλιοθήκη Function_define.h , ορίζεται ως-
# καθορισμός PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Τότε πρέπει να ορίσουμε την έξοδο PWM τύπου EDGE. Στη βιβλιοθήκη Function_define.h , ορίζεται ως-
# καθορισμός PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Στη συνέχεια, πρέπει να διαγράψουμε την τιμή μετρητή PWM που είναι διαθέσιμη στη βιβλιοθήκη SFR_Macro.h-
#define set_CLRPWM CLRPWM = 1
Μετά από αυτό, το ρολόι PWM επιλέγεται ως ρολόι Fsys και ο παράγοντας διαίρεσης που χρησιμοποιείται είναι η διαίρεση 64.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Και τα δύο ορίζονται ως-
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Η παρακάτω γραμμή κώδικα χρησιμοποιείται για την κάλυψη του σήματος εξόδου PWM με 0 που ορίζεται ως-
# καθορισμός PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Στη συνέχεια, πρέπει να ορίσουμε το χρονικό διάστημα του σήματος PWM. Αυτή η συνάρτηση ορίζει την περίοδο στο μητρώο PWMPL και PWMPH. Καθώς πρόκειται για καταχωρητή 16 bit, η συνάρτηση χρησιμοποιεί μια μέθοδο αλλαγής bit για να ορίσει την Περίοδο PWM.
void set_PWM_period (μη υπογεγραμμένη τιμή int) { PWMPL = (τιμή & 0x00FF); PWMPH = ((τιμή & 0xFF00) >> 8); }
Ωστόσο, εκτός από την περίοδο 1023 και 8-bit, οι χρήστες μπορούν επίσης να χρησιμοποιούν και άλλες τιμές. Η αύξηση της περιόδου οδηγεί σε ομαλή μείωση ή εξασθένιση.
σύνολο_PWMRUN;
Αυτό θα ξεκινήσει το PWM που ορίζεται στη βιβλιοθήκη SFR_Macro.h ως-
#define set_PWMRUN PWMRUN = 1
Στη συνέχεια, στο βρόχο while , το LED ανάβει και εξασθενίζει συνεχώς.
ενώ (1) { για (τιμή = 0; τιμή <1024; τιμή + = 10) { set_PWM1 (τιμή); Χρονόμετρο1_Delay10ms (3); } για (τιμή = 1023; τιμή> 0; τιμή - = 10) { set_PWM1 (τιμή); Χρονόμετρο1_Delay10ms (2); } } }
Ο κύκλος λειτουργίας ορίζεται από το set_PWM1 ();, μια συνάρτηση που ορίζει τον κύκλο λειτουργίας στον καταχωρητή PWM1L και PWM1H.
void set_PWM1 (τιμή χωρίς υπογραφή) { PWM1L = (τιμή & 0x00FF); PWM1H = ((τιμή & 0xFF00) >> 8); σύνολο_LOAD; }
Αναβοσβήνει ο κωδικός και ελέγχεται η έξοδος
Μόλις ο κωδικός είναι έτοιμος, απλώς μεταγλωττίστε τον και ανεβάστε τον στον ελεγκτή. Εάν είστε νέοι στο περιβάλλον, ρίξτε μια ματιά στο φροντιστήριο Nuvoton N76E003 για να μάθετε τα βασικά. Όπως μπορείτε να δείτε από το παρακάτω αποτέλεσμα, ο κωδικός επέστρεψε 0 προειδοποίηση και 0 Σφάλματα και αναβοσβήνει χρησιμοποιώντας την προεπιλεγμένη μέθοδο αναβοσβήνει από το Keil. Η εφαρμογή αρχίζει να λειτουργεί.
Ξεκίνησε η ανακατασκευή: Project: PWM Rebuild target 'Target 1' συναρμολόγηση STARTUP.A51… μεταγλώττιση main.c… μεταγλώττιση Delay.c… σύνδεση… Μέγεθος προγράμματος: δεδομένα = 35.1 xdata = 0 κωδικός = 709 δημιουργία hex αρχείο από ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 Error (s), 0 Warning (s). Χρόνος κατασκευής που πέρασε: 00:00:05
Το υλικό είναι συνδεδεμένο στην πηγή τροφοδοσίας και λειτουργούσε όπως αναμενόταν. Αυτή είναι η φωτεινότητα του ενσωματωμένου LED που μειώνεται και στη συνέχεια αυξάνεται για να υποδείξει τον κύκλο λειτουργίας PWM αλλαγής.
Η πλήρης εργασία αυτού του σεμιναρίου μπορεί επίσης να βρεθεί στο παρακάτω βίντεο. Ελπίζω να απολαύσατε το σεμινάριο και να μάθετε κάτι χρήσιμο αν έχετε απορίες, αφήστε το στην ενότητα σχολίων ή μπορείτε να χρησιμοποιήσετε τα φόρουμ μας για άλλες τεχνικές ερωτήσεις.