PWM στο Arduino
Εισαγωγή στο PWM
Η διαμόρφωση πλάτους παλμού (PWM) είναι μια τεχνική με την οποία το πλάτος ενός παλμού μεταβάλλεται διατηρώντας τη συχνότητα του κύματος σταθερή. Είναι μια μέθοδος παραγωγής αναλογικού σήματος με χρήση ψηφιακής πηγής.
Ένα σήμα PWM αποτελείται από δύο κύρια στοιχεία που καθορίζουν τη συμπεριφορά του: έναν κύκλο λειτουργίας και μια συχνότητα .
Τι είναι ο κύκλος λειτουργίας του σήματος
Η περίοδος ενός παλμού αποτελείται από έναν κύκλο ON (5V) και έναν κύκλο OFF (0V). Το κλάσμα για το οποίο το σήμα είναι ενεργοποιημένο για μια περίοδο είναι γνωστό ως κύκλος λειτουργίας .
Π.χ. Ένας παλμός με περίοδο 10 ms θα παραμείνει ενεργός (υψηλό) για 2 ms. Επομένως, ο κύκλος λειτουργίας θα είναι
D = 2ms / 10ms = 20%
Μέσω της τεχνικής PWM, μπορούμε να ελέγξουμε την ισχύ που παρέχεται στο φορτίο χρησιμοποιώντας το σήμα ON-OFF. Τα σήματα PWM μπορούν να χρησιμοποιηθούν για τον έλεγχο της ταχύτητας των κινητήρων DC και για την αλλαγή της έντασης του LED.
Τα διαμορφωμένα σήματα πλάτους παλμού με διαφορετικό κύκλο λειτουργίας φαίνονται παρακάτω
Συχνότητα σήματος
Η συχνότητα ενός σήματος καθορίζει πόσο γρήγορα το PWM ολοκληρώνει έναν κύκλο (δηλαδή τα 1000 Hz θα ήταν 1000 κύκλοι ανά δευτερόλεπτο) που σημαίνει πόσο γρήγορα εναλλάσσεται μεταξύ των καταστάσεων ON (υψηλή) και OFF (χαμηλή). Επαναλαμβάνοντας αυτό το μοτίβο ON-OFF με αρκετά γρήγορο ρυθμό και με συγκεκριμένο κύκλο λειτουργίας, η έξοδος θα φαίνεται να συμπεριφέρεται σαν ένα αναλογικό σήμα σταθερής τάσης κατά την παροχή ρεύματος στις συσκευές.
Παράδειγμα: Εάν θέλουμε να δημιουργήσουμε ένα αναλογικό σήμα 2V για μια δεδομένη ψηφιακή πηγή που μπορεί να είναι είτε υψηλό (ενεργό) στα 5 V, είτε χαμηλό (απενεργοποιημένο) στα 0 V, μπορούμε να χρησιμοποιήσουμε PWM με κύκλο λειτουργίας 40%. Θα παρέχει έξοδο 5V για το 40% του χρόνου. Εάν το ψηφιακό σήμα ανακυκλώνεται αρκετά γρήγορα, τότε η τάση που φαίνεται στην έξοδο φαίνεται να είναι η μέση τάση. Εάν το ψηφιακό χαμηλό είναι 0V (που συνήθως συμβαίνει), τότε η μέση τάση μπορεί να υπολογιστεί λαμβάνοντας την ψηφιακή υψηλή τάση πολλαπλασιασμένη με τον κύκλο λειτουργίας ή 5V x 0,4 = 2V.
Τώρα, ας δούμε το PWM στο Arduino.
PWM Pins του Arduino Uno
Το Arduino Uno διαθέτει 6 κανάλια PWM 8-bit. Οι ακίδες με το σύμβολο ‘~’
αντιπροσωπεύουν ότι έχει υποστήριξη PWM. Αυτές οι ακίδες PWM φαίνονται στην παρακάτω εικόνα.
Λειτουργίες Arduino για PWM
analogWrite (pin, duty cycle)
Χρησιμοποιείται για τη δημιουργία PWM ή για την έξοδο αναλογικής τιμής σε ένα καθορισμένο κανάλι PWM.
pin
– pin στην οποία θέλουμε να δημιουργήσουμε pwm ή αναλογικό σήμα.
duty cycle
– βρίσκεται μεταξύ 0 (0%, πάντα απενεργοποιημένο) – 255 (100%, πάντα αναμμένο).
e.g. analogWrite (3, 127) //generates pwm of 50% duty cycle
Ξεθώριασμα LED με χρήση Arduino PWM
Ας δημιουργήσουμε μια μικρή εφαρμογή στην οποία το led θα ξεθωριάζει συνεχώς. Αυτή η εφαρμογή led fading που χρησιμοποιείται για διακόσμηση σε εκδηλώσεις και φεστιβάλ.
Διεπαφή LED στο Arduino Uno
Έργο για ξεθώριασμα LED χρησιμοποιώντας Arduino PWM
int led = 6; // the PWM pin the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by
void setup() {
pinMode(led, OUTPUT); // declare pwm pin to be an output:
}
void loop() {
analogWrite(led, brightness); // set the brightness of led
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
delay(30); // wait for 30 milliseconds to see the dimming effect
}
Ελέγξτε τη φωτεινότητα των LED χρησιμοποιώντας ένα ποτενσιόμετρο
Ας δημιουργήσουμε μια εφαρμογή στην οποία θα ελέγχουμε τη φωτεινότητα του led χρησιμοποιώντας το Arduino μεταβάλλοντας το κουμπί του ποτενσιόμετρου. Έτσι, όταν περιστρέφουμε το κουμπί του ποτενσιόμετρου, το ADC του Arduino θα διαβάσει αυτό το αναλογικό σήμα. Στη συνέχεια θα δημιουργήσουμε σήμα PWM ανάλογο με το αναλογικό σήμα.
Διάγραμμα διεπαφής
Κωδικός για τον έλεγχο της φωτεινότητας των LED με χρήση arduino
int ledPin = 6; // LED connected to digital pin 9
int analogPin = A0; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value
void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop()
{
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, val / 4);// analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}
Σχόλια
Δημοσίευση σχολίου