Schrittmotor ansteuern mit Arduino + A4988

1 Kommentar
Schrittmotor ansteuern mit Arduino + A4988

Heute geht es um das Ansteuern eines Schrittmotors über den Arduino mit dem Treiberboard A4988. Das Treiberboard A4988 zählt zu den meist verwendeten Boards, zudem sind Sie auch noch sehr günstig. Das Board hat viele Anschlüsse und ich möchte euch erklären wie man es Richtig anschließt.


Beschaltung

Der Kondensator muss nicht verbaut werden, dient aber zur Sicherheit vor Spannungsspitzen.
1A und 1B = 1. Spule des Motor
2A und 2B = 2. Spule des Motor
Mit den Kontakte MS1-3 kann die Schrittweite eingestellt werden, ob es ein Vollschritt, Halbschritt usw. ist, siehe Tabelle. Die Kontakte können entweder direkt mit 0V oder 5 Volt versorgt werden oder über den Arduino in Programm mit eingebunden werden.

M1 M2 M3 Schrittweite
0 0 0 1 Vollschritt
1 0 0 1/2 Halbschritt
0 1 0 1/4 Viertelschritt
1 1 0 1/8 Achtelschritt
1 1 1 1/16 Sechzehntelschritt

Funktion

Ich habe hier noch das Board MPR121 dazugenommen, dass Board ist ein 12 Tasten Kapazitiver Touchsensor, mit dem man über Berührung das Signal auf High schalten kann.
Ich habe die Sensoren wie folgt belegt:
1 = Schrittmotor 10 Umdrehung vorwärts
2 = Schrittmotor 10 Umdrehung rückwärts
3 = Schrittmotor 100 Umdrehung vorwärts
4 = Schrittmotor 100 Umdrehung rückwärts
5 = Schrittmotor 1000 Umdrehung vorwärts
6 = Schrittmotor 1000 Umdrehung rückwärts
7 = Schrittmotor 10000 Umdrehung vorwärts
8 = Schrittmotor 10000 Umdrehung rückwärts

Programmcode

#include <wire.h>
#include "Adafruit_MPR121.h"
  
Adafruit_MPR121 cap = Adafruit_MPR121();
  
uint16_t lasttouched = 0;
uint16_t currtouched = 0;
  
int Index;
int touch;
  
void setup()
{
  Serial.begin(9600);
  if (!cap.begin(0x5A)) {
    Serial.println("MPR121 not found, check wiring?");
    while (1);
  }
  Serial.println("MPR121 found!");
  pinMode(6, OUTPUT); //Enable
  pinMode(5, OUTPUT); //Step
  pinMode(4, OUTPUT); //Direction
  digitalWrite(6, LOW);
}
  
void loop()
{
  currtouched = cap.touched();
  for (uint8_t i = 0; i < 12; i++) {
    // it if *is* touched and *wasnt* touched before, alert!
    if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) {
      Serial.print(i); Serial.println(" touched");
      touch = i;
    }
  }
  if (touch == 1) {
    digitalWrite(4, HIGH);
    for (Index = 0; Index < 10; Index++)
    {
      digitalWrite(5, HIGH);
      delayMicroseconds(500);
      digitalWrite(5, LOW);
      delayMicroseconds(500);
      touch = 0;
    }
  }
  if (touch == 2) {
    digitalWrite(4, LOW);
    for (Index = 0; Index < 10; Index++)
    {
      digitalWrite(5, HIGH);
      delayMicroseconds(500);
      digitalWrite(5, LOW);
      delayMicroseconds(500);
      touch = 0;
    }
  }
    if (touch == 3) {
    digitalWrite(4, HIGH);
    for (Index = 0; Index < 100; Index++)
    {
      digitalWrite(5, HIGH);
      delayMicroseconds(500);
      digitalWrite(5, LOW);
      delayMicroseconds(500);
      touch = 0;
    }
  }
  if (touch == 4) {
    digitalWrite(4, LOW);
    for (Index = 0; Index < 100; Index++)
    {
      digitalWrite(5, HIGH);
      delayMicroseconds(500);
      digitalWrite(5, LOW);
      delayMicroseconds(500);
      touch = 0;
    }
  }
    if (touch == 5) {
    digitalWrite(4, HIGH);
    for (Index = 0; Index < 1000; Index++)
    {
      digitalWrite(5, HIGH);
      delayMicroseconds(500);
      digitalWrite(5, LOW);
      delayMicroseconds(500);
      touch = 0;
    }
  }
  if (touch == 6) {
    digitalWrite(4, LOW);
    for (Index = 0; Index < 1000; Index++)
    {
      digitalWrite(5, HIGH);
      delayMicroseconds(500);
      digitalWrite(5, LOW);
      delayMicroseconds(500);
      touch = 0;
    }
  }
    if (touch == 7) {
    digitalWrite(4, HIGH);
    for (Index = 0; Index < 10000; Index++)
    {
      digitalWrite(5, HIGH);
      delayMicroseconds(500);
      digitalWrite(5, LOW);
      delayMicroseconds(500);
      touch = 0;
    }
  }
  if (touch == 8) {
    digitalWrite(4, LOW);
    for (Index = 0; Index < 10000; Index++)
    {
      digitalWrite(5, HIGH);
      delayMicroseconds(500);
      digitalWrite(5, LOW);
      delayMicroseconds(500);
      touch = 0;
    }
  }
  delay(100);
}
A4988 Arduino Arduino Uno Schrittmotor Schrittmotro steuern Wissen - Info

1 Kommentar

Läuft der Programmcode auch über Arduino 1.8.13?

DerBioBaum

Hinterlassen Sie einen Kommentar

Bitte beachten Sie, dass Kommentare vor der Veröffentlichung genehmigt werden müssen.