Πώς λειτουργεί ο Rotary Encoder και διασυνδέεται με το Arduino

Pos Leitourgei O Rotary Encoder Kai Diasyndeetai Me To Arduino



Ο Rotary Encoder είναι μια σημαντική ηλεκτρομηχανική συσκευή που έχει ποικίλες χρήσεις στον τομέα των ηλεκτρονικών. Αυτό το άρθρο θα εξηγήσει τους τύπους και τη λειτουργία του περιστροφικού κωδικοποιητή μαζί με τη διασύνδεσή του με το Arduino.

Τι είναι ο Rotary Encoder

Ο περιστροφικός κωδικοποιητής είναι μια ψηφιακή συσκευή εισόδου που ανιχνεύει τη γωνιακή θέση του περιστροφικού κουμπιού και στέλνει σήματα στον μικροελεγκτή ή σε οποιαδήποτε άλλη συσκευή στην οποία είναι συνδεδεμένα. Μπορούν να περιστρέφονται 360° χωρίς να σταματήσουν. Ονομάζεται επίσης κωδικοποιητής άξονα. Χρησιμοποιείται σε εκτυπωτές, ηλεκτρονικά ήχου, κινητήρες και ελεγκτές.









Τύποι περιστροφικών κωδικοποιητών

Υπάρχουν κυρίως δύο τύποι περιστροφικών κωδικοποιητών που αποφασίζονται με βάση το σήμα εξόδου που παράγεται από αυτούς. Αυτοί οι τύποι ονομάζονται:



Αυξητικός περιστροφικός κωδικοποιητής

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





Απόλυτος Περιστροφικός Κωδικοποιητής

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



Λειτουργία του Rotary Encoder

Ο περιστροφικός κωδικοποιητής αποτελείται από έναν δίσκο με περιοχές με ίσες αποστάσεις συνδεδεμένο σε μια κοινή ακίδα C που είναι γειωμένη. Οι δύο άλλες ακίδες Α και Β είναι ακίδες επαφής που έρχονται σε επαφή με το C όταν περιστρέφεται το περιστροφικό κουμπί. Όταν ο ακροδέκτης Α ή Β συνδεθεί στη γείωση, τότε παράγεται ένα σήμα. Αυτά τα σήματα που παράγονται από τους ακροδέκτες εξόδου είναι 90° εκτός φάσης. Αυτό συμβαίνει επειδή ο ακροδέκτης Α συνδέεται με τη γείωση όταν το κουμπί περιστρέφεται δεξιόστροφα και ο ακροδέκτης Β συνδέεται πρώτα με τη γείωση όταν το κουμπί περιστρέφεται αριστερόστροφα. Επομένως, η φορά περιστροφής του κουμπιού καθορίζεται μέσω αυτών των συνδέσεων.

Αν η κατάσταση του σι δεν είναι ίσο με ΕΝΑ , τότε το κουμπί έχει γυρίσει δεξιόστροφα.


Εάν η κατάσταση του Β είναι ίση με το Α, το κουμπί έχει γυρίσει αριστερόστροφα.

Διαμόρφωση καρφιτσών του περιστροφικού κωδικοποιητή

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

Pin Περιγραφή του Rotary Encoder

Ακολουθεί η δεδομένη περιγραφή όλων των ακίδων του περιστροφικού κωδικοποιητή.

Έξω Β ή CLK

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

Έξω A ή DT

Αυτή είναι η δεύτερη ακίδα εξόδου του περιστροφικού κωδικοποιητή που καθορίζει την κατεύθυνση περιστροφής. Υστερεί 90° σε σχέση με το σήμα CLK. Επομένως, εάν η κατάστασή του δεν είναι ίση με την κατάσταση του CLK, τότε η φορά περιστροφής είναι δεξιόστροφα, διαφορετικά, αριστερόστροφα.

Διακόπτης

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

VCC

Αυτή η ακίδα είναι συνδεδεμένη σε τροφοδοσία 5V

GND

Αυτή η ακίδα συνδέεται με το έδαφος

Διασύνδεση Rotary Encoder με Arduino

Ο περιστροφικός κωδικοποιητής έχει πέντε ακίδες. Το VCC και το GND του περιστροφικού κωδικοποιητή συνδέονται με αυτό του Arduino. Οι υπόλοιπες ακίδες CLK, DT και SW συνδέονται στις ψηφιακές ακίδες εισόδου του Arduino.

Κωδικός Arduino για Rotary Encoder

// Είσοδοι περιστροφικού κωδικοποιητή
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int μετρητής = 0 ;
int currentCLKState;
int lastCLKState;
Κατεύθυνση ρεύματος χορδής = '' ;
ανυπόγραφο long lastButtonPressTime = 0 ;
ρύθμιση κενού ( ) {
// Ρύθμιση ακίδων κωδικοποιητή όπως και εισροές
    pinMode ( CLK_PIN, INPUT ) ;
    pinMode ( DT_PIN, INPUT ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Ρύθμιση σειριακής οθόνης
Serial.begin ( 9600 ) ;
// Διαβάστε την αρχική κατάσταση του CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
κενό βρόχο ( ) {
// Διαβάστε την τρέχουσα κατάσταση του CLK
τρέχονCLKState = digitalRead ( CLK_PIN ) ;
// Αν το τελευταίος και η τρέχουσα κατάσταση του CLK είναι διαφορετική, έπειτα εμφανίστηκε ένας παλμός
// Αντιδράστε μόνο σε 1 αλλαγή κατάστασης για να αποφευχθεί η διπλή καταμέτρηση
αν ( τρέχουσα κατάσταση CLK ! = lastCLKState && τρέχονCLKState == 1 ) {
// Εάν η κατάσταση DT είναι διαφορετική από την κατάσταση CLK, έπειτα
// Ο κωδικοποιητής περιστρέφεται αριστερόστροφα, άρα μειώνεται
αν ( digitalRead ( DT_PIN ) ! = τρέχουσα CLKState ) {
μετρητής--;
τρέχουσα κατεύθυνση = 'CCW' ;
} αλλού {
// Ο κωδικοποιητής περιστρέφεται δεξιόστροφα, άρα αυξάνεται
counter++;
τρέχουσα κατεύθυνση = 'CW' ;
}
Σειρά.εκτύπωση ( 'Κατεύθυνση περιστροφής:' ) ;
Σειρά.εκτύπωση ( τρέχουσα κατεύθυνση ) ;
Σειρά.εκτύπωση ( ' | Αντίστροφη τιμή: ' ) ;
Serial.println ( μετρητής ) ;
}
// Θυμηθείτε το τελευταίος κατάσταση CLK
lastCLKState = τρέχονCLKState;
// Διαβάστε την κατάσταση του κουμπιού
int buttonState = digitalRead ( SW_PIN ) ;
// Αν εντοπίσουμε σήμα LOW, πατάμε το κουμπί
αν ( buttonState == LOW ) {
// Αν έχουν περάσει 50 ms από το τελευταίος ΧΑΜΗΛΟΣ παλμός, σημαίνει ότι το
// το κουμπί έχει πατηθεί, απελευθερωθεί και πατηθεί ξανά
αν ( millis ( ) - lastButtonPressTime > πενήντα ) {
Serial.println ( 'Πατήθηκε το κουμπί!' ) ;
}
// Θυμηθείτε το τελευταίος εκδήλωση πατήματος κουμπιού χρόνος
lastButtonPressTime = χιλιοστά ( ) ;
}
// Βάζω σε μια μικρή καθυστέρηση για να βοήθεια αποκρούω την ανάγνωση
καθυστέρηση ( 1 ) ;
}


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

συμπέρασμα

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