Schrittmotor ansteuern mit Arduino + A4988

Schrittmotor ansteuern mit Arduino

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);
}

Folgende Bauteile wurde verwendet:

1x Arduino Uno http://amzn.to/2DhKUSU *
1x Treiberboard A4988 http://amzn.to/2DqSKsS *
1x Schrittmotor http://amzn.to/2DlOOKz *
1x Adafruit 12-Key Capacitive Touch Sensor Breakout – MPR121 http://amzn.to/2DmxEN2 *

One Thought to “Schrittmotor ansteuern mit Arduino + A4988”

  1. […] gewählt werden Vollschritt, Halbschritt, Viertelschritt und Achtelschritt. Ich habe zum Thema Schrittmotor schon mal einen Beitrag gemacht. Betrieben wird das ganz mit einem 12 Volt Netzteil der einer […]

Leave a Comment