1.3.3 Schrittmotor¶
Einführung¶
Schrittmotoren können aufgrund ihrer einzigartigen Konstruktion genau gesteuert werden, ohne Rückkopplungsmechanismen zu benötigen. Die Welle eines Schrittmotors, die mit einer Reihe von Magneten versehen ist, wird von einer Reihe von elektromagnetischen Spulen gesteuert, die in einer bestimmten Sequenz positiv und negativ aufgeladen werden und sie präzise vorwärts oder rückwärts in kleinen „Schritten“ bewegen.
Erforderliche Komponenten¶
Für dieses Projekt benötigen wir folgende Komponenten.
Schaltplan¶
Versuchsdurchführung¶
Schritt 1: Bauen Sie die Schaltung.
Schritt 2: Öffnen Sie die Code-Datei.
cd ~/davinci-kit-for-raspberry-pi/python-pi5
Schritt 3: Ausführen.
sudo python3 1.3.3_StepperMotor_zero.py
Während der Ausführung des Codes wird der Schrittmotor im Uhrzeigersinn oder gegen den Uhrzeigersinn gedreht, abhängig von Ihrer Eingabe ‚a‘ oder ‚c‘.
Code
Bemerkung
Sie können den folgenden Code Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen. Bevor Sie das tun, müssen Sie jedoch zum Quellcodepfad wie davinci-kit-for-raspberry-pi/python-pi5
gehen. Nach der Änderung des Codes können Sie ihn direkt ausführen, um die Wirkung zu sehen.
#!/usr/bin/env python3
from gpiozero import OutputDevice
from time import sleep
# Initialisieren Sie die Motorpins mit GPIO-Pins 18, 23, 24, 25
motorPin = [OutputDevice(pin) for pin in (18, 23, 24, 25)]
# Setzen Sie die Motor-Drehgeschwindigkeitsparameter
UmdrehungenProMinute = 15
SchritteProUmdrehung = 2048
# Berechnen Sie die Wartezeit zwischen jedem Schritt für einen sanften Motorbetrieb
Schrittgeschwindigkeit = (60 / UmdrehungenProMinute) / SchritteProUmdrehung
def Schrittmotor(direction):
"""
Steuert die Rotation des Motors basierend auf der angegebenen Richtung.
:param direction: 'c' für im Uhrzeigersinn, 'a' für gegen den Uhrzeigersinn
"""
if direction == 'c':
# Führen Sie die Schrittsequenz für die Rotation im Uhrzeigersinn aus
for j in range(4):
for i in range(4):
if 0x99 << j & (0x08 >> i):
motorPin[i].on()
else:
motorPin[i].off()
sleep(Schrittgeschwindigkeit)
elif direction == 'a':
# Führen Sie die Schrittsequenz für die Rotation gegen den Uhrzeigersinn aus
for j in range(4):
for i in range(4):
if 0x99 >> j & (0x08 >> i):
motorPin[i].on()
else:
motorPin[i].off()
sleep(Schrittgeschwindigkeit)
def Schleife():
"""
Fordert den Benutzer kontinuierlich auf, die Motor-Richtung auszuwählen
und steuert den Motor basierend auf dieser Eingabe.
"""
while True:
direction = input('Wählen Sie die Motorrichtung a=gegen den Uhrzeigersinn, c=im Uhrzeigersinn: ')
if direction == 'c':
print('Motor läuft im Uhrzeigersinn\n')
break
elif direction == 'a':
print('Motor läuft gegen den Uhrzeigersinn\n')
break
else:
print('Eingabefehler, bitte erneut versuchen!')
# Halten Sie den Motor in der ausgewählten Richtung in Bewegung
while True:
Schrittmotor(direction)
def beenden():
"""
Schaltet alle Motorpins sicher aus, wird für das ordnungsgemäße Herunterfahren verwendet.
"""
for pin in motorPin:
pin.off()
# Hauptprogrammausführung
try:
Schleife()
except KeyboardInterrupt:
beenden() # Behandeln Sie die Tastaturunterbrechung, um den Motor sicher herunterzufahren
Code-Erklärung
Dieser Abschnitt importiert die notwendigen Bibliotheken.
gpiozero
für die Steuerung der GPIO-Pins undtime
für die in der Zeitsteuerung verwendete Funktionsleep
.#!/usr/bin/env python3 from gpiozero import OutputDevice from time import sleep
Initialisiert die GPIO-Pins 18, 23, 24 und 25 als Ausgabegeräte zur Steuerung des Schrittmotors.
# Initialisieren Sie die Motorpins mit GPIO-Pins 18, 23, 24, 25 motorPin = [OutputDevice(pin) for pin in (18, 23, 24, 25)]
Legt die Drehgeschwindigkeit des Motors fest und berechnet das Zeitintervall zwischen jedem Schritt für einen sanften Betrieb.
# Setzen Sie die Motor-Drehgeschwindigkeitsparameter UmdrehungenProMinute = 15 SchritteProUmdrehung = 2048 # Berechnen Sie die Wartezeit zwischen jedem Schritt für einen sanften Motorbetrieb Schrittgeschwindigkeit = (60 / UmdrehungenProMinute) / SchritteProUmdrehung
Die Funktion
Schrittmotor
steuert die Rotation des Motors. Sie verwendet Bit-Manipulation und eine Schrittsequenz, um die Motorpins in der richtigen Reihenfolge für die Rotation im Uhrzeigersinn oder gegen den Uhrzeigersinn zu aktivieren.def Schrittmotor(direction): """ Steuert die Rotation des Motors basierend auf der angegebenen Richtung. :param direction: 'c' für im Uhrzeigersinn, 'a' für gegen den Uhrzeigersinn """ if direction == 'c': # Führen Sie die Schrittsequenz für die Rotation im Uhrzeigersinn aus for j in range(4): for i in range(4): if 0x99 << j & (0x08 >> i): motorPin[i].on() else: motorPin[i].off() sleep(Schrittgeschwindigkeit) elif direction == 'a': # Führen Sie die Schrittsequenz für die Rotation gegen den Uhrzeigersinn aus for j in range(4): for i in range(4): if 0x99 >> j & (0x08 >> i): motorPin[i].on() else: motorPin[i].off() sleep(Schrittgeschwindigkeit)
Diese Funktion fordert den Benutzer kontinuierlich auf, die Richtung der Motorrotation auszuwählen, und steuert den Motor basierend auf der Eingabe.
def Schleife(): """ Fordert den Benutzer kontinuierlich auf, die Motorrichtung auszuwählen und steuert den Motor basierend auf dieser Eingabe. """ while True: direction = input('Wählen Sie die Motorrichtung a=gegen den Uhrzeigersinn, c=im Uhrzeigersinn: ') if direction == 'c': print('Motor läuft im Uhrzeigersinn\n') break elif direction == 'a': print('Motor läuft gegen den Uhrzeigersinn\n') break else: print('Eingabefehler, bitte erneut versuchen!') # Halten Sie den Motor in der ausgewählten Richtung in Bewegung while True: Schrittmotor(direction)
Die
beenden
Funktion schaltet alle Motorpins aus. Sie wird für einen sauberen Shutdown verwendet, um sicherzustellen, dass der Motor sicher stoppt, wenn das Programm endet.def beenden(): """ Schaltet alle Motorpins sicher aus, wird für das ordnungsgemäße Herunterfahren verwendet. """ for pin in motorPin: pin.off()
Das Hauptprogramm ruft
Schleife
auf und behandelt Tastaturunterbrechungen (wie Ctrl+C), um den Motor sicher mitbeenden
herunterzufahren.# Hauptprogrammausführung try: Schleife() except KeyboardInterrupt: beenden() # Behandeln Sie die Tastaturunterbrechung, um den Motor sicher herunterzufahren