PIC555, γεννήτρια PWM (ιδέα εκπαιδευτικής εφαρμογής)
Δημοσιεύτηκε: 22 Ιουν 2016, 19:43
PIC555, γεννήτρια PWM (ιδέα εκπαιδευτικής εφαρμογής)
Καπηλεύομαι το όνομα του γνωστότερου ολοκληρωμένου κυκλώματος (LM555) για να ονομάσω έτσι μια "γεννήτρια σημάτων PWM χαμηλής συχνότητας" υλοποιημένη με ένα μικροεπεξεργαστή PIC των 8 ποδιών που θα ρυθμίζεται από 3x ποτενσιόμετρα των 5ΚΩ...
Βασικό θεωρητικό κύκλωμα:
Επιλογή μικροεπεξεργαστή
Μπορούμε να χρησιμοποιήσουμε τον "βασικό" PIC12F675 και να παράγουμε ψηφιακούς παλμούς σε συχνότητες από 0Hz έως λίγες δεκάδες KHz με καλή ανάλυση στη ρύθμιση του ποσοστού PWM ή να "ανέβουμε" σε συχνότητα και ανάλυση με τον νεώτερο PIC12F1840 που έχει εσωτερικό PWM.
Χαρακτηριστικά λειτουργίας
Στην αρχική μου ιδέα όλες οι ρυθμίσεις γίνονται από τα ποτενσιόμετρα:
α. επιλογή κλίμακας συχνότητας ανάλογα με τη "χονδρική" θέση του ποτενσιομέτρου (10-100-1Κ-10Κ-100Κ)
β. ρύθμιση συχνότητας (0-100)
γ. ρύθμιση duty cycle (0-100%)
Στις δύο εξόδους έχουμε συμμετρικό παλμό.
Το μπουτόν "MODE" μπορεί να λειτουργεί ως "START/STOP", για προγραμματισμό ορίων, ενεργοποίηση "dead time", κλπ.
Πρόγραμμα
Η ανάπτυξη του προγράμματος για τον PIC είναι μια καλή εκπαιδευτική άσκηση για όποιον ξεκινά με τους μικροεπεξεργαστές.
Για την υλοποίηση με τον "βασικό" PIC οι παλμοί θα παράγονται από απλές εντολές "SET/RESET BIT" και ενδιάμεση χρονική καθυστέρηση ελέγχοντας την τιμή εσωτερικού χρονιστή (TIMER) ή με απλούς βρόχους εντολών (delays). Οι χρόνοι Ton/Toff θα ρυθμίζονται από την τιμή που δίνουν οι μετατροπείς A/D λόγω τάσης στο δρομέα των ποτενσιομέτρων.
Γενικά το πρόγραμμα εκτελεί τις παρακάτω ενέργειες:
- αρχικοποίηση εισόδων/εξόδων
- αρχικοποίηση αναλογικών μετατροπέων
- αρχικοποίηση μνήμης και μετρητών
-------
αρχή κεντρικού βρόχου (εκτελείται διαρκώς)
..... έλεγχος κατάστασης μπουτόν
..... ρύθμιση παραμέτρων λειτουργίας (λόγω μπουτόν)
..... μέτρηση αναλογικών εισόδων
..... υπολογισμός παραμέτρων χρονισμού
..... έξοδος "Q=H"
..... βρόχος καθυστέρησης παλμού "H"
..... έξοδος "Q=L"
..... βρόχος καθυστέρησης παλμού "L"
τέλος κεντρικού βρόχου
Αν το μπουτόν λειτουργεί ως φυσικό "RESET" δεν χρειαζόμαστε τους σχετικούς ελέγχους στον κεντρικό βρόχο αλλά στην αρχή του προγράμματος θα ελέγξουμε αν το RESET προήλθε από POWER ON ή από το pin MCLR και θα ρυθμίσουμε ανάλογα τις παραμέτρους μας.
Υπολογισμοί, προβληματισμοί
Η μέγιστη συχνότητα και το ελάχιστο βήμα στη ρύθμιση του παλμού εξόδου καθορίζεται από τον απαιτούμενο χρόνο εκτέλεσης ενός κύκλου προγράμματος που διαφέρει αρκετά ανάλογα με τη μέθοδο συγχρονισμού που θα επιλέξουμε. Για παράδειγμα, αν μπορούσαμε να έχουμε βρόχο 10 εντολών με εσωτερικό ταλαντωτή 4MHz θα μπορούσαμε να αλλάζουμε την έξοδο κάθε 10μSec που θα έδινε μέγιστη παραγόμενη συχνότητα 1/(10+10μSec)=50KHz (10μSec για "H" και 10μSec για "L"), ενώ με απλή χρήση TIMER αυτοί οι χρόνοι θα ήταν πολλαπλάσιοι.
Αναφέρω τις εναλλακτικές μεθόδους χρονισμού:
1. TIMER και INTERRUPTS
Απλό στη χρήση με ελάχιστο χρόνο μεταξύ interrupts 256 κύκλους μηχανής (cycle times). Για εσωτερικό ταλαντωτή 4MHz έχουμε 1ct=1μSec που δίνει χρήσιμο συγχρονισμό κάθε 256μSec (3.9KHz).
2. Διαρκή επαναρύθμιση του TIMER με INTERRUPTS
Μετρώντας τις εντολές που εκτελούνται για τη ρύθμιση του παλμού, μπορούμε να "φορτώνουμε" τον TIMER με νέα τιμή για να ελαττώσουμε τον χρόνο μεταξύ δυο interrups. Εδω πρέπει να υπολογίσουμε και την εκτέλεση των απαιτούμενων εντολών CALL/RETURN του interrupt όπως και το χρόνο εκτέλεσης των εντολών αποθήκευσης βασικών καταχωρητών.
3. Διαρκής έλεγχος της τιμής του TIMER χωρίς interrupts
Αντί να ρυθμίζουμε τον TIMER, ελέγχουμε την τρέχουσα τιμή του πλήρως ή σε επίπεδο bit. Ο χρονισμός μπορεί να γίνει σε βραχύτερα διαστήματα με μικρή επιβάρυνση λόγω εντολών σύγκρισης/ελέγχου τιμής.
4. Απλοί συγχρονισμένοι και επαναλαμβανόμενοι βρόχοι
Γράφουμε και ρυθμίζουμε τον κώδικα για συγχρονισμένη εκτέλεση. Αν χρειαστεί προσθέτουμε εντολές NOP για τον συγχρονισμό και επαναλαμβάνουμε πολλές φορές τμήμα του κώδικα αντί να χρησιμοποιήσουμε επιπλέον βρόχους (loops).
Συνεχίζεται ...
Καπηλεύομαι το όνομα του γνωστότερου ολοκληρωμένου κυκλώματος (LM555) για να ονομάσω έτσι μια "γεννήτρια σημάτων PWM χαμηλής συχνότητας" υλοποιημένη με ένα μικροεπεξεργαστή PIC των 8 ποδιών που θα ρυθμίζεται από 3x ποτενσιόμετρα των 5ΚΩ...
Βασικό θεωρητικό κύκλωμα:
Επιλογή μικροεπεξεργαστή
Μπορούμε να χρησιμοποιήσουμε τον "βασικό" PIC12F675 και να παράγουμε ψηφιακούς παλμούς σε συχνότητες από 0Hz έως λίγες δεκάδες KHz με καλή ανάλυση στη ρύθμιση του ποσοστού PWM ή να "ανέβουμε" σε συχνότητα και ανάλυση με τον νεώτερο PIC12F1840 που έχει εσωτερικό PWM.
Χαρακτηριστικά λειτουργίας
Στην αρχική μου ιδέα όλες οι ρυθμίσεις γίνονται από τα ποτενσιόμετρα:
α. επιλογή κλίμακας συχνότητας ανάλογα με τη "χονδρική" θέση του ποτενσιομέτρου (10-100-1Κ-10Κ-100Κ)
β. ρύθμιση συχνότητας (0-100)
γ. ρύθμιση duty cycle (0-100%)
Στις δύο εξόδους έχουμε συμμετρικό παλμό.
Το μπουτόν "MODE" μπορεί να λειτουργεί ως "START/STOP", για προγραμματισμό ορίων, ενεργοποίηση "dead time", κλπ.
Πρόγραμμα
Η ανάπτυξη του προγράμματος για τον PIC είναι μια καλή εκπαιδευτική άσκηση για όποιον ξεκινά με τους μικροεπεξεργαστές.
Για την υλοποίηση με τον "βασικό" PIC οι παλμοί θα παράγονται από απλές εντολές "SET/RESET BIT" και ενδιάμεση χρονική καθυστέρηση ελέγχοντας την τιμή εσωτερικού χρονιστή (TIMER) ή με απλούς βρόχους εντολών (delays). Οι χρόνοι Ton/Toff θα ρυθμίζονται από την τιμή που δίνουν οι μετατροπείς A/D λόγω τάσης στο δρομέα των ποτενσιομέτρων.
Γενικά το πρόγραμμα εκτελεί τις παρακάτω ενέργειες:
- αρχικοποίηση εισόδων/εξόδων
- αρχικοποίηση αναλογικών μετατροπέων
- αρχικοποίηση μνήμης και μετρητών
-------
αρχή κεντρικού βρόχου (εκτελείται διαρκώς)
..... έλεγχος κατάστασης μπουτόν
..... ρύθμιση παραμέτρων λειτουργίας (λόγω μπουτόν)
..... μέτρηση αναλογικών εισόδων
..... υπολογισμός παραμέτρων χρονισμού
..... έξοδος "Q=H"
..... βρόχος καθυστέρησης παλμού "H"
..... έξοδος "Q=L"
..... βρόχος καθυστέρησης παλμού "L"
τέλος κεντρικού βρόχου
Αν το μπουτόν λειτουργεί ως φυσικό "RESET" δεν χρειαζόμαστε τους σχετικούς ελέγχους στον κεντρικό βρόχο αλλά στην αρχή του προγράμματος θα ελέγξουμε αν το RESET προήλθε από POWER ON ή από το pin MCLR και θα ρυθμίσουμε ανάλογα τις παραμέτρους μας.
Υπολογισμοί, προβληματισμοί
Η μέγιστη συχνότητα και το ελάχιστο βήμα στη ρύθμιση του παλμού εξόδου καθορίζεται από τον απαιτούμενο χρόνο εκτέλεσης ενός κύκλου προγράμματος που διαφέρει αρκετά ανάλογα με τη μέθοδο συγχρονισμού που θα επιλέξουμε. Για παράδειγμα, αν μπορούσαμε να έχουμε βρόχο 10 εντολών με εσωτερικό ταλαντωτή 4MHz θα μπορούσαμε να αλλάζουμε την έξοδο κάθε 10μSec που θα έδινε μέγιστη παραγόμενη συχνότητα 1/(10+10μSec)=50KHz (10μSec για "H" και 10μSec για "L"), ενώ με απλή χρήση TIMER αυτοί οι χρόνοι θα ήταν πολλαπλάσιοι.
Αναφέρω τις εναλλακτικές μεθόδους χρονισμού:
1. TIMER και INTERRUPTS
Απλό στη χρήση με ελάχιστο χρόνο μεταξύ interrupts 256 κύκλους μηχανής (cycle times). Για εσωτερικό ταλαντωτή 4MHz έχουμε 1ct=1μSec που δίνει χρήσιμο συγχρονισμό κάθε 256μSec (3.9KHz).
2. Διαρκή επαναρύθμιση του TIMER με INTERRUPTS
Μετρώντας τις εντολές που εκτελούνται για τη ρύθμιση του παλμού, μπορούμε να "φορτώνουμε" τον TIMER με νέα τιμή για να ελαττώσουμε τον χρόνο μεταξύ δυο interrups. Εδω πρέπει να υπολογίσουμε και την εκτέλεση των απαιτούμενων εντολών CALL/RETURN του interrupt όπως και το χρόνο εκτέλεσης των εντολών αποθήκευσης βασικών καταχωρητών.
3. Διαρκής έλεγχος της τιμής του TIMER χωρίς interrupts
Αντί να ρυθμίζουμε τον TIMER, ελέγχουμε την τρέχουσα τιμή του πλήρως ή σε επίπεδο bit. Ο χρονισμός μπορεί να γίνει σε βραχύτερα διαστήματα με μικρή επιβάρυνση λόγω εντολών σύγκρισης/ελέγχου τιμής.
4. Απλοί συγχρονισμένοι και επαναλαμβανόμενοι βρόχοι
Γράφουμε και ρυθμίζουμε τον κώδικα για συγχρονισμένη εκτέλεση. Αν χρειαστεί προσθέτουμε εντολές NOP για τον συγχρονισμό και επαναλαμβάνουμε πολλές φορές τμήμα του κώδικα αντί να χρησιμοποιήσουμε επιπλέον βρόχους (loops).
Συνεχίζεται ...