PWM: εξομοίωση αναλογικών καρφιτσών με την πλακέτα Arduino

Σήματα PWM

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

Αυτοί οι τύποι σημάτων είναι πολύ πρακτικοί για όταν δεν θέλετε μόνο να χρησιμοποιήσετε ψηφιακά σήματα ΥΨΗΛΗΣ και ΧΑΜΗΛΟΥ, δηλαδή 1 ή 0, ΕΝΕΡΓΟΠΟΙΗΜΕΝΟ και ΑΝΕΝΕΡΓΟ, αλλά θέλετε να προχωρήσετε περαιτέρω και να περιγράψετε κάπως πιο περίπλοκα σήματα. Για παράδειγμα, είναι δυνατή η διαμόρφωση της ταχύτητας του a κινητήρας DC, ή την ένταση φωτός ενός φωτός, για ένα σωληνοειδές, κ.λπ.

Αναλογικό έναντι ψηφιακού συστήματος

Αναλογικό έναντι ψηφιακού σήματος

Τα ηλεκτρονικά κυκλώματα μπορούν να χωριστούν σε δύο μεγάλες οικογένειες ή κατηγορίες: ψηφιακή και αναλογική. Όταν μιλάμε για ψηφιακά ηλεκτρονικά, χρησιμοποιούμε ποσότητες με διακριτές τιμές, δηλαδή, ένα δυαδικό σύστημα που αντιπροσωπεύεται από ηλεκτρικά σήματα χαμηλής ή υψηλής τάσης για να ερμηνεύσει την κατάσταση αυτών των bit που αντιμετωπίζονται. Από την άλλη πλευρά, όταν πρόκειται για ένα αναλογικό κύκλωμα, χρησιμοποιούνται ποσότητες με συνεχείς τιμές.

Μέσα στα ψηφιακά συστήματα μπορούν να βρεθούν με τη σειρά αυτά συνδυαστικού τύπου και εκείνα διαδοχικού τύπου. Δηλαδή, τα πρώτα είναι εκείνα στα οποία η έξοδος του συστήματος εξαρτάται μόνο από την κατάσταση των εισόδων. Από την άλλη πλευρά, στα διαδοχικά, περιλαμβάνονται στοιχεία μνήμης και η έξοδος εξαρτάται από την τρέχουσα κατάσταση των εισόδων και την προηγούμενη κατάσταση που έχει αποθηκευτεί.

Στην περίπτωση των αναλόγων δεν υπάρχουν αυτές οι δύο μεγάλες ομάδες ή παραλλαγές, καθώς εδώ είναι συνεχή σήματα που θα εξαρτώνται πάντα λα σενάλ τρέχον σύστημα. Για παράδειγμα, σε ένα μεγάφωνο, το σήμα που παρέχεται εξαρτάται από τον ήχο που θέλετε να αναπαραγάγετε. Το ίδιο με ένα μικρόφωνο, το οποίο θα παράγει ένα αναλογικό σήμα ανάλογα με τον ήχο που λαμβάνει. Σίγουρα το έχετε δει και με πολλούς άλλους αισθητήρες που έχουμε περιγράψει σε αυτό το ιστολόγιο και που ενεργούν με αναλογικά σήματα (και επομένως, έπρεπε να δημιουργηθεί ένας τύπος έτσι ώστε αργότερα οι τιμές να μπορούν να υπολογιστούν ή να ρυθμιστούν στα σκίτσα του Arduino IDE ) ...

Αυτά τα χαρακτηριστικά του ενός και του άλλου κάνουν μερικά να έχουν πλεονεκτήματα και μειονεκτήματα, όπως είναι συνήθως σε όλα σχεδόν. Για παράδειγμα, τα ψηφιακά είναι συνήθως φθηνότερα, ταχύτερα, ευκολότερα στην ανάπτυξη, οι πληροφορίες μπορούν να αποθηκευτούν πιο εύκολα, έχουν μεγαλύτερη ακρίβεια, μπορούν να προγραμματιστούν, δεν είναι τόσο ευάλωτες στις επιπτώσεις του θορύβου κ.λπ. Αλλά είναι επίσης αλήθεια ότι με τα ανάλογα μπορείτε να λειτουργείτε με πιο περίπλοκα σήματα.

