Forum: Mikrocontroller und Digitale Elektronik arduino L298 stepper beschleunigen


von jeff o. (Firma: none) (pongo)


Lesenswert?

hallo,

Ich habe einen steppermotor aus einem Drucker mit einem arduino und 
einem L298 ans laufen gebracht. Soweit sogut :-)
Die signale lasse ich von der stepper.h ausgeben also einfach mit

stepper.setspeed(10)

loop{stepper.step(200)}

das Problem ist dass ich es nicht schneller als 100rpm stellen kann weil 
der motor dann nur noch vibriert.

ich habe EnA unEnB auf Ground gelegt und geh mit 10 V auf die V_s

jetzt habe ich mir gedacht dass die spulen die spanung nicht schnell 
genug abbauen und somit der motor keine steps mehr ausfÜhrt. Könte ich 
mr da mit kondensatoren helfen?? wenn ja wie rechne ich mir diese aus 
und wie muss ich die anschliessen?
Oder bin ich total auf dem Holzweg?

eigentlich will ich einen bipolaren 48 V 1,8A 200steps/360° motor 
ansteuern der in eine CNC frÄse kommt, daher wären mind. 1000rpm nötig ( 
was immer noch recht langsam in bezug auf die Fräse ist)
aber mal mit etwas kleinerem anfangen.
danke im Voraus
mfg pongo

von spess53 (Gast)


Lesenswert?

Hi

>Ich habe einen steppermotor aus einem Drucker mit einem arduino und
>einem L298 ans laufen gebracht.

Ohne Stromreglung durch L297 o.ä.?

>jetzt habe ich mir gedacht dass die spulen die spanung nicht schnell
>genug abbauen und somit der motor keine steps mehr ausfÜhrt.

Nein. Der Strom kann sich nicht schnell genug aufbauen.

Vergiss diesen ollen L298 und kaufe dir einen ordentlichen Treiber:

http://www.watterott.com/de/Schnittstellen/Motorsteuerungen/Schrittmotor

MfG Spess

von jeff o. (Firma: none) (pongo)


Lesenswert?

hallo, danke für die schnelle antwort

Ja ohne stromregelung durch L 297 ( erstmal)
was erreiche ich zusätzlich durch den? und ist er überhaupt kompatibel 
mit 48V?

