Σε αυτό το άρθρο, θα μάθουμε πώς να οδηγούμε έναν βηματικό κινητήρα (πχ 28BYJ-48) με το Raspberry Pi Pico χρησιμοποιώντας το απλό ULN2003. Η MicroPython θα χρησιμοποιηθεί σε αυτό το άρθρο για τον έλεγχο ενός βηματικού κινητήρα. Θα δούμε τη διασύνδεση με το IC ULN2003 σε μία πλακέτα προτύπων (breadboard).
Απαιτούμενα εξαρτήματα
- Raspberry Pi Pico ή Pico W.
- Βηματικός κινητήρας 5V (28BYJ-48).
- Ένα ULN2003.
- Breadboard και καλώδια Dupont.

ULN2003 Ακίδες & Χαρακτηρηστικά
Το ULN2003 είναι ένα ολοκληρωμένο κύκλωμα που αποτελείται από μια σειρά επτά τρανζίστορ Darlington. Παρακάτω είναι το pinout του ULN2003.

Κάθε ακροδέκτης εξόδου του ULN2003 είναι ικανός να χειρίζεται ρεύματα αιχμής έως 600 mA και τάση έως 50 V. Όταν στέλνουμε ένα σήμα HIGH σε μια ακίδα στη μία πλευρά, η αντίστοιχη ακίδα στην πλευρά εξόδου γίνεται LOW. Ένα μικρό ρεύμα στην είσοδο μπορεί να αλλάξει ένα υψηλό ρεύμα στην έξοδο. Αυτή η ιδιότητα μπορεί να χρησιμοποιηθεί για τον έλεγχο ενός βηματικού κινητήρα. Οι βηματικοί κινητήρες γενικά απαιτούν υψηλότερο ρεύμα και τάση από αυτό που παρέχεται από τους ακροδέκτες του μικροελεγκτή.
Για περισσότερες λεπτομέρειες σχετικά με το ULN2003, μπορείτε να ανατρέξετε στο φύλλο δεδομένων του .
Υπάρχουν και έτοιμες πλακέτες με ULN2003 Stepper Driver
Το ULN2003 διατίθεται συνήθως ως πλακέτα μονάδων για εύκολη διασύνδεση. Το pinout μιας τέτοιας μονάδας ULN2003 παρέχεται παρακάτω.

Επισκόπηση του βηματικού κινητήρα 28BYJ-48
Ο 28BYJ-48 είναι ένας μονοπολικός βηματικός κινητήρας που απαιτεί 64 μισά βήματα για να ολοκληρωθεί μια πλήρης περιστροφή 360 μοιρών, με κάθε βήμα να έχει γωνία βήματος 5,625 μοίρες. Για την παραγωγή της περιστροφικής κίνησης, τα τέσσερα πηνία του κινητήρα ενεργοποιούνται με μια συγκεκριμένη σειρά, η οποία καθορίζεται από το κύκλωμα του οδηγού κινητήρα. Ο κινητήρας απαιτεί τάση 5V DC για να λειτουργήσει. Επιπλέον, ο κινητήρας έχει συνδεδεμένο κιβώτιο ταχυτήτων, το οποίο μειώνει την ταχύτητά του και αυξάνει τη ροπή του. Το κιβώτιο ταχυτήτων έχει αναλογία μετάδοσης 1:64, που δείχνει ότι για κάθε 64 περιστροφές του άξονα του κινητήρα, ο άξονας εξόδου του κιβωτίου ταχυτήτων περιστρέφεται μία φορά. Αυτό το κιβώτιο ταχυτήτων το καθιστά έναν ισχυρό βηματικό κινητήρα σε μικρή μορφή.
Μια έκδοση 12V του κινητήρα είναι επίσης διαθέσιμη, αλλά αυτός ο οδηγός θα δείξει μόνο την παραλλαγή 5V. Για περισσότερες λεπτομέρειες σχετικά με τον βηματικό κινητήρα 28BYJ-48, μπορείτε να δείτε το φύλλο δεδομένων του .
Οι ακίδες (ή τα καλώδια) του βηματικού κινητήρα
Η παρακάτω εικόνα περιγράφει τις ακίδες του βηματικού κινητήρα 28BYJ-48.

Στη δεξιά πλευρά της παραπάνω εικόνας, μπορείτε να δείτε ότι εσωτερικά αποτελείται από 4 πηνία που μπορούν να τροφοδοτηθούν με τη σειρά για να περιστρέψουν τον κινητήρα. Η μία πλευρά κάθε πηνίου συνδέεται με ένα κοινό σημείο.
Σχήμα με διάγραμμα – Raspberry Pi Pico W με βηματικό κινητήρα και ULN2003
Εάν είστε κάτοχος της μονάδας προγράμματος οδήγησης ULN2003, τότε η σχηματική της ενότητα με το Pico δίνεται παρακάτω.

Για ένα αυτόνομο IC ULN2003, συνδέστε το Raspberry Pi Pico και το 28BYJ-48 όπως φαίνεται στο παρακάτω σχήμα.

