Rotary (Quadrature) encoders.

Οι Rotary Encoders είναι ηλεκτρομηχανικές συσκευές που με αναλογικό ή ψηφιακό κώδικα επιστρέφουν την γωνιακή τους θέση. Η ποιο απλή, ίσως, μορφή ενός rotary encoder που μπορεί να χρησιμοποιήσει κάποιος είναι ένας Quadrature Encoder. Τέτοιες συσκευές υπάρχουν παντού. Για παράδειγμα η “ροδέλα” του ποντικιού, το μπουτόν ήχου στα σύγχρονα συστήματα ήχου κτλ. Στην όψη μοιάζουν πολύ με απλά ποτενσιόμετρα. Μπορούν όμως να περιστρέφονται “τρελά” (δεν έχουν stop, κάνουν ολόκληρους κύκλους) και συνήθως έχουν διακριτές θέσεις (“κλικ” κατά την περιστροφή).

Rotary-Encoder

Άρθρο της Wikipedia για Rotary Encoders.
Τεκμηρίωση του Rotary Encoder.
Τεκμηρίωση του ATmega8.

Ένας τέτοιος encoder έχει τρεις ακίδες. Μία για γείωση, μία για την πρώτη έξοδο (ENC_A) και μία για την δεύτερη έξοδο (ENC_B). Καθώς γυρίζουμε τον encoder η καταστάση των ENC_A, ENC_B αλλάζει με διαφορά φάσης 90 μοιρών. Αν για παράδειγμα περιστρέψουμε τον encoder σύμφωνα με τους δείκτες του ρολογιού η κατάσταση αλλάζει με την εξής σειρά: 00-01-11-10.

Quadrature_Diagram

table_1

Πρέπει να σημειωθεί πως οι περισσότεροι encoders αποτελούνται από μηχανικούς διακόπτες (παρακάτω φωτογραφία) οπότε πρέπει να λάβουμε υπόψιν πιθανό bouncing.

DSC01441

Για χρησιμοποιήσουμε έναν encoder πρέπει να ανιχνεύουμε την αλλαγή αυτή. Υπάρχουν διάφοροι τρόποι για να το κάνουμε για παράδειγμα με την χρήση interrupt, με polling κτλ. Μία μέθοδος που πρότεινε κάποιος χρήστης είναι η χρήση πίνακα με όλες τις πιθανές καταστάσεις που μπορεί να προκύψουν. Μέσα από τον κώδικα μπορούμε να αποκλείσουμε της μη έγκυρες καταστάσεις και να βρούμε πότε ο encoder περιστρέφετε δεξιόστροφα ή αριστερόστροφα. Από όσους τρόπους έχω δοκιμάσει αυτός λειτουργεί καλύτερα από όλους. Δεν επηρεάζεται ούτε από πιθανό bouncing. Περισσότερες λεπτομέρειες μπορείτε να βρείτε ΕΔΩ.

schematic

Στο παράδειγμα που έγραψα (και μπορεί να βρεθεί ΕΔΩ), ο έλεγχος για το αν περιστράφηκε ο encoder γίνεται μέσω του interrupt υπερχείλισης του Timer/Counter2 κάθε ένα msec που είναι αρκετό ακόμη και για την αναγνώριση γρήγορης περιστροφής. Θα μπορούσαμε όμως να εκτελούμε τον έλεγχο οπουδήποτε στον κώδικα.

Advertisements
This entry was posted in AVR, Electronics and tagged , , , , , , , , , , , , , , , , . Bookmark the permalink.

One Response to Rotary (Quadrature) encoders.

  1. ninnu says:

    It’s nice if you had built the controller to servo atmega modeling. PWM signal to the servo and control account. Waiting for the project 🙂 greetings

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s