Βηματικός κινητήρας
Ένας βηματικός κινητήρας είναι ένας τύπος κινητήρα συνεχούς ρεύματος που περιστρέφεται σε βήματα. Όταν εφαρμόζεται ηλεκτρικό ρεύμα, ο κινητήρας περιστρέφεται σταδιακά και η ταχύτητα περιστροφής εξαρτάται από την “ταχύτητα” με την οποία εφαρμόζετε το ηλεκτρικό ρεύμα στα πηνία του. Η φορά περιστροφής εξαρτάται από τη διαδοχή ενεργοποίησης των πηνίων του κινητήρα. Η γωνία ενός βήματος εξαρτάται από το πόσα τυλίγματα έχει ο κινητήρας.
Τύποι βηματικού κινητήρα
Σε γενικές γραμμές, υπάρχουν δύο τύποι βηματικού κινητήρα, ο μονοπολικός και ο διπολικός.
Οι διπολικοί κινητήρες έχουν 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 βήματα ανά στροφή.
Η ονομαστική τάση είναι άσχετη για πρακτικούς λόγους. Το σημαντικό στοιχείο είναι το ονομαστικό ρεύμα.
Το ονομαστικό ρεύμα είναι κανονικά το ρεύμα ανά πηνίο, και όταν αναφέρονται στα ρεύματα βηματικού κινητήρα για τις πλακέτες οδήγησης, αυτό συνήθως είναι μια τιμή ανά πηνίο.
Η ροπή συγκράτησης είναι η ροπή που είναι διαθέσιμη για να αντισταθεί στην περιστροφή ενώ ο κινητήρας είναι ακίνητος. Η διαθέσιμη ροπή θα μειωθεί όσο αυξάνεται η ταχύτητα.
Ορισμένοι κατασκευαστές παρέχουν γραφήματα που δείχνουν πώς η ροπή μεταβάλλεται ανάλογα με την ταχύτητα.
Τάση λειτουργίας
Οι βηματικοί κινητήρες είναι πολύ διαφορετικοί από τους κανονικούς κινητήρες συνεχούς ρεύματος.
Σε έναν κινητήρα συνεχούς ρεύματος ελέγχετε το ρεύμα για να ελέγχετε την ταχύτητα του κινητήρα. Ο συνηθισμένος τρόπος ελέγχου του ρεύματος είναι να μεταβάλλετε την τάση - ίσως χρησιμοποιώντας τη συνάρτηση Arduino analogWrite() για να ελέγξετε μια τροφοδοσία ρεύματος με διαμόρφωση πλάτους παλμού στον κινητήρα.
Οι βηματικοί κινητήρες σχεδόν τραβούν το πλήρες ρεύμα τους όλη την ώρα, ακόμα και όταν είναι ακίνητοι - έτσι αντιστέκονται να μετακινηθούν από την παρούσα θέση τους. Αυτό σημαίνει ότι είναι πολύ αναποτελεσματικοί.
Για πρακτικούς λόγους, η ονομαστική τάση ενός βηματικού κινητήρα είναι άσχετη. Είναι η τάση που θα οδηγεί το ονομαστικό ρεύμα μέσω του πηνίου όταν ο κινητήρας είναι ακίνητος με βάση το νόμο Ωμ π.χ. 2,7v = 1A * 2,7 Ohms. Ωστόσο, μόλις ο κινητήρας αρχίσει να κινείται, ο συνδυασμός της αυτεπαγωγής των πηνίων και του back-emf που δημιουργείται από την κίνηση θα εμποδίσει την ονομαστική τάση να παράγει το ονομαστικό ρεύμα.
Για το λόγο αυτό οι βηματικοί κινητήρες συνήθως κινούνται με πολύ υψηλότερη τάση. Αυτό, με τη σειρά του, σημαίνει ότι χρειάζεται μια εξειδικευμένη πλακέτα οδήγησης βηματικού κινητήρα που μπορεί να περιορίσει το ρεύμα σε ό,τι μπορεί να πάρει ο κινητήρας. Εάν το ρεύμα δεν είναι περιορισμένο, η υψηλή τάση θα καταστρέψει γρήγορα τον κινητήρα.
Σχετικά άρθρα για την οδήγηση διαφόρων τύπων από βηματικούς κινητήρες
https://www.makerguides.com/a4988-stepper-motor-driver-arduino-tutorial/
Παράδειγμα Λειτουργίας του βηματικού κινητήρα 28BYJ-48 5v
Εδώ έχω επιλέξει να δώσω ένα παράδειγμα λειτουργίας βηματικού κινητήρα χρησιμοποιώντας τον 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. Δηλαδή ο μικρο-κοντρόλερ ΔΕΝ θα περιμένει να τελειώσει ο αριθμός των βημάτων που θα κάνει ο κινητήρας για να πάει στην επόμενη εντολή του προγράμματος.