Forum: Mikrocontroller und Digitale Elektronik Schrittmotor Arduino Uno ruckelt je nach Drehzahl


von Karl-Alfred R. (karlalfred_r)


Lesenswert?

Hallo zusammen,

ich habe heute zum ersten Mal mit meinem Arduino Uno mit Vellemann VMA03 
Stepper-Shield und Reichelt Schrittmotor (QSH4218-51-049) + 
3A-Universalnetzteil (auf 9V eingestellt) experimentiert.

mit unten angehangenem Code läuft der Schrittmotor zwar mit ca 1-2 
Umdrehungen pro Sekunde, aber wenn ich die Drehzahl ändern will, indem 
ich z.B. STEPS oder stepper.setspeed() entsprechend abändere, ruckelt 
der Motor mehr oder weniger. Bei manchen Parametern  scheint er nicht 
einmal zu wissen, ob er vorwärts oder rückwärts laufen soll. Was könnte 
hier falsch sein?

Vielen Dank und viele Grüße
Karl
1
#include <Stepper.h>
2
 
3
/* STEPS muss auf die Anzahl der Stepps des verwendeten Motors angepasst werden */
4
#define STEPS 1000
5
 
6
// eine Instanz aus der Klasse Stepper wird erzeugt
7
// sie bekommt die Anzahl der Steps und die Pins, an die der Schrittmotor
8
// angeschlossen ist übermittelt
9
Stepper stepper(STEPS, 3, 8, 9, 2);
10
 
11
int previous = 0;
12
 
13
void setup(){
14
  stepper.setSpeed(25);  // setzt die Geschwindigkeit des Motors in Umdrehungen pro Minute
15
}
16
 
17
void loop(){
18
  int val = 1000;
19
  // dreht den Motor ja nach Sensorwert (Potentiometer)
20
  stepper.step(val - previous);
21
  previous = val;
22
 }

: Bearbeitet durch User
von Fehlschritt (Gast)


Lesenswert?

Karl-Alfred R. schrieb:
> mit Vellemann VMA03
> Stepper-Shield

Wegschmeissen, taugt nicht für Schrittmotore.

von Jens (Gast)


Lesenswert?

Soll das alleine nur mit dem Teil laufen.
Ich kann mich da leider nur meinem Vorredner anschließen nachdem ich ins 
Datenblatt geschaut habe.
Da fehlt der gesamte Stromchopper. Schrittmotoren werden mit konstantem 
Strom betrieben. Schau mal ins Datenblatt wie der L298, der auf dem 
Shield ist, eigentlich verwendet wird. Du brauchst noch den L297.

Das sowas verkauft wird für das Geld! Eine Unverschämtheit!
Schau mal hier im Forum nach UV-Laserdrucker. Da ist drin wie man 
Schrittmotoren verbaut.

Ein alternativer Treiber, den du nehmen kannst ist der DRV8825 von 
Polulu. Das Modul gibt es für kleines Geld bei eBay.

http://www.ebay.de/itm/A4988-DRV8825-Stepper-Motor-Schrittmotor-Driver-3D-Drucker-Arduino-RepRap-/281724598464?var=&hash=item41981838c0:m:makm3WkM1AHhFlCagYHe_sw


Grüße, Jens

von MaWin (Gast)


Lesenswert?

Karl-Alfred R. schrieb:
> Was könnte hier falsch sein?

Du hast Grundlagen über Schrittmotoren nicht gelesen oder nicht 
verstanden.

Es ist normal, daß unbelastete Schrittmotoren Resonanzfrequenzen haben 
bei denen sie nicht laufen. Das verhindert man mit einer 
Bremsresonatorplatte (anfassen der Welle, Einbau in echte Anwendung 
verändert Resonanzen oder eliminiert sie) oder geschicktem Umschalten 
zwischen Vollschritt und Halbschritt, da dein Billigmodul mit dem 
steinzeitalten L298 keinen Mikroschritt kann.

