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
Stepperstepper(STEPS,3,8,9,2);
10
11
intprevious=0;
12
13
voidsetup(){
14
stepper.setSpeed(25);// setzt die Geschwindigkeit des Motors in Umdrehungen pro Minute
15
}
16
17
voidloop(){
18
intval=1000;
19
// dreht den Motor ja nach Sensorwert (Potentiometer)
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
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.
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.
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.
@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
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.
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?
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.
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.
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
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.
>> 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?
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.
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
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.
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.