Schrittmotor flotter machen

Hallo an alle Schrittmotor-Kenner,

ich bastle gerade mit einem A4988 und einem Schrittmotor, der 1,7 A Strom fressen kann.
Läuft auch prinzipiell, Strom ist am Treiber entsprechend eingestellt.

Für mein Gefühl ist die Kiste aber zu langsam.

Ansteuerprinzip total simpel (bin gerade in Urlaub - es gibt schlimmere Schicksale :sunglasses: - und daher der Code nicht direkt greifbar)

  • Step-Eingang high
  • delay microseconds(xxx)
  • Step-Eingang low
  • delay microseconds(xxx)
  • und wieder zurück nach oben

Ansteuerung erfolgt per Vollschritt.

Jetzt spiele ich mit xxx und bekomme so ein maximum an Speed, ich leite das aus den mehr oder weniger hübschen Geräuschen des Motors ab. Ist aber irgendwie gefühlt (ja ich weiß, das ist seeeehr subjektiv) nicht das, was der Motor (200 Steps/U) können sollte. Hab natürlich das Typenschild auch nicht eingepackt, aber mir geht's hier um's Grundsätzliche bzw. eure Erfahrungswerte.

Also:

  • macht ihr irgendwas anders (und ich meine jetzt nicht den Einsatz von Libs, die machen ja auch nix anders denke ich)?
  • Betrieb am Treiber mit einem 3S/3500 mA LiPo als Stromquelle bedenklich? Ist übrig vom Modellflug :wink:
  • als Treiber besser z.B. den TB6560 nehmen?
  • Tipps und Tricks?

Freue mich auf eure Erfahrungen
Klaus

Klaus_ww:
Für mein Gefühl ist die Kiste aber zu langsam.

Was erwartest Du da denn? Ein Schrittmotor ist nicht für hohe Drehzahlen gemacht.

Versorgungsspannung verdoppeln.

Ok, also mal nen zweiten Akku in Reihe oder an’s Netzteil. Probier ich aus nach dem Urlaub.

@Microbahner: ist mir schon klar, aber ich hab da eben schon andere aus der gleichen Klasse flotter rennen sehen.

Wie in #2 bereits angeregt, nimm die Nennspannung des Motors mal drei (oder sowas in der Größenordnung) und versorge damit den A4988, soweit dies innerhalb der Spezifikation des Treibers liegt.

Nennspannung und -strom gelten für den stehendenn Motor, also ohmsche Last. Bei drehendem Motor "wehrt" sich die Induktivität des Motors gegen die Spannung, weshalb sie erhöht werden muß, um den Nennstrom zu erreichen.

Die genaue Erklärung entnimmst Du bitte einem Lehrbuch :slight_smile:

Einen schönen erholsamen Urlaub wünsche ich Dir!

Eines ist auch noch wichtig. Wenn Du den Motor so primitiv steuerst, musst Du die Zeit immer verkleinern während sich der Motor dreht. Der Schrittmotor rennt nicht vom Stand aus mit der maximalen Drehzahl los, auch wenn Deine Ansteuerung das so vorgeben würde. Durch die Trägheit bleibt der Motor dann stehen und brummt/piept nur weil der schnelle Wechsel des Magnetfelds dem Rotor keine Chance lässt überhaupt was zu machen.

Am besten eine Stepper Library nutzen. Da kann man z.B. auch die Beschleunigung anpassen. Dann sollte sich da auch von der Geschwindigkeit was erreichen lassen.

Falls der Motor beschleunigt und irgendwann bruumend/piepsend stehen bleibt, ist entweder die Beschleunigung zu hoch oder die Betriebsspannung reicht nicht aus. Also muß diese, wie combie und agmue vorgeschlagen haben, erhöht werden. Aber Vorsicht! Maximalspannung des Motortreibers beachten!

Gruß, Katsumi

  1. Der Schrittmotor dreht sich mimmer so schnell wie Du ihn ansteuerst.
  2. Wenn der Schrittmotor außer Schritt gerät weil das Lastmoment zu groß für den Motor bei dieser Dehzahl ist, dann bleibt er stehen und brummt nur noch.

Solange er dreht stimmt die Drehzahl mit der Ansteuerung zusammen.
Es kann notwendig sein den Motor langsam amzufahren und nicht gleich mit der vollen Drehzahl zu belasten.
Grüße Uwe

Katsumi_S:
Am besten eine Stepper Library nutzen. Da kann man z.B. auch die Beschleunigung anpassen. Dann sollte sich da auch von der Geschwindigkeit was erreichen lassen.

... oder das xxx variabel gestalten, damit sanft beschleunigt wird.

agmue:
... oder das xxx variabel gestalten, damit sanft beschleunigt wird.

Könnte man da nicht auch 'delay microseconds()' durch durch eine Konstruktion mit micros() ersetzen, so wie in 'Blink without delay' ? Bleiben da noch genügend Prozessortakte übrig um innerhalb 1 Mikrosekunde was Sinnvolles zu machen (z.B. Position prüfen)?

LG Stefan

uwefed:

  1. Der Schrittmotor dreht sich mimmer so schnell wie Du ihn ansteuerst.
    Solange er dreht stimmt die Drehzahl mit der Ansteuerung zusammen.

Naja, ganz so allgemein kann man das nicht sagen. Es gibt durchaus einen Lastbereich wo er nur einen Teil der Schritte verliert. D.h. er dreht zwar noch, aber die Schrittzahl stimmt nicht exakt.

