Schrittmotor dreht wohin er will

Hallole, ich bin etwas am Ende mit meinem Latein, vielleicht kann mir hier jemand helfen.

Folgendes: Arduino Uno steuert über einen A4988 Pololu Treiber einen Nema17 1,8° Motor.

Mein erster Versuch war es, einfach den Schrittmotor eine Umdrehung machen zu lassen:

//DIR und STEP Pins an 3,4
#include <Stepper.h>

const int hstepsPerRevolution = 3200;  // 200 steps/rev and 16 microsteps = 3200 steps per rotation
int hmotorSpeed=100;

Stepper hStepper(3200, 3, 4, 10, 11); //initialise stepper




void setup() {
  
    hStepper.setSpeed(hmotorSpeed);
    
    hStepper.step(hstepsPerRevolution);
}


void loop() {

  
}

Das funktioniert soweit, d.h. ich hab 1/16 Microstepping eingestellt und 3200 steps sind genau eine Umdrehung.

ABER:
Sobald ich z.b. eine größere Strecke fahren will, also z.b. 10 Umdrehungen = 32000 steps, macht er einfach irgendwas, d.h. einmal fährt er random 3 umdrehungen, dann wieder garnicht, dann zuckt er nur kurz.

Treiberstrom ist korrekt eingestellt, der Treiber wurde auch schon gegen einen DRV8825 getauscht, hat nichts geholfen.

Hab ich wo einen Denkfehler, ich hab langsam echt keine Idee mehr.

ps: ja ich hab nichts in der Main Loop, will ja testweise nur eine Strecke fahren und nicht durchgehen.

Danke im Vorraus,
Marco

pps: Motor wurde auch schon getauscht, keine Änderung

einen Nema17 1,8° Motor

Die elektrischen Werte des Motors wären interessant!
Auch das Netzteil....

Ein Schrittmotor kann nicht (in einem Schritt) von 0 auf 100% beschleunigen.
Es sind Rampen nötig.

Die AccelStepepr Lib macht das.

Hallo, Der Motor hat 1.7A und das Netzteil ist ein 12V, 6.3A LED-Netzteil wie ichs für verschiedene kleine Projekte eingesetzt hab.

Jo, die hab ich auch schon versucht, auch mit lächerlich kleiner Beschleunigung, leider keine änderung.

//3200 Steps / Umdrehung


#include "AccelStepper.h" 


AccelStepper hStepper(1, 3, 4); //initialise stepper


int targetpos = 3200*10;
int homepos = 0;
bool rechtslauf = true;

void setup() {
  
hStepper.setMaxSpeed(800);
hStepper.setAcceleration(20);
hStepper.setCurrentPosition(0);
hStepper.moveTo(targetpos);

}


void loop() {
  
hStepper.runToPosition();
//delay(100);    
    
}

Aber am code kanns nicht liegen hmm? :confused:

Fehlt das DIR Signal am A4988? Wackelkontakt oder falsches Pin?

Faceschmerz:
... Aber am code kanns nicht liegen hmm? :confused:

Ich habe mir den Code nicht angesehen. Aber da Uwe Kontaktprobleme vermutet, nehme ich an, dass er den Code angesehen und dort keine Fehler entdeckt hat.

Kontaktprobleme sind meiner Erfahrung nach die fiesesten Fehlerursachen. Baue Dein Geraffel am besten noch einmal neu auf und achte darauf, dass Kontaktprobleme ausgeschlossen sind. Du wärst nicht der Erste, der auf diese Weise einen Fehler behebt.

Gruß

Gregor

Hi

Mit der Schrittanzahl 3200 x 10 und int kommst Du 'gerade so' noch hin - wenn Du den aktuellen Schritt weiter zählst, könnte Dir ein Überlauf 'in die Suppe spucken'.

MfG