Stapmotor Besturing met Arduino & A4988 Driver – Stap-voor-Stap Handleiding
In deze Arduino tutorial leer je hoe je een stapmotor kunt besturen met de A4988 Stapmotor Driver. Bekijk de video of lees de tutorial hieronder.
Overzicht
De A4988 is een microstepping driver voor bipolaire stapmotoren met een ingebouwde vertaler voor eenvoudige bediening. Dit betekent dat we de stapmotor met slechts 2 pinnen van onze controller kunnen besturen: één voor de rotatierichting en één voor de stappen.

De driver biedt vijf stapresoluties: volle stap, half stap, kwart stap, achtste stap en zestiende stap. Daarnaast heeft hij een potentiometer voor stroombegrenzing, overtemp bescherming en crossover-stroombeveiliging.
De logica spanning is 3 tot 5,5 V. Maximale stroom per fase is 2A met goede koeling, of 1A continu zonder heatsink.

A4988 Stapmotor Driver Pinout
Laten we de pinout bekijken en de driver aansluiten op de stapmotor en controller. We beginnen met de 2 pinnen rechtsonder voor voeding: VDD en GND (3–5,5 V, in ons geval de Arduino 5V). De volgende 4 pinnen zijn voor de motor: 1A/1B voor de ene spoel, 2A/2B voor de andere spoel. Voor motorvoeding gebruiken we GND en VMOT (8–35 V) met een decoupling condensator van minimaal 47 µF tegen spanningspieken.

De volgende 2 pinnen, STEP en DIRECTION, zijn de besturingspinnen. DIRECTION regelt de rotatierichting (aangesloten op Arduino pin 4). STEP regelt de microstappen: elke puls laat de motor één stap maken. De ingebouwde vertaler van de A4988 regelt alles; geen complexe programmering, fasetabellen of frequentiecontrole nodig. Let op: deze pinnen worden intern niet naar een spanning getrokken, dus laat ze niet zweven in je programma.
De SLEEP pin: logisch laag zet het bord in slaapmodus voor minimale stroomverbruik wanneer de motor niet in gebruik is.
De RESET pin zet de vertaler in een vooraf gedefinieerde Home-toestand. Deze Home Microstap Positie is afhankelijk van de microstapresolutie (zie datasheet figuren). Als deze pin laag is, worden alle STEP inputs genegeerd. RESET is een zwevende pin; als we hem niet in het programma besturen, verbinden we hem met SLEEP om hem hoog te trekken en het bord te activeren.

De volgende 3 pinnen (MS1, MS2, MS3) selecteren één van de vijf stapresoluties volgens de waarheidstabel. Deze pinnen hebben interne pull-down weerstanden; losgelaten betekent volle stap modus.
De laatste pin, ENABLE, schakelt de FET uitgangen in of uit. Logisch hoog houdt de uitgangen uitgeschakeld.
Benodigde onderdelen voor deze Arduino Tutorial
Je kunt de componenten verkrijgen via:
- Stapmotor (NEMA17)
- A4988 Stapmotor Driver
- 12V 2A Adapter
- Voedingsjack
- Arduino Board
- Breadboard en Jumper Draden
Schakelschema
Hier is het complete schema. Ik gebruik de driver in Volle Stap Modus, dus de 3 MS pinnen laat ik los. STEP en DIRECTION gaan naar Arduino pinnen 3 en 4, plus GND en 5V voor voeding. Een 100µF condensator voor decoupling en een 12V, 1,5A adapter voor de motor. Ik gebruik een NEMA 17 bipolaire stapmotor: draden A en C naar 1A/1B, B en D naar 2A/2B.

A4988 Stroombegrenzing
Voordat we de motor aansluiten, moeten we de stroombegrenzing instellen zodat de stroom binnen de limieten van de motor blijft. We doen dit door de referentiespanning aan te passen met de potentiometer op het bord, rekening houdend met deze vergelijking:

Deze vergelijking is niet altijd correct, omdat er verschillende fabricanten van de A4988 driver zijn. In mijn geval: ik stelde de potentiometer in en meet 0,6V referentiespanning. De stroombegrenzing zou 0,6*2 = 1,2 A moeten zijn.

Omdat ik Volle Stap Modus gebruik, en volgens de datasheet bereikt de spoelstroom daar maar 70% van de limiet, zou 1,2A * 0,7 = 0,84A moeten zijn. Om te controleren uploadde ik een simpele code die continue hoog stuurt naar STEP pin, en meet de stroom in serie met één spoel. Ik meet 0,5A, dus de formule klopt niet voor mijn board.

Arduino en A4988 Code
Hier is een voorbeeldcode. Eerst definiëren we STEP en DIRECTION pinnen (Arduino 3 en 4, genaamd stepPin en dirPin). In setup stellen we ze in als outputs.
/* Eenvoudige Stapmotor Besturing Voorbeeldcode
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
// Definieer pinnummers
const int stepPin = 3;
const int dirPin = 4;
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop() {
digitalWrite(dirPin, HIGH); // Stel rotatierichting in
// Maak 200 pulsen voor één volledige rotatie
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(1000); // 1 seconde pauze
digitalWrite(dirPin, LOW); // Keer richting om
// Maak 400 pulsen voor twee volledige rotaties
for(int x = 0; x < 400; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(1000);
}
In de loop zetten we DIRECTION hoog voor een bepaalde richting. Met de for-lus laten we de motor één volledige rotatie maken. Omdat de driver op Volle Stap staat en onze motor een staphoek van 1,8 graden heeft (200 stappen per rotatie), sturen we 200 pulsen naar de STEP pin. De for-lus loopt 200 keer, elk keer STEP hoog en laag voor een puls. De delay tussen digitalWrite bepaalt de snelheid.
Na de rotatie wachten we 1 seconde, keeren de richting om (dirPin laag), en maken 2 rotaties met 400 iteraties. Tenslotte nog 1 seconde wachten. Upload de code en zie hoe het werkt.
Ik maakte nog een voorbeeld waarin ik de snelheid regelen met een potentiometer. Hier is de code:
/* Eenvoudige Stapmotor Besturing Voorbeeldcode
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
const int stepPin = 3;
const int dirPin = 4;
int customDelay, customDelayMapped;
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
digitalWrite(dirPin, HIGH);
}
void loop() {
customDelayMapped = speedUp(); // Haal custom delay op uit functie
digitalWrite(stepPin, HIGH);
delayMicroseconds(customDelayMapped);
digitalWrite(stepPin, LOW);
delayMicroseconds(customDelayMapped);
}
// Functie voor het lezen van de potentiometer
int speedUp() {
int customDelay = analogRead(A0); // Lees potentiometer (0-1023)
int newCustom = map(customDelay, 0, 1023, 300, 4000); // Map naar gewenste delay (300-4000)
return newCustom;
}
Productieproces
- Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Twee Stappenmotors Sturen met Arduino Nano & Joystick – Simpele Tutorial
- Arduino & MPU6050: Precieze Servomotor Besturing met SG90 & MG996R
- Temperatuur en Vochtigheid met DHT11 op Blynk - Stap-voor-Stap Arduino Tutorial
- Maak Muzikale Tonen met Arduino: Stapsgewijze Handleiding
- Arduino Uno & Bluetooth voor afstandsbediening van auto: stap-voor-stap handleiding
- Modbus op Arduino onder de knie: Stapsgewijze handleiding
- Precieze Stappenmotorcontrole: 28BYJ-48 met Arduino UNO & Joystick
- Bouw uw eigen AI-assistent robot met Arduino & Python
- Bluetooth-slimme thermostaat en verlichtingsbesturing met Arduino Nano