Με παράδειγμα, ένας ψηφιακός αισθητήρας τύπου Hall effect μπορεί να ανιχνεύσει μόνο την παρουσία ή την απουσία κοντινού μαγνητικού πεδίου. Αντ 'αυτού, ένας αναλογικός αισθητήρας εφέ Hall μπορεί να το κάνει αυτό και επίσης να προσδιορίσει την πυκνότητα του εν λόγω μαγνητικού πεδίου χάρη σε ένα αναλογικό σήμα που παράγει στην έξοδο του. Γνωρίζοντας πώς να ερμηνεύσετε αυτό το σήμα μεγαλύτερης ή μικρότερης τάσης, μπορείτε εύκολα να γνωρίζετε αυτό το μέγεθος. Έχετε άλλα παραδείγματα σε ένα πλήθος μεγεθών της φύσης που μπορείτε να μετρήσετε ποσοτικά με ένα αναλογικό σύστημα, όπως θερμοκρασία, χρόνος, πίεση, απόσταση, ήχος κ.λπ.

Αναλογικό έναντι ψηφιακού σήματος

Τούτου λεχθέντος, α αναλογικό σήμα Θα είναι μια τάση ή ηλεκτρικό ρεύμα που ποικίλλει με το χρόνο και συνεχώς. Εάν έχει γραφική παράσταση, το αναλογικό σήμα θα ήταν ημιτονοειδές κύμα μίας συχνότητας.

Καθώς η ψηφιακό σήμα, είναι μια τάση που μεταβάλλεται σταδιακά σε σχέση με το χρόνο. Δηλαδή, εάν αντιπροσωπεύεται σε ένα γράφημα, θα είναι ένα σήμα βήμα που δεν μεταβάλλεται συνεχώς, αλλά αλλάζει σε βήματα ή διακριτές αυξήσεις.

Πρέπει να γνωρίζετε ότι υπάρχουν κυκλώματα για μετάβαση από αναλογικό σήμα σε ψηφιακό ή αντίστροφα. Αυτά τα μετατροπείς Είναι γνωστοί ως DAC (Digital-to-Analog Converter) και ADC (Analog-to-Digital Converter). Και είναι πολύ συχνές σε πολλές συσκευές που χρησιμοποιούμε σήμερα, όπως τηλεόραση, υπολογιστές κ.λπ. Με αυτά μπορείτε να μετατρέψετε τα ψηφιακά σήματα που χρησιμοποιούνται από αυτόν τον εξοπλισμό σε ηλεκτρονικό επίπεδο για να συνεργαστείτε με άλλα περιφερειακά ή ανταλλακτικά που λειτουργούν αναλογικά.

Με παράδειγμα, ένα ηχείο ή μικρόφωνο με αναλογικά σήματα που λειτουργεί με κάρτα ήχου ή ψηφιακές κάρτες γραφικών που είχαν το περίφημο τσιπ RAMDAC για τις αναλογικές θύρες οθόνης ... Στο Arduino αυτός ο τύπος μετατροπέων χρησιμοποιείται επίσης για πολλά έργα, όπως θα δούμε ...

Τι είναι το PWM;

γραφικός κύκλος λειτουργίας

Αν και PWM (Διαμόρφωση παλμού-πλάτους), ή διαμόρφωση πλάτους παλμού, έχει ψηφιακή βάση, το σχήμα του σήματος μοιάζει με κάπως "τετράγωνο" αναλογικό σήμα. Επιτρέπει μέσω ψηφιακών παλμών να μεταβάλλει το σήμα για να μιμηθεί ένα αναλογικό σύστημα, όπως έχω ήδη σχολιάσει προηγουμένως. Στην πραγματικότητα, αν κοιτάξετε το όνομα, σας δίνει ήδη ενδείξεις για το τι κάνει, μέσω του πλάτους των ψηφιακών παλμών.

Αυτό είναι ευεργετικό για Arduino δεδομένου ότι υπάρχουν πολλοί αυτοματισμοί ή ηλεκτρονικά στοιχεία που μπορείτε να προσθέσετε στα έργα σας και αυτό δεν είναι σε θέση να παρέχουν ένα πραγματικό αναλογικό σήμα, αλλά χρησιμοποιούν αυτό το PWM για να λειτουργήσουν. Ούτε μπορούν να χρησιμοποιήσουν ένα διακριτό αναλογικό σήμα, δηλαδή, που πηγαίνει σε άλματα τάσης για να μοιάζει με ψηφιακό. Αυτό που μπορούν να κάνουν είναι να χρησιμοποιήσουν μια ψηφιακή έξοδο -Vcc ή Vcc ενός ψηφιακού τύπου για να δημιουργήσουν αυτό το περίεργο σήμα ...

Επομένως, το PWM είναι ένα είδος «κόλπου» με το οποίο το Arduino και άλλα συστήματα μπορούν να λειτουργούν με αυτόν τον τύπο σημάτων που Δεν είναι αρκετά αναλογικά ούτε συμβατικά ψηφιακά. Για να το καταστήσουν δυνατό, διατηρούν μια ψηφιακή έξοδο ενεργή για συγκεκριμένο χρόνο ή απενεργοποίηση, ανάλογα με το ενδιαφέρον ανά πάσα στιγμή. Αυτό απέχει πολύ από αυτό που θα ήταν ψηφιακό ρολόι ή σήμα δυαδικού κώδικα, του οποίου οι παλμοί έχουν το ίδιο πλάτος.

Στα έργα σας με το Arduino μπορείτε να ελέγξετε αυτόν τον τύπο σημάτων PWM στα οποία διατηρείται μια σταθερή συχνότητα ενεργοποίησης παλμών με την πάροδο του χρόνου, αλλά το πλάτος αυτών των παλμών ποικίλλει. Στην πραγματικότητα, ονομάζεται Duty Cycle όταν ένα σήμα διατηρείται ψηλά σε σχέση με το σύνολο του κύκλου. Επομένως, ο κύκλος εργασιών δίνεται σε%.

Θυμηθείτε ότι σε ένα PWM δεν λειτουργεί όπως σε αναλογικό σήμα, ανάμεσα σε διάφορες τιμές τάσης και κυμαίνεται μεταξύ τους. Στην περίπτωση PWM είναι ένα τετράγωνο σήμα σε ψηφιακό στυλ και του οποίου η μέγιστη τιμή είναι Vcc. Για παράδειγμα, εάν εργάζεστε με τροφοδοσία 3V, μπορείτε να δώσετε παλμούς 3V ή 0V, αλλά όχι 1V ή οποιαδήποτε άλλη ενδιάμεση τιμή όπως θα συνέβαινε σε ένα πραγματικό αναλογικό. Αυτό που θα ποικίλει σε αυτήν την περίπτωση είναι το πλάτος παλμού, το οποίο μπορούμε να διατηρήσουμε το 30% σε αυτήν την υψηλή τιμή Vcc ή το 60% για να του δώσουμε περισσότερη ισχύ, κ.λπ.

Προσοχή όμως, γιατί εάν μια συσκευή υποστηρίζει όριο Vcc και ξεπεραστεί με PWM, μπορεί να καταστραφεί. Επομένως, θα ήταν πάντα απαραίτητο να σέβονται τις τιμές των φύλλων δεδομένων που παρέχονται από τους κατασκευαστές. Επίσης, σε ορισμένες συσκευές όπως κινητήρες DC, ρελέ, ηλεκτρομαγνήτες κ.λπ., η απόσυρση τάσης μετά από έναν κύκλο λειτουργίας μπορεί να σημαίνει ότι τα επαγωγικά φορτία μπορούν να προκαλέσουν ζημιά. Γι 'αυτό το λόγο προστασίες έγκαιρος.

PWM στο Arduino

Λεωφορείο Arduino I2C

Τώρα που ξέρετε πώς λειτουργεί, ας δούμε τη συγκεκριμένη περίπτωση PWM στον κόσμο του Arduino ...

PWM: pinout στο Arduino

Στις πλακέτες Arduino μπορείτε να βρείτε αρκετές καρφίτσες που εφαρμόζουν υλικό PWM. Μπορείτε να τα αναγνωρίσετε στο ίδιο το PCB επειδή έχουν σύμβολο ~ (μικρό κεφάλι) μαζί με την αρίθμηση των ακίδων. Θα μπορούσε επίσης να γίνει από λογισμικό στον κώδικα Arduino, αλλά αυτό θα υπερφόρτωσε τον μικροελεγκτή με εργασία, κάτι παράλογο όταν μπορεί να γίνει εγγενώς και από υλικό ...

  • Arduino UNO, Μίνι και Νάνο- Έχετε 6 εξόδους PWM 8-bit στις ακίδες 3, 5, 6, 9, 10 και 11, οι οποίες θα έχουν ~ ακριβώς μπροστά από τον αριθμό.
  • arduino mega- Σε αυτήν την πιο ισχυρή πλακέτα Arduino έχετε 15 εξόδους PWM 8-bit. Βρίσκονται στις καρφίτσες 2 έως 13 και 44 έως 46.
  • Arduino λόγω: σε αυτήν την περίπτωση υπάρχουν 13 έξοδοι PWM 8-bit. Βρίσκονται στους ακροδέκτες 2 έως 13, συν δύο άλλες αναλογικές εξόδους που διακρίνονται από το DAC με ανάλυση 12 bit.

