Skip to content

k-off/A4988

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A4988

Control Library for Pololu A4988 Motor Driver

A4988

Features

Simple and extended control.

Simple control

Basic functions

// create an instance of motor driver with only 3 pins
A4988 stepper(pinEnable, pinDirection, pinStep);

// enable stepper driver
stepper.enable();

// disable stepper driver
stepper.disable();

// set rotation direction using enum values Back or Forth
stepper.setDirection(Forth);

// get current directoin
uint8_t currentDirection = stepper.getDirection();

// add a task to be performed, speed is a float in range 0.001 .. 1.0
stepper.addTask(amountOfSteps, direction, speed);

// toggle step pin; it takes two toggles to perform one step
stepper.halfStep();

Extended control

Extra functions

// create an instance of motor driver with all available pins
A4988 stepper(pinEnable, pinDirection, pinStep, pinSleep, pinReset, pinModeSel3, pinModeSel2, pinModeSel1);

// disable motor driver FETs, stepper will not move until next call to wake()
stepper.sleep();

// enable motor driver FETs
stepper.wake();

// reset motor driver internal logic and counters
stepper.reset();

// set step size, use one of enumerations: Full, Half, Quarter, Eighth or Sixteenth of a step
stepper.setStepSize(Quarter);

// add a task to be performed
stepper.addTask(amountOfSteps, stepSize, direction, speed);

Synchronization

Motors can be grouped into a sichronization pool. Each motor in the pool must receive a task before they start execution.

Once all motors have received a task execution starts immediately.

Even if one of the synchronized motors has to do 0 steps, it still has to receive a dummy task in order to unlock others.

A4988 stepper1(pinEnable, pinDirection, pinStep);
A4988 stepper2(pinEnable, pinDirection, pinStep);
A4988 stepper3(pinEnable, pinDirection, pinStep);
A4988 stepper4(pinEnable, pinDirection, pinStep);

void setup() {
  stepper1.enable();
  stepper2.enable();
  stepper3.enable();
  stepper4.enable();
  stepper1.synchronize();
  stepper2.synchronize();
  stepper3.synchronize();
}

void loop() {
  stepper1.addTask(5, direction, speed);
  stepper2.addTask(10, direction, speed);
  stepper3.addTask(0, direction, speed); // add a dummy task for a synchronized motor
  stepper1.halfStep();
  stepper2.halfStep();
  stepper3.halfStep();
  
  stepper4.addTask(500, direction, speed); // non-synchronized motor does not depend on other ones and doesn't block them
  stepper4.halfStep();
}

Non-blocking implementation

The motor stepping is implemented without the use of delay(), which allows for some more sophisticated logic to be added to the sketch.

However, the library relies on polling rather than on timer interrupts, which means exact step timing is not guaranteed.

About

Control Library for A4988 Motor Driver

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages