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
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
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.
> 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.
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
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
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 !
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ß...
hi McBain, was genau meinst du mit Rampe? welches board benutzt du? könntest deinen Code posten? l.g. jeff
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
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.
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).
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...
super, vielen dank. Ich spiel mal bissl rum und berichte wies funktionniert. vielen danke für die Hilfe
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...
> 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
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
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!
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 !
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
> 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 ?
Hi
>Wenn ich die dreifache Spannung nehme muss ich den Strom begrenzen !
Ja, auf den Nennstrom.
MfG Spess
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 ! )
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
>>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 !
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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.