firstfacility
29.11.2014, 18:31
Hallo Forum,
ich habe ein Problem mit der Ansteuerung meines Schrittmotors. Zur Zeit gehe ich davon aus das es sich um ein Hardwareproblem handelt. Falls sich rausstellen sollte das es ein Softwareproblem ist bitte ich die Mod´s meine Frage zu verschieben.
Ich nutze einen NEMA 17 Schrittmotor:
Stepper Motor DC 5V Schrittmotor
Specs
Nema 17 (42x42)
200 step
1.8°Angle
200 gram
Torque 130 m/Nm
4 Wires
Pairs
Red & Red White
Green & Green White
Compatible
Ramps
A4988
Laut Datenblatt ist die Kabelbelegung:
1B ROT
1A ROT/WEIß
2A GRÜN
2B GRÜN/WEIß
Als Treiber nutze ich einen L298N Schrittmotorenendstufe Dual H Brücke die ich folgendermaßen angeschlossen habe ( Bild angefügt )
Als Code nutze ich folgendes python Script:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
enable_pin = 18 # nur bei ULN2003 Treiber IC wichtig
coil_A_1_pin = 23 #
coil_A_2_pin = 24 #
coil_B_1_pin = 17 #
coil_B_2_pin = 18 #
# anpassen, falls andere Sequenz
StepCount = 4
Seq = range(0, StepCount)
Seq[0] = [0,1,0,0]
Seq[1] = [0,1,0,1]
Seq[2] = [0,0,0,1]
Seq[3] = [1,0,0,1]
Seq[4] = [1,0,0,0]
Seq[5] = [1,0,1,0]
Seq[6] = [0,0,1,0]
Seq[7] = [0,1,1,0]
GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)
GPIO.output(enable_pin, 1)
def setStep(w1, w2, w3, w4):
GPIO.output(coil_A_1_pin, w1)
GPIO.output(coil_A_2_pin, w2)
GPIO.output(coil_B_1_pin, w3)
GPIO.output(coil_B_2_pin, w4)
def forward(delay, steps):
for i in range(steps):
for j in range(StepCount):
setStep(Seq[j][0], Seq[j][1], Seq[j][2], Seq[j][3])
time.sleep(delay)
def backwards(delay, steps):
for i in range(steps):
for j in reversed(range(StepCount)):
setStep(Seq[j][0], Seq[j][1], Seq[j][2], Seq[j][3])
time.sleep(delay)
while True:
delay = raw_input("Zeitverzoegerung (ms)?")
steps = raw_input("Wie viele Schritte vorwaerts? ")
forward(int(delay) / 1000.0, int(steps))
steps = raw_input("Wie viele Schritte rueckwaerts? ")
backwards(int(delay) / 1000.0, int(steps))
Wenn ich das Script starte und den Motor vor oder zurückfahre zittert der Moror nur ohne sich zu drehen. Hätte jemand eine Idee was ich falsch gemacht habe ?
Gruß
Frank
ich habe ein Problem mit der Ansteuerung meines Schrittmotors. Zur Zeit gehe ich davon aus das es sich um ein Hardwareproblem handelt. Falls sich rausstellen sollte das es ein Softwareproblem ist bitte ich die Mod´s meine Frage zu verschieben.
Ich nutze einen NEMA 17 Schrittmotor:
Stepper Motor DC 5V Schrittmotor
Specs
Nema 17 (42x42)
200 step
1.8°Angle
200 gram
Torque 130 m/Nm
4 Wires
Pairs
Red & Red White
Green & Green White
Compatible
Ramps
A4988
Laut Datenblatt ist die Kabelbelegung:
1B ROT
1A ROT/WEIß
2A GRÜN
2B GRÜN/WEIß
Als Treiber nutze ich einen L298N Schrittmotorenendstufe Dual H Brücke die ich folgendermaßen angeschlossen habe ( Bild angefügt )
Als Code nutze ich folgendes python Script:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
enable_pin = 18 # nur bei ULN2003 Treiber IC wichtig
coil_A_1_pin = 23 #
coil_A_2_pin = 24 #
coil_B_1_pin = 17 #
coil_B_2_pin = 18 #
# anpassen, falls andere Sequenz
StepCount = 4
Seq = range(0, StepCount)
Seq[0] = [0,1,0,0]
Seq[1] = [0,1,0,1]
Seq[2] = [0,0,0,1]
Seq[3] = [1,0,0,1]
Seq[4] = [1,0,0,0]
Seq[5] = [1,0,1,0]
Seq[6] = [0,0,1,0]
Seq[7] = [0,1,1,0]
GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)
GPIO.output(enable_pin, 1)
def setStep(w1, w2, w3, w4):
GPIO.output(coil_A_1_pin, w1)
GPIO.output(coil_A_2_pin, w2)
GPIO.output(coil_B_1_pin, w3)
GPIO.output(coil_B_2_pin, w4)
def forward(delay, steps):
for i in range(steps):
for j in range(StepCount):
setStep(Seq[j][0], Seq[j][1], Seq[j][2], Seq[j][3])
time.sleep(delay)
def backwards(delay, steps):
for i in range(steps):
for j in reversed(range(StepCount)):
setStep(Seq[j][0], Seq[j][1], Seq[j][2], Seq[j][3])
time.sleep(delay)
while True:
delay = raw_input("Zeitverzoegerung (ms)?")
steps = raw_input("Wie viele Schritte vorwaerts? ")
forward(int(delay) / 1000.0, int(steps))
steps = raw_input("Wie viele Schritte rueckwaerts? ")
backwards(int(delay) / 1000.0, int(steps))
Wenn ich das Script starte und den Motor vor oder zurückfahre zittert der Moror nur ohne sich zu drehen. Hätte jemand eine Idee was ich falsch gemacht habe ?
Gruß
Frank