Schrittmotor allg.

  • Hallo zusammen,


    mein Ziel ist es ein Schrittmotor anzusteuern, bei dem ich entweder Geschwindigkeit oder Schritte vorgebe!
    Meine bisherigen Versuchen sehen jedoch nicht so toll aus.
    Kurz zur Hardware:
    -Raspberry Pi 2
    -Motortreiberboard L298N (http://tronixlabs.com.au/news/…er-module-2a-and-arduino/)
    -Schrittmotor 103H7123-0440 (Bipolar/Unipolar; 0.83Nm; 1,8°;2A pro Phase; 3,2Ohm pro Windung)(Datenblatt im Anhang)


    Verdrahtung:
    Vom Pi:
    Mein Raspberry versorgt das L298N mit 5V Logikspannung, ebenso habe ich Ground vom Pi an das L298N gelegt.
    Zwei GPIOs steuern Enable A und Enable B das L298N.
    Desweitern habe ich 4 GPIOs die das L298N ansteuern.
    Vom L298N:
    vier Outputs die auf die zwei spulen des Motors gehen.
    Externe Netzgerät:
    Das externe Netzgerät versorgt das Modul L298N mit powersupply für den Motor.
    D.h. ich habe 12V und wieder 0V. Die 0V sind mit dem Ground des Pi gebrückt damit ich daselbe Potential habe...


    Einstellung des Netzgerätes:
    Da meine Spule 1,6 Ohm hat und der Phasenstrom und das L298N max 2 A vertragen stelle ich die Spannung wie folgt ein:
    U = R * I = 3,2Ohm * 1,8A = 5,7V
    D.h. ich stell mein Netzgerät auf 5,7 V!



    Folgendes ist mein Test Code der nur kurz vor und wieder zurück dreht:











    Nun zu meinem Problem:
    Sofern ich das Programm laufen lasse mit exakt diesem "delay" von 0,05s. D.h. Der Motor beansprucht ca. 1,8A und hat ein sehr starkes Drehmoment!(Die Welle kann nicht von Hand gestoppt werden!). Sobald ich aber dieses "delay" verringere nimmt der Motor drastisch an Drehmoment und der aufgenommenen Stromstärke rapide ab.Drehzahl ist dabei ca. 5U/min. Bei einem "delay" von 0,005s dreht der Motor noch hat jedoch nur eine Stromaufnahme von ca. 100mA (Was ich nicht verstehe) und man kann ihn mühelos mit der Hand festhalten!! Drehzahl ca. 50U/min. Wenn ich das "delay" noch kleiner mache dreht der Motor nicht mehr, man hört jedoch wie die spulen angesteuert werden.
    Meine Fragen:
    1. Ich verstehe nicht warum ich die Drehzahl nicht durch das delay ändern kann ohne das ich Drehmoment verliere?
    2. Genauso seltsam finde ich das der Motor bei 0,001s delay gar nicht mehr dreht alle Schritte verliert!????


    Mögliche Fehler:
    - Ich habe mal die Signale (quasi das erzeugte "PWM" Signal mit dem delay direkt am Pi und am Ausgang des L298N über ein Oszi angeschaut. Die verlaufen sehr ordentlich, sodass ich das als fehler ausschließen kann.
    - Motor, Pi und Treiber L298N habe ich ersetzt, sollte also auch keine Ursache sein.


    Ich wäre super dankbar wenn mir jmd weiterhelfen kann!!

  • Ich bin da kein Experte, aber was klar ist (ob der geringen Ausfuehrungsgeschwindigkeit in Python) dass die Rechtecksignale zwar weiterhin stimmen, aber das Verhaeltnis von dem gewuenschten Zustand wie du ihn vorgibst, und den Zwischenzustaenden die entstehen, waehrend du umschaltest, unguenstiger wird.


    Da du ja Ahnung & ein Oszi hast, wuerde ich mal empfehlen, dir einen weitern Pin anzuschauen, und den zu toggeln auf HIGH wenn setup_Step beginnt, und wieder LOW zu ziehen an dessen Ende. Damit misst du dann die Umschaltzeit, und stellst sie ins Verhaeltnis zur Haltezeit.


    Und du koennst mal mit pigpio spielen, das ist eine Alternative zu RPI.GPIO, funktioniert ueber einen in C geschriebenen daemon, und eine kleine Python-Library. Da gibt es den Befehl set_bank_(1|2). Damit kannst du mit *einem* mal alle Pins umsetzen. Ggf. aendert das das Verhalten schon signifikant.
    Automatisch zusammengefügt:[hr]
    Ich hab's gerade mal selbst ausprobiert - ein setupStep sollten ~12.5 uS dauern. Tun sie zumindest bei mir, laut Oszi. Das waeren Faktor 80 zu deiner geplanten Schrittlaenge bei delay 0.001. Damit glaube ich meiner eigenen Erklaerung eher nicht mehr so :)

  • Hallo.


    Nun ja, das ist eigentlich recht simpel.
    Der Motor hat Spulen, also Induktivitäten, und genau da liegt das Problem.
    Das aufladen einer Spule verhält sich umgekehrt wie das aufladen eines Kondensators.(Siehe Anhang).
    Das erklärt auch deinen Effekt.
    Je kürzer du den sleep() machst, um so weniger Zeit hat die Spule, Power zu entwickeln.(Beim laden der Spule fließt erst im laufe des Ladevorgangs mehr Strom(Gegeninduktion bremst)).
    Beim C ist es umgekehrt, erst maximaler Strom aber fast spannungslos.
    In dem Datenblatt (vermute, der mit Edding markierte) Motor ist deiner.
    Das ist ja die fs (Maximale Startfrequenz)angegeben. D.h wenn du drüberliegst, läuft der Motor nicht mal mehr an, da Tau gegen Null getrieben wird.


    Meiner Meingung nach gibt's da nur eines: PWM
    Wie schon __deets__ erwähnte, eignet sich die PIGPIO.lib dazu hervorragend, auch für Python.
    Super auch die banking() Sachen.Es lassen sich damit beliebige GPIO's mit einer Zeile setzen/löschen. Erspart Schleifenbildungen.
    Diese Lib findet man >hier< , sind auch Examples dabei


    Denn dann mal auf gutes Gelingen... wenn's klemmt, fragen. :thumbs1:


    gruß root


    //Nachtrag
    Damit du dir das oben geschriebene auch bildlich vorstellen kannst, siehe Anhang 2.
    das ist PWM.
    Damit kannst rumprobieren.
    Wie du unten siehst, gibt es eine sog. Grundfrequenz (Pulsbreite) mit variablen Pausen.
    Warum Grundfrequenz ?. Nun, das sind diese berühmten 5 Tau.Nach 5 Tau ist der Ladevorgang technisch gesehen abgeschlossen, und max. Drehmoment ist vorhanden.
    Türlich kann man drunterbleiben, aber dann zu Lasten des Drehmoment's.
    Das Verhältnis Pulsbreite:Drehmoment kann man im Diagramm (Datenblatt) ablesen.
    (Es gbt Leute die da nen Kondensator drüberlegen(hat auch einen Effekt) aber das "verschmiert" die Flanken, und mir stülpt sich der Magen um) :D


  • Meiner Meingung nach gibt's da nur eines: PWM


    Damit du dir das oben geschriebene auch bildlich vorstellen kannst, siehe Anhang 2.
    das ist PWM.


    Ich hoffe sehr das es nicht wieder Stress gibt aber als PWM bezeichnet man immer noch die Variation von Ton zu Toff. Die Frequenz bleibt konstant, ergo bleibt sie Summe von Ton und Toff konstant das sind Zeiten und 1/t ist f


    auch hier nachzulesen:


    https://www.mikrocontroller.ne…cles/Pulsweitenmodulation
    oder hier:
    https://de.wikipedia.org/wiki/Pulsweitenmodulation
    oder hier:
    http://rn-wissen.de/wiki/index…itle=Pulsweitenmodulation


    Als Prinzipbild geht deine Erkärung aber durch und ich will dir nix böses.


    Wie schon mal geschrieben, bei einer PWM ändert sich die Frequenz nicht und ich finde auch kein Beispiel wo sich die Frequenz also der Kehrwert der Summe von Ton+Toff ändert.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • he jar.
    ok.. deine links sind besser für ne genaue Erklärung.
    Nur spielen darf jeder wie er will. :thumbs1:
    Ich spiel da mehr mit dem Tau rum.


    gruß root

    Edited once, last by root ().


  • .....Ich spiel da mehr mit dem Tau rum.
    gruß root


    verstehe ich voll weil Schrittmotoere Zicken sind, ich hatte hier mal ne Kleinserie 15 Steuerungen vor 13 Jahren gebaut.


    Die tuns im Prinzip ganz gut nur kann ich die Frequenz nicht unendlich steigern, irgendwann kommt der Motorstrom nicht mehr hinterher, auch kann ich die Spannung nicht passend hochdrehen dann wird der Motor ohne Gegeninduktion zu warm.


    Ich finde das Thema nicht so trivial und ich gestehe mir fehlt da auch die große praktische Erfahrung, wie gesagt, wir bauen hier Versuchsmodelle zur Anschauung und keine CNC Steuerungen mit Power und Speed.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Danke für die schnellen und vielen Hilfsbeiträge!!
    Nur root hat nun geschrieben man sollte mit PWM spielen.
    Leider komme ich mit der pigpio nicht ganz klar.
    Kann mir jmd evt ein kleine Testprogramm mit PWM schreiben?
    Wäre sensationell;)
    Habe da momantan kein Ansatz. Bzw was ich als PWM setzten solll.....


    Grüße


    Ich habe gerade dieses Programm ablaufen lassen aber die syntax der pigpio stimmt irgendwie nicht, selbst auch die beschreibung auf der homepogae von pigpio hilft mir gerade nicht.;(

    Edited once, last by jim1 ().

  • Hallo jim1.
    ...langsam angehen... so schlimm ist das nicht. :thumbs1:
    Bei der pigpio.lib muss man sich bischen einlesen, aber richt mal dein Augenmerk auf diese Befehle: siehe Anhang.


    Wie gesagt sind auch Beispiele dabei.
    Mit Python hab ich zwar nix am Hut, aber selbst da ist ein Beispiel dabei.
    PWM Wave-generator



    ...oder >hier< .
    ...also einfach in Ruhe angehen und vor allem, verstehen was da gemacht wird. Dann wird man sicherer.


    gruß root