PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotor zittert nur



firstfacility
29.11.2014, 17: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

Geistesblitz
30.11.2014, 00:02
Eigentlich wird für Schrittmotoren noch der zusätzliche Treiber L297 verwendet, der nimmt dir da viel Arbeit ab. Ist auch günstiger, da der über eine Stromregelung verfügt und du somit eine höhere Spannungsversorgung verwenden kannst. Besteht das Problem denn immer oder nur, wenn du schneller fahren willst? Sind alle Phasen richtig angeschlossen?

RoboHolIC
30.11.2014, 01:31
Beim L298 ist spezifiziert, dass die Brückenversorgungsspannung um mindestens 2,5V höher sein muss als V_IH.
Letzteres deute ich als den High-Spannungspegel der steuernden Logikleitungen und nicht als die 'Mindestspannung für H-Erkennung' (die ihrerseits wiederum von der tatsächlichen Logik-Versorgungsspannung abhängig sein wird)

Hast du einen Stepper mit deutlich höherem Wicklungswiderstand (einige 'zig Ohm) greifbar, den du anschließen und mit höherer Brückenversorgungsspannung (ab etw 8V) testen kannst?