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

Απλός περιστροφικός αποκωδικοποιητής: 4 βήματα
Απλός περιστροφικός αποκωδικοποιητής: 4 βήματα

Βίντεο: Απλός περιστροφικός αποκωδικοποιητής: 4 βήματα

Βίντεο: Απλός περιστροφικός αποκωδικοποιητής: 4 βήματα
Βίντεο: PART3 ..ROTARY/περιστροφικός αλοιφαδορος,ολογράμματα κακή χρηση αλλά.και ασύγκριτα αποτελεσματα 2024, Νοέμβριος
Anonim
Image
Image
Απλός περιστροφικός αποκωδικοποιητής
Απλός περιστροφικός αποκωδικοποιητής

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

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

Παρέχονται εκδόσεις του κώδικα για διακοπές και χωρίς διακοπή.

Η έκδοση διακοπής του κώδικα απαιτεί μόνο έναν κωδικό διακοπής.

Εικόνες:

  • Η φωτογραφία ανοίγματος δείχνει τον συναρμολογημένο κωδικοποιητή.
  • Το στιγμιότυπο οθόνης δείχνει τον κωδικό για την έκδοση διακοπής και την καταμέτρηση όταν ο άξονας κωδικοποιητή περιστρέφεται δεξιόστροφα και αριστερόστροφα.
  • Το βίντεο δείχνει την καταμέτρηση κατά τη γρήγορη περιστροφή.

Βήμα 1: Διάγραμμα κυκλώματος

Διάγραμμα κυκλώματος
Διάγραμμα κυκλώματος

Το διάγραμμα καλωδίωσης κωδικοποιητή φαίνεται στο σχήμα 1.

Τα καλώδια βραχυκυκλωμάτων συγκολλούνται απευθείας στους πείρους του κωδικοποιητή.

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

Βήμα 2: Λίστα μερών

Τα παρακάτω μέρη προέρχονται από τη διεύθυνση

  • 1 μόνο Arduino UNO R3 με καλώδιο USB.
  • 1 μόνο διαδοχικός περιστροφικός κωδικοποιητής (EC11 ή ισοδύναμος) με διακόπτη.
  • 1 μόνο κουμπί που ταιριάζει στον άξονα.
  • 3 μόνο καλώδια άλτης αρσενικού προς αρσενικό Arduino.

Βήμα 3: Θεωρία

Θεωρία
Θεωρία

Οι διαδοχικοί περιστροφικοί κωδικοποιητές δημιουργούν δύο τετραγωνικά κύματα το καθένα εκ των οποίων μετατοπίζεται κατά 90 μοίρες, όπως φαίνεται στο σχήμα 1.

Τα λογικά μοτίβα στην επαφή Α και την επαφή Β είναι διαφορετικά όταν ο άξονας περιστρέφεται δεξιόστροφα (CW) και αριστερόστροφα (CCW) μέσω των θέσεων 1 έως 6.

Οι συνήθεις μέθοδοι καθορισμού της κατεύθυνσης περιστροφής περιλαμβάνουν:

  • σκεύη, εξαρτήματα
  • δίδυμες διακοπές
  • πίνακες αναζήτησης μοτίβου

Αυτό το έργο χρησιμοποιεί μια μέθοδο λογισμικού που δεν απαιτεί πίνακες αναζήτησης. [1]

Κατεύθυνση

Αντί να εξετάσουμε τα μοτίβα εξόδου από την επαφή Α και την επαφή Β, ας επικεντρωθούμε στην επαφή Α.

Αν δοκιμάσουμε την επαφή Β μετά από κάθε μετάβαση επαφής, σημειώνουμε ότι:

  • Η επαφή A και η επαφή B έχουν αντίθετες λογικές καταστάσεις όταν ο κωδικοποιητής περιστρέφεται CW
  • Η επαφή A και η επαφή B έχουν την ίδια λογική κατάσταση όταν ο κωδικοποιητής περιστρέφεται CCW

Πραγματικός κώδικας:

// ----- Μετρήστε τις μεταβάσεις

CurrentStateA = stateContactA (); εάν (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); εάν (CurrentStateA == CurrentStateB) Καταμέτρηση ++; εάν (CurrentStateA! = CurrentStateB) Καταμέτρηση--; LastStateA = CurrentStateA; }

Αυτή η μέθοδος προσφέρει τα ακόλουθα πλεονεκτήματα:

  • δεν απαιτούνται πίνακες αναζήτησης
  • απαιτείται μόνο μία γραμμή διακοπής

Debounce

Όλοι οι μηχανικοί κωδικοποιητές υποφέρουν από "αναπήδηση επαφής".

Εάν μια επαφή διακόπτη δεν κάνει/σπάσει καθαρά, η λογική της κατάσταση θα ταλαντεύεται γρήγορα από Υ HIGHΗΛΗ σε ΧΑΜΗΛΗ έως ότου η επαφή του διακόπτη ρυθμιστεί. Αυτό οδηγεί σε ψευδείς μετρήσεις.

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

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

Κατάργηση λογισμικού

Αυτή η μέθοδος χρησιμοποιεί δύο μετρητές (ανοιχτό, κλειστό) που έχουν οριστεί στο μηδέν. [2]

Μόλις εντοπιστεί μια μετάβαση στην επαφή Α:

  • Συνεχής δημοσκόπηση Επικοινωνία Α.
  • Αυξήστε τον ανοιχτό μετρητή και επαναφέρετε τον κλειστό μετρητή, όποτε η επαφή Α είναι Υ HIGHΗΛΗ.
  • Αυξήστε τον κλειστό μετρητή και επαναφέρετε τον ανοιχτό μετρητή, όποτε η επαφή A είναι ΧΑΜΗΛΗ.
  • Βγείτε από τον βρόχο όταν ένας από τους μετρητές φτάσει σε έναν προκαθορισμένο αριθμό. Αναζητούμε ουσιαστικά την περίοδο σταθερής κατάστασης μετά από οποιαδήποτε αναπήδηση επαφών.

Πραγματικός κώδικας:

// ----- Επαφή κατάργησης A

ενώ (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Κενός απέναντι ολοκληρωτής Άνοιγμα ++; // Ενσωμάτωση εάν (Άνοιγμα> MaxCount) επιστρέφει HIGH; } else {// ----- ContactA is Closed Open = 0; // Κενός απέναντι ολοκληρωτής Κλειστό ++; // Ενσωμάτωση εάν (Κλειστό> MaxCount) επιστρέφει LOW. }}

Δεν χρειάζεται να καταργηθεί η επαφή Β καθώς οι μεταβάσεις επαφής Α και επαφής Β δεν συμπίπτουν.

Αρίθμηση

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

Ο αριθμός των «απαγορευμένων» μπορεί να προσδιοριστεί χρησιμοποιώντας αριθμητική modulo 2, όπως φαίνεται παρακάτω.

Πραγματικός κώδικας:

// ----- Μετρήστε "δεσμευτές"

if (Count % 2 == 0) {Serial.print ("Count:"); Serial.println (Count / 2); }

βιβλιογραφικές αναφορές

Περισσότερες πληροφορίες μπορείτε να βρείτε στη διεύθυνση:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

Βήμα 4: Λογισμικό

Αυτό το έργο απαιτεί μια πρόσφατη έκδοση του Ardino Uno R3 IDE (ολοκληρωμένο περιβάλλον ανάπτυξης), η οποία είναι διαθέσιμη από τη διεύθυνση

Κατεβάστε καθένα από τα παρακάτω δύο σκίτσα Arduino (επισυνάπτεται)

  • rotary_encoder_1.ino (έκδοση δημοσκόπησης)
  • rotary_encoder_2.no (έκδοση διακοπής)

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

Απολαμβάνω …

Κάντε κλικ εδώ για να δείτε τις άλλες οδηγίες μου.

Συνιστάται: