Nema 17 Stepper Motor vibriert nur?
Hallo, ich bin dabei zu versuchen für einen kleines Home Projekt drei Stepper Motoren zum laufen zu bekommen.
ich habe mir zich YouTube Videos angeschaut und ob mit einem CNC shield v3, oder einfach so mit einem Bord, wo man die Driver so drauf stecken kann.
ich hab mir hier diese Driver bestellt:
DRV8825
doch mein Problem ist, dass bei jeder Möglichkeit wie ich benutze. Also die zwei Möglichkeiten oben, dass der Stepper nur vibriert und sich mal ganz kurz in bisschen bewegt aber eigentlich nur vibriert.
ich habe schon verschiedene Stepper genommen. Ich hab verschiedene Driver genommen und verschiedene Arduino UNOs.
die Spannung an den Potenzmeter habe ich natürlich auch richtig eingestellt soweit ich weiß also wie in dem Videos auf 0,75 V für einen 1,5 A Stepper Motor.
ich zeige euch jetzt hier ein paar Bilder, aber natürlich sieht man da die Verkabelung nicht wirklich gut drauf. Aber wie gesagt ich hab’s mehrmals gemacht und die Verkabelung sollte eigentlich nicht das Problem sein, weil ich’s eigentlich immer richtig nachgemacht hab und wenn ich das CNC Schild nutze, gibt es ja eigentlich nichts, was ich falsch machen kann.
Ich hoffe mal, dass mir irgendwer helfen kann die Stepper und die Driver sind komplett neu.
Danke schon mal im voraus.
Ich hatte es auch mit diesem GRBL programm ausprobiert und wenn ich da die axen bewegt habe hat sich der motor auch nur viebriert
2 Antworten
Wenn die Schritte zu schnell kommen, dann vibrieren die Motoren nur noch.
Tatsächlich entspricht die Ansteuerung eines Schrittmotors eines hin und herschalten der Spulen. Damit bekommt der Motor abwechselnd "vorwärts" und "rückwärts" Strom.
Man kann sich das so vorstellen, dass umschalten von "A" nach "B" in den geraden Stellungen nach Rechts drehen lässt und in ungeraden Stellungen nach Links.
Kommen die Schritt zu schnell, bekommt der Motor Strom für die Gegenrichtung bevor der seine "magnetische Raste" verlassen hat und das führt dann dazu, dass der dann Rückwärts drehen will. Und bevor der das kann, kommt wieder Vorwärts.
Entweder lässt man den Motor nur sehr langsam drehen oder sendet die Schritte in einer "Rampe", also beschleunigt die Schritte mit der Zeit wo der Motor und die Mechanik da dran fahrt und Schwung aufbaut.
Du musst also erst mal Delays einbauen in der Schleife die die Schritte taktet.
Danach kannst Du dann mehrere Variablen verwenden die das beschleunigen und bremsen des Motors überwachen und das Delay dann variabel handhaben. Das ist leider ziemlich "tricky" zu verstehen und umzusetzen.
Also versuch es vorher mal mit großen Delays von einigen millsekunden und verringere die Schrittweise um heraus zu finden wie viel "speed" der Motor aus dem Stand heraus verträgt.
Sieht eigentlich gut aus.
Benutze aber bitte das nächste mal die "Code" Formatierung, dann lässt sich das viel leichter lesen und alles bleibt ordentlich eingerückt. Das ist oben bei den Formatierungen das </> Symbol.
Eigentlich sollte der sich sehr langsam erst in die eine Richtung, dann in die andere Richtung drehen. 1000ms sind allerdings etwas sehr lang. 100, also 10 steps pro Sekunde ist bei den meisten Schrittmotoren immer noch mehr als langsam genug.
Jetzt solltest Du prüfen in welcher Reihenfolge die Leitungen für den Motor geschaltet werden. Das kannst Du bei deinen 1s delays auch bequem mit LEDs machen. Dazu lötest Du immer zwei "Antiparallel" zusammen, am besten rot und grün. Antiparallel bedeutet, dass eine anders herum ist. Also Anode auf Kathode der anderen und umgekehrt. Dann ein gemeinsamer Widerstand. Damit kannst Du leicht sehen welche Spule wann Plus und wann Minus bekommt.
Ich vermute, das die Leitungen am Motor falsch angeschlossen sind. Es gibt zwei Arten wie die Spulen betrieben werden.
Unidirektional bedeutet, dass jeder Ausgang nur eingeschaltet werden kann. Dann braucht man einen Unidirektionalen Motor. Der hat "Doppelspulen". Eine für "N" und eine für "S". Die hängen an einer Seite zusammen, meistens an Plus" und über zwei Leitungen aktiviert man dann "N" oder "S" in dem die auf Masse geschaltet werden. Das ganze ist da zwei mal drin. Vertauscht man die Anschlüsse, wird entweder nicht geschaltet oder die falschen Spulen aktiviert.
Du kannst die Spulen mit einem Multimeter ausmessen. Vom Mittelpunkt der Spule hast du zwei gleiche Ohmwerte zu den Enden der Spulen. Von Ende zu Ende gemessen hast Du den doppelten Wert. Bei Unidirektionalem Motor hast Du 2×3 Anschlüsse.
Bidirektional hat nur eine Spule für N und S, hier muss der Strom über eine Brückenschaltung umgepolt werden um zwischen N und S um zu schalten. Diese Motoren haben dann 2×2 Anschlüsse. Die können nicht mit einen Unidirektionaler Ansteuerung verwendet werden.
Umgekehrt kann man einen Unidirektionalen Motor an einer Bidirektionalen Steuerung anschließen. Hier lässt man einfach den Spulenmittelpunkt offen oder benutzt nur eine der beiden Spulen
Also misst Du den Motor erst mal durch um heraus zu finden welche Drähte zusammen zu einer Spule führen.
Hast Du die Spulen richtig angeschlossen, dann Pol mal eine Seite um. Sind beide Spulen des Motors verpolt läuft der nur rückwärts, ist eine Spule verpolt kommt es zum Vorwärts/Rückwärts laufen und damit taktet der nur vor und zurück was dann wie ein Vibrieren ist.
Also ich habe es hin bekommen wenn ich die zwei Spulen richtig anschließe. an dem Kabel Ausgang vom Stepper Motor ist das so BABA
und an dem Driver BBAA.
Weil ich das richtig anschließe und wie auf dem einen Bild ist alles direkt an den Driver anschließe läuft es wie es soll. Jedoch piepst es also es hat so ein piepst Ton dauerhaft.
und das zweite Problem ist, wenn ich das jetzt mit dem CNC Schild versuche funktioniert es nicht wie vorher obwohl ich die verschiedenen Spulen eigentlich soweit ich weiß richtig angeschlossen habe.
aber weißt du, ob die Pins, wo man das Kabel vom Motor an dem CNC Schild anschließt, ist quasi für den Motor passend macht. So dass ich das direkt anschließen kann.?
Jedoch piepst es also es hat so ein piepst Ton dauerhaft.
Der Strom wird durch PWM geregelt. Linear würden da heftige Verlustleistungen auftreten, also wird der Strom gepulst und im Mittelwert hat der dann die gewünschte stärke. Je nach PWM Frequenz und deren Verhältnis hat man dann leider ein Piepsen.
Am besten ist natürlich immer voll durch zu steuern und den Strom über die Versorgungsspannung an den Motor an zu passen.
aber weißt du, ob die Pins, wo man das Kabel vom Motor an dem CNC Schild anschließt, ist quasi für den Motor passend macht. So dass ich das direkt anschließen kann.?
Das ist immer das Problem, es gibt keine Norm in welcher Reihenfolge die Anschlüsse auf einen Stecker sein müssen und welcher Stecker dafür verwendet wird. Das macht jeder Hersteller anders. Du brauchst dann Motoren von einem Hersteller für den der Shield designend wurde.
Wenn ich so was für mich selber baue, dann nehme ich einfach einen Klemmenblock für lose Drähte oder Deutsch Stecker wie sie u.a. für Baumaschinen verwendet werden.
Ich habe selbst schon Schrittmotoren laufen lassen, allerdings mit den normalen Schrittmotor-Platinen. Die 8825er hatte ich mal im 3D-Drucker, die machen Probleme, weil sie eine sogenannte "Lachs-Haut" beim 3D-Druck machen. Aber alufen sollten die trotzdem.
Schau doch mal,w as Du an Bibliotheken in der Arduino-IDE findest. Ich hatte eine solche Biibliothek, die gar das Anfahren und Abremsen der Motoren steuern ließ.
Die Motoren haben vier Anschlüsse. Es gibt mindestens zwei Arten von Motoren mit dieser Anschluss-Art, und die Kabel sind bei beiden Versionen verdreht zueinander.
also danke für die Antwort.
ich habe es mit diesem code hier probiert und der stepper hat mal kurz vibriert und sonnst garnichts gemacht.
keine Ahnung ob das wichtig ist aber der Driver wird nicht heiß. man muss wiklich länger drauf bleiben um zu merken das der driver etwas warm ist.
#define stepPin 2
#define dirPin 5
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop() {
digitalWrite(dirPin, HIGH); // Dreht den Motor in eine Richtung
for (int x = 0; x < 200; x++) {
digitalWrite(stepPin, HIGH);
delay(1000); // Wartet 1000 Millisekunden (1 Sekunde)
digitalWrite(stepPin, LOW);
delay(1000);
}
delay(1000); // Wartet 1 Sekunde
digitalWrite(dirPin, LOW); // Dreht den Motor in die andere Richtung
for (int x = 0; x < 200; x++) {
digitalWrite(stepPin, HIGH);
delay(1000);
digitalWrite(stepPin, LOW);
delay(1000);
}
delay(1000);
}