Πίνακας περιεχομένων:

Rotary Encoder - Κατανοήστε και χρησιμοποιήστε το (Arduino/άλλο ΜController): 3 βήματα
Rotary Encoder - Κατανοήστε και χρησιμοποιήστε το (Arduino/άλλο ΜController): 3 βήματα

Βίντεο: Rotary Encoder - Κατανοήστε και χρησιμοποιήστε το (Arduino/άλλο ΜController): 3 βήματα

Βίντεο: Rotary Encoder - Κατανοήστε και χρησιμοποιήστε το (Arduino/άλλο ΜController): 3 βήματα
Βίντεο: Εύκολος οδηγός για τις συνδέσεις καλωδίωσης για μοτέρ ανεμιστήρα AC 2024, Ιούλιος
Anonim
Rotary Encoder - Κατανοήστε και χρησιμοποιήστε το (Arduino/άλλο ΜController)
Rotary Encoder - Κατανοήστε και χρησιμοποιήστε το (Arduino/άλλο ΜController)

Ένας περιστροφικός κωδικοποιητής είναι μια ηλεκτρομηχανική συσκευή που μετατρέπει την περιστροφική κίνηση σε ψηφιακές ή αναλογικές πληροφορίες. Μπορεί να στρίψει δεξιόστροφα ή αριστερόστροφα. Υπάρχουν δύο τύποι περιστροφικών κωδικοποιητών: Ο απόλυτος και ο σχετικός (σταδιακός) κωδικοποιητής.

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

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

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

Βήμα 1: Κατανόηση των δεδομένων εξόδου

Κατανόηση των δεδομένων εξόδου
Κατανόηση των δεδομένων εξόδου

Όπως μπορείτε να δείτε όταν ο άξονας του κωδικοποιητή αρχίζει να περιστρέφεται δεξιόστροφα, η έξοδος A πέφτει πρώτα στο LOW και η έξοδος B την ακολουθεί. Σε αντίθετη φορά των δεικτών του ρολογιού, η λειτουργία γυρίζει αντίθετα.

Τώρα πρέπει απλώς να το εφαρμόσουμε στον μController (χρησιμοποίησα Arduino Nano).

Βήμα 2: Δημιουργήστε το κύκλωμα

Κατασκευάστε το κύκλωμα
Κατασκευάστε το κύκλωμα
Κατασκευάστε το κύκλωμα
Κατασκευάστε το κύκλωμα

Όπως περιέγραψα πριν, οι έξοδοι δημιουργούν ένα υψηλό και ένα χαμηλό πλευρό. Για να έχουμε ένα καθαρό HIGH στο pin δεδομένων A και B του μController πρέπει να προσθέσουμε αντιστάσεις Pull-Up. Το κοινό Pin C πηγαίνει κατευθείαν στο έδαφος για το LOW side.

Για να λάβετε πληροφορίες σχετικά με τον εσωτερικό διακόπτη (κουμπί) θα χρησιμοποιήσουμε τις άλλες δύο ακίδες. Το ένα από αυτά πηγαίνει στο VCC και το άλλο σε ένα pin δεδομένων του μController. Πρέπει επίσης να προσθέσουμε ένα Pull-Down Resistor στο pin δεδομένων για να έχουμε ένα καθαρό LOW.

Είναι επίσης δυνατό να χρησιμοποιήσετε εσωτερικές αντιστάσεις Pull-Up και Pull-Down του μC Controller σας!

Στην περίπτωσή μου, το pinout μοιάζει με:

  • +3, 3V => +3, 3V (Arduino) (επίσης +5V δυνατό)
  • GND => GND (Arduino)
  • A => Pin10
  • Β =>

    Καρφίτσα

    11

  • C => GND
  • ΝΔ =>

    Καρφίτσα

    12

Βήμα 3: Γράφοντας τον Κώδικα

int pinA = 10; // εσωτερικός διακόπτης A int pinB = 11; // εσωτερικός διακόπτης B int pinSW = 12; // διακόπτης (πατημένος κωδικοποιητής) int encoderPosCount = 0; // ξεκινά από μηδέν, αλλάξτε αν θέλετε

int positionval?

bool switchval? int mrotateLast; int mrotate?

void setup () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); καθυστέρηση (50)? }

void loop () {readencoder (); if (readwitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// το κουμπί περιστρέφεται εάν (digitalRead (pinB)! = mrotate) {// switch A άλλαξε πρώτα -> περιστρέφοντας δεξιόστροφα κωδικοποιητήPosCount ++; Serial.println ("περιστρεφόμενο δεξιόστροφα"); } else {// switch B άλλαξε πρώτα-> περιστρέφοντας αριστερόστροφα τον κωδικοποιητήPosCount--; Serial.println ("περιστρεφόμενο αριστερόστροφα"); }

Serial.print ("Θέση κωδικοποιητή:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; επιστροφή κωδικοποιητήPosCount; } bool readwitch () {

εάν πατηθεί ο διακόπτης (digitalRead (pinSW)! = 0) {//

ενώ (digitalRead (pinSW)! = 0) {} // ο διακόπτης είναι επί του παρόντος πατημένος switchval = 1; } else {switchval = 0;} // switch είναι μη συμπιεσμένο switchval επιστροφής. }

Τώρα μπορείτε να γυρίσετε τον κωδικοποιητή και η μεταβλητή encoderPosCount θα μετρήσει αν περιστρέψετε δεξιόστροφα και αντίστροφα αν περιστρέψετε δεξιόστροφα.

Αυτό είναι! Απλά και χρήσιμα.

Μη διστάσετε να αλλάξετε και να εκτελέσετε τον κώδικα. Μπορείτε να το εφαρμόσετε στο έργο σας.

Θα ανεβάσω επίσης ένα έργο LED όπου χρησιμοποίησα τον κωδικοποιητή για να ρυθμίσω τη φωτεινότητα των LED μου.

Συνιστάται: