Βηματικός Κινητήρας
Ένας βηματικός κινητήρας είναι ένας τύπος κινητήρα συνεχούς ρεύματος που περιστρέφεται σε βήματα. Όταν εφαρμόζεται ηλεκτρικό ρεύμα, ο κινητήρας περιστρέφεται σταδιακά και η ταχύτητα περιστροφής εξαρτάται από την “ταχύτητα” με την οποία εφαρμόζετε το ηλεκτρικό ρεύμα στα πηνία του. Η φορά περιστροφής εξαρτάται από τη διαδοχή ενεργοποίησης των πηνίων του κινητήρα. Η γωνία ενός βήματος εξαρτάται από το πόσα τυλίγματα έχει ο κινητήρας.
Τύποι βηματικού κινητήρα
Σε γενικές γραμμές, υπάρχουν δύο τύποι βηματικού κινητήρα, ο μονοπολικός και ο διπολικός.
Οι διπολικοί κινητήρες έχουν 4 καλώδια που συνδέονται με τα δύο ξεχωριστά πηνία μέσα στον κινητήρα – ένα ζεύγος για κάθε πηνίο.
Υπάρχουν επίσης δύο τύποι μονοπολικού κινητήρα – αυτοί με 5 καλώδια και αυτοί με 6 καλώδια.
Οι κινητήρες 6 καλωδίων μπορούν επίσης να αναφέρονται ως υβριδικοί κινητήρες. Είναι παρόμοιοι με τους διπολικούς κινητήρες 4 συρμάτων και έχουν απλώς ένα επιπλέον καλώδιο συνδεδεμένο στο κέντρο καθενός από τα πηνία. Εάν θέλετε να χρησιμοποιήσετε έναν κινητήρα 6 συρμάτων σε διπολική λειτουργία, απλώς αγνοήστε τα καλώδια που συνδέονται με τα κέντρα των πηνίων.
Οι κινητήρες 5 καλωδίων δεν μπορούν να οδηγηθούν από οδηγό σχεδιασμένο για διπολικό κινητήρα. Ένα παράδειγμα κινητήρα 5 καλωδίων, που αναπτύσσουμε στη συνέχεια, είναι ο μικρός κινητήρας 28BYJ-48 που μπορεί να δει κανείς σε πολλά έργα Arduino και συνήθως χρησιμοποιεί ένα τσιπ ULN2003 ως πρόγραμμα οδήγησης.
Ο βηματικός κινητήρας αποτελείται από στάτορα (πηνία) και ρότορα (μόνιμοι μαγνήτες), βλέπε στο σχήμα BIPOLAR. Ο διπολικός (bipolar) βηματικός κινητήρας περιέχει ανεξάρτητα πηνία (χωρίς να είναι συνδεδεμένα με μεσαία λήψη μεταξύ τους), ενώ στον μονοπολικό (unipolar) βηματικό κινητήρα τα πηνία έχουν μεσαία λήψη. Συνήθως οι δύο μεσαίες λήψεις είναι συνδεδεμένες μεταξύ τους και συνδέονται στο θετικό πόλο της πηγής. Έτσι ο διπολικός κινητήρας έχει τέσσερα καλώδια ενώ ο μονοπολικός έχει πέντε.