Interessant wäre aber schon noch, welche Drehzahl Klaus denn tatsächlich erwartet. Was da erreichbar ist, hängt natürlich auch vom Motor ab.

Deltaflyer:
Könnte man da nicht auch 'delay microseconds()' durch durch eine Konstruktion mit micros() ersetzen, so wie in 'Blink without delay' ? Bleiben da noch genügend Prozessortakte übrig um innerhalb 1 Mikrosekunde was Sinnvolles zu machen (z.B. Position prüfen)?

Grundsätzlich geht das. Im Thema Anleitung Ein Endlicher Automat entsteht habe ich das versucht. Dazu bedarf es einer sehr schlanken Schleife (loop), eine serielle Ausgabe ist schon zu viel, der Motor stottert.

Seitdem nutze ich AccelStepper, da bin ich dann mal faul :smiley:

agmue:
Grundsätzlich geht das. Im Thema Anleitung Ein Endlicher Automat entsteht habe ich das versucht. Dazu bedarf es einer sehr schlanken Schleife (loop), eine serielle Ausgabe ist schon zu viel, der Motor stottert.

Seitdem nutze ich AccelStepper, da bin ich dann mal faul :smiley:

OK, nun ne Serielle Ausgabe brauch ich da nicht, aber den Vergleich eines wertes. Ein digitalRead ist wohl auch schon zuviel? Accelstepper nutze ich auch, würde aber gerne die Brems-Rampe unabhängig von der Anfahr-Rampe
einstellen. Accelstepper kann nur beide gleich da nur 1 Wert dafür vorgesehen ist.

LG Stefan

Deltaflyer:
Könnte man da nicht auch 'delay microseconds()' durch durch eine Konstruktion mit micros() ersetzen, so wie in 'Blink without delay' ? Bleiben da noch genügend Prozessortakte übrig um innerhalb 1 Mikrosekunde was Sinnvolles zu machen (z.B. Position prüfen)?

LG Stefan

Nein, in 1µS kann man nicht viel machen das sind ledglich 16 Takte.
delayMicroseconds() geht von 3µS bis 16383µS
https://www.arduino.cc/en/Reference/DelayMicroseconds
Grüße Uwe

Deltaflyer:
Accelstepper nutze ich auch, würde aber gerne die Brems-Rampe unabhängig von der Anfahr-Rampe einstellen. Accelstepper kann nur beide gleich da nur 1 Wert dafür vorgesehen ist.

In Random.pde wird setAcceleration auch in loop verwendet. Du könntest daher den Wert für Beschleunigen und Bremsen unterschiedlich einstellen.

Danke agmue,
muss ich ausprobieren ob das klappt. Da der Motor in 0,76 Sekunden auf voll ereichbare Drehzahl (ca 3000 U/min) beschleunigen und wieder abbremsen muss (unter Last). Die accelstepper kommt dabei mit der pulserzeugung nahe an ihre Grenzen. Bin mir auch nicht ganz sicher, ob die wegeinstellung dazu nicht neu berechnet werden muss, da der Brems-Zeitpunkt von der Gechwindigkeit und dem zurückzulegenden Weg abhängt.

Werde mir das aber auf jeden Fall noch genauer ansehen und die lib dahingehend nochmals studieren.

LG Stefan

Da der Motor in 0,76 Sekunden auf voll ereichbare Drehzahl (ca 3000 U/min) beschleunigen und wieder abbremsen muss

Da kommt ja schon ein Bürstenmotor in ernste Schwierigkeiten....

Ich bezweifle daß Du mit einem Schrittmotor überhaupt auf 3000U/min kommst.
Grüße Uwe

uwefed:
Ich bezweifle daß Du mit einem Schrittmotor überhaupt auf 3000U/min kommst.
Grüße Uwe

Nun mit 12V od. 24V und ner Stepper-Endstufe für 'Spielzeuge' wird das sicher nicht gehen. Ne etwas bessere Endstufe und 60V Betriebsspannung auf nem Nema23, dann geht das durchaus. Man darf da dann eben nicht die billigsten Komponenten einsetzen.
Messungen mit dem Drehzahlmesser haben ergeben, dass der Motor 3240 u/min erreicht. Und bei 60V hat er noch ein akzeptables Drehmoment. Reicht jedenfalls in meiner Anwendung. Allerdings geht es ohne Anfahrrampe nicht, da bleibt der Motor auch ohne Last einfach stehen.
Die Nema17 Stepper in meiner CNC-Fräse erreichen mit billigen China TB6600 Endstufen an 49V
immerhin 2334 U/Min. Diese Nema17 und die Endstufen sind beides Billig-Produckte und alles andere als Ideal, aber sie funktionieren, auch wenn mit anderen endstufen noch mehr herauszuholen wäre.

LG Stefan

Allerdings geht es ohne Anfahrrampe nicht,

Unter 0,8s auf 3000?

Wenn auch schon die Drehzahl an sich grenzwertig ist, dann ist die Beschleunigung erst recht eine Wucht.
Und dabei kennen wir die Last noch nicht einmal!

Wie auch immer…
Optimistisch es ist!

Nun, mit Optimismus hat das nix mehr zu tun, denn es läuft ja bereits! nur eben die Bremsrampe würde ich gerne etwas anpassen, ohne die Anfahrrampe zu ändern. Irgendwann wird mir auch das noch gelingen. Und die Daten wie Drehzahl und Laufzeit sind ja nicht geschätzt, sondern gemessen.

LG Stefan