Forum: Mikrocontroller und Digitale Elektronik Schrittmotor ansteuern


von Oliver (Gast)


Lesenswert?

Hallo.
Ich möchte einen Schrittmotor ansteuern und habe keine große Ahnung 
davon.

Die Hardware sieht so aus:
Der Motor hat 2 * 3 Anschlüsse (A - Mitte - B) die Mitte ist fest auf + 
5Volt verdrahtet.
Angesteuert wird er über einen ULN2803 und daran hängt ein MEGA32 mit 
einem Halben Port dran.
Ich fahre den AVR mit 16MHz.
Ich sollte vielleicht noch sagen das ich 3 Motoren dran habe.


Ich habe den Motor schon irgendwie im Halbschritt betrieb zum laufen 
gebracht, aber die Schritte sind einfach zu grob. Auch das Anfahren ist 
zu ruckelig.
Darum wollte ich das auf Micro-Schritte umbauen.

Tja, nur wie macht man das?

PWM ist glaube ich das Schlüsselwort dafür, nur wie macht man das?

Der Motor sollte dann nicht pfeifen!
Vielen Dank im voraus.

von johnny.m (Gast)


Lesenswert?

Google mal nach Microstepping. Da brauchst Du aber reichlich zusätzliche 
Hardware. Microstepping geht über den Strombegrenzungs-Chopper (den 
Deine Schaltung vermutlich nicht hat).

von Michael Wilhelm (Gast)


Lesenswert?

Unipolarmotoren und Mikrostepping ist sehr viel Aufwand. Wenn du die 
Chance hast, nimm Bipolarmotoren. Da wird dir eine Menge Arbeit von 
entsprechenden Motortreibern abgenommen.

MW

von johnny.m (Gast)


Lesenswert?

Die meisten Unipolar-Motoren lassen sich auch bipolar ansteuern 
(vorausgesetzt, die Wicklungen sind in Reihe, kann man einfach die 
Mittelanzapfung offen lassen). Dann brauchts aber einen anderen 
Ansteuerbaustein (z.B. L293 oder L298)

von Oliver (Gast)


Lesenswert?

Die Hardware kann ich leider nicht ändern. Ist so vorgegeben und muss so 
benutzt werden.
Einen Strombegrenzungs-Chopper gibt es nicht!

Ich habe es inzwischen mal mit einem PWM (wechseln zwischen 2 Step 
Positionen) versucht. Aber da komme ich nur auf eine gut hörbare 
Frequenz und ob ich da wirklich Zwischenschritte habe kann ich nicht 
erkennen. Der Motor ruckelt immer noch beim anfahren und halten.

von Lothar (Gast)


Lesenswert?

Dein ruckenldes Verhalten liegt daran, dass Du einen Stepper nicht ohne 
Beschleunigungskurve von null auf hundert fahren kannst. Jede Masse ist 
träge, er kommt nicht nach und verliert Schritte. Das passiert bei jeder 
Beschleunigung, Bremsen ist eben auch nur negatives Beschleunigen. Also 
mit einer Rampe von null auf max. Linear ist nicht optimal für das 
Schwingungsverhalten, aber einfacher zu realisieren als eine "weiche" 
Kurve.
Von Microstepp würde ich abraten weil die Genauigkeit und das Drehmoment 
leidet, kompliziert wird es auch, PWM für jede Spule. Lieber auf andere 
Stepper umsteigen. Bei Po.. gibts die Teile ab 2,95 mit 400S/U.

Grüsse Lothar

von Sascha F. (sascha_focus) Benutzerseite


Lesenswert?

Schau doch mal die App.-Note 446 von Atmel an.

Gruß Sascha

von Microstepspezialist (Gast)


Lesenswert?

Seit wann leidet das Drehmoment im Microstepbetrieb gegenüber Fullstep?

von Lothar (Gast)


Lesenswert?

