NEMA 23 Schrittmtor mit Arduino Mega 2560 betreiben

ja genau, ich habe das Testprogramm, welches oben mir genannt wurde auf den Arduino geladen, aber leider tut sich noch nichts.

Kann mir zufällig jemadn sagen, ob A1 A+ oder A- entspricht? Dann kann ich nämlich schon mal sicherstellen, dass meine Anschlüsse richtig angeschlossen sind.

Ich habe einen Schrittmotortreiber auf den Steckplatz für die x-Schnittstelle auf den Ramps 1.4 angeschlossen und darunter habe ich 3 Jumper angesteckt. Das sollte ja ausreichen, um den Nema Schrittmotor anzutreiben oder?
Oder muss ich die Jumper weglassen? Kann mir zufällig jemand auch mal sagen, was die Jumper genau bringen?

Ich habe im Internet auch schon folgenden Code gefunden:

#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38

#include "AccelStepper.h" // Nebenbei, wo ist eigentlich der Unterschied, ob man oder"AccelStepper.h" schreibt ??

AccelStepper stepper(1, X_STEP_PIN, X_DIR_PIN);

void setup()
{
stepper.setEnablePin(X_ENABLE_PIN);
stepper.setPinsInverted(false, false, true); //invert logic of enable pin
stepper.enableOutputs();

// Alternativ müssten die folgenden Zeilen auch funktionieren, weis nur nicht sicher was mehr Sinn macht!!
//pinMode(X_ENABLE_PIN , OUTPUT);
//digitalWrite(X_ENABLE_PIN , LOW);

stepper.setMaxSpeed(400128);
stepper.setSpeed(100
128);
stepper.setAcceleration(1000);
}

void loop()
{
stepper.runSpeed();
}

Bei diesem Programm tut sich leider auch nichts. Hat hierzu vielleicht jemand eine Idee?

Vielen Dank und viele Grüße
Luis

Der Motor benötigt 2,8A je Spule um sein volles Drehmoment zu erreichen. Das ist zuviel für den DRV8825. Ausserdem musst Du den Spulenstrom an dem kleinen Potentiometer auf dem DRV 8825 Board einstellen. Hast Du das gemacht? Der Stepper läuft auch mit weniger als 2,8A, hat aber dann nicht sein volles Drehmoment. Stell den Strom erstmal eher auf 1,5A ein. Laufen sollter der Motor damit auch.
Du solltest den Treiber auf jeden Fall kühlen.

Das hat nichts mit 'ausreichen' zu tun. Mit den Jumpern stellst Du das 'Microstepping' ein. Je höher das Microstepping desto ruhiger, aber auch desto langsamer läuft der Motor. Ausserdem sind die Schritt-Positionen nicht so exakt wie ohne Microstepping. Das hat aber nichts damit zu tun, ob der Motor überhaupt läuft.

Wichtig ist, dass die A und B-Positionen richtig zugeordnet sind. A1/2 und B1/2 sind die Anschlüsse für jeweils eine Stepperspule. Wenn da + und - vertauscht werden, ändert sich gegebenenfalls nur die Drehrichtung, ansonsten macht das nichts.

Hast Du das entsprechend dem Hinweis von @uwefed auf die 5A Anschlüsse geändert? Auch hier zeigt sich übrigens dass das Board nur für kleinere Stepper gedacht ist. Da ist ein 500mA Sicherung drin. Das ist schon sehr knapp, auch wenn das Netzteil bei 12V nicht den vollen Spulenstrom liefern muss. 24V wäre besser, dann sinkt der Strom noch weiter.

Da sind schon die Anschlußpins falsch zugeordnet. Blindes Rumprobieren hilft nichts.

P.S. insgesamt wirst Du mit deinem Equipment nicht glücklich werden. Das passt einfach nicht zusammen, auch wenn Du den Stepper zum Drehen bekommst.

[Edit]:

  • Die Sicherung am 5A Anschluß ist eine 5A PTC-Sicherung, von da sollte das OK sein ( 500mA wären auch wesentlich zu wenig gewesen, deshalb habe ich da nochmal genauer nachgelesen)
  • Die Spannung auf 24V zu erhöhen wäre zwar für den Stepper gut, aber da das Ramps-Board offensichtlich auch den Arduino über Vin versorgen will, ist das von daher keine gute Idee.
  • Hast Du eigentlich die Informationen über das Ramps-Board gelesen? Da steht viel wichtiges drin.

Hallo zusammen,

ich habe nach weiterer Recherche und probieren herausgefunden, dass mit folgendem Code der Motor zumindest einmal angesteuert wird und die richtigen Pins verwendet werden. Der Motor vibriert allerdings nur mehr oder weniger und dreht sich nicht.

#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38

#include "AccelStepper.h" // Nebenbei, wo ist eigentlich der Unterschied, ob man oder"AccelStepper.h" schreibt ??

AccelStepper stepper(1, X_STEP_PIN, X_DIR_PIN);

void setup()
{
stepper.setEnablePin(X_ENABLE_PIN);
stepper.setPinsInverted(false, false, true); //invert logic of enable pin
stepper.enableOutputs();

// Alternativ müssten die folgenden Zeilen auch funktionieren, weis nur nicht sicher was mehr Sinn macht!!
//pinMode(X_ENABLE_PIN , OUTPUT);
//digitalWrite(X_ENABLE_PIN , LOW);

stepper.setMaxSpeed(400128);
stepper.setSpeed(100
128);
stepper.setAcceleration(1000);
}

void loop()
{
stepper.runSpeed();
}

Mein Motor hat einen Schrittwinkel von 0,039°. Hat jemand eine Idee, an was es liegen könnte, dass mein Motor nur vibriert und keine saubere Umdrehung durchführt?
Ich habe auf dem Ramps Board keine Jumper gesteckt. Ich kann über das stecken der Jumper folgendes erreichen:

jumper Yes/No step size
1 2 3
no no no full step
yes no no half step
no yes no 1/4 step
yes yes no 1/8 step
no no yes 1/16 step
yes no yes 1/32 step
no yes yes 1/64 step
yes yes yes 1/128 step

Über jede hilfreiche Antwort wäre ich sehr dankbar! Vielen Dank im Voraus!

Viele Grüße Luis

Oder muss ich am Code evtl. etwas anpassen?

Defekte Treiber wäre am naheliegensten. Normalerweise sterben die recht schnell, wenn am zz viel Strom zieht oder den Motor im Betrieb absteckt.

wenn du willst das jemand dein Code sich annimmt dann stelle den so wie Jumper Beschreibung rein, dann kann man den direkt kopieren, Nicht alle sitzen vor Einem 30" Monitor und können das ohne Probleme kopieren

Nicht nur Multipostings in diesem Forum...
Hier gehts weiter: Schrittmotor Nema 23 vibriert nur - Mikrocontroller.net

Hallo zusammen,

vorweg, ich bin was programmieren angeht nicht wirklich fit und habe dort noch meine Schwierigkeiten, also bitte nicht zu streng sein :wink:

Für mein kleines Projekt möchte ich gerne einen Schrittmotor mit konstanter Drehzahl zum laufen bringen. Ich habe mir dazu folgende Komponenten angeschafft:

-Schrittmotor Nema 23 (Datenblatt dazu im Anhang)

23HS30-2804S-PG47_Full_Datasheet.pdf (139,8 KB)

-Schrittmotortreiber DRV8825
-Ramps 1.4 Board mit Arduino Mega 2560
-Netzteil (Ausgang 12V)

Nach reichlicher Recherche und Probieren, bin ich auf folgenden Code gestoßen:

#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38

#include "AccelStepper.h"

AccelStepper stepper(1, X_STEP_PIN, X_DIR_PIN); 

void setup()
{
  stepper.setEnablePin(X_ENABLE_PIN);
  stepper.setPinsInverted(false, false, true);    //invert logic of enable pin
  stepper.enableOutputs();

// Alternativ müssten die folgenden Zeilen auch funktionieren, weis nur nicht sicher was mehr Sinn macht!!
  //pinMode(X_ENABLE_PIN , OUTPUT);
  //digitalWrite(X_ENABLE_PIN , LOW);

  stepper.setMaxSpeed(400*128);
  stepper.setSpeed(100*128);
  stepper.setAcceleration(1000);
}

void loop()
{  
   stepper.runSpeed();
}

Außerdem habe ich noch diesen Code gefunden:

#include "AccelStepper.h"

AccelStepper stepper(1, 54, 55);


int pos = 100000;

void setup() {
  
  stepper.setMaxSpeed(100);
  stepper.setAcceleration(1000);

  stepper.setEnablePin(38);
  stepper.setPinsInverted(false, false, true); //invert logic of enable pin
  stepper.enableOutputs();
}

void loop() {

  stepper.move(pos);
  stepper.runSpeed();
}

Nun zu meinem Problem:

