Python exemplarisch |
Alle Programme können von hier heruntergeladen werden. |
Wie funktionieren Schrittmotoren |
Der Rotor eines Schrittmotors ist magnetisch und benimmt sich wie eine Kompassnadel, bei der eine Seite der Nordpol und die andere Seite der Südpol ist. Der Nordpol dreht sich in der Richtung eines Magnetfeldes H wie die Kompassnadel nach Norden im Magnetfeld der Erde.
Die beiden Spulen A und B sind mit ihren Mittelanschlüssen mit VCC verbunden. Da das magnetische Feldes einer Spule in Rechtsschraubenrichtung zum Strom in den Wicklungen liegt, kann das Magnetfeld durch Ziehen der einen oder der anderen Seite jeder Spule an Masse (GND) um 180 Grad gedreht werden (Strom fliesst von VCC zu GND, siehe rote Pfeile). Um den Rotor zu drehen, wird das resultierende Feld im Spalt der beiden Spulen in 90°-Schritten gedreht, indem die richtige Reihenfolge der Spulenströme ausgewählt wird. Aus den untenstehenden Diagrammen kann man entnehmen, wie man eine Drehung im Gegenuhrzeigersinn realisieren kann. Die 4 Eingänge A1, A2, B2, und B2 müssen wie folgt geschaltet werden:
Die blauen Pfeile zeigen das Magnetfeld jeder Spule (es folgt den Spulenarmen). Das resultierende Magnetfeld im Spalt ist die Überlagerung der beiden Felder (brauner Pfeil). |
Experiment 1: Schrittmotor über den ULN2003A-Treiber ansteuern |
Ziel: Schaltschema: Zur Realisation der Linksdrehung gemäss oben stehender Tabelle müssen die Eingänge IN1,...IN4 also hintereinander folgende Pegel aufweisen:
0 = LOW, 1 = HIGH Die Funktion setStepper(in1, in2, in3, in4) legt die logischen Werte an den Treiber-Eingängen an. Eine Drehung des Rotors im Gegenuhrzeigersinn ergibt sich daher mit folgender Sequenz: def forwardStep(): In der Regel ist die Rotorachse mit der Motorwelle über ein Getriebe verbunden und die Anzahl der Aufrufe von forwardStep(), um die Welle um einen gegebenen Winkel zu drehen, ist vom Übersetzungsverhältnis des Getriebes abhängig. In diesem Beispiel werden 512 Aufrufe für eine Drehung der Welle um 360 Grad benötigt. Programm:[►] # Stepper1.py import RPi.GPIO as GPIO import time P_A1 = 8 # adapt to your wiring P_A2 = 10 # ditto P_B1 = 11 # ditto P_B2 = 13 # ditto delay = 0.005 # time to settle def setup(): GPIO.setmode(GPIO.BOARD) GPIO.setup(P_A1, GPIO.OUT) GPIO.setup(P_A2, GPIO.OUT) GPIO.setup(P_B1, GPIO.OUT) GPIO.setup(P_B2, GPIO.OUT) def forwardStep(): setStepper(1, 0, 1, 0) setStepper(0, 1, 1, 0) setStepper(0, 1, 0, 1) setStepper(1, 0, 0, 1) def backwardStep(): setStepper(1, 0, 0, 1) setStepper(0, 1, 0, 1) setStepper(0, 1, 1, 0) setStepper(1, 0, 1, 0) def setStepper(in1, in2, in3, in4): GPIO.output(P_A1, in1) GPIO.output(P_A2, in2) GPIO.output(P_B1, in3) GPIO.output(P_B2, in4) time.sleep(delay) setup() # 512 steps for 360 degrees, adapt to your motor while True: print "forward" for i in range(256): forwardStep() print "backward" for i in range(256): backwardStep() Bemerkungen: |