Κινητήρας συνεχούς ρεύματος με κωδικοποιητή 

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

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

  • ένα Arduino Uno,
  • ένα τροφοδοτικό συνεχούς ρεύματος για τον κινητήρα,
  • έναν κοντρόλερ για την οδήγηση του κινητήρα,
  • και έναν κινητήρα συνεχούς ρεύματος με προσαρμοσμένο στην κατασκευή του έναν κωδικοποιητή.
  • ένα Arduino UNO Shield, κενή διάτρητη πλακέτα
  • κάποια υλικά σύνδεσης, λεπτά καλώδια σε διάφορα χρώματα

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

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

 

DC κινητήρας με κωδικοποιητή

 

Κινητήρας
Κινητήρας JGB37-520 DC με μηχανικό μειωτήρα στροφών και κωδικοποιητή.
Χρησιμοποιείται κυρίως σε αυτοκίνητα μεταβλητής ταχύτητας, σε αυτοκίνητα αυτοεξισορρόπησης (με δύο τροχούς), σε αγωνιστικά αυτοκίνητα, αυτοκίνητο παρακολούθησης, σε ρομπότ και σε άλλες σχετικες κατασκευές.


Ο κωδικοποιητής ταχύτητας λειτουργεί με τη χρήση φαινομένου Hall .

Καλωδίωση του κινητήρα:
1, κόκκινο: τροφοδοσία κινητήρα + (η εναλλαγή πολικότητας με το λευκό αντιστρέφει την κίνηση του κινητήρα)
2, μαύρο: τροφοδοσία κωδικοποιητή -
3, κίτρινο: γραμμή σήματος, (Α)
4, πράσινο: γραμμή σήματος, (Β)
5, μπλε: τροφοδοσία κωδικοποιητή +
6, λευκό: τροφοδοσία κινητήρα - (η εναλλαγή πολικότητας με το κόκκινο αντιστρέφει την κίνηση του κινητήρα)

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

 

Σύνδεση κωδικοποιητή

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

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

 

Διάγραμμα κωδικοποιητή

 Στην εικόνα που ακολουθεί παρουσιάζεται η συνδεσμολογία για δύο όμοιους κινητήρες σε μία πλακέτα Arduino UNO. Στην πλακέτα αυτή θα συνδεθεί και άλλος εξοπλισμός αργότερα. Εμείς θα χρησιμοποιήσουμε στο παράδειγμα μας αυτό μόνο τον κωδικοποιητή από τον ένα κινητήρα.
Βλέπεται ότι υπάρχουν δύο σύνδεσμοι για κάθε κινητήρα, ένας για το Μοτερ Α και ένας για τον κωδικοποιητή Α. Εμείς θα χρησιμοποιήσουμε σε αυτό το παράδειγμα μόνο το σύνδεσμο Encoder A.
Σε αυτόν τον σύνδεσμο συνδέονται τέσσερα καλώδια. Τα δύο ακριανά είναι για την τροφοδοσία του κωδικοποιητή, GND και VCC. Τα δύο μεσαία συνδέονται το ένα στο pin D2 και το άλλο στο pin D10. Σημειώστε εδώ ότι τα pin D2 και D3 είναι τα μόνα που χρησιμοποιούνται για τη δημιουργία διακοπών (interrupts) στην πλακέτα Arduino UNO. Αυτό θα το συναντήσουμε όταν γράφουμε το πρόγραμμα.

 

Συνδεσμολογία πλακέτας

 Ας γράψουμε ένα πολύ απλό πρόγραμμα για να κατανοήσουμε πώς λειτουργεί ένας κωδικοποιητής και πώς να διαβάζουμε τις εξόδους του κωδικοποιητή.
Για να διαβάσουμε τον κωδικοποιητή, θα συνδέσουμε τα pin εξόδου του κωδικοποιητή με τους ακροδέκτες 2 και 10 του Arduino. Το pin 2 είναι interrupt pin. Τα καλώδια τροφοδοσίας του κωδικοποιητή θα συνδεθούν με τα 5V και το GND του Arduino. 

 

//Author :  Manolis Aristovoulidis

//Περιστρέφω το μοτέρ με το χέρι και μετράω και τυπώνω
// την ταχύτητα και την κατεύθυνση της κίνησης
//θετικοί αριθμοί συμβολίζουν κίνηση δεξιόστροφη,
//αρνητικοί αριθμοί συμβολίζουν αριστερόστροφη κίνηση 

const byte encoder_pinA = 2;    //A pin -> the interrupt pin 2
const byte encoder_pinB = 10;    //B pin -> the digital pin 10

int pulses;                   //the number of the pulses
boolean Direction;              //the rotation direction


