Pulse Width Modulation (PWM) είναι μια τεχνική που μεταβάλλει το πλάτος ενός παλμού διατηρώντας ταυτόχρονα τη συχνότητα του κύματος σταθερή. Η τεχνική PWM χρησιμοποιείται κυρίως για τον έλεγχο της φωτεινότητας του LED, της ταχύτητας του κινητήρα DC, του ελέγχου ενός σερβοκινητήρα, ή σε άλλες περιπτώσεις, όπου πρέπει να δημιουργηθεί ένα αναλογικό σήμα χρησιμοποιώντας μια ψηφιακή πηγή. Εξηγήσαμε λεπτομερώς το PWM στο προηγούμενο άρθρο.
Σε αυτό το σεμινάριο, θα μιλήσουμε για τις καρφίτσες PWM (διαμόρφωση πλάτους παλμού) του πίνακα ανάπτυξης ESP32. Όλες οι καρφίτσες GPIO του πίνακα ανάπτυξης ESP32 (Εκτός ισχύος, GND, Tx, Rx και EN) μπορούν να χρησιμοποιηθούν για τη λήψη του σήματος PWM. Ως παράδειγμα ESP32 PWM, θα δημιουργήσουμε ένα απλό κύκλωμα που αλλάζει τη φωτεινότητα των LED σύμφωνα με τα σήματα PWM.
Απαιτούμενα στοιχεία
- ESP32
- LED
- Αντίσταση 330 Ω
- 10k ποτ
- Ψωμί
Δημιουργία PWM
Πριν εξηγήσετε τη δημιουργία PWM στο ESP32, ας συζητήσουμε μερικούς όρους που σχετίζονται με το PWM.
TON (On Time): Η διάρκεια του χρόνου όταν το σήμα είναι υψηλό.
TOFF (Off Time): Η διάρκεια του χρόνου όταν το σήμα είναι χαμηλό.
Περίοδος: Είναι το άθροισμα της ώρας και του χρόνου διακοπής του σήματος PWM.
TotalPeriod = T ON + T OFF
Duty Cycle: Το ποσοστό του χρόνου όταν το σήμα ήταν υψηλό κατά την περίοδο του σήματος PWM.
Κύκλος εργασίας = T ON / T Σύνολο * 100
Για παράδειγμα, εάν ένας παλμός με συνολική περίοδο 10ms παραμένει ΟΝ (υψηλός) για 5ms. Στη συνέχεια, ο κύκλος λειτουργίας θα είναι:
Duty Cycle = 5/10 * 100 = 50% Duty Cycle
Το κύκλωμα περιέχει ένα μόνο LED, μια αντίσταση και ένα ποτενσιόμετρο 10K. Ο αρνητικός πείρος του LED συνδέεται στο GND του ESP32 μέσω μιας αντίστασης 330 Ω. Μπορείτε να χρησιμοποιήσετε οποιαδήποτε τιμή αντίστασης μεταξύ 230 Ω και 500 Ω. Συνδέστε τον θετικό πείρο LED στο GPIO 16 και τον πείρο σήματος του πείρου Pot to ADC1 (VP) του ESP32.
Επεξήγηση κώδικα για ESP32 PWM
Ο πλήρης κωδικός δίνεται στο τέλος της σελίδας.
Αυτός ο κωδικός δεν απαιτεί βιβλιοθήκη, οπότε ξεκινήστε τον κωδικό σας ορίζοντας τον ακροδέκτη, με τον οποίο συνδέεται το LED. Στην περίπτωσή μου, χρησιμοποίησα το GPIO 16 για να συνδέσω το LED.
const int ledPin = 16; // 16 αντιστοιχεί στο GPIO16
Μετά από αυτό, ορίστε τις ιδιότητες σήματος PWM στις επόμενες γραμμές. Έχω ορίσει τη συχνότητα PWM σε 9000, και η ανάλυση σε 10, μπορείτε να την αλλάξετε για να δημιουργήσετε διαφορετικά σήματα PWM. Οι πλακέτες ESP32 υποστηρίζουν ανάλυση PWM από 1 bit έως 16 bit. Πρέπει επίσης να επιλέξετε ένα κανάλι PWM. Το ESP32 διαθέτει συνολικά 16 (0 έως 15) κανάλια PWM.
const int freq = 9000; const int ledChannel = 0; const int ανάλυση = 10;
Τώρα μέσα στη λειτουργία κενής ρύθμισης () , διαμορφώστε το LED PWM με τις ιδιότητες που ορίσατε νωρίτερα χρησιμοποιώντας τη λειτουργία ledcSetup () . Στην επόμενη γραμμή, ορίστε τον ακροδέκτη GPIO όπου είναι συνδεδεμένο το LED. Η λειτουργία ledcAttachPin () χρησιμοποιείται για τον ορισμό του ακροδέκτη GPIO και του καναλιού που δημιουργεί το σήμα. Στην περίπτωσή μου, χρησιμοποίησα το ledPin που είναι GPIO 16 και ledChannel που αντιστοιχεί στο κανάλι 0.
άκυρη ρύθμιση () {Serial.begin (9600); ledcSetup (ledChannel, freq, ανάλυση); ledcAttachPin (ledPin, ledChannel); }
Στον κενό κύκλο, διαβάστε τον αναλογικό πείρο όπου είναι συνδεδεμένο το δοχείο και αποθηκεύστε την ανάγνωση σε μια μεταβλητή που ονομάζεται «dutyCycle» . Η φωτεινότητα των LED θα αυξηθεί ή θα μειωθεί ανάλογα με την περιστροφή του ποτενσιόμετρου. Το ledcWrite () είναι πολύ παρόμοιο με το analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); καθυστέρηση (15) }
Δοκιμή των σημάτων ESP32 PWM
Για να ελέγξετε τα σήματα ESP32 PWM, συνδέστε το LED και το ποτενσιόμετρο σύμφωνα με το διάγραμμα κυκλώματος και ανεβάστε τον κωδικό στο ESP32 σας. Βεβαιωθείτε ότι έχετε επιλέξει τη σωστή θύρα πλακέτας και COM. Τώρα περιστρέψτε το ποτενσιόμετρο για να αυξήσετε ή να μειώσετε τη φωτεινότητα των LED.
Πλήρης εργασία φαίνεται στο παρακάτω βίντεο. Επίσης, ελέγξτε άλλα έργα που βασίζονται σε ESP32 ακολουθώντας τον σύνδεσμο.