Μετάβαση στο κύριο περιεχόμενο

PWM στο Arduino

 

PWM στο Arduino

PWM στο Arduino

Εισαγωγή στο PWM

Η διαμόρφωση πλάτους παλμού (PWM)  είναι μια τεχνική με την οποία το πλάτος ενός παλμού μεταβάλλεται διατηρώντας τη συχνότητα του κύματος σταθερή. Είναι μια μέθοδος παραγωγής αναλογικού σήματος με χρήση ψηφιακής πηγής.

Έλεγχος φωτεινότητας LED με χρήση PWM
Γενιά PWM

 

Ένα σήμα PWM αποτελείται από δύο κύρια στοιχεία που καθορίζουν τη συμπεριφορά του: έναν κύκλο λειτουργίας και μια συχνότητα .

 

Τι είναι ο κύκλος λειτουργίας του σήματος

Η περίοδος ενός παλμού αποτελείται από έναν  κύκλο ON  (5V) και έναν   κύκλο OFF (0V). Το κλάσμα για το οποίο το σήμα είναι ενεργοποιημένο για μια περίοδο είναι γνωστό ως  κύκλος λειτουργίας .

Φόρμουλα Duty Cycle

Π.χ. Ένας παλμός με περίοδο 10 ms θα παραμείνει ενεργός (υψηλό) για 2 ms. Επομένως, ο κύκλος λειτουργίας θα είναι

D = 2ms / 10ms = 20%

 

Μέσω της τεχνικής PWM, μπορούμε να ελέγξουμε την ισχύ που παρέχεται στο φορτίο χρησιμοποιώντας το σήμα ON-OFF. Τα σήματα PWM μπορούν να χρησιμοποιηθούν για τον έλεγχο της ταχύτητας των κινητήρων DC και για την αλλαγή της έντασης του LED.

Τα διαμορφωμένα σήματα πλάτους παλμού με διαφορετικό κύκλο λειτουργίας φαίνονται παρακάτω

σήμα με διακριτό κύκλο λειτουργίας
Κύκλος λειτουργίας PWM

 

Συχνότητα σήματος

Η συχνότητα ενός σήματος καθορίζει πόσο γρήγορα το 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

 

Λειτουργίες 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

 

Έργο για ξεθώριασμα 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


Κωδικός για τον έλεγχο της φωτεινότητας των 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
}

Σχόλια

Δημοφιλείς αναρτήσεις από αυτό το ιστολόγιο

Tmp36GZ θερμόμετρο με LCD οθόνη

 Tmp36GZ με LCD οθόνη // Define to which pin of the Arduino the output of the TMP36 is connected: #include <LiquidCrystal_I2C.h> // Look for LiquidCrystal I2C library by Marco Schwartz LiquidCrystal_I2C lcd ( 0x 27 , 16 , 2 ) ;  // set the LCD address to 0x3F for a 16 chars and 2 line display #define sensorPin A0 void setup () {   // Begin serial communication at a baud rate of 9600:   Serial . begin ( 9600 ) ;   lcd . init () ;   lcd . clear () ;           lcd . backlight () ;      // Make sure backlight is on     // Print a message on both lines of the LCD.   lcd . setCursor ( 2 , 0 ) ;   //Set cursor to character 2 on line 0   lcd . print ( "Hello world!" ) ;     lcd . setCursor ( 2 , 1 ) ;   //Move cursor to character 2 on line 1   lcd . print ( "LCD Tutorial" ) ; } void loop () {   // Get a reading from the temperature sensor:   int reading ...

Σερβοκινητήρας

  Βασικός έλεγχος σερβομηχανισμού Θα μάθουμε πώς να ελέγχετε έναν τυπικό σερβοκινητήρα, να πηγαίνει εμπρός και πίσω κατά 180 μοίρες, χρησιμοποιώντας ένα «βρόχο for()». Αυτό γίνεται με τη βοήθεια της βιβλιοθήκης Servo, η οποία είναι προεγκατεστημένη βιβλιοθήκη στο Arduino IDE (τόσο εκτός σύνδεσης όσο και σε ηλεκτρονική έκδοση). . Αυτό γίνεται με τη βοήθεια της βιβλιοθήκης  Servo     , η οποία είναι προεγκατεστημένη βιβλιοθήκη στο Arduino IDE (τόσο εκτός σύνδεσης όσο και σε ηλεκτρονική έκδοση).      Χρειαζόμαστε τα παρακάτω:     Arduino IDE Arduino UNO  Σερβοκινητήρας 4,8V - 6V  Καλώδια βραχυκυκλωτήρα. Τυπικοί σερβοκινητήρες Οι τυπικοί σερβοκινητήρες είναι ενεργοποιητές που επιτρέπουν τον ακριβή έλεγχο της θέσης (γωνία). Χαρακτηριστικό  είναι ότι η γωνία του κινητήρα είναι 0 - 180 μοίρες. Με άλλα λόγια, μπορεί να κάνει το μισό μιας περιστροφής. Ένας τυπικός σερβοκινητήρας, όπως και άλλοι κινητήρες, είναι ουσιαστικά απλώς ένας...

Αντιστάσεις pull up, pull down

  Αντιστάσεις pull up (Pull up resistors) Οι αντιστάσεις pull up  είναι πολύ συνηθισμένες όταν χρησιμοποιούνται μικροελεγκτές (MCU) ή οποιαδήποτε συσκευή ψηφιακής λογικής. Θα εξηγήσουμε πότε και πού να χρησιμοποιήσετε αντιστάσεις pull up και, στη συνέχεια, θα κάνουμε έναν απλό υπολογισμό για να δείξουμε γιατί είναι σημαντικά τα pull-ups. Τι είναι μια αντίσταση  Pull up Ας υποθέσουμε ότι έχετε ένα MCU με ένα pin διαμορφωμένο ως είσοδο. Εάν δεν υπάρχει τίποτα συνδεδεμένο με τον ακροδέκτη και το πρόγραμμά σας διαβάζει την κατάσταση του ακροδέκτη, θα είναι ψηλά (τραβηγμένο στο VCC) ή χαμηλό (τραβηγμένο στη γείωση);  Αυτό το φαινόμενο αναφέρεται ως  αιωρούμενο  (floating). Για να αποφευχθεί αυτή η άγνωστη κατάσταση, μια αντίσταση pull-up ή pull-down θα διασφαλίσει ότι η ακίδα βρίσκεται είτε σε υψηλή είτε σε χαμηλή κατάσταση, ενώ χρησιμοποιεί επίσης χαμηλή ποσότητα ρεύματος. Για απλότητα, θα εστιάσουμε στα pull-ups καθώς είναι πιο συνηθισμένα από τα pull-down. Λε...