das problem ist dass ich die motoren schon habe 
(http://www.sorotec.de/shop/product_info.php/info/p2599_schrittmotor-4-2a-bipolar---3nm-ds.html)und 
Probleme hab einen Treiber zu finden der mit dieser spannung zurecht 
kommt. ich habe eine Seite gefunden um den L297 zusätzlich einzubauen. 
Die frage ist was mir dieser aufwand bringt.
da ich schon recht viel für die Mechanik ausgegeben habe bin ich jetzt 
etwas schlecht bei kasse um einen teuren treiber zu kaufen.

von Uwe (Gast)


Lesenswert?

> Die frage ist was mir dieser aufwand bringt.
Mehr rpm und bessere Laufeigenschaften, aber total veraltet
> da ich schon recht viel für die Mechanik ausgegeben habe bin ich jetzt
> etwas schlecht bei kasse um einen teuren treiber zu kaufen.
Der Treiber ist normalerweise genauso teuer wie der Motor.
Für nen 500€ Motor sollte man auch 500€ für den Treiber haben, ansonsten 
kann man sich den 500€ Motor auch sparen.
100€ wirst du wohl pro Achse ans Bein binden müßen wenns halbwegs genau 
werden soll ( CNC wenn ich richtig verstanden hab).
Wenn man selber baut und noch ne Leiterkarte anfertigen muß und die 
Arbeitszeit und nen paar ICs kommt man eventuell auf 200€ für alle 3 
Achsen.

von jeff o. (Firma: none) (pongo)


Lesenswert?

hi,

das hab ich auch schon befürchtet, die motoren haben um die 50€ das 
Stück gekostet.
da ich eigentlich alles selber machen wollte inklusive software und das 
ganze mit einem arduino steuern will, habe ich nicht mehr mit so viel 
gerechnet. Grundsätzlich sollte es mit den schaltungen möglich sein 
oder?

die motor driver boards gibts wie sang am mehr und ich weiss net wo 
anfangen, und irgendwas bestellen und hoffen dass es passt ist bei dem 
preis auch schwierig.

da sind die Treiberchips ganz cool, da man mit denen um ein paar euro 
mal rumspielen kann.

falls irgendwer ne idde hat oder ein paar geeignete links... bin für 
alles dankbar

von Spess53 (Gast)


Lesenswert?

Hi

>was erreiche ich zusätzlich durch den? und ist er überhaupt kompatibel
>mit 48V?

Erstmal hat dein Motor keine 48V. Je nach Schaltung der Wicklungen wird 
der Nennstrom bei 5,5V bzw. 2,8V erreicht. Die 48V ist die Spannung des 
Treibers. Und die kann nur verwendet werden wenn der Treiber mit einer 
Stromreglung (Chopperbetrieb) arbeitet. Ohne himmelst du den Motor in 
kürzester Zeit.

MfG Spess

von Dog G. (dogger) Flattr this


Lesenswert?

Also was erst einmal mit den Kosten :

L298: 2,45 €
http://www.pollin.de/shop/dt/NzgwOTk4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/IC/Schrittmotor_Treiber_L298.html

L297: 3 €
http://www.pollin.de/shop/dt/MjgwOTk4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/IC/Schrittmotor_Controller_L297.html

Schrittmotor ( bringt was er leisten soll und wird nicht heiß )  15,49 €
http://www.pollin.de/shop/dt/NDQ1OTg2OTk-/Motoren/Schrittmotoren/Schrittmotor_PSM35BYG104_1_8_.html

oder wenn es mehr sein soll  Halte-Moment 0,9 Nm und kleinere Spannung
(noch nicht getestet)            ca. 30,00 €

und die anderen Bauteile für dein Treiber an denen du nicht sparen 
solltest.
http://www.mikrocontroller.net/attachment/35894/Schrittmotor_Steuerung3.gif

5-10€

Entscheidende Teile:
-Kühlkörper
-Dioden
-Kondensatoren die 2200yF sind viel aber sinnvoll ( mit einer Diode und 
einem Wiederstand solltest du den Einschaltstrom begrenzen )

Wenn du das aufgebaut hast kannst du damit testen und hast das nötige 
Verständnis dich an teurere Schrittmotoren und Treiber ran zutrauen !

Ist billiger als den 50€ Motor zu zerschießen und immer noch nichts 
verstanden zu haben !

von McBain (Gast)


Lesenswert?

jeff ognop schrieb:
> das Problem ist dass ich es nicht schneller als 100rpm stellen kann weil
> der motor dann nur noch vibriert.

Wird durch Verwendung der Stepper.h eine Rampe für's Beschleunigen bzw. 
Bremsen generiert? Ich bastel auch gerade mit Arduino Mega und 
Schrittmotorendstufe rum, und wenn ich eine hohe Drehzahl ohne Rampe an 
den Motor lege, brummt der nur. Mit Rampe zieht der schön sauber hoch. 
Ach so: Ich arbeite nicht mit der Stepper.h, ich mach's zu Fuß...

von jeff o. (Firma: none) (pongo)


Lesenswert?

hi McBain,

was genau meinst du mit Rampe? welches board benutzt du?
könntest deinen Code posten?

l.g. jeff

von Spess53 (Gast)


Lesenswert?

Hi

>Ach so: Ich arbeite nicht mit der Stepper.h, ich mach's zu Fuß...

Gibt es doch als AppNote von ATMEL:

http://www.atmel.com/Images/doc8017.pdf
http://www.atmel.com/Images/AVR446.zip

MfG Spess

von Michael (Gast)


Lesenswert?

jeff ognop schrieb:
> das Problem ist dass ich es nicht schneller als 100rpm stellen kann weil
> der motor dann nur noch vibriert.

Dann reicht das erzeugte Drehmoment nicht aus, weil sich der Spulenstrom 
nicht so schnell auf bzw. abbauen kann, wie du die Schritte steuerst.

Bei modernen Schrittmotortreibern wird deshalb der Motor mit satter 
Überspannung betrieben und der Spulenstrom über eine PWM geregelt. Mit 
dem L298 alleine geht das aber nicht, mal abgesehen davon, dass der 
deinen zulässigen Motorstrom insbesondere bei Parallelschaltung der 
Wicklungen nicht treiben kann. Weil die Parallelschaltung die kleinere 
Induktivität ergibt, lassen sich damit aber höhere 
Schrittgeschwindigkeiten erreichen.

von McBain (Gast)


Lesenswert?

jeff ognop schrieb:
> hi McBain,
>
> was genau meinst du mit Rampe? welches board benutzt du?
> könntest deinen Code posten?
>
> l.g. jeff

Hmmmm- Strg-C und Strg-V aus der Arduino IDE geht nicht. Warum auch 
immer... Im Prinzip gebe ich über ein Poti einen Sollwert vor, und 
mittels Schleife zähle ich den Istwert in die entsprechende Richtung 
(schneller oder langsamer).

von McBain (Gast)


Lesenswert?

Meine Brettchen sind ein Arduino Mega 2560 R3 und ein MDLCNC-T 
(Modellbau Letmathe). Deshalb muss ich mir keinen Kopf um vier Signale 
pro Motor machen, zwei (Richtung und Schritt) reichen aus.
Mit Rampe meine ich das kontinuierliche Ändern der Geschwindigkeit- 
nicht von 0 auf 100 von einen Schritt auf den nächsten, sondern 
innerhalb einer gewissen Zeitspanne. Ha- jetzt geht Copy-Paste:
1
int TogglePin = 7;
2
int YellowPin = 13;
3
int EnablePin = 44;
4
int StepXPin = 42;
5
int DirXPin = 46;
6
int RelayPin = 40;
7
int vSoll,vIst = 0;
8
9
10
void setup() {
11
  pinMode(TogglePin, INPUT);
12
  pinMode(YellowPin, OUTPUT);
13
  pinMode(EnablePin, OUTPUT);
14
  pinMode(StepXPin, OUTPUT);
15
  pinMode(DirXPin, OUTPUT);
16
  pinMode(RelayPin, OUTPUT);
17
}
18
19
20
void loop() {
21
  vSoll = analogRead(A0) << 5;
22
  digitalWrite(RelayPin, HIGH);
23
  
24
  if (digitalRead(TogglePin) == LOW) {
25
    digitalWrite(EnablePin, LOW);
26
    for (vIst; vIst < vSoll; vIst++){
27
      tone(StepXPin, vIst);
28
      delayMicroseconds(50);
29
    }
30
  }
31
  
32
  if (digitalRead(TogglePin) == HIGH) {
33
    for (vIst; vIst > 0; vIst--){
34
      tone(StepXPin, vIst);
35
      delayMicroseconds(50);
36
    }
37
    digitalWrite(EnablePin, HIGH);
38
  }
39
  
40
  analogWrite(YellowPin, vSoll >> 2); 
41
}

Das ist ganz rudimentärer Code- sobald einmal TogglePin betätigt wurde, 
zählt die ++Schleife die Schrittfrequenz hoch. Ich hab's mit tone() 
gemacht, da ich zu faul war, etwas Exaktes zu basteln. Zum Anderen fehlt 
eine weitere Abbruchbedingung in den Schleifen- die laufen solange, bis 
die Sollgeschwindigkeit (vSoll) erreicht ist. Mit delayMicroseconds() 
kannst du einstellen, wie schnell sich die Schrittfrequenz ändert. Das 
Programm habe ich mir nur mal fix zum Testen der Maximaldrehzahl 
gestrickt- für irgendwelche Positionieraktionen taugt der natürlich 
nicht...

von jeff o. (Firma: none) (pongo)


Lesenswert?

super, vielen dank.

Ich spiel mal bissl rum und berichte wies funktionniert.

vielen danke für die Hilfe

von McBain (Gast)


Lesenswert?

PS: Auf dem MDLCNC-T-Board sind als Treiber TB6560AHQ verbaut- die 
machen bis jetzt einen guten Eindruck. An der Endstufe hatte ich schon 
popelige Nadeldruckerschrittmotoren (NEMA 17) als auch dicke Nanotec 
(NEMA 34) zu hängen- ging alles bestens...

von F. F. (foldi)


Lesenswert?

> Das ist ganz rudimentärer Code- sobald einmal TogglePin betätigt wurde,
> zählt die ++Schleife die Schrittfrequenz hoch. Ich hab's mit tone()
> gemacht, da ich zu faul war, etwas Exaktes zu basteln. Zum Anderen fehlt
> eine weitere Abbruchbedingung in den Schleifen- die laufen solange, bis
> die Sollgeschwindigkeit (vSoll) erreicht ist. Mit delayMicroseconds()
> kannst du einstellen, wie schnell sich die Schrittfrequenz ändert. Das
> Programm habe ich mir nur mal fix zum Testen der Maximaldrehzahl
> gestrickt- für irgendwelche Positionieraktionen taugt der natürlich
> nicht...

Finde ich toll, wie du die Variablen bezeichnet hast! So kann man das 
gut lesen.
Werde mir auch mal Gedanken machen, wie man die eine oder andere 
Variable (oder die Pins) bezeichnen sollte.

Gruß
Frank

von McBain (Gast)


Lesenswert?

Habe hier im Forum folgendes entdeckt: https://github.com/grbl/grbl "An 
open source, embedded, high performance g-code-parser and CNC milling 
controller written in optimized C that will run on a straight Arduino" 
So wie es aussieht leider nicht für Mega 2560

von Dog G. (dogger) Flattr this


Lesenswert?

Mal ein bischen kleinerer Code von mir wozu du aber ein Treiber 
brauchst.

Bin bei meinem Arduino UNO zummlich schnell auf geschwindichkeitsgrenzen 
gesstossen weil ja nur das beschäftigen von einem Schrittmotor nich all 
seine Aufgaben sein sollte.
>Der Motor machte bei jedem Loop ein keinen Aussetzer besonders wenn er bzw seine 
Geschwindichkeit von anderen Faktoren abhänig ist.
1
// 2 ist der Schrittausgag muss aber nur einmal erwähnt werden !
2
byte RL=4;   // Recht oder Links laufen lassen
3
byte ON=3;   // Schaltet mein Treiber an (Wichtig)
4
void setup() {
5
pinMode(RL,OUTPUT);
6
pinMode(3,OUTPUT);  
7
digitalWrite(3, HIGH);
8
9
Serial.begin(9600);
10
}
11
12
void loop() {
13
  
14
  int sensorValue = analogRead(A3)-500; // der Poti wird ausgelesen und sein mittelwert als Null deklariert (-481 bis +481)
15
  int Zahl  ; // der int "Zahl" sind die Schritte die der Motor machen soll
16
    if (sensorValue < 0 ) // mit dieser if steuerung wird der Wert des Potimitterwertes immer als Positiver Zahl wieder gegeben!
17
   {                      
18
    int (Zahl = -6) ;         // maximal kann ich 6x500 Schritte machen !
19
    digitalWrite (RL, HIGH);  // und egal welche Richtung muss "Zahl" immer positiv sein
20
   }else{
21
     int (Zahl = 6) ;
22
     digitalWrite (RL , LOW);
23
   }
24
 
25
  tone(2, sensorValue*Zahl); // "tone" wir benutzt um ein Ton zu erzeugen 
26
                             // ich missbrauche tone um meine Schrittfrequenz zu erzeugen weil ohne unterbrechung läuft ! 
27
28
}

Mit einem Poti kannst du dann selber rausfinden wie schnell dein Motor 
laufen kann!

von Dog G. (dogger) Flattr this


Lesenswert?

Jetzt hätte ich zu den Thema noch eine Frage (da hier ja schon welche 
mit den Kenntnissen Dran sind ... mache auch einen neuen Beitrag draus 
wenn die Frage interessant ist )
Wenn ich über ein Schrittmotortreiber (L287) den Motorstrom einstelle, 
weil ich natürlich die dreifache Nennspannung des Motors nutze fährt der 
Motor dann nicht immer mit einer viel zu geringen Leistung an ? Weil ich 
ja auch bei kleinen Drehzahlen darauf achten muss das der Strom 1/3 des 
Stromes. sein muss den ich bei der Nennspannung am Motor habe ? Ich kann 
dann immer nur sehr kleine Spannungen an den Wicklungen messen 
(Wechselspannung)

Ist die ( Sorge ) unbegründet oder gibt es die Möglichkeit die wirkliche 
Leistung am Motor so auszuwerten das ich den Vref am L287 so steuern 
kann das bei jeder Drehzahl der Schrittmotor perfekt ausgelastet ist !

von Spess53 (Gast)


Lesenswert?

Hi

>ja auch bei kleinen Drehzahlen darauf achten muss das der Strom 1/3 des
>Stromes sein muss den ich bei der Nennspannung am Motor habe ?

Wie kommst du auf 1/3 des Stromes bei Nennspannung?

MfG Spess

von Dog G. (dogger) Flattr this


Lesenswert?

> Wie kommst du auf 1/3 des Stromes bei Nennspannung?

Wenn ich die dreifache Spannung nehme muss ich den Strom begrenzen ! 
(Chopperbetrieb)

zb.
Motor: 12V, 30 Ohm = 0,4 A
Treiber bekommt 24V also muss ich den Strom unter 0,2A halten !??
da ich daß, aber nur am Treibereingang genau messen kann würde ich gerne 
wissen ob das auch der Wert ist nach dem ich mich richten muss ?

von spess53 (Gast)


Lesenswert?

Hi

>Wenn ich die dreifache Spannung nehme muss ich den Strom begrenzen !

Ja, auf den Nennstrom.

MfG Spess

von Dog G. (dogger) Flattr this


Lesenswert?

Ach so nochmal zu dem L298 es gibt auch die Möglichkeit die Spannung zu 
erhöhen ohne Treiber für den L298:
>Man kann Widerstände in Reihe zu den Motorwindungen schalten!

Und was kann mann nun tuhen damit der Motor auch bei hohen Drehzahlen 
mit ausreichen Strom beliefert wird ?
Um so höher die Drehzahl desto geringer die verbrauchte Leistung meines 
Treibers ! ( zu mindestens laut meines Gleichspannung-strommessers )
Daraus nochmal meine Frage:
Ist der Strom den ich über die Gleichspannung Messgeräte am Eingang 
meines Treibers messe auch wirklich der Strom der über eine Wicklung 
meines Schrittmotors geht ? (leider habe ich kein galvanisch getrenntes 
Oszilloskop um die Wicklungen zu messen ! )

von Spess53 (Gast)


Lesenswert?

Hi

>leider habe ich kein galvanisch getrenntes
>Oszilloskop um die Wicklungen zu messen !

Da braucht man kein Galvanisch getrennten Oszi. Ein kleiner Widerstand 
mit passender Leistung zwischen Sense-Anschluss des L298 und Masse und 
der Rest ist I=U/R.

MfG Spess

von Dog G. (dogger) Flattr this


Lesenswert?

>>Man kann Widerstände in Reihe zu den Motorwindungen schalten!

Hat damit jemand schon Erfahrung gemacht ?
Ein RL-Tiefpass wäre theoretisch genau das was Mann brauch:
bei kleiner Drehzahl fäll die Spannung hauptsächlich am Wiederstand ab 
und
bei hoher Drehzahl fäll die Spannung hauptsächlich an der Spule ab ... 
was nicht weiter schlimm ist den diese kann in der kurzen Zeit sowieso 
nicht den vollen Strom aufnehmen !

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


Lesenswert?

Widerstände in Reihe zu schalten hat man früher [TM] durchaus gemacht. 
Das war aber zu Zeiten, wo eine Stromregelung teuer und aufwändig war. 
Das ganze nennt sich dann LnR-Drive. Hier mal ein Beispiel, welchen 
Einfluss das auf die Drehmoment-Kennlinie hat:
http://ostermann-net.de/electronic/schritt/sm_kennlinie.htm

Heute würde ich das aber nicht mehr anwenden. Ein L297 und zwei kleine 
Shunts (2W) sind billiger und effektiver als eine Reihenschaltung dicker 
Leistungswiderstände.

Mit freundlichen Grüßen
Thorsten Ostermann

von FLIX (Gast)


Lesenswert?

Also generell macht es nicht so viel Unterschied mit was für einer 
Spannung du einen Schrittmotor betreibst, solange du mit deinem 
Motorstrom unter dem Nennstrom bleibst. Dazu ist eben eine 
Strombegrenzung da.
Bei höheren Drehzahlen wird der Motorstrom nämlich weniger durch den 
Eigenwiederstang geregelt, als viel mehr durch Selbstinduktion.

Wenn du also einen Motor beschleunigen willst, betreibst du ihn mit mehr 
Spannung und begrenzt den Strom.

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


Lesenswert?

Entweder verstehe ich nicht was du eigentlich sagen willst, oder du 
wiedersprichst dir?! Natürlich macht es einen Unterschied, mit welcher 
Spannung man einen Schrittmotor betreibt. Es sei denn, man fährt so 
langsam, dass die Stromregelung noch voll zum tragen kommt.

Mit freundlichen Grüßen
Thorsten Ostermann

von Mike (Gast)


Lesenswert?

FLIX schrieb:
> Also generell macht es nicht so viel Unterschied mit was für einer
> Spannung du einen Schrittmotor betreibst, solange du mit deinem
> Motorstrom unter dem Nennstrom bleibst. Dazu ist eben eine
> Strombegrenzung da.

Du verkennst das Problem. Die hohe Spannung braucht man, damit der Strom 
bei höherer Schrittfrequenz überhaupt den Nennstrom erreichst. Und beim 
Motor bedeutet Strom - Kraft, ergo Drehmoment. Und das braucht man, um 
irgendwas anzutreiben.

von spess53 (Gast)


Lesenswert?

Hi

>Beitrag "Re: arduino L298 stepper beschleunigen"

Lest mal das Datum.

MfG Spess

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.