Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Ο περιστροφικός κωδικοποιητής είναι ένα ηλεκτρονικό στοιχείο ικανό να παρακολουθεί την κίνηση και τη θέση κατά την περιστροφή. Ο περιστροφικός κωδικοποιητής χρησιμοποιεί οπτικούς αισθητήρες που μπορούν να παράγουν παλμούς όταν περιστρέφεται ο περιστροφικός κωδικοποιητής. Η εφαρμογή του περιστροφικού κωδικοποιητή συνήθως ως μηχανική ή ρομποτική οθόνη κίνησης μπορεί επίσης να χρησιμοποιηθεί για την επιλογή μενού στην οθόνη. Ο περιστροφικός κωδικοποιητής έχει δύο εξόδους έτσι ώστε να μπορεί να διακρίνει μεταξύ περιστροφής αρνητικής (CW) και θετικής (CCW) και διαθέτει επίσης ένα μόνο κουμπί.
Βήμα 1: Ροή παλμών περιστροφικού κωδικοποιητή
Η ροή παλμών που δημιουργείται από τον ακόλουθο περιστροφικό κωδικοποιητή είναι όπως στην παραπάνω εικόνα.
Βήμα 2: Pinout του Rotary Encoder
Εξήγηση:
- GND GND
- + + 5V
- Κουμπί SW περιστροφικού κωδικοποιητή όταν πατηθεί
- Δεδομένα DT
- CLK Δεδομένα 2
Ένας από τους ακροδέκτες DT ή CLK πρέπει να είναι συνδεδεμένος στο πόδι διακοπής του Arduino Uno ή και οι δύο DT και CLK είναι συνδεδεμένοι στον ακροδέκτη διακοπής.
Βήμα 3: Σχηματικό
- GND à GND Arduino Uno
- + à + 5V Arduino Uno
- SW à PIN 4 Arduino Uno
- DT à PIN 3 Arduino Uno
- CLK à PIN2 Arduino Uno
Βήμα 4: Κωδικός
Στο παρακάτω σεμινάριο, το οποίο θα χρησιμοποιηθεί ως διακοπή είναι το PIN 2 του Arduino Uno, ενώ το PIN 3 χρησιμοποιείται μόνο ως κανονική είσοδος.
#define encoder0PinA 2 #define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (κωδικοποιητής0PinA, INPUT_PULLUP); pinMode (κωδικοποιητής0PinB, INPUT_PULLUP); pinMode (κωδικοποιητής0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {
Serial.print ("CCW");
} lastValRotary = valRotary; Serial.println (""); καθυστέρηση (250)? } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = κωδικοποιητής0Pos/2.5; }
Στη γραμμή 10 του παραπάνω σκίτσου χρησιμοποιείται για να ενεργοποιηθεί η διακοπή του pin 2 Arduino Uno. Στη λειτουργία "doEncoder" υπολογίζεται από τον περιστροφικό κωδικοποιητή. Εάν η τιμή των DT και CLK (διακοπή pin του Arduino Uno) είναι η ίδια, τότε η μεταβλητή "encoder0Pos" θα αυξηθεί / προστεθεί, επιπλέον της συνθήκης αυτής, η μεταβλητή "encoder0Pos" μειώνεται.
Βήμα 5: Επεξήγηση
ValRotary value είναι η τιμή του αριθμού των βημάτων που εκτελούνται. Η τιμή ValRotary λαμβάνεται από την τιμή ανάγνωσης περιστροφικού κωδικοποιητή αισθητήρα διαιρούμενη με 2,5. Από τη δοκιμή λαμβάνεται μια τιμή 2,5, αφού ένα βήμα του περιστροφικού κωδικοποιητή μπορεί να υπερβεί το 1, οπότε διαιρέστε με 2,5 για την τιμή του σύμφωνα με το perstep και επίσης την προσθήκη της καθυστέρησης ανάγνωσης.
Ενώ βρίσκεστε στη γραμμή 19 - 25, είναι ένα πρόγραμμα για τον προσδιορισμό του περιστροφικού περιστροφικού κωδικοποιητή CW ή CCW. Η εξήγηση των γραμμών 19 - 25 είναι όταν η τρέχουσα ανάγνωση περιστροφικού κωδικοποιητή είναι μεγαλύτερη από τα προηγούμενα περιστροφικά δεδομένα που εκφράζονταν τότε ως CW. Αν η τρέχουσα ένδειξη είναι μικρότερη από την προηγούμενη ανάγνωση τότε δηλώνεται ως CCW.
Βήμα 6: Έξοδος
1 = η τιμή του κουμπιού έναρξης του περιστροφικού όταν δεν έχει πατηθεί