Wenn ich den Spulenstrom reduziere um Zwischenstepps zu erreichen geht 
doch zwangsläufig das Drehmoment runter oder sehe ich da was falsch?? 
Zumindest muss es geringer sein, als bei Vollschritt mit 
Zweispulenansteuerung.

von Oliver (Gast)


Lesenswert?

Ich habe eine lineare Beschleunigungskurve eingebaut. Kann sein das die 
nicht perfekt ist. Muss ich mir noch mal ansehen.

Die App.-Note von Atmel hilft nur bedingt. Da wird nur ein Motor 
gesteuert und das im Halbschritt verfahren. Außerdem habe ich keine 
Rechenzeit mehr um alle die schönen Berechnungen zu machen. Das muss 
viel flotter laufen.

Das der Motor Schritte verlieren kann habe ich schon bei dem ersten Test 
im Halbschritt Modus feststellen können. Da hatte ich zu schnell die 
Schritte raus gegeben. Der Motor summte und blieb einfach stehen.

Diese Art der Ansteuerung wäre mir das liebste, aber die Auflösung 
reicht nicht und auch hier ist beim anfahren immer ein Ruckeln zu sehen 
gewesen.

Die Masse die ich bewege ist maximal 200g!  Glaube ich zu mindest.

Mir fällt gerade ein, das sowas doch auch in Lichtsteuerungen eingebaut 
sein muß.
Gibt es da nicht was vergleichbares? Am besten gleich mit Code!

von Rahul, der Trollige (Gast)


Lesenswert?

>Ich habe eine lineare Beschleunigungskurve eingebaut

Wie sieht die (Realisierung) aus?

>Der Motor summte und blieb einfach stehen.
Da war die Frequenz zu hoch!

>in Lichtsteuerungen eingebaut sein muß.

Die benutzen auch gerne Getriebe.

>Am besten gleich mit Code!
Zeig uns doch erst mal deinen - vielleicht kann man ihn noch optimieren.

>Wenn ich den Spulenstrom reduziere um Zwischenstepps zu erreichen geht
>doch zwangsläufig das Drehmoment runter oder sehe ich da was falsch??

Genau deswegen benutzt man den Chopper-Betrieb.

von Microstepspezialist (Gast)


Lesenswert?

Lothar, beim full step ziehst du den Motor aus jeweils größerer Distanz 
an und arbeitest obendrein noch gegen die Rotorschwingungen, die 
Schrittverluste induzieren können. Mit dem Microstepbetrieb wird das 
Feld gleichmässiger gedreht und der Rotor muss immer nur eine geringe 
Diszanz überwinden. Am Ende führt dies dazu, daß man mehr Beschleunigung 
fahren kann, was einem effektiv höheren wirksamen Drehmoment entspricht.

von Oliver (Gast)


Lesenswert?

Rahul, ich habe mir gerade sogenannte Scanner mal angesehen und die 
haben für die Spiegelaufhängung keine Getriebe eingebaut. So was wäre 
schon für mich die richtige Funktionsweise.

Den Haufen Code den ich mir bis jetzt zusammen geschrieben habe muss ich 
erst mal wieder aufräumen. Dann kann ich den hier mal zeigen. Großartig 
optimieren kann man den nicht mehr, außer in Assembler.

Die Start Rampe mache ich so das ich das Step-Delay linear reduziere.

Ich fange bei D = 20 an.
 D - 4
bis D <= 1

dann wird bei jedem Takt ein Step raus gegeben.

Beim Abbremsen wird mit D + 5 gerechnet.

Der Takt ist 1,5ms.

von Lothar (Gast)


Lesenswert?

@Microstepspezi, klingt logisch. Ich werde mir die Theorie mal 
anschauen. Ohne Zusatzhardware, rein softwaretechnisch kann ich mir das 
zwar nicht vorstellen, aber man könnte es ja mal versuchen mit 
vielleicht zehn Zwischenschritten. Zur Not, wie bei Oliver mit einem MC 
pro Achse. Obwohl, die Microsteps brauche ich ja nur zur 
Feinpositionierung, da wäre die Rechenzeit von der Beschleunigung frei, 
oder, wenn es nötig ist, beim Beschleunigen mit weniger 
Zwischenschritten arbeiten. Ein weites Feld zum Experimentieren.
Grüsse Lothar

