Schrittmotor Nema 17

Hallo
Kurze Frage ich habe einen Nema 17 Schrittmotor, mit einem DRV8825.
Mein neues Projekt ist ein Mecanum-Wheel-Car, das ich über einen Joystick vor und zurück fahren lassen kann.
Das Problem ist bei der Ansteuerung mittel Joystick bewegt sich der Schrittmotor vorwärts flüssig und gleichmäßig und bei der rückwärts Bewegung dreht sich der Schrittmotor nicht mehr flüssig. Das Poti am Driver wurde eingestellt.

Schrittmotoren: https://www.amazon.de/gp/product/B07CPQC1Y6/ref=ppx_yo_dt_b_asin_title_o07_s01?ie=UTF8&psc=1
Treiber: https://www.amazon.de/gp/product/B07K9ZB7M5/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1
Joystick: https://www.amazon.de/gp/product/B07DJXP12H/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1

Programm:

#include <AccelStepper.h>
#include <TimerOne.h>
AccelStepper Wheel1(1, 9, 8); //(Driver, Step, Dir)
AccelStepper Wheel2(1, 11, 10); //(Driver, Step, Dir)

int wheelSpeed = 1000;

const int Y_pin = 0; // analog pin connected to Y output
const int X_pin = 1;
int Ywert;
int Xwert;

void setup() {
  Wheel1.setMaxSpeed(2000);
  Wheel2.setMaxSpeed(2000);
  Timer1.initialize(100);
  Timer1.attachInterrupt(executeRunSpeed);
}

void loop() {
  Ywert = analogRead(Y_pin);
  Xwert = analogRead(X_pin);


  if (Ywert > 670) {
    moveForward();
  }


  if (Ywert < 300) {
    moveBackward();
  }
  else {
    stopMoving();
  }
}


void moveForward() {
  Wheel1.setSpeed(wheelSpeed);
  Wheel2.setSpeed(wheelSpeed);
}


void moveBackward() {
  Wheel1.setSpeed(-wheelSpeed);
  Wheel2.setSpeed(-wheelSpeed);
}


void stopMoving() {
  Wheel1.setSpeed(0);
  Wheel2.setSpeed(0);
}


void executeRunSpeed() {
  Wheel1.runSpeed();
  Wheel2.runSpeed();
}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter oder gehe in der IDE auf Bearbeiten - Für Forum kopieren und füge es hier ein).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Außerdem entferne bitte die unnötigen Leerzeilen und formatiere den Code ordentlich (+T in der IDE hilft Dir dabei).

Gruß Tommy

Hallo,

was ist "sonst " ich denke die if ... else Bedingung funzt nicht

Heinz

Und die geschweiften Klammern sind auch sehr 'kreativ' gesetzt.

MicroBahner:
Und die geschweiften Klammern sind auch sehr 'kreativ' gesetzt.

Habe ich geändert danke

xgrubii:
Habe ich geändert danke

Und klappt es jetzt ? Dann kannst Du noch nachträglich den Betreff des Einganspost ändern und Erledigt erweitern

Heinz

Rentner:
Und klappt es jetzt ? Dann kannst Du noch nachträglich den Betreff des Einganspost ändern und Erledigt erweitern

Heinz

Nein es funktioniert trotzdem nicht, da ja keine geschweiften Klammern gefehlt haben

Wozu soll die Geschichte mit dem TimerOne gut sein? Du kannst die runSpeed() Aufrufe einfach im loop machen.

Versuch es mal so:

void loop() {
  Ywert = analogRead(Y_pin);
  Xwert = analogRead(X_pin);

  if (Ywert > 670) {
    moveForward();
  } else if (Ywert < 300) {
    moveBackward();
  } else {
    stopMoving();
  }
}

Das ist ein sehr guter Hinweis 8). Aber müsste es da nicht eigentlich beim Vorwärts ruckeln, und rückwarts glatt gehen? Aber was vorwärts und rückwärts ist, ist ja auch immer eine Frage der Sichtweise :wink:

MicroBahner:
Aber müsste es da nicht eigentlich beim Vorwärts ruckeln, und rückwarts glatt gehen? Aber was vorwärts und rückwärts ist, ist ja auch immer eine Frage der Sichtweise :wink:

Ja, daher meine eher vorsichtige Formulierung! Leicht fehlerhafte Fehlerbeschreibungen sind allerdings nicht so selten ::slight_smile:

Ja!

MicroBahner:
Wozu soll die Geschichte mit dem TimerOne gut sein? Du kannst die runSpeed() Aufrufe einfach im loop machen.

Weil der analogRead Befehl zu langsam einlest und somit haben wir es in einen eigenen Timer ausgelagert.