Schrittweitenspielerei mit dem A4988

Die Schrittmotortreiberbausteine A4988 und anverwandte spielen im Aufbau vieler 3D-Drucker eine große Rolle. Für den Bau eines Fraktionssammler (auch nicht viel mehr als XY-Positionierung) kann man sicher  gut auf dem Makeblock XY-Plotter Robot Kit aufbauen. Der bietet viel erschließbare Fläche. Bei der Elektronik darf man aber gerne auch andere Wege suchen.

A4899_SteppSwitchDer Beitrag Schrittweise verbessern mit dem a4988 zeigte die Ansteuerung eines NEMA 17 Schrittmotors mithilfe des A4988-Schrittmotortreiber. Regelbarer Strangstrom und einfache Steuerung sind somit gegeben. Es stellte sich nun die Frage, ob mit diesem Treibermodul die Schrittteilung und damit die Positioniergenauigkeit dynamisch anzupassen ist. Mit einer dynamischen Ansteuerung wäre ein schnelle Positionierung im Voll- oder Halbschrittmodus und die Endpositionierung im Viertel-, Achtel- oder Sechzehntelschrittmodus möglich.

Ein Blick in das Datenblatt des A4988 von Pololu zeigt die korrekte Steuerung der Modi über die Pins MS1, MS2 und MS3 des Motortreibers. In vielen 3D-Druckern sind die Pins über Jumper fest auf GND (Low) oder 5V (High) gelegt. Könnte man das nicht auch dynamisch über die Digitalausgänge eine Arduino UNO erledigen? Man kann wie der folgende Sketch zeigt.

int x;
int enaPin = 11;
int stepPin = 12;
int dirPin = 13;


void setup() {
  pinMode(enaPin, OUTPUT);
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  digitalWrite(enaPin, LOW);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);  
}

void loop() 
{  
  digitalWrite(dirPin, HIGH); // einen Schritt drehen
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);  
  for (x = 0; x < 200; x++)  // mach 200 Schritte
  {
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(500);
//  delay(10);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500);
//  delay(10); 
  }
  delay(500);
  digitalWrite(dirPin, LOW);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  for (x = 0; x < 200; x++)  // mach 200 Schritte
  {
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500);
  }
  delay(1000);
}

Das ist jetzt kein schöner Code, aber er zeigt, wie man den Schrittmodus dynamisch anpassen kann. Das vorliegende Beispiel dreht den Schrittmotor im Halbschrittmodus 200 Halbschritte nach rechts und anschließen um 200 Achtelschritte nach links. Für den Versuch wurde eine Spannung von 12 V an den Schrittmotor gelegt.  Bis auf die zusätzlichen Drahtbrücken zur Verbindung von MS1 bis MS3 an die D7, D8 und D9 des Arduino UNO entspricht der Aufbau dem oben verlinkten Beispiel.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.