Bei beiden Codes vibriert der Motor nur und macht keine Umdrehungen. Die Motorwelle dreht sich so gut wie gar nicht, nur der ganze Motor vibriert. Mein Motor hat einen Schrittwinkel von 0,039°, muss ich deshalb noch etwas am Programmcode anpassen?
Weiß zufällig jemand, wieso der Motor nur vibriert und keine Umdrehungen macht?

Ich kann durch das Belegen von Jumper auf dem Ramps 1.4 Board die Schritte wie folgt ändern:

jumper Yes/No step size
1 2 3
no no no full step
yes no no half step
no yes no 1/4 step
yes yes no 1/8 step
no no yes 1/16 step
yes no yes 1/32 step
no yes yes 1/64 step
yes yes yes 1/128 step

Ich habe auch schon am Treiber DRV8825 den Strom verstellt, leider hat das auch kein UNterschied gemacht, bis dass bei zu geringem Strom, der Motor auch nicht mehr vibriert.

Durch weiteres probieren und googeln komme ich leider nicht weiter und wende mich deshalb hier an die Community, in der Hoffnung, dass mir jemand weiterhelfen kann.
Über jede hilfreiche Antwort wäre ich sehr dankbar!

Danke schonmal für jede konstruktive Antwort.

Grüße, Luis

'n neuer Thread ändert nix am Problem:
DRV8825: 2.5A max. bei sehr guter Kühlung
23HS30-2804S-PG47: 2.8A

IMO ist dein Treiber ist gegrillt.

Ja aber der Motor müsste ja trotzdem laufen, der Motor benötigt ja nicht die vollen 2,8A.
Diese werden bei maximaler Leistung benötigt, mir geht es eher darum, den Motor nur einmal zum Laufen zu bringen und dass sollte ja auch mit 2-2,5A funktionieren.

Du hast doch im anderen Thread schon zahlreiche Tipps und Infos erhalten.
Durch diesen neuen Thread zeigst du nur allen die dir helfen wollen, dass du denen nicht glaubst und somit alles ignorierst.
Meinst du tatsächlich dann noch weitere Hilfe zu erhalten ?

Kann schon sein, nur ohne ein gutes Bild, wie du es verkabelt hast, kann keiner sehen, wo dein Fehler ist.

Das hast Du hier schon gemacht, und Du wirst mit einem neuen Thread auch nicht mehr Antworten bekommen. Eher verärgerst Du die potentiellen Helfer.

P.S. durchaus möglich, dass Du mit dem Rumprobieren den Treiber schon zerschossen hast. Speziell wenn Du bei eingeschalteter Stromversorgung den Motor an/absteckst geht das ganz schnell.

Ich habe im anderen Thread zahlreiche Tipps und Hilfe erhalten, wofür ich sehr dankbar bin. Mir konnte man ja dort auch weiterhelfen. Ich bin dementsprechend ja auch schon weitergekommen, dass der Motor mittlerweile vibriert und die Ansteuerung soweit passt. Jetzt liegt das Problem ja vermutlich eher im Code, weshalb ich hier ein neues Thema aufmachen wollte, um das ganze etwas übersichtlicher zu gestalten.

Und was soll daran übersichtlicher sein ?
Du bekommst hier evtl. die Antworten von anderen Usern, die du schon erhalten hast.

Beende das hier und verlinke es im und mit dem alten Thread.

Nein, müssen sie nicht. Wenn der Treiber gestorben ist, bekommst du zufällige Bewegungen - von gar nix +ber zitter bis ruckelige Bewegung ist alles drinnen.

DM556 Treiber gibts für kleines Geld in der Bucht. Glaube so ab 17,- Euro. Und die können so einen Motor wirklich treiben. Wenn man meint, man will mit einer Kerze einen Grill aufheizen, ja dann soll er das tun. Aber muss man damit Anderen die Zeit stehlen? Es wird nun mal nicht funktionieren !! Genauso ist es mit einem Spielzeug Treiber und einem Motor der richtig Power braucht.

Der Motor zieht IMMER den eingestellten Strom.
Und das auch gerne auf BEIDEN Kanälen.

Da sind wir bei der Einstellung!
Wie hast du den Treiber eingestellt?

Der Motor ist zwar total überdimensioniert für den Treiber, aber ja, der Motor sollte auch mit einer 1A Einstellung rund laufen.

Du hast einen "Stepper online" Link gezeigt. (?)
Die bieten auch passender Treiber für den Motor an.

Der DRV funktioniert nicht mit niederohmigen Motoren - selber probiert, Ergebnis ist immer ein toter Treiber - egal welche Strombegrenzung du einstellst.