

The A4988 is a microstepping driver designed for controlling bipolar stepper motors. It enables precise control of motor position, speed, and torque by supporting microstepping resolutions down to 1/16th of a step. The driver features adjustable current control, over-temperature protection, and short-circuit protection, making it a reliable choice for a wide range of applications.








The A4988 driver is a compact and versatile component with the following key specifications:
| Parameter | Value |
|---|---|
| Operating Voltage (VMOT) | 8V to 35V |
| Logic Voltage (VDD) | 3.3V to 5V |
| Maximum Output Current | 2A per coil (with sufficient cooling) |
| Microstepping Modes | Full, 1/2, 1/4, 1/8, 1/16 |
| Step Input Frequency | Up to 500 kHz |
| Current Control | Adjustable via potentiometer |
| Protection Features | Over-temperature, short-circuit, undervoltage lockout |
The A4988 driver module has 16 pins. Below is the pinout and description:
| Pin Name | Type | Description |
|---|---|---|
| VMOT | Power Input | Motor power supply (8V to 35V). Connect a capacitor (100 µF or higher) nearby. |
| GND | Power Ground | Ground connection for motor power supply. |
| VDD | Power Input | Logic power supply (3.3V to 5V). |
| GND | Power Ground | Ground connection for logic power supply. |
| 1A, 1B | Motor Output | Connect to one coil of the stepper motor. |
| 2A, 2B | Motor Output | Connect to the other coil of the stepper motor. |
| STEP | Logic Input | Controls the step signal. Each pulse moves the motor one step. |
| DIR | Logic Input | Sets the direction of motor rotation. |
| ENABLE | Logic Input | Enables or disables the driver (active low). |
| MS1, MS2, MS3 | Logic Input | Microstepping resolution selection. |
| RESET | Logic Input | Resets the driver (active low). |
| SLEEP | Logic Input | Puts the driver into low-power sleep mode (active low). |
| REF | Analog Input | Reference voltage for current control. |
Below is an example code to control a stepper motor using the A4988 driver and Arduino UNO:
// Define control pins for the A4988 driver
#define STEP_PIN 3 // Connect to STEP pin on A4988
#define DIR_PIN 4 // Connect to DIR pin on A4988
void setup() {
pinMode(STEP_PIN, OUTPUT); // Set STEP pin as output
pinMode(DIR_PIN, OUTPUT); // Set DIR pin as output
digitalWrite(DIR_PIN, HIGH); // Set initial direction (HIGH = clockwise)
}
void loop() {
// Generate step pulses to move the motor
for (int i = 0; i < 200; i++) { // 200 steps for one revolution (1.8°/step)
digitalWrite(STEP_PIN, HIGH); // Set STEP pin HIGH
delayMicroseconds(1000); // Wait 1 ms (adjust for speed control)
digitalWrite(STEP_PIN, LOW); // Set STEP pin LOW
delayMicroseconds(1000); // Wait 1 ms
}
delay(1000); // Wait 1 second before changing direction
// Change direction
digitalWrite(DIR_PIN, !digitalRead(DIR_PIN)); // Toggle direction
}
Motor Not Moving:
Overheating:
Vibrations or Noise:
Driver Not Responding:
Q: Can I use the A4988 with a unipolar stepper motor?
A: No, the A4988 is designed for bipolar stepper motors only.
Q: How do I calculate the current limit?
A: The current limit is set using the formula:
Current Limit = VREF / (8 × R_sense)
where R_sense is the value of the sense resistor (typically 0.1Ω).
Q: What happens if I exceed the maximum voltage?
A: Exceeding 35V on VMOT can permanently damage the driver. Always use a regulated power supply.
Q: Can I daisy-chain multiple A4988 drivers?
A: Yes, you can control multiple drivers using separate STEP and DIR pins for each motor.
By following this documentation, you can effectively use the A4988 driver to control stepper motors in your projects.