Schrittmotor kritische Drehzahl

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo!

    ich wage mich gerade mit meinem Pi 3 an eine Steurung von zwei Schrittmotoren. Dabei habe ich leider ein kleines Problem, dass ich mir im Moment nicht ganz erklären kann.

    Ich steuere die beiden Schrittmotoren über zwei L298N Treiber an und kriege diese auch zum Drehen. Allerdings nur recht langsam. Bei Bedarf kann ich davon auch einmal das Python Programm schicken. Sobald ich die "Wartezeit" zwischen einem Schritt auf unter 0,1s setze, läuft der Motor teilweise rückwärts und macht garnicht mehr das was er soll. Komischerweise dreht er sich bei 6µs ganz normal, alle anderen Werte in dem Bereich haben aber das selbe wie bei <0,1s zur Folge.
    Ist jemand mit der Thematik vertraut, bzw. hatte ähnliche Probleme?

    Verwendet wurde:
    Nema 17 12V 0,4A 4-Phasiger, Bipolarer Schrittmotor
    L298N Motortreiber
    Raspberry Pi 3

    Falls irgendwas an Info fehlt gerne Bescheid geben!

    Vielen Dank und beste Grüße
    HenningPi

  • Hallo HenningPi,

    herzlich Willkommen in unserem Forum!

    Ich bin mir sicher, dass Dir niemand wird helfen können, solange weder Schaltung noch Programm bekannt sind.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (30. Juli 2017 um 14:48)

  • Danke Andreas!

    Das Problem hat sich mitlerweile schon erledigt. Ich habe die beiden Motoren mal umgesteckt und bin den Code nochmal durchgegangen. Komischerweiße funktioniert es so jetzt einwandfrei und ich kriege Drehzahlen bis ca. 100 RPM hin.

    Allerdings habe ich trotzdem eine Frage an die etwas erfahreneren. Und zwar machen die Schrittmotoren beim Starten des Programms direkt einen Schritt und haben "Saft", werden also warm und lassen sich nicht drehen. Ist ja an und für sich nicht schlimm, nur werden sie halt warm und der Schritt am Programmstart ist doof.

    Der Code lautet wie folgt:

    #!/usr/bin/python

    #SCHRITTMORSTEUERUNG
    import RPi.GPIO as GPIO
    import time

    #initialisierung der Pins
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)

    #Erstellen der Variablen und Ausgänge definieren
    XIN1 = 21
    XIN2 = 20
    XIN3 = 16
    XIN4 = 12

    GPIO.setup(XIN1, GPIO.OUT)
    GPIO.setup(XIN2, GPIO.OUT)
    GPIO.setup(XIN3, GPIO.OUT)
    GPIO.setup(XIN4, GPIO.OUT)

    YIN1 = 25
    YIN2 = 24
    YIN3 = 23
    YIN4 = 18

    GPIO.setup(YIN1, GPIO.OUT)
    GPIO.setup(YIN2, GPIO.OUT)
    GPIO.setup(YIN3, GPIO.OUT)
    GPIO.setup(YIN4, GPIO.OUT)

    #Benutzereingaben
    eingabe1 = input("Bitte Geschwindigkeit angeben (µs Delay): \n")
    eingabe2 = input("Bitte gebe an wieviele Schritte gegangen werden sollen (200 Schritte/U): \n")


    #Programm
    n = int(eingabe2)/4
    i = 1
    t = int(eingabe1)
    while n >= i:
    GPIO.output(XIN1, True)
    GPIO.output(XIN2, False)
    GPIO.output(XIN3, True)
    GPIO.output(XIN4, False)

    GPIO.output(YIN1, True)
    GPIO.output(YIN2, False)
    GPIO.output(YIN3, True)
    GPIO.output(YIN4, False)

    time.sleep(t/1000)
    GPIO.output(XIN1, False)
    GPIO.output(XIN2, True)
    GPIO.output(XIN3, True)
    GPIO.output(XIN4, False)

    GPIO.output(YIN1, False)
    GPIO.output(YIN2, True)
    GPIO.output(YIN3, True)
    GPIO.output(YIN4, False)

    time.sleep(t/1000)
    GPIO.output(XIN1, False)
    GPIO.output(XIN2, True)
    GPIO.output(XIN3, False)
    GPIO.output(XIN4, True)

    GPIO.output(YIN1, False)
    GPIO.output(YIN2, True)
    GPIO.output(YIN3, False)
    GPIO.output(YIN4, True)

    time.sleep(t/1000)
    GPIO.output(XIN1, True)
    GPIO.output(XIN2, False)
    GPIO.output(XIN3, False)
    GPIO.output(XIN4, True)

    GPIO.output(YIN1, True)
    GPIO.output(YIN2, False)
    GPIO.output(YIN3, False)
    GPIO.output(YIN4, True)
    time.sleep(t/1000)

    n = n - 1

    GPIO.cleanup()

  • Du schaltest alle GPIOs auf output, stellst sie aber nicht auf HIGH oder LOW. Ich nehme an, die haben dann irgendwelche Defaultwerte oder ggf stehen alle acht auf LOW und machen deshalb einen Schritt... Setz mal alle GPIOs jeweils gleich beim initialisieren auf die Anfangswerte deiner Schleife (oder vielmehr auf die Endwerte - also die letzte Position).

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Einmal editiert, zuletzt von Gnom (30. Juli 2017 um 13:45)

  • Hallo HenningPi !

    Du solltest ein 5 V Device nicht an den 3,3 V Pins des Pi betreiben. Nochweniger zwei.
    Sonst kannst Du Dich gleich in die Hall of Fame der Pi Mörder eintragen.

    Servus !

    RTFM = Read The Factory Manual, oder so

    Einmal editiert, zuletzt von RTFM (30. Juli 2017 um 14:11)

  • Zitat von &quot;RTFM&quot; pid='293309' dateline='1501416655'


    Hallo HenningPi !

    Du solltest ein 5 V Device nicht an den 3,3 V Pins des Pi betreiben. Nochweniger zwei.
    Sonst kannst Du Dich gleich in die Hall of Fame der Pi Mörder eintragen.

    Servus !


    Danke für die Antwort!
    Hm... meinst du wirklich das ist so tragisch? Das L298N Board muss die 3,3V ja nur als True interpretieren und das scheint zu klappen.
    als Alternative könnte ich natürlich Transistoren verschalten aber ob sich das für so einen Fall lohnt? :-/

  • Ja, es ist so tragisch!

    Die GPIO's des Pi's gehen ungebuffert direkt zur SoC und sind nicht 5V tolerant! Gut möglich das du dir deinen Pi bereits beschädigt hast.

    ^Damit antworte ich nur auf die letzten 2 Beiträge... den Rest habe ich nur überflogen...
    Wobei "Nema 17 12V 0,4A" schon etwas seltsam klingt - woher kriegst du 12V? Handelt es sich dabei um https://www.adafruit.com/product/324 ?
    Wie sieht deine Schaltung aus? Die Verkabelung/Ansteuerung des Motors ist wichtig!


    PS: FAQ => Nützliche Links / Linksammlung => HowTo: CODE / PHP Code im Forum posten
    PPS: https://github.com/intel-iot-devk…l298-stepper.py

  • Hallo Meigrafd,

    Die GPIOs werden nur als Outputs verwendet und es funktioniert einwandfrei. So weit reicht mein Wissen jetzt auch nicht, inwieweit das jetzt dem Pi schaden könnte. Könntest du mir das vieleicht erklären?

    Ich erstelle eben mal einen Aufbau der Schaltung.

    Gruß
    HenningPi
    Automatisch zusammengefügt:
    Hier die Schaltung für einen Motor, der andere ist genauso angeschlossen.
    Die 12V DC Quelle habe ich mal durch in Reihe geschaltete Batterien dargestellt. Die Anschlüsse vom Schrittmotor könnten verkehrt sein, ich hatte auf die Schnelle keine Möglichkeit nachzuschauen wie es korrekt angeschlossen werden muss. Bei meinem Aufbau ist es aber richtig angeschlossen.

    Gruß
    HenningPi

    PS: Man merkt es ist spät und bei mir ergeben 3 x 3V = 12V ... man man man...

  • Zitat von &quot;HenningPi&quot; pid='293387' dateline='1501450550'

    Die GPIOs werden nur als Outputs verwendett genauso angeschlossen.

    Aber auch erst nach Aufruf Deines Scripts und da ab < GPIO.setup(XINx, GPIO.OUT) >

    Bis zum Aufruf sind die Pins undefined und da sucht sich der Strom seinen Weg selbst, schlimmstenfalls rückwärts durch die H-Brückenplatine.

    Ausserdem steht da im Datenblatt zum L298:
    Turn-On and Turn-Off : Before to Turn-ON the Supply Voltage and before to Turn it OFF, the Enable input must be driven to the Low state.


    Servus !

    RTFM = Read The Factory Manual, oder so

    Einmal editiert, zuletzt von RTFM (31. Juli 2017 um 08:10)

  • Zitat von &quot;HenningPi&quot; pid='293387' dateline='1501450550'


    Die 12V DC Quelle habe ich mal durch in Reihe geschaltete Batterien dargestellt.

    Vergiss das sofort wieder und verschwende daran keine Zeit. Einzelne Batterien in Reihe geschaltet liefern nicht genug Strom, Stepper Motoren benötigen aber mehr als DC Motoren.
    Batterien in Reihe = Spannung summiert sich, aber Strom bleibt gleich. Die schwächste Batteriezelle beeinflusst die Leistung der gesamten Reihenschaltung. Im schlimmsten Fall kann eine defekte Batterie dazu führen, dass die gesamte Batteriereihe ausfällt.

    Zitat von &quot;HenningPi&quot; pid='293387' dateline='1501450550'

    Die Anschlüsse vom Schrittmotor könnten verkehrt sein, ich hatte auf die Schnelle keine Möglichkeit nachzuschauen wie es korrekt angeschlossen werden muss. Bei meinem Aufbau ist es aber richtig angeschlossen.

    Woher weißt du das?
    Aus dem Stepper kommen verschiedenfarbige Kabel und die schließt man nicht willkürlich an... Wenn dein Bild exakt dem entspricht wie du es verkabelt hast, dann ist das IMHO falsch. Laut Datenblatt gibt es je 2 Adern die zusammengehören: A & C, B & D == A&C gehört auf Coil1 vom L298N, du aber splittest es auf: bei dir geht A auf Coil1 aber B geht auf Coil2 ... Warum? :-/

  • Wie ich geschrieben habe, habe ich die Spannungsquelle nur ersatzweise durch die Batterien ersetzt. Beim eigentlichen Aufbau handelt es sich um ein 1,5A 12V DC Netzteil!

    Die Verdrahtung des Motors konnte ich gestern nicht kontrollieren, weil es schon recht spät war. Im Datenblatt der Motoren steht aber klipp und klar welches Kabel zu welcher Spule gehört. Von daher ist es auch richtig angeschlossen. Zumindest funktioniert jetzt auch alles einwandfrei.

    Das Problem, dass die Motoren beim Starten des Programms warm werden und einen Schritt machen, habe ich nun auch gelöst.

    Nach dem Definieren der GPIOs setze ich diese nun alle auf "False", jetzt liegt keine Spannung von Anfang an an den Motoren :thumbs1:

    Ich werden dann evtl. mal einen Transistor IC bestellen und die Eingänge der L298N Treiber nur über Transistoren ansteuern... wobei ich aber nicht glaube, dass die Eingänge vom Treiberboard irgendwie Spannung auf mein Pi geben wird :s Aber ihr habt schon recht, sicher ist sicher...

    Von daher aber auch Dankeschön für die Tips! :^^:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!