Όταν μιλάτε για ανάλυση 8-bit ή 12-bit, κ.λπ., σε αυτόν τον τύπο εξόδων PWM, αναφέρεστε στον χώρο ελιγμών που έχετε. Με 8 bit έχουν 256 επίπεδα μεταξύ των οποίων μπορείτε να κυμαίνετε και τα 12 bit φτάνουν τα 4096 επίπεδα.

Έλεγχος με χρονοδιακόπτες

Για έλεγχο PWM υλικού, Arduino θα χρησιμοποιήσει τα χρονόμετρα γι 'αυτό. Κάθε παρόν χρονόμετρο μπορεί να εξυπηρετήσει 2 ή 3 εξόδους PWM. Ένας καταχωρητής σύγκρισης για κάθε έξοδο συμπληρώνει αυτό το σύστημα έτσι ώστε όταν ο χρόνος φτάσει στην τιμή του καταχωρητή, η κατάσταση ή η τιμή της εξόδου αλλάζει για να σταματήσει αυτούς τους Κύκλους Εργασίας. Αν και υπάρχουν δύο έξοδοι που ελέγχονται από το ίδιο χρονόμετρο, και οι δύο μπορούν να έχουν διαφορετικούς κύκλους λειτουργίας, αν και μοιράζονται την ίδια συχνότητα.

Στην περίπτωση των χρονομετρητών που σχετίζονται με κάθε ακροδέκτη PWM, θα διαφέρει ανάλογα με τον τύπο του πίνακα Arduino που έχεις:

  • Arduino UNO, Μίνι και Νάνο:
    • Χρονόμετρο0 - 5 και 6
    • Χρονόμετρο1 - 9 και 10
    • Χρονόμετρο2 - 3 και 11
  • arduino mega:
    • Χρονόμετρο0 - 4 και 13
    • Χρονόμετρο1 - 11 και 12
    • Χρονόμετρο2 - 9 και 10
    • Χρονόμετρο 3 - 2, 3 και 5
    • Χρονόμετρο 4 - 6, 7 και 8
    • Χρονόμετρο 5 - 44, 45 και 46

Ο προκαθορισμένος καταχωρητής θα διαιρέσει τον χρόνο με έναν ακέραιο και ο Χρονοδιακόπτης κάνει τα υπόλοιπα για να ελέγχει κάθε μία από τις σχετικές εξόδους PWM. Η τροποποίηση της τιμής μητρώου μπορεί να αλλάξει τη συχνότητα. ο συχνότητες Θα είναι επίσης διαφορετικά ανάλογα με το χρονόμετρο και την πινακίδα:

  • Arduino UNO, Μίνι και Νάνο:
    • Χρονοδιακόπτης0: επιτρέπει την προεγκατάσταση των 1, 8, 64, 256 και 1024. Η συχνότητα είναι 62.5 Khz.
    • Χρονοδιακόπτης 1: με προεπιλογές 1, 8, 64, 256 και 1024. Με συχνότητα 31.25 Khz.
    • Χρονοδιακόπτης2: ίσος με το Χρονοδιακόπτη1, μόνο ότι προσθέτει επίσης μια προ-προαύξηση 32 και 128 εκτός από τις προηγούμενες.
  • arduino mega:
    • Χρονοδιακόπτης0, 1, 2: ίδιο όπως παραπάνω.
    • Χρονοδιακόπτες 3, 4 και 5: με συχνότητα 31.25 Khz και προκαθορισμένο από 1, 8, 64, 256 και 1024.

Ασυμβατότητες και συγκρούσεις