void setup()
{
  Serial.begin(57600);          //Initialize the serial port
  EncoderInit();                //Initialize the module
}

void loop()
{
  Serial.print("Direction:");
  if(Direction){
    Serial.print("Forword   ");
  }else{
    Serial.print("Backword  ");
  }
  Serial.print("Pulses:");
  Serial.println(pulses);
  pulses = 0;
  delay(100);
}

void EncoderInit()
{
  Direction = true;         //default -> Forward
  pinMode(encoder_pinB,INPUT);
  attachInterrupt(digitalPinToInterrupt(encoder_pinA), wheelSpeed, RISING );
}

void wheelSpeed()
{
  int val = digitalRead(encoder_pinB);
  if(val == LOW ){
      Direction = false; //Reverse
      pulses--;
    }else{
      Direction = true;  //Forward
      pulses++;
    }
  }

Στην παρακολούθηση της σειριακής θύρας παρατηρούμε τα παρακάτω αποτελέσματα.

Από εδώ μπορείτε να κατεβάσετε το πρόγραμμα για την κατασκευή

Direction:Forword   Pulses:0
Direction:Forword   Pulses:0
Direction:Forword   Pulses:0
Direction:Forword   Pulses:3
Direction:Forword   Pulses:17
Direction:Forword   Pulses:38
Direction:Forword   Pulses:63
Direction:Forword   Pulses:85
Direction:Forword   Pulses:102
Direction:Forword   Pulses:112
Direction:Forword   Pulses:117
Direction:Forword   Pulses:112
Direction:Forword   Pulses:98
Direction:Forword   Pulses:86
Direction:Forword   Pulses:74
Direction:Forword   Pulses:64
Direction:Forword   Pulses:53
Direction:Forword   Pulses:42
Direction:Forword   Pulses:33
Direction:Forword   Pulses:25
Direction:Forword   Pulses:17
Direction:Forword   Pulses:8
Direction:Forword   Pulses:0
Direction:Backword  Pulses:-3
Direction:Backword  Pulses:-17
Direction:Backword  Pulses:-39
Direction:Backword  Pulses:-54
Direction:Backword  Pulses:-67
Direction:Backword  Pulses:-79
Direction:Backword  Pulses:-88
Direction:Backword  Pulses:-92
Direction:Backword  Pulses:-97
Direction:Backword  Pulses:-89
Direction:Backword  Pulses:-77
Direction:Backword  Pulses:-66
Direction:Backword  Pulses:-56
Direction:Backword  Pulses:-45
Direction:Backword  Pulses:-35
Direction:Backword  Pulses:-27
Direction:Backword  Pulses:-19
Direction:Backword  Pulses:-12
Direction:Backword  Pulses:-6
Direction:Backword  Pulses:0
Direction:Backword  Pulses:0
Direction:Backword  Pulses:0

Με την εκκίνηση του το πρόγραμμα συσχετίζει τη συνάρτηση wheelSpeed() με το interrupt που θα συμβαίνει στο pin 2.
Aυτό το interrupt θα συμβαίνει όποτε ο παλμός στο pin 2 γίνεται ανερχόμενος (από 0 στο 5V) οπότε θα εκτελείται η συνάρτηση wheelSpeed(). Στο pin 2 είναι συνδεμένη η γραμμή σήματος Α του κωδικοποιητή.
Το πρώτο πράγμα που κάνει η συνάρτηση wheelSpeed() είναι να διαβάσει την τιμή που έχει το pin 10 δηλαδή η γραμμή σήματος Β του κωδικοποιητή. Αν η τιμή της είναι 0 (LOW) σημαίνει ότι το σήμα Α προηγείται του Β, η κίνηση δηλαδή είναι προς τα εμπρός. Ταυτόχρονα αυξάνει κατά μία μονάδα την τιμή των παλμών.
Στην άλλη περίπτωση που το Β προηγείται του Α η μεταβλητή Direction γίνεται false και μειώνεται κατά μια μονάδα η τιμή των παλμών. Για το λόγο αυτό έχουμε αρνητικές τιμές για τους παλμούς όταν η κίνηση είναι ανάστροφη.
Ο βρόχος που εκτελεί το πρόγραμμα (δηλαδή η συνάρτηση loop()) κάθε 100 msec στέλνει στη σειριακή θύρα τις τιμές της κατεύθυνσης και των παλμών και μηδενίζει τους παλμούς.
Έτσι καθώς γυρίζουμε τον κινητήρα με το χέρι παράγονται οι τιμές που βλέπουμε στον παρακάτω πίνακα. Αυτές είναι στιγμιότυπα για την κατάσταση του κινητήρα ανά 100 msec.