Steht alles z.B. hier
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.10
aber aus irgendwelchen Gründen weigern sich die Leute ja sich vorher 
schlau zu lesen sondern kaufen erst mal um die Kaufsucht zu befriedigen 
und fragen dann.

von Markus F. (mfro)


Lesenswert?

Der Motor hat übrigens 200 Schritte/Umdrehung. Nicht 1000.

Außerdem steht dein Problem im Datenblatt beschrieben. Ohne ausreichend 
"Bremswirkung" der Anwendung "überholt" er sich selbst.

von Karl-Alfred R. (karlalfred_r)


Lesenswert?

Vielen Dank für Eure Antworten.

Darauf, dass die Motoren gebremst werden müssen, wäre ich nie gekommen. 
Auch weil in Youtube etliche Beispiele vorhanden sind, in denen 
Schrittmotoren ohne sichtbare Bremsen arbeiten.

Wenn das von mir verwendete Shield nicht so gut ist und in Youtube 
meistens ein Adafruid Motor Shield verwendet wird, werde ich mir das 
wohl auch bestellen.

von Jens (Gast)


Lesenswert?

@Markus

Der Motor kann sich nicht selbst überholen. Das ist auch nicht das 
Problem!

Das Problem ist die Elektronik, die verwendet wird. Der Motor wird gar 
nicht richtig betrieben!
So wie ich geschrieben habe ist für den Betrieb eine Stromregelung 
erforderlich. Die ist aber so auf dem Board nicht drauf!

Man könnte nun den fehlenden Teil ergänzen. Man muss es nicht gleich 
entsorgen.
Und es liegt auch nicht am L298. Der ist zwar älter, aber der 
funktioniert. Auch mit einem Motor im Leerlauf und ohne Last. Ich habe 
da auch schon die Stromregelung diskret aufgebaut und habe damit den 
Motor im Mikroschrittbetrieb laufen lasse. Das kann schon funktionieren.

Was aber fehlt ist offensichtlich das Verständnis wie ein Schrittmotor 
funktioniert und wie der angesteuert werden muss. Ohne diese Wissen 
nützt auch ein anderes Shield nichts!

Es gibt von ST einige AppNotes die das beschreiben. Ich empfehle diese 
erst durchzuarbeiten. Da kommt man leider nicht drum herum!

Grüße, Jens

von Klaus (Gast)


Lesenswert?

Arduino? Shield? Hüstel. Das hätten die gerne, das die Verwendung dieser 
Worte und Teile alle anderen Probleme löst. Gleich in den MÜll den Müll,

Erstmal analoge Elektronik, digitale Elektronik, Programmierung, 
Prozessoren und Peripherie und dazu mal ein wenig Elektromagnetismus und 
zum guten Schluss mal ein gutes Buch über Schrittmotoren.

Das Gerücht, dass man alles erreichen kann wenn man nur lange genug in 
Foren fragt, ist eben nur ein Gerücht.

von Karl-Alfred R. (karlalfred_r)


Lesenswert?

Wäre es denn theoretisch möglich, ein Shield zu bauen, an das man einen 
beliebigen Bipolar-Schrittmotor mit beliebiger Last (natürlich weniger 
Last als das maximale Drehmoment des Motors) anschließen kann und den 
man mit ein paar Befehlen laufen lassen kann?  Also alles mit 
Stromregelung usw sollte automatisch passieren?

: Bearbeitet durch User
von wendelsberg (Gast)


Lesenswert?

Karl-Alfred R. schrieb:
> an das man einen
> beliebigen Bipolar-Schrittmotor anschließen kann

Nein.

wendelsberg

von Klaus (Gast)


Lesenswert?

Karl-Alfred R. schrieb:
> Wäre es denn theoretisch möglich, ein Shield zu bauen, an das man einen
> beliebigen Bipolar-Schrittmotor mit beliebiger Last (natürlich weniger
> Last als das maximale Drehmoment des Motors) anschließen kann und den
> man mit ein paar Befehlen laufen lassen kann?  Also alles mit
> Stromregelung usw sollte automatisch passieren?

