loop wiederholt sich nicht

Hi,
ich bin gerade dabei ein kleines Projekt mit einem Arduino Nano (v3.2) und einem Nema 11 Schrittmotor zu realisieren. Der Motor wird über ein DRV8825 Modul von Pololu angesteuert und mit 12 V Betriebsspannung versorgt.

Das Programm soll folgendermaßen ablaufen:

  1. Motor dreht eine ganze Umdrehung mit vorab definierter Geschwindigkeit
  2. Motor schaltet ab und wartet 2000 ms
  3. Schleife beginnt von Neuem

Ich habe dazu folgenden Sketch aufgesetzt:

#include <AccelStepper.h>
#define dirPin 2
#define stepPin 3
#define enaPin 4
#define motorInterfaceType 1
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
  stepper.setMaxSpeed(32000);
}
void loop() {
  digitalWrite(enaPin, LOW);
  while (stepper.currentPosition() != 6400)
  {
   stepper.setSpeed(12800);
   stepper.runSpeed();
  }
  digitalWrite(enaPin, HIGH);
  delay(2000);
}

Es funktioniert auch fast alles wie ich es mir vorstelle, nur beginnt "void loop()" am Ende der Schleife nicht erneut. Wenn ich den Arduino mit Strom versorge, dreht sich der Motor um genau eine Umdrehung, dann wird er deaktiviert. Und in diesem Status bleibt dann alles bis der Arduino neu gestartet wird. Ich verstehe einfach nicht wo mein Fehler liegen könnte.

Wenn ihr weitere Infos zu meinen Komponenten benötigt, lasst es mich wissen. Den Schaltplan habe ich nur händisch skizziert, ich kann aber bei Bedarf noch eine digitale Version anfertigen und hochladen.

VG
Steph

Das liegt vermutlich an deiner While-Schleife.
Was soll die bewirken ?

Also die While-Schleife sorgt dafür, dass der Motor auch wirklich eine Umdrehung macht.
Folgender Ausschnitt ist nämlich nur ein Step und muss somit für eine ganze Umdrehung 6400 mal wiederholt werden.

stepper.setSpeed(12800);
stepper.runSpeed();

Problem gelöst!

Ich habe vergessen die Motorposition wieder auf 0 zu setzen. Der aktualisierte Sketch sieht nun folgendermaßen aus und funktioniert wie gewünscht.

#include <AccelStepper.h>
#define dirPin 2
#define stepPin 3
#define enaPin 4
#define motorInterfaceType 1
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
  stepper.setMaxSpeed(32000);
}
void loop() {
  digitalWrite(enaPin, LOW);
  stepper.setCurrentPosition(0);
  while (stepper.currentPosition() != 6400)
  {
   stepper.setSpeed(12800);
   stepper.runSpeed();
  }
  digitalWrite(enaPin, HIGH);
  delay(2000);
}

Ok, prima, dass es jetzt funktioniert.
Danke für die Rückmeldung.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.