Ο χρονοδιακόπτης που σχετίζεται με τις εξόδους δεν είναι μόνο για αυτήν τη λειτουργία, χρησιμοποιείται επίσης από άλλους. Επομένως, εάν χρησιμοποιούνται από άλλη συνάρτηση, πρέπει να επιλέξετε το ένα ή το άλλο, δεν μπορείτε να χρησιμοποιήσετε και τα δύο ταυτόχρονα. Για παράδειγμα, αυτές είναι μερικές από τις ασυμβατότητες που μπορείτε να βρείτε στα έργα σας:

  • Σερβο βιβλιοθήκη: Όταν χρησιμοποιείτε σερβοκινητήρες, κάνει εντατική χρήση χρονοδιακόπτη, οπότε μπορεί να προκαλέσει διενέξεις. Χρησιμοποιήστε συγκεκριμένα το Timer1 για UNO, Nano και Mini, δηλαδή δεν μπορείτε να χρησιμοποιήσετε τις καρφίτσες 9 και 10 ενώ χρησιμοποιείτε ένα σκίτσο με αυτήν τη βιβλιοθήκη. Στο Mega θα εξαρτηθεί από τον αριθμό των servos ...
  • SPI: Εάν χρησιμοποιείται επικοινωνία SPI στην πλακέτα Arduino, ο πείρος 11 χρησιμοποιείται για τη λειτουργία MOSI. Αυτός είναι ο λόγος για τον οποίο δεν μπορεί να χρησιμοποιηθεί ο ακροδέκτης PWM.
  • Τόνος: αυτή η λειτουργία χρησιμοποιεί το Timer2 για να λειτουργήσει. Επομένως, εάν χρησιμοποιείται, καθιστά άχρηστες τις καρφίτσες 3 και 11 (ή 9 και 10 για Mega).

Πρακτική δοκιμή με τον Arduino

Σχηματικό Arduino PWM με LED

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

Μπορείτε να αντικαταστήσετε το βολτόμετρο / πολύμετρο με LED για να δείτε πώς ποικίλλει η ένταση του φωτός, με κινητήρα DC ή με οποιοδήποτε άλλο στοιχείο που θέλετε. Το απλοποίησα στο διάγραμμα με Fritzing με LED χωρίς περισσότερα, αλλά ξέρω ότι μπορεί επίσης να αντιπροσωπεύει τις άκρες ενός πολύμετρου ...

Εάν χρησιμοποιείτε LED, θυμηθείτε την αντίσταση στην κάθοδο και το GND.

να τον πηγαίο κώδικα Για να ελέγξετε τον μικροελεγκτή της πλακέτας Arduino για να λειτουργήσει τα πάντα, θα πρέπει να το εισαγάγετε στο Arduino IDE (στην περίπτωση αυτή έχω χρησιμοποιήσει τον ακροδέκτη PWM 6 Arduino UNO):

const int analogOutPin = 6;
byte outputValue = 0;  
 
void setup()
{  
   Serial.begin(9600);        
   pinMode(ledPIN , OUTPUT); 
 
   bitSet(DDRB, 5);       // LED o voltímetro
   bitSet(PCICR, PCIE0);       
   bitSet(PCMSK0, PCINT3);     
}
 
void loop() 
{
   if (Serial.available()>0)  
   {
      if(outputValue >= '0' && outputValue <= '9')
      {
         outputValue = Serial.read();   // Leemos la opción
         outputValue -= '0';      // Restamos '0' para convertir a un número
         outputValue *= 25;      // Multiplicamos x25 para pasar a una escala 0 a 250
         analogWrite(ledPIN , outputValue);
      }
   }
}  
 
ISR(PCINT0_vect)
{
   if(bitRead(PINB, 3))
   { 
      bitSet(PORTB, 5);   // LED on 
   }
   else
   { 
      bitClear(PORTB, 5); // LED off  
   } 
} 
Σας συμβουλεύω να παίξετε με τις αξίες και να δείτε τα αποτελέσματα στο φως ή το βολτόμετρο. Το πρόγραμμα μπορεί να λάβει τιμές από 0 έως 9, ώστε να μπορείτε να δείτε πώς ποικίλλουν τα πάντα. Για περισσότερες πληροφορίες, σας συμβουλεύω το μάθημα arduino που έχουμε σε δωρεάν λήψη ...

Ένα σχόλιο, αφήστε το δικό σας

Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   jose dijo

    Γειά Καλημέρα. Καταρχάς θέλω να σας ευχαριστήσω για το χρόνο που αφιερώθηκε σε αυτήν την εξήγηση για το νεότερο.
    Θα ήθελα να σας κάνω ένα ερώτημα. Προσπαθώ να τρέξω τον κώδικα σε έναν εξομοιωτή proteus 8 για το Arguino Mega. Συνδέω ένα βολτόμετρο στον ακροδέκτη 6, ο Proteus είναι συνδεδεμένος σε μια σειριακή θύρα, αλλά δεν ξέρω πώς ή τι να ποικίλει, ώστε να εξάγονται διαφορετικές τάσεις. Έπρεπε να κάνω μικρές προσαρμογές στον κώδικα για να τον μεταγλωττίσω. Σας ευχαριστώ πολύ για τη βοήθειά σας