Bei jedem Verfahren oder Gerät gibt es Grenzwerte und Nebenumstände. Die 
Pudelsicheren absolut narrenfreien Teile gibt es nicht. Etwas 
Urteilsvermögen braucht man immer.

von meckerziege (Gast)


Lesenswert?

Klaus schrieb:
> Die
> Pudelsicheren absolut narrenfreien Teile gibt es nicht. Etwas
> Urteilsvermögen braucht man immer.

Und damit dürfte das Problem für den typischen Arduino-Frickler nicht 
mehr lösbar sein...

@Topic: Es muss nicht immer ein Shield sein, du kannst dir auch selbst 
eine schöne Schaltung aufbauen :-) Genau für den Zweck mit den 
Randbedingungen die DU haben willst.

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

Hallo Karl-Alfred,

> Wäre es denn theoretisch möglich, ein Shield zu bauen, an das man einen
> beliebigen Bipolar-Schrittmotor mit beliebiger Last (natürlich weniger
> Last als das maximale Drehmoment des Motors) anschließen kann und den
> man mit ein paar Befehlen laufen lassen kann?  Also alles mit
> Stromregelung usw sollte automatisch passieren?

Jain. Das "Shield" bzw. die Endstufe muss natürlich zum Motor und dessen 
Strombedarf passen. Von der Programmierung her ist es aber im Prinzip 
egal, welche Hardware hinten drann hängt. Zumindest, wenn man die 
AccelStepper-Lib verwendet und die Hardware Takt-/Richtungssignale 
versteht. Dann kann man auch "echte" Endstufen mit richtig dicken 
Motoren verwenden:
http://www.schrittmotor-blog.de/ansteuern-von-schrittmotoren-mit-arduino/

Mit freundlichen Grüßen
Thorsten Ostermann

von MaWin (Gast)


Lesenswert?

Jens schrieb:
> Der Motor kann sich nicht selbst überholen. Das ist auch nicht das
> Problem!

Er hat da aber schon einen sehr empfindlichen Motor ausgesucht, fast wie 
ein BLDC.

> Und es liegt auch nicht am L298. Der ist zwar älter, aber der
> funktioniert.

Na ja, Mikroschritt kann er nicht. Mit Mikroschritten hätte er das 
Problem so schnell nicht. TB6560 oder ähnliche Stepper-Driver wären also 
eine glücklichere Auswahl gewesen. Und schneller läuft der Motor dann 
wegen der Stromregelung an überhöhter Betriebsspannung auch noch, wie 
man bei L298 zwar mit dem L297 nachrüsten könnte, aber der ist auf der 
billigen Platine nicht drauf, wie du schon selbst festgestellt hast.

von Klaus (Gast)


Lesenswert?

Thorsten O. schrieb:
> Hallo Karl-Alfred,
>
>> Wäre es denn theoretisch möglich,
>
> Jain. [...]
> http://www.schrittmotor-blog.de/ansteuern-von-schrittmotoren-mit-arduino/

Na toll. Da nutzt man dann gleich mal die Gelegenheit, ein wenig für 
sein eigenes Gewerbe werben.

Ich bitte Dich höflich, dass zu unterlassen.

von Karl-Alfred R. (karlalfred_r)


Lesenswert?

>> Er hat da aber schon einen sehr empfindlichen Motor ausgesucht,
>> fast wie ein BLDC.

Welchen Motor würdest du für einen Anfänger eher empfehlen?

Gibt es empfehlenswerte Arduino-Shields mit Treibern die sowohl 
Microstepping, als auch Stromregelung können?

: Bearbeitet durch User
von W.A. (Gast)


Lesenswert?

Karl-Alfred R. schrieb:
> Gibt es empfehlenswerte Arduino-Shields mit Treibern die sowohl
> Microstepping, als auch Stromregelung können?

Muss es unbedingt ein Schild sein? Für kleine Motoren gibt es den A3967, 
wie er auf Boards bei ebay z.B. unter 201414925354 angeboten wird.

von Jens (Gast)


Lesenswert?

Hallo Karl-Alfred,

