Tja, hey hey ...
guck mal in mein letztes Posting.
Das habe ich aktualisiert ... und es klappt super ...
-ds-
Tja, hey hey ...
guck mal in mein letztes Posting.
Das habe ich aktualisiert ... und es klappt super ...
-ds-
L293D mit Schrittmotor, Pi hängt sich auf? Schau mal ob du hier fündig wirst!
Zum Halbschritt: Hab mich da etwas eingelesen, aber meistens steht dort, dass dadurch doppelt so viele Schritte gemacht werden würden, bei mir sind es aber komischerweise ja nur halb so viele (10 statt 20).
kommt halt auf die Guckweise drauf an, oder anders gesagt rate mal warum bei dir nur halb so viele Schritte erfolgen.
Moin moin beinand,
wichtige Korrektur, falls Du die Library (das Modul) aus meinem Beitrag 1:1 umsetzt:
ich musste für meinen Stepper beim Rückwärtsdrehen nicht die Anzahl der Steps für eine Umdrehung mit (-1) multipliziert übergeben, sondern diese Step-Anzahl vor der Negierung noch um eins erhöhen.
Sonst verschiebt sich langsam aber sicher der Nullpunkt ...
Liegt wohl an der Schleife ...
bye,
-ds-
Hey,
ich steh etwas auf dem Schlauch: Mein Motor hat doch laut Datenblatt nur 4 Möglichkeiten, deiner jedoch 8. Ich kann bei mir doch nur die, die im Datenblatt stehen angeben (bzw. gebe ich noch ähnliche Zwischenschritte wie du sie hast (1 1 0 1 z.B.) zuckt er nur noch rum und dreht sich gar nicht mehr). Daher kann ich es ja nicht so umsetzen..
Bei den 4 Möglichkeiten, die ich angegeben habe, bewegt er sich bei zweien, bei den anderen beiden zuckt er auch nur leicht, tut aber nicht. Kann das an der Stromstärke liegen?
LG
mlt
Mahlzeit mlt,
ja, ist durchaus möglich dass der Strom da eine Rolle spielt. Ich kann mich erinnern dass ich mal mit - ich weiss nicht mehr genau ob es Stepper oder Servos waren - auch so einen Effekt hatte, dass der Motor nur ab und zu einen kleinen Hüpfer machte und sonst nur so leise vor sich hin brummte.
Letzteres war kein Zeichen von Zufriedenheit sondern der knurrende "Magen" des Motors, der mehr Power wollte ...
Hast Du denn mal eine solche Abfolge von acht Steps meines Motors an Deinen geschickt?
Ich bin mir ziemlich sicher, dass dabei die Abfolge sehr wichtig ist.
Nach einem Reset setzt der Arduino immer auf Step 7 auf und hangelt sich dann rückwärts bis 0.
Ausserdem merkt er sich die letzte Bitfolge und geht von dieser aus entweder eins rauf oder runter.
Ich meine, Du hast ja auch vier Drähte an deinem Motor (vielleicht sogar dieselben Farben?) ... also hast Du auch acht Möglichkeiten.
Und - das ist jetzt aber reiner Spekulatius - möglicherweise liegt der Grund, dass Dein Motor nur 10 statt 20 Schritten macht der, dass Du immer einen Schritt überspringst
Ich glaube dass es sich lohnen würde zu versuchen dieselben Bitfolgen in derselben Reihenfolge wie ich zu schicken. Möglicherweise kommt es Dir nur so vor, als täte er bei einem "Zwischenschritt" nichts - und in Wirklichkeit ist der Strom zu niedrig :s
Hier sind sicherheitsalber noch mal die Bitfolgen:
switch (thisStep) {
case 0:
digitalWrite(motor_pin_1, LOW); //BLU
digitalWrite(motor_pin_2, LOW); //Pink
digitalWrite(motor_pin_3, LOW); //Yellow
digitalWrite(motor_pin_4, HIGH); //Orange
break;
case 1:
digitalWrite(motor_pin_1, LOW); //BLU
digitalWrite(motor_pin_2, LOW); //Pink
digitalWrite(motor_pin_3, HIGH); //Yellow
digitalWrite(motor_pin_4, HIGH); //Orange
break;
case 2:
digitalWrite(motor_pin_1, LOW); //BLU
digitalWrite(motor_pin_2, LOW); //Pink
digitalWrite(motor_pin_3, HIGH); //Yellow
digitalWrite(motor_pin_4, LOW); //Orange
break;
case 3:
digitalWrite(motor_pin_1, LOW); //BLU
digitalWrite(motor_pin_2, HIGH); //Pink
digitalWrite(motor_pin_3, HIGH); //Yellow
digitalWrite(motor_pin_4, LOW); //Orange
break;
case 4:
digitalWrite(motor_pin_1, LOW); //BLU
digitalWrite(motor_pin_2, HIGH); //Pink
digitalWrite(motor_pin_3, LOW); //Yellow
digitalWrite(motor_pin_4, LOW); //Orange
break;
case 5:
digitalWrite(motor_pin_1, HIGH); //BLU
digitalWrite(motor_pin_2, HIGH); //Pink
digitalWrite(motor_pin_3, LOW); //Yellow
digitalWrite(motor_pin_4, LOW); //Orange
break;
case 6:
digitalWrite(motor_pin_1, HIGH); //BLU
digitalWrite(motor_pin_2, LOW); //Pink
digitalWrite(motor_pin_3, LOW); //Yellow
digitalWrite(motor_pin_4, LOW); //Orange
break;
case 7:
digitalWrite(motor_pin_1, HIGH); //BLU
digitalWrite(motor_pin_2, LOW); //Pink
digitalWrite(motor_pin_3, LOW); //Yellow
digitalWrite(motor_pin_4, HIGH); //Orange
break;
Die Reihenfolge ist bei mir immer 7-6-5-4-3-2-1-0 ....
Bin ja mal gespannt,
-ds-
Hey,
ich werd die Reihenfolge gleich mal ausprobieren, bei mir sind die Farben:
Orange => Schwarz, Pink => Rot, Blau => Gelb, Gelb => Braun
Falls es an der fehlenden Stromstärke (benötigt 400mA und 3V, ich habe 5V mit 4Ohm Widerstand angeschlossen), müsste ich wissen wie ich da noch mehr zu speisen kann, ohne den Pi zu grillen.
Poste das Ergebnis dann gleich.
//edit: genau die selbe Bewegung
mport RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
enable_pin = 18
coil_A_1_pin = 4
coil_A_2_pin = 17
coil_B_1_pin = 23
coil_B_2_pin = 24
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 forward(delay, steps):
for i in range(8):
setStep(7-i)
print 7-i
time.sleep(delay)
def setStep(step):
if step == 0:
GPIO.output(coil_A_1_pin, 1) #schwarzORANGE
GPIO.output(coil_A_2_pin, 0) #rot PINK
GPIO.output(coil_B_1_pin, 0) #gelb BLUE
GPIO.output(coil_B_2_pin, 0) #braun YELLOW
elif step == 1:
GPIO.output(coil_A_1_pin, 1)
GPIO.output(coil_A_2_pin, 0)
GPIO.output(coil_B_1_pin, 0)
GPIO.output(coil_B_2_pin, 1)
elif step == 2:
GPIO.output(coil_A_1_pin, 0)
GPIO.output(coil_A_2_pin, 0)
GPIO.output(coil_B_1_pin, 0)
GPIO.output(coil_B_2_pin, 1)
elif step == 3:
GPIO.output(coil_A_1_pin, 0)
GPIO.output(coil_A_2_pin, 1)
GPIO.output(coil_B_1_pin, 0)
GPIO.output(coil_B_2_pin, 1)
elif step == 4:
GPIO.output(coil_A_1_pin, 0)
GPIO.output(coil_A_2_pin, 1)
GPIO.output(coil_B_1_pin, 0)
GPIO.output(coil_B_2_pin, 0)
elif step == 5:
GPIO.output(coil_A_1_pin, 0)
GPIO.output(coil_A_2_pin, 1)
GPIO.output(coil_B_1_pin, 1)
GPIO.output(coil_B_2_pin, 0)
elif step == 6:
GPIO.output(coil_A_1_pin, 0)
GPIO.output(coil_A_2_pin, 0)
GPIO.output(coil_B_1_pin, 1)
GPIO.output(coil_B_2_pin, 0)
elif step == 7:
GPIO.output(coil_A_1_pin, 1)
GPIO.output(coil_A_2_pin, 0)
GPIO.output(coil_B_1_pin, 1)
GPIO.output(coil_B_2_pin, 0)
# GPIO.output(enable_pin, 0)
while True:
delay = 1000#raw_input("Delay between steps (milliseconds)?")
steps = 5#raw_input("How many steps forward? ")
forward(int(delay) / 1000.0, int(steps))
Alles anzeigen
Ich habe gerade diese Schaltung gefunden, bzgl Zusatz batterie:
https://learn.adafruit.com/system/assets/….png?1396799472
Das müsste doch theoretisch auch mit meinem Motor klappen (ohne etwas durchzubrennen)?
Ich denke schon ... das ist ja ein Treiber-IC für Schrittmotoren.
Allerdings reicht mir mein Sandkasten-Wissen in Sachen Elektronik nicht aus, um Dir das zu empfehlen ... das muss sich imho ein Experte ansehen.
Solange es um meine eigenen Büchsen geht ist das was anderes ...
cu,
-ds-
Hab die Schaltung jetzt mal ausprobiert, aber genau die selben Schritte wie davor, jedoch piepst er nun leise, als würde er sich aufladen (denn wenn das piepsen aufhört macht er einen Schritt).
Kommt mir irgendwie bekannt vor ... das Piepsen ...
Ist der Motor evtl. in so einer Art "Positions-Halte-Modus" ??
Oder warte ... gibt nicht mein RC-Buggy solche Töne von sich, wenn ich den Fahrtregler ganz langsam nur einen Tick aufdrehen :s ... ich glaub, das wars.
Meine Folgerung wäre: keine ausreichende Strom-Versorgung - allerdings ohne Kalaschnikow ... äh Gewähr ..
-ds-
Er piepst nur bei den Schritten, die er nicht macht, die zwei statt 4 macht er immernoch.
Ich habe 6xAA (1,2V) Akkus zusätzlich angeschlossen, habe jetzt nicht genau gemessen wie viel Stromstärke die geben, aber an Spannung sollte min. 5V vorhanden sein (nicht alle voll), wobei der Motor nur 3V mit 400mA braucht.
Hmm ... kommt mir äusserst sonderbar vor
So langsam gehen mir die Ideen aus :s ...
Schon mal im Web recherchiert, ob andere auch Probleme mit diesem Motor haben?
greetz,
-ds-
na klar, aber dieser Motor scheint nicht all zu verbreitet sein (wahrscheinlich wegen den recht großen Schritten), alles was man so findet ist über diesen eBay Motor. Ich hab mir den auch mal bestellt, sobald er da ist versuche ich dessen Controller mal mit meinem Motor, vielleicht geht es damit.
Naja, der hat halt nun mal kein Getriebe und daher auch so eine grobe Einteilung.
Aber was Du mit dem Anschliessen des Controllers meinst ... das verstehe ich ehrlich gesagt jetzt nicht :s
greetz,
-ds-
Ich nehm das Treiberboard (ULN2003) statt meinem L293D und schaue, ob es evtl. damit funktioniert
Aahh ... jetzada ... ...
Hast Du da so eine kleine Komplettplatine? Die ist nämlich praktisch, weil die Signale zusätzlich über LED angezeigt werden.
cu,
-ds-
Moin!
hast Du evtl ein Wicklungspaket falsch herum angeschlossen?
Dann würde er festhalten statt drehen.
Gruß
Seamen
Da ich endlich wieder mehr Zeit habe, möchte ich mich diesem Thema nochmal widmen, denn ich habe es erneut versucht:
Diesen Aufbau habe ich benutzt (Batterie nun 6V):
Das ist mein Code:
# Import required libraries
import time
import RPi.GPIO as GPIO
# Use BCM GPIO references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)
# Define GPIO signals to use
StepPins = [4,17,23,24]
# Set all pins as output
for pin in StepPins:
print "Setup pins"
GPIO.setup(pin,GPIO.OUT)
GPIO.output(pin, False)
# Define some settings
StepCounter = 0
WaitTime = 1
# Define simple sequence
StepCount = 4
Seq = []
Seq = range(0, StepCount1)
Seq[0] = [1,0,1,0]
Seq[1] = [0,1,1,0]
Seq[2] = [0,1,0,1]
Seq[3] = [1,0,0,1]
# Start main loop
while True:
for pin in range(0, 4):
xpin = StepPins[pin]
if Seq[StepCounter][pin]!=0:
#print " Step %i Enable %i" %(StepCounter,xpin)
#print xpin
GPIO.output(xpin, True)
else:
GPIO.output(xpin, False)
print StepCounter
StepCounter += 1
# If we reach the end of the sequence
# start again
if (StepCounter==StepCount):
StepCounter = 0
if (StepCounter<0):
StepCounter = StepCount
# Wait before moving on
time.sleep(WaitTime)
Alles anzeigen
Und so sieht das Ergebnis aus:
Die ersten 8 Steps macht er wie er sollte, danach tritt er einfach zurück und "hängt" (macht 2 Schritte und einen zurück).
Ich bin mir sicher, dass es nicht am Code liegt, kann es etwas mit den technischen Details zu tun haben?
Ich habe auch schon einen baugleichen Motor ausprobiert, daran liegt es auch nicht.
LG
mlt
Die ersten 8 Steps macht er wie er sollte, danach tritt er einfach zurück und "hängt" (macht 2 Schritte und einen zurück).
liest sich so als wenn nach wenigen Schritten die Batterie ? schwächelt ? bis zur Erholungspause.
liest sich so als wenn nach wenigen Schritten die Batterie ? schwächelt ? bis zur Erholungspause.
Ich habe nochmal ein wenig ausprobiert und es klappt immer nachdem ich beide Ströme (Batterien und Pi) an den L293D abgestellt habe, danach erneut anschließe und das Programm starte. Nach den 8-9 Steps muss ich wieder trennen und kann es dann erneut starten (starte ich ohne trennen neu, zuckt er nur weiter wie im Video zu sehen).
Kann es damit zu tun haben, dass sich zu viel Strom "ansammelt", so sieht es für mich als Laien zumindest aus.
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!