Blogs
A4988 Stepper Motor Driver Module
A4988 Stepper Motor Driver Module
Microstepping bipolar stepper motor driver with up to 2A per coil and 1/16 step resolution
Introduction
The A4988 stepper motor driver is a complete microstepping motor driver with built-in translator for easy operation. It’s designed to operate bipolar stepper motors in full-, half-, quarter-, eighth-, and sixteenth-step modes, with an output drive capacity of up to 35V and ±2A.

Key Features
Microstepping
1/16 step resolution
High Current
Up to 2A per coil (with heatsink)
Protection
Thermal shutdown & overcurrent
Simple Control
STEP/DIR interface
Adjustable Current
Via potentiometer
Status LEDs
Power and fault indicators
Technical Specifications
Operating Voltage | 8-35V |
---|---|
Logic Voltage | 3-5.5V |
Max Current per Coil | 2A (with heatsink) |
Microstep Resolution | Full, 1/2, 1/4, 1/8, 1/16 |
Step Frequency | Up to 250kHz |
Protection Features | Thermal shutdown, undervoltage lockout, crossover-current |
Package | QFN-28 (5mm × 5mm) |
Module Dimensions | 20mm × 15mm × 10mm |
Pin Configuration

Pin | Description | Connection |
---|---|---|
VMOT | Motor power (8-35V) | Connect to power supply |
GND | Ground | Connect to power supply ground |
VDD | Logic voltage (3-5.5V) | Connect to Arduino 5V |
STEP | Step input | Connect to Arduino digital pin |
DIR | Direction input | Connect to Arduino digital pin |
ENABLE | Enable (active LOW) | Optional control |
MS1, MS2, MS3 | Microstep selection | Connect to GND or VDD |
1A, 1B, 2A, 2B | Motor coil connections | Connect to stepper motor |
Current Adjustment
- Power off the driver and disconnect motor
- Set multimeter to measure DC voltage (200mV range)
- Place probes on the potentiometer and GND
- Power on the system
- Adjust potentiometer until VREF = I_Trip × 0.8
- Example: For 1A current, set VREF to 0.8V
Formula: VREF = Current Limit × 0.8 (e.g., 1A × 0.8 = 0.8V)
Microstep Configuration
MS1 | MS2 | MS3 | Microstep Resolution |
---|---|---|---|
LOW | LOW | LOW | Full step |
HIGH | LOW | LOW | 1/2 step |
LOW | HIGH | LOW | 1/4 step |
HIGH | HIGH | LOW | 1/8 step |
HIGH | HIGH | HIGH | 1/16 step |
Arduino Connection Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// Basic A4988 Stepper Control const int dirPin = 2; const int stepPin = 3; const int stepsPerRevolution = 200; void setup() { pinMode(dirPin, OUTPUT); pinMode(stepPin, OUTPUT); } void loop() { // Set direction clockwise digitalWrite(dirPin, HIGH); // Spin motor slowly for(int x = 0; x < stepsPerRevolution; x++) { digitalWrite(stepPin, HIGH); delayMicroseconds(1000); digitalWrite(stepPin, LOW); delayMicroseconds(1000); } delay(1000); // Wait a second // Set direction counterclockwise digitalWrite(dirPin, LOW); // Spin motor quickly for(int x = 0; x < stepsPerRevolution; x++) { digitalWrite(stepPin, HIGH); delayMicroseconds(500); digitalWrite(stepPin, LOW); delayMicroseconds(500); } delay(1000); // Wait a second } |
Heatsink Installation
- Clean the metal surface of the A4988 chip
- Apply thermal adhesive or thermal tape
- Press heatsink firmly onto the chip
- Allow adhesive to cure if needed
- Ensure no electrical contact with other components
Important: Always use a heatsink when driving currents above 1A
Troubleshooting
Motor Not Moving
- Check power supply connections
- Verify ENABLE pin is LOW (or disconnected)
- Confirm STEP pulses are being sent
- Check current adjustment
Driver Gets Hot
- Ensure proper heatsink installation
- Reduce current if not needed
- Check for short circuits
- Improve ventilation
Inconsistent Movement
- Verify microstep settings
- Check motor wiring connections
- Ensure sufficient power supply
- Slow down STEP pulse frequency
Application Examples
3D Printers
Precise axis control
CNC Machines
Accurate tool positioning
Camera Sliders
Smooth motion control
Lab Automation
Precise liquid handling