von Oliver (Gast)


Lesenswert?

Das Micro-Schritt System läuft im 50us Takt und ich habe eine PWM 
Auflösung von 3.

von Rahul, der Trollige (Gast)


Lesenswert?

>aber man könnte es ja mal versuchen mit vielleicht zehn Zwischenschritten

Nimm lieber eine Zweierpotenz...

>Der Takt ist 1,5ms.
Ich guck mal nach, mit welcher Frequenz ich meinen Stepper drehen lasse.

von Oliver (Gast)


Lesenswert?

Wenn ich mehr Schritte nehme fällt auch die PWM Frequenz.
Ich hatte eigentlich 8 Schritte geplant, aber da war das Pfeifen mir zu 
nervig.
Reichen würden mir schon 2 Schritte , werde aber einen Kompromiss 
eingehen und 4 Schritte nehmen.

von Rahul, der Trollige (Gast)


Lesenswert?

Microstepping mit einem PIC (Grundlagen werden auch vermittelt):
http://ww1.microchip.com/downloads/en/AppNotes/00822a.pdf

Stepper-Fundamentals:
http://ww1.microchip.com/downloads/en/AppNotes/00907a.pdf

von Rahul, der Stinkige (Gast)


Lesenswert?

Mach es doch einfach wie ich! Kauf Dir ein geiles Application Board für 
nen Tausender mit ein paar Motoren und gut ist. Mit Deiner 
Hausfrauensteuerung wird das eh nix.

von Oliver (Gast)


Lesenswert?

Hausfrauensteuerung?

Sorry, aber da triffst Du den Falschen. Ich mache nur die Software.
Für diese Hardware bin ich nicht verantwortlich.
Ich hätte auch bessere Treiber eingebaut, aber der Kollege war der 
Meinung das wäre so schon okay.

Ist aber jetzt auch egal, ich muss die Motoren Drehen lassen.
Das wie ist leider meine Sache und da ich hier Probleme habe,
frage ich halt Euch.

von Rahul, der Trollige (Gast)


Lesenswert?

>Rahul, der Stinkige (Gast)

Immer diese schlechten Kopien...
Ich bin übrigens noch nicht dazu gekommen, nach der Betriebsfrequenz 
meines Steppers zu gucken.

von Oliver (Gast)


Lesenswert?

Hallo.

So ich hatte noch einen super Fehler in der Ansteuerung.
Man sollte die Micro-Steps auch in der richtigen Reihenfolge ausgeben!
Das könnte ungemein helfen!

Den PWM Timer habe ich auf 30us runter geschraubt und ich arbeite nun 
mit 4 Zwischenschritten. Mir wären zwar 2 Schritte lieber wegen der 
Frequenz und 8 Schritte wegen der Auflösung.
Nun ja, dann pfeift die Kiste halt!

Ich komme nur nicht weiter runter da ich schon 17us im Interrupt 
verbrate und der Rest will ja auch noch mal was machen.
Das ist schon perfekt optimiert, da ist nichts mehr raus zu holen.


Die Maximal Geschwindigkeit habe ich einfach durch probieren bestimmt.
Für die Rampen habe ich mir eine Tabelle gemacht.

// Start Rampe
Delay =  TAB_ACC[Delay]; // lade neue pausen Zeit bis zum naechsten Step
if (Delay <= 1)
   Mode = MODE_RUN;


// Stop Rampe
if (Delay  <= 32)
   Delay =  TAB_DCC[Delay]; // lade neue pausen Zeit bis zum naechsten 
Step
if (Delay >= 32)
   Mode = MODE_STOP;


Damit kann ich eine bessere Rampe fahren.
Die Tabelle ist noch nicht perfekt aber es läuft erstmal.

Rahul, hier könnte ich immer noch Deine Informationen gebrauchen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.