Στον διπολικό κινητήρα για να αναστρέψουμε το μαγνητικό πεδίο του πηνίου πρέπει να αναστρέψουμε την πολικότητα της τάσης στα άκρα του.
Στο μονοπολικό κινητήρα εάν στην μεσαία λήψη του πηνίου εφαρμόζεται ο θετικός πόλος της τάσης, τότε για να αναστρέψουμε το μαγνητικό πεδίο του πηνίου αρκεί να επιλέξουμε το άλλο άκρο σύνδεσης του πηνίου για τη γείωση. Το κύκλωμα είναι πολύ πιο απλό, αλλά η ισχύς του κινητήρα είναι η μισή, μια που σε κάθε βήμα λειτουργεί το μισό πηνίο.
Προδιαγραφές κινητήρα
Τα φύλλα δεδομένων συνήθως αναφέρουν το ρεύμα του πηνίου, την αντίσταση του πηνίου, την ονομαστική τάση και τη ροπή συγκράτησης και τα βήματα ανά περιστροφή. Για παράδειγμα, για έναν τον κινητήρα οι τιμές αυτές είναι είναι ρεύμα 1 Amp, αντίσταση 2,7 Ohms, τάση 2,7 Volts, ροπή 1,4 Kg-cm και 200 βήματα ανά στροφή.
Η ονομαστική τάση είναι άσχετη για πρακτικούς λόγους. Το σημαντικό στοιχείο είναι το ονομαστικό ρεύμα. Το ονομαστικό ρεύμα είναι κανονικά το ρεύμα ανά πηνίο, και όταν αναφέρονται στα ρεύματα βηματικού κινητήρα για τις πλακέτες οδήγησης, αυτό συνήθως είναι μια τιμή ανά πηνίο.
Η ροπή συγκράτησης είναι η ροπή που είναι διαθέσιμη για να αντισταθεί στην περιστροφή ενώ ο κινητήρας είναι ακίνητος. Η διαθέσιμη ροπή θα μειωθεί όσο αυξάνεται η ταχύτητα.
Ορισμένοι κατασκευαστές παρέχουν γραφήματα που δείχνουν πώς η ροπή μεταβάλλεται ανάλογα με την ταχύτητα.
Τάση λειτουργίας
Εδώ έχω επιλέξει να δώσω ένα παράδειγμα λειτουργίας βηματικού κινητήρα χρησιμοποιώντας τον 28BYJ-48 5v που φαίνεται στο παρακάτω σχήμα.

Θα χρησιμοποιήσω ένα Arduino Uno για να προγραμματίσω την κίνηση του κινητήρα και έναν driver με το ULN2003 Darlington για να εξασφαλίσω το απαιτούμενο ρεύμα για την κίνηση του.
Το ULN2003 ομαδοποιεί 7 τρανζίστορ Darlington σε ένα ενιαίο ολοκληρωμένο κύκλωμα, το οποίο καθιστά δυνατή την παροχή ενός κινητήρα με πολύ υψηλότερο ρεύμα από αυτό που μπορεί να δώσει ένας μικροελεγκτής όπως το Arduino.
ΣΗΜΑΝΤΙΚΟ: Το ULN2003 λειτουργεί εξαιρετικά για μονοπολικούς βηματικούς κινητήρες (αυτούς με 5 ή 6 καλώδια), αλλά δεν είναι καθόλου σχεδιασμένο να οδηγεί με διπολικούς βηματικούς κινητήρες (αυτούς με μόνο 4 καλώδια).
Για έναν διπολικό κινητήρα, θα χρειαστεί να χρησιμοποιήσουμε ένα άλλο κύκλωμα, όπως για παράδειγμα μια Η-διπλή γέφυρα L298Ν που βασίζεται στο πολύ δημοφιλές L298 Dual H-Bridge Motor Driver Integrated Circuit.
Λίγα λόγια για τον κινητήρα 28BYJ-48 5v
Παραπάνω δείξαμε τον χρωματικό πίνακα των καλωδίων του κινητήρα. Όμως πρέπει να πούμε ότι ο κινητήρας αυτός έχει ενσωματωμένο ένα μειωτήρα στροφών, όπως φαίνεται και στο σχήμα.

