Nema 14 Schrittmotor ruckelt und vibriert nur bei Ansteuerung mit Esp32

Moin zusammen,

ich habe einen Esp32 und möchte zusammen mit dem A4988 Treiber einen Schrittmotor vom Typ Nema 14 (der hier) betreiben.
Vmot beträgt 12V und Vref für den max. Strom beträgt 0,64V (0,8A * 8 * 0,1Ohm).

Verdrahtung: Motor Treiber
A+ 1A
A- 1B
B+ 2A
B- 2B

Dabei tritt das Problem auf, dass der Schrittmotor nur auf der Stelle ruckelt bzw. einfach nur vibriert.
Bisher habe ich folgendes ausprobiert: Austausch des Treibers, andere Anordnung der Spulenanschlüsse und eine manuelle Ansteuerung ohne Bibliothek. Dies war aber alles erfolglos und der Motor hat immer nur auf der Stelle geruckelt.

Habt ihr irgendwelche Ansätze um das Problem zu beheben?

Besten Dank im Voraus!
Gruß Finn

Die Schaltung ist nach folgendem Plan aufgebaut:

... und das ist der benutze Code zum testen des Schrittmotors:

#include <Stepper.h>

#define dirPin 12
#define stepPin 14

const int numSteps = 200; 

Stepper myStepper(numSteps, dirPin, stepPin);

void setup() {
  myStepper.setSpeed(60); 
}

void loop() {
  myStepper.step(numSteps); 
  delay(1000);
  
  myStepper.step(-numSteps);
  delay(1000);
}

Du schreibst "nur bei Ansteuerung mit Esp32", hast Du es auch schon mit einem anderen µC versucht?

Nein, das war auf das ruckeln bezogen. Ich habe es nur mit eine Esp32 probiert.

Ich habe Dein Programm mit einem DRV8825 probiert und kann keinen Fehler erkennen, auch nicht in der Schaltung.

Irritiert bin ich über den kleinen Drehwinkel von nur ca. 90°, denn 200 Schritte sollten eine ganze Umdrehung ergeben. Leider habe ich mit dieser Bibliothek keine Erfahrung, ich verwende lieber die MobaTools, die gut mit dem ESP32 harmonieren:

#include <MobaTools.h>  // per Arduino-IDE installieren

const byte dirPin       = 12;
const byte stepPin      = 14;

int numSteps = 200;
MoToStepper myStepper( numSteps, STEPDIR );

void setup() {
  myStepper.attach( stepPin, dirPin );
  myStepper.setSpeed( 800 );
  myStepper.setRampLen( 20 );                       // Rampenlänge 100 Steps bei 20U/min
}

void loop() {
  if (!myStepper.moving()) {
    delay(500);
    numSteps *= -1;
    myStepper.doSteps(numSteps);
  }
}

Das liegt daran, dass die Stepper.h nicht für step/dir Treiber geeignet ist. Die will eigentlich eine H-Brücke ansteuern - mit nur 2 Pins dann im reinen FulStep. Schließt man das dann an einen step/dir Treiber an, ergibt sich 1/4 der eingestellten Schritte.

@cubetec : Der ESP32 ist ein 3,3V Board. Wie hast Du den A4988 versorgt (Logik-Spannung)?

1 Like

Der Treiber wird mit 3,3V Logik Spannung versorgt

@agmue Ich habe jetzt mal deinen Code verwendet, das hat am Anfang jedoch auch nicht geklappt.
Dann habe ich anstatt Reset mit Sleep zu verbinden, beide mal direkt auf 3,3V gelegt, da sie ja High sein müssen, damit der Treiber arbeitet. Seit dem klappt es und der Motor dreht hin und her.

Ein Erfolg!

Das liest sich aber für mich, als hättest Du keinen A4988, denn das ist die Beschaltung für den DRV8825, den ich verwende.

Mein Tipp ist, mit den MobaTools weiterzumachen, für mich so eine Art schweizer Messer. Selbst bei blockierendem Programm dreht der Motor dank Interrupt im Hintergrund weiter :slightly_smiling_face:

Es war sicherlich für @MicroBahner eine Menge Arbeit, den ESP32 mit einzubinden, aber ich finde, es hat sich gelohnt!

Ja, auf jeden Fall ein Erfolg.
Also laut Artikelbeschreibung ist es ein A4988 den ich bestellt habe (Hier).
Die Bibliothek gefällt mir sehr gut und vor allem auch besser als die Stepper.h.

Viele Dank an euch beide!

12V Versorgungsspannung ist für diesen Motor wenig.
Als Versorgungsspannunge eines Motors der mit einem Stromtreiber wird die 4 fache Nennspannung geraten. Bei dem verwendeten Motor wäre die Nennspannung 5,44V ( 0,8A und 6,8Ohm) und somit eine Versorgungsspannung von 20 bis 24V sinnvoll.
Dies damit die Induktivität wenig Einfluß auf den Strom bzw Stromanstieg hat und der Treiber den Strom bestimmen kann.

Grüße Uwe