Das würde ich dir auch empfehlen. Es gibt eine große Community zu 3D 
Druckern. Die laufen eigentlich alle mit Schrittmotoren. Und da das 
schon so weit verbreitet ist sind die Bauteile dazu sogar billig!
Einfach bei ebay mal danach suchen. Die Treiber wurden schon genannt. Es 
gibt einen von Allegro (A4988), TI (DRV8825) und vielleicht auch noch 
andere. Einen kompletten Marktüberblick habe ich da auch nicht.
Viele steuern die Teile auch mit einem Arduino an und haben damit gute 
Erfolge und Ergebnisse.

Ich mag die Arduino Geschichte persönlich zwar auch nicht, aber das ist 
KEIN Grund, das gleich zu verwerfen. Einen Schrittmotor wirst du da sich 
ansteuern können!
Besorge dir einen Treiber wie den DRV8825 (der kann auch gleich 
Microstepping und Stromregelung) und einen Motor aus den 3D Druckern 
(etwa 12€) und dann sollte das laufen! Du wirst da im Forum sicher auch 
fertigen Code finden. Wie gesagt, die Teile sind sehr verbreitet!

Auch wenn hier steht, dass Thorsten Ostermann das persönlich als Werbung 
nutzt, die Hinweise von Ihm solltest du ernst nehmen.
Ich kenne ihn nicht persönlich aber seine Beiträge aus anderen 
Diskussionen hier. Er weiß auf jeden Fall wovon er spricht. Er hat 
sicher schon Schrittmotoren betrieben.


Grüße, Jens

von MaWin (Gast)


Lesenswert?

Karl-Alfred R. schrieb:
> Gibt es empfehlenswerte Arduino-Shields mit Treibern die sowohl
> Microstepping, als auch Stromregelung können?

Nicht dass ich wüsste. Da die Arduino-Gefolgschaft als Horde 
uninformierter Laien betrachtet wird, versucht dort jeder Hersteller 
seinen alten Schrott abzukippen in dem er shield draufschreibt.

Aber TB6560 Platinen gibt es reichlich, man muss halt die Kabel selber 
rüberziehen, STEP und DIR haben die auch, abreiten alöso mit denselben 
Libraries zusammen. Man braucht halt 4/16/64 steps pro Schritt.

http://www.ebay.de/itm/1-Stuck-TB6560-3A-Schrittmotor-Treiberplatine-Treiber-Einachs-Controller-10V-35V-/141470140737
es müssen ja nicht die berüchtigen mit der blauen Leiterplatte sein.

Karl-Alfred R. schrieb:
> Welchen Motor würdest du für einen Anfänger eher empfehlen?

Einen mit einem höheren Rastmoment. Aber mit TB6560 bekommen sie ja nun 
ihren Mikroschritt.

von Karl-Alfred R. (karlalfred_r)


Lesenswert?

Habe ich es so alles richtig verstanden?

1. Die einfachen Shields, wie das von mir gekaufte Velleman sind reine 
Endstufen und haben keine Eigenintelligenz.  Sprich, die Signale, die 
der Arduino aus vier Pins raushaut, werden einfach nur in der Spannung 
verstärkt und die Ausgänge solcher Shields halten mehr Strom aus, als 
die Mikrocontroller-Pins eines Arduinos.

2. Die Stromregelung bei den besseren Shields oder den kleinen 
Platinchen mit dem L297 zB. ist nur eine reine Strombegrenzung und 
regelt NICHT die Stromstärke in Abhängigkeit von der Rotorstellung.


3. Bei den Microschritten werden einzelne Spulen nicht nur ein und 
ausgeschaltet, sondern bekommen mit PWM auch Zwischenwerte zwischen ein 
und aus. Dabei wird das PWM dann im Shield erzeugt.  Der Arduino gibt 
nur eine Information, dass bei jedem Takt den er auf ein Taktpin gibt, 
ein Mikroschritt anstatt eines Vollschrittes gemacht werden soll und 
noch die Drehrichtung.

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Karl-Alfred R. schrieb:
> Habe ich es so alles richtig verstanden?

Ja.

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.