Σύμφωνα με το φύλλο δεδομένων, όταν ο κινητήρας 28BYJ-48 λειτουργεί σε λειτουργία πλήρους βήματος, κάθε βήμα αντιστοιχεί σε περιστροφή 11,25°. Αυτό σημαίνει ότι υπάρχουν 32 βήματα ανά περιστροφή (360°/11,25° = 32).
Επιπλέον, ο κινητήρας διαθέτει ένα μειωτήρα στροφών 1/64. (Στην πραγματικότητα είναι 1/63.68395, αλλά για τις περισσότερες εφαρμογές το 1/64 είναι μια αρκετά καλή προσέγγιση)
Αυτό σημαίνει ότι στην πραγματικότητα έχουμε 32*63,68395 βήματα ανά περιστροφή = 2037,8864 ~ 2038 βήματα!
Οδηγός για τον κινητήρα 28BYJ-48 5v
Στην εικόνα που ακολουθεί βλέπουμε το σχηματικό διάγραμμα του ULN2003 driver για τον κινητήρα 28BYJ-48.

Ενώ σε αυτή την εικόνα βλέπουμε την πλακέτα που υλοποιεί τον driver για τον κινητήρα 28BYJ-48 .

Και τέλος στην εικόνα που ακολουθεί βλέπουμε τη συνδεσμολογία του Arduino UNO με τον driver και τη συνδεσμολογία του driver με τον κινητήρα.

Προγραμματισμός του βηματικού κινητήρα 28BYJ-48.
Στην εικόνα που ακολουθεί βλέπουμε τη σειρά με την οποία θα πρέπει να τροφοδοτηθούν τα πηνία του κινητήρα έτσι ώστε να κάνει μια περιστροφή κατά τη φορά που κινείται το ρολόι.
Αυτή την εναλλαγή στη συνδεσμολογία των πηνίων την εξασφαλίζει το πρόγραμμα που γράφουμε για τον Arduino και που το παραθέτω παρακάτω.

Έλεγχος βηματικού κινητήρα με Arduino με τη χρήση του L298N Driver
Προγραμματισμός του βηματικού κινητήρα 28BYJ-48 5v έτσι ώστε να κάνει μια πλήρης στροφή δεξιά και μία πλήρης στροφή αριστερά.
//ορίζω τα pin που θα χρησιμοποιήσω για τη σύνδεση του κινητήρα
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
int Steps = 0;
boolean Direction = true;
void setup() {
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
for(int i=0; i<4076; i++){
stepper(1);
delayMicroseconds(1200);
}
Direction = !Direction;
}
void stepper(int xw) {
for (int x = 0; x < xw; x++) {
switch (Steps) {
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
case 1:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
break;
case 2:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 3:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 4:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 5:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 6:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 7:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
default:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
}
SetDirection();
}
}
void SetDirection() {
if (Direction == 1) {
Steps++;
}
if (Direction == 0) {
Steps--;
}
if (Steps > 7) {
Steps = 0;
}
if (Steps < 0) {
Steps = 7;
}
}
Στο παράδειγμα αυτό σας δίνω έναν απλοϊκό κώδικα για να γίνει κατανοητή η λειτουργία του βηματισμού για τους κινητήρες αυτούς. Βέβαια το περιβάλλον Arduino IDE περιλαμβάνει βιβλιοθήκες που απλοποιούν πολύ τον προγραμματισμό των βηματικών κινητήρων και έχουν και αρκετά παραδείγματα.
Τέτοιες βιβλιοθήκες είναι η stepper library που τη δηλώνετε στο πρόγραμμα με το #include <Stepper.h> . Η stepper library χρησιμοποιείται για block προγραμματισμό. Δηλαδή ο μικρο-κοντρόλερ θα περιμένει να τελειώσει ο αριθμός των βημάτων που θα κάνει ο κινητήρας για να πάει στην επόμενη εντολή του προγράμματος.
Η βιβλιοθήκη AccelStepper library που τη δηλώνετε με το #include <AccelStepper.h> δίνει τη δυνατότητα για επιτάχυνση ή επιβράδυνση στην κίνηση του βηματικού κινητήρα. Επίσης είναι non-block programming library. Δηλαδή ο μικρο-κοντρόλερ ΔΕΝ θα περιμένει να τελειώσει ο αριθμός των βημάτων που θα κάνει ο κινητήρας για να πάει στην επόμενη εντολή του προγράμματος.