Λεπτομέρειες σύνδεσης:
Sl.No | ULN2003 Pin | Raspberry Pi Pico Pin | Χρώμα καλωδίου Stepper Motor |
1 | ΕΙΣΟΔΟΣ 1 | GPIO 12 | – |
2 | ΕΙΣΟΔΟΣ 2 | GPIO13 | – |
3 | ΕΙΣΟΔΟΣ 3 | GPIO 14 | – |
4 | ΕΙΣΟΔΟΣ 4 | GPIO 15 | – |
5 | ΕΞΟΔΟΣ 1 | – | ΜΠΛΕ |
6 | ΕΞΟΔΟΣ 2 | – | ΡΟΖ |
7 | ΕΞΟΔΟΣ 3 | – | ΚΙΤΡΙΝΟΣ |
8 | ΕΞΟΔΟΣ 4 | – | ΠΟΡΤΟΚΑΛΙ |
9 | GND | GND | – |
10 | ΚΟΙΝΟΣ | – | ΤΟ ΚΟΚΚΙΝΟ |
Ο ακροδέκτης COM του ULN2003 θα πρέπει να συνδεθεί σε ένα εξωτερικό τροφοδοτικό 5V, όπως ένα power bank. Οι ακίδες γείωσης του ULN2003, του Raspberry Pi Pico και το εξωτερικό τροφοδοτικό πρέπει να είναι συνδεδεμένα μεταξύ τους για να λειτουργήσει το κύκλωμα. Μπορείτε επίσης να ανατρέξετε στον οδηγό pinout του Raspberry Pi Pico .
Εργασία του κυκλώματος
Όταν μια ακίδα (GPIO) του Pico έχει οριστεί σε HIGH, μια ακίδα εισόδου ULN2003 λαμβάνει το σήμα HIGH. Αυτό αλλάζει την αντίστοιχη ακίδα εξόδου του ULN2003 σε LOW, δηλαδή οι ακίδες εξόδου του ULN2003 λειτουργούν ως νεροχύτης ρεύματος. Με την εναλλαγή των GPIO, τα πηνία στον βηματικό κινητήρα μπορούν να ενεργοποιηθούν. Για παράδειγμα, εάν το GPIO12 ενεργοποιηθεί ΥΨΗΛΟ, η ΕΞΟΔΟΣ 1 θα λειτουργήσει ως πηγή ρεύματος και το ρεύμα θα ρέει μέσω του πηνίου που είναι συνδεδεμένο στο ΜΠΛΕ σύρμα. Με αυτόν τον τρόπο, μπορούμε να αλλάξουμε τα GPIO με μια σειρά για να γυρίσουμε τον κινητήρα.
Κώδικας MicroPython για χειρισμό βηματικού κινητήρα στο Raspberry Pi Pico
Αφού πραγματοποιηθούν όλες οι συνδέσεις όπως φαίνεται στο παραπάνω σχήμα, συνδέστε το Pico στον υπολογιστή σας χρησιμοποιώντας ένα καλώδιο USB. Ανοίξτε το Thonny IDE και επικολλήστε τον ακόλουθο κώδικα σε ένα νέο έργο.
#Περισσότερες λεπτομέρειες και σχηματικά στο electrocredible.com
import utime
from machine import Pin
# Καθορίστε τις ακίδες για τον βηματικό κινητήρα
stepper_pins = [Pin(12, Pin.OUT), Pin(13, Pin.OUT), Pin(14, Pin.OUT), Pin(15, Pin.OUT)]
#Καθορίστε τη σειρά των βημάτων που πρέπει να κάνει ο κινητήρας
step_sequence = [
[1, 0, 0, 1],
[1, 1, 0, 0],
[0, 1, 1, 0],
[0, 0, 1, 1],
]
def step(direction, steps, delay):
# Χρησιμοποιήστε την καθολική μεταβλητή step_index, ώστε να μπορεί να τροποποιηθεί από αυτήν τη συνάρτηση
global step_index
# Κάντε βρόχο μέσω του καθορισμένου αριθμού βημάτων προς την καθορισμένη κατεύθυνση
for i in range(steps):
# Προσθέστε την καθορισμένη κατεύθυνση στο τρέχον ευρετήριο βημάτων για να λάβετε το νέο ευρετήριο βημάτων
step_index = (step_index + direction) % len(step_sequence)
# Περάστε βρόχο μέσα από κάθε ακίδα του κινητήρα
for pin_index in range(len(stepper_pins)):
# Λάβετε την τιμή για αυτήν την καρφίτσα από την ακολουθία βημάτων χρησιμοποιώντας το τρέχον ευρετήριο βημάτων
pin_value = step_sequence[step_index][pin_index]
# Ρυθμίστε την ακίδα σε αυτήν την τιμή
stepper_pins[pin_index].value(pin_value)
# Καθυστέρηση για το καθορισμένο χρονικό διάστημα πριν κάνετε το επόμενο βήμα
utime.sleep(delay)
# Ορίστε τον δείκτη αρχικού βήματος σε 0
step_index = 0
# Κάντε τον καθορισμένο αριθμό βημάτων αριστερόστροφα με καθυστέρηση 0,01 δευτερολέπτων μεταξύ των βημάτων
step(1, 500, 0.01)
# Κάντε τον καθορισμένο αριθμό βημάτων προς τη φορά των δεικτών του ρολογιού με καθυστέρηση 0,01 δευτερολέπτων μεταξύ των βημάτων
step(-1, 500, 0.01)
Εκτελέστε τον κωδικό κάνοντας κλικ στο εικονίδιο Εκτέλεση ή πατώντας το πλήκτρο F5 .

Αποθηκεύστε το σενάριο στο Raspberry Pi Pico.

Αποθηκεύστε το σενάριο ως main.py ή με οποιοδήποτε άλλο όνομα με επέκταση ονόματος αρχείου “.py”.

Αποτέλεσμα
Όταν εκτελείτε τον κωδικό, ο βηματικός κινητήρας πρέπει να λειτουργεί για μερικά δευτερόλεπτα αριστερόστροφα και στη συνέχεια για λίγα δευτερόλεπτα προς τη φορά των δεικτών του ρολογιού. Μπορείτε να αλλάξετε την κατεύθυνση, την ταχύτητα και τη διάρκεια της περιστροφής κάνοντας αλλαγές στον κώδικα.
Επεξήγηση κώδικα MicroPython Stepper Control
Εισάγουμε πρώτα τα απαραίτητα modules. Η λειτουργική μονάδα utime
πρέπει να εισάγει καθυστερήσεις στον κώδικά μας και η λειτουργική μονάδα Pin
μας βοηθά να ορίσουμε τα GPIO του Pico ως έξοδους.
import utime
from machine import Pin
Τα GPIO 12, 13, 14 και 15 έχουν οριστεί ως ακίδες ελέγχου για τον βηματικό κινητήρα.
stepper_pins = [Pin(12, Pin.OUT), Pin(13, Pin.OUT), Pin(14, Pin.OUT), Pin(15, Pin.OUT)]
Ορίζουμε έναν δισδιάστατο πίνακα που ονομάζεται step_sequence
ο οποίος κρατά την ακολουθία στην οποία πρέπει να εναλλάσσονται τα GPIO. Στον κώδικά μας, τα πηνία 1 & 4 θα ενεργοποιηθούν πρώτα, μετά τα πηνία 1 & 2 και ούτω καθεξής. Η σειρά επαναλαμβάνεται μόλις ο βηματικός κινητήρας ολοκληρώσει μια πλήρη περιστροφή.
step_sequence = [
[1, 0, 0, 1],
[1, 1, 0, 0],
[0, 1, 1, 0],
[0, 0, 1, 1],
]
Σημειώστε ότι χρησιμοποιούμε μια ακολουθία πλήρους βήματος για να γυρίσουμε το βήμα. Σε μια ακολουθία πλήρους βήματος, δύο πηνία ενός stepper ενεργοποιούνται ταυτόχρονα. Εναλλακτικά, μπορείτε επίσης να χρησιμοποιήσετε μια ακολουθία μισών βημάτων για να περιστρέψετε το stepper. Στην εναλλαγή μισού βήματος, η γωνία βήματος μειώνεται στο μισό από εκείνη της ακολουθίας πλήρους βήματος και ο αριθμός των βημάτων διπλασιάζεται. Αυτό επιτρέπει τον καλό έλεγχο ενός βηματικού κινητήρα. Τροποποιήστε τη διάταξη όπως φαίνεται παρακάτω για να εφαρμόσετε την εναλλαγή ακολουθίας μισού βήματος του βηματικού.
step_sequence = [
{1, 0, 0, 0},
{1, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 1, 1},
{0, 0, 0, 1},
{1, 0, 0, 1}
]
Η step()
συνάρτηση παίρνει τρία ορίσματα – την κατεύθυνση που θα γυρίσει ο κινητήρας (δεξιόστροφα/αριστερόστροφα), τα βήματα που πρέπει να στρίψετε και την καθυστέρηση μεταξύ κάθε βήματος.
def step(direction, steps, delay):
Ο παρακάτω κωδικός θα ενεργοποιήσει τον βηματικό κινητήρα. Η κλήση λειτουργίας step(1, 500, 0.01)
θα γυρίσει τον κινητήρα προς τη φορά των δεικτών του ρολογιού για 500 βήματα με καθυστέρηση 0,01 δευτερολέπτων μεταξύ των βημάτων.
step(1, 500, 0.01)
step(-1, 500, 0.01)
Εφαρμογές
Ακολουθούν μερικές ιδέες για έργα που μπορείτε να κάνετε χρησιμοποιώντας το Raspberry Pi Pico και τον βηματικό κινητήρα:
- Μηχανή CNC.
- τρισδιάστατος εκτυπωτής.
- Ρομποτικός βραχίονας.
- Ρυθμιστικό κάμερας.
- Τροφοδότης κατοικίδιων ζώων