...

Motor Drivers


A4988 Stepper Motor Driver Carrier:

Pololu A4988 Stepper Driver
---------------------------
(view from top, trim pot on right)
connect SLP and RST together
2a,2b to connected coil of stepper (blue-yellow)
1a,1b to connected coil of stepper (white-red)
 |    |    |    |    |    |    |    |
Vmt  Gnd  2-B  2-A  1-A  1-B  Vdd  Gnd
 |    |    |    |    |    |    |    |
--------------------------------------
| Pololu A4988 Stepper Driver  (trim)|
--------------------------------------
 |    |    |    |    |    |    |    |
En.  Ms1  Ms2  Ms3  Rst  Slp  Stp  Dir
 |    |    |    |    |____|    |    |
How to use this driver.
Got this from Pololu.
To use the SCM-E040 stepper motor with the A4988 driver, leave the center tap (green) wires unconnected. Minimal wiring diagram for connecting a microcontroller to an A4988 stepper motor driver carrier (full-step mode). See this faq for a nice writeup on using unipolar and bipolar stepper motors.

VNH5019 Motor Driver:

  • Operating voltage range: 5.5 – 24 V1. Over-voltage shutoff 24 V min. / 27 V typ. (While the overvoltage protection typically kicks in at 27 V, it can trigger at voltages as low as 24 V, so we do not recommend using this motor driver with 24 V batteries, which significantly exceed 24 V when fully charged.
  • Output current: 12 A continuous (30 maximum). Typical results using the Pololu motor driver carrier boards with 100% duty cycle at room temperature (with no forced airflow or heat sinking beyond the carrier PCB).
    • Time to overheat at 20 A 20 s
    • Time to overheat at 15 A 90 s
    • Current for infinite run time 12 A
  • Current sense (an analog voltage proportional to the motor current) 140 mV/A typ. (210 mV/A for the older boards?)
  • Logic input high threshold 2.1 V min, so inputs compatible with both 5V and 3.3V systems
  • PWM operation up to 20 kHz, which is ultrasonic and allows for quieter motor operation
  • Motor indicator LEDs (indicates what the outputs are doing even when no motor is connected).The LED brightness with increase with motor speed, and the LED color changes with direction.
  • Undervoltage and overvoltage shutdown
  • High-side and low-side thermal shutdown
  • Short-to-ground and short-to-Vcc protection
Got this from Pololu.
Simple Arduino code listing to test out using this chip. The test motor was being supplied 20V, and was drawing a couple of amps at least. PWM started humming at 10, and started turning the motor over starting at 20. (Note: PWM was using the builtin analogWrite() which I think runs a t 490Hz?, could probably do smoother pwm by manipulating the chip's timer directly).
#define A_PIN 6
#define B_PIN 7
#define PWM_PIN 3

/*
   Arduino    VNH5019
      6         INA
      7         INB
      3         PWM
     +5v        VDD
     GND        GND

Program listens to commands coming over serial. Commands are single characters, sent with no line ending.
f : turn forward at curent pwm value
r : reverse at current pwm value
+ : increment current pwm value by 10
- : decrement current pwm value by 10
anything else puts the motor to coast.

*/

byte pwm_value = 0;

void setup() {

 pinMode(A_PIN, OUTPUT);
 pinMode(B_PIN, OUTPUT);

 Serial.begin(9600);
}

void loop() {
 if (Serial.available() > 0) {
        char incomingChar = Serial.read();
        
        switch (incomingChar) {
            case 'f':
                digitalWrite(A_PIN, HIGH);
                digitalWrite(B_PIN, LOW);    
                Serial.print(pwm_value); Serial.println(" forward");        
                break;
            case 'r':
                digitalWrite(A_PIN, LOW);
                digitalWrite(B_PIN, HIGH); 
                Serial.print(pwm_value); Serial.println(" reverse");
                break;      
            case '+':
                pwm_value = pwm_value + 10;
                analogWrite(PWM_PIN, pwm_value);
                Serial.print(pwm_value); Serial.println(" pwm_value");
                break;
            case '-':
                pwm_value = pwm_value - 10;
                analogWrite(PWM_PIN, pwm_value);
                Serial.print(pwm_value); Serial.println(" pwm_value");
                break;                
            default:
                digitalWrite(A_PIN, LOW);
                digitalWrite(B_PIN, LOW);
                Serial.print(pwm_value); Serial.println("stopped");
                break;
        }
 }
}


DRV8801 Single Brushed DC Motor Driver Carrier:

  • Drives a single brushed DC motor
  • Motor supply voltage: 8–36 V
  • Logic supply voltage: 3.3–6.5 V
  • Output current: 1 A continuous (2.8 A peak)
  • Simple interface requires only two I/O lines (one for direction and another for speed)
  • Current sense output proportional to motor current (approx. 500 mV per A)
  • Inputs are 3V- and 5V-compatible
  • Under-voltage lockout and protection against over-current and over-temperature

Sample arduino listing:

#define DIR_PIN 2
#define PWM_PIN 3

/*
   Arduino    DRV8801
      2         DIR
      3         PWM
     +5v        VDD
     GND        GND

Program listens to commands coming over serial. Commands are single characters, sent with no line ending.
f : turn forward at curent pwm value
r : reverse at current pwm value
+ : increment current pwm value by 10
- : decrement current pwm value by 10
anything else stops motor.
*/

byte pwm_value = 0;

void setup()
{
 pinMode(DIR_PIN, OUTPUT);
 Serial.begin(9600);
}

void loop()
{
 if (Serial.available() > 0)
 {
  char incomingChar = Serial.read();
  switch (incomingChar)
  {
   case 'f':
    digitalWrite(DIR_PIN, HIGH);
    Serial.print(pwm_value);
    Serial.println(" forward");
    break;
   case 'r':
    digitalWrite(DIR_PIN, LOW);
    Serial.print(pwm_value);
    Serial.println(" reverse");
    break;
   case '+':
    pwm_value = pwm_value + 10;
    analogWrite(PWM_PIN, pwm_value);
    Serial.print(pwm_value);
    Serial.println(" pwm_value");
    break;
   case '-':
    pwm_value = pwm_value - 10;
    analogWrite(PWM_PIN, pwm_value);
    Serial.print(pwm_value);
    Serial.println(" pwm_value");
    break;
   default:
    pwm_value = 0;
    analogWrite(PWM_PIN, pwm_value);
    Serial.print(pwm_value);
    Serial.println("stopped");
    break;
  }
 }
}

Got this from Pololu


Pololu TB6612FNG Dual Motor Driver Carrier:

This tiny board is an easy way to use Toshiba’s TB6612FNG dual motor driver, which can independently control two bidirectional DC motors or one bipolar stepper motor. A recommended motor voltage of 4.5 – 13.5 V and peak current output of 3 A per channel (1 A continuous) make this a great motor driver for low-power motors.
Note: Try tying pwmA and pwmB to high, if you don’t want to do pwm. just leaving it open, the motors can’t be controlled.
Got this from Pololu.
//Configure these to fit your design...
#define out_STBY 5
#define out_A_IN2 9
#define out_A_IN1 10
#define out_B_IN1 8
#define out_B_IN2 7
#define out_B_PWM 3
#define out_A_PWM 11
#define motor_A 0
#define motor_B 1
int incomingByte;

void setup() {
 pinMode(out_STBY,OUTPUT);
 pinMode(out_A_IN1,OUTPUT);
 pinMode(out_A_IN2,OUTPUT);
 pinMode(out_B_IN1,OUTPUT);
 pinMode(out_B_IN2,OUTPUT);
 pinMode(out_A_PWM,OUTPUT);
 pinMode(out_B_PWM,OUTPUT);
 motor_standby(false);
 Serial.begin(9600);
}

void loop() {
 if (Serial.available() > 0) {
        incomingByte = Serial.read();
        if (incomingByte == 'q') {
         motor_coast(motor_A);
        } else if (incomingByte == 'w') {
         motor_direction(motor_A, 0);
        } else if (incomingByte == 'e') {
         motor_direction(motor_A, 1);
        } else if (incomingByte == 'p') {
         motor_coast(motor_B);
        } else if (incomingByte == 'o') {
         motor_direction(motor_B, 0);
        } else if (incomingByte == 'i') {
         motor_direction(motor_B, 1);
        }
 }
}

void motor_direction(boolean motor, boolean direction) {
 if (motor == motor_A) {
        if (direction == 0) {
         digitalWrite(out_A_IN1,HIGH);
         digitalWrite(out_A_IN2,LOW);
        } else {
         digitalWrite(out_A_IN1,LOW);
         digitalWrite(out_A_IN2,HIGH);
        }
        analogWrite(out_A_PWM,255);
 } else {
        if (direction == 0) {
         digitalWrite(out_B_IN1,HIGH);
         digitalWrite(out_B_IN2,LOW);
        } else {
         digitalWrite(out_B_IN1,LOW);
         digitalWrite(out_B_IN2,HIGH);
        }
        analogWrite(out_B_PWM,255);
 }
}

void motor_standby(boolean state) { //low power mode
 if (state == true)
        digitalWrite(out_STBY,LOW);
 else
        digitalWrite(out_STBY,HIGH);
}

void motor_coast(boolean motor) {
 if (motor == motor_A) {
        digitalWrite(out_A_IN1,LOW);
        digitalWrite(out_A_IN2,LOW);
        digitalWrite(out_A_PWM,HIGH);
 } else {
        digitalWrite(out_B_IN1,LOW);
        digitalWrite(out_B_IN2,LOW);
        digitalWrite(out_B_PWM,HIGH);
 }
}

DRV8834 Low-Voltage Stepper Motor Driver Carrier:


Got this from Pololu.

Pololu Dual Serial Motor Controller:

Got this from Pololu.

SN754410:


PinNameH-Bridge FunctionNotes
11,2ENMotor 1 EnableSetting this pint o 0V (LOW) will turn off the motor, setting it to 5V (HIGH) will enable the motor. Connect this pin to the 5V supply, or use as an emergency shutoff.
21AMotor 1 ForwardSet this pin to 5V (HIGH) to turn Motor1 in one direction. Motor Speed can be controlled by using PWM into this pin
31YMotor 1 PowerConnect to one pin of Motor1
4GroundGroundConnect to ground - required for heat sinking
5GroundGroundConnect to ground - required for heat sinking
62YMotor 1 PowerConnect to other pin of Motor1
72AMotor 1 ReverseSet this pin to 5V (HIGH) to turn Motor1 in the opposite direction. Motor Speed can be controlled by using PWM into this pin
8VCC2Motor Power SourcePositive power source for your motors. (i.e. connect to battery - max 36V)
93,4ENMotor 2 EnableSetting this pint o 0V (LOW) will turn off the motor, setting it to 5V (HIGH) will enable the motor. Connect this pin to the 5V supply, or use as an emergency shutoff.
103AMotor 2 ForwardSet this pin to 5V (HIGH) to turn Motor2 in one direction. Motor Speed can be controlled by using PWM into this pin
113YMotor 2 PowerConnect to one pin of Motor2
12GroundGroundConnect to ground - required for heat sinking
13GroundGroundConnect to ground - required for heat sinking
144YMotor 2 PowerConnect to other pin of Motor2
154AMotor 2 ReverseSet this pin to 5V (HIGH) to turn Motor2 in the opposite direction. Motor Speed can be controlled by using PWM into this pin
16VCC1IC Logic PowerRegulated +5V (VCC / VDD)

ULN2803:


FAN8200:

(discontinued)

BA62222:


L298:


L298 Keyes Module:


  • Uses ST' L298N chip, can directly drive two 3-30V DC motor, and provide a 5V output interface, power for 5V single-chip circuitry, support 3.3VMCU control
  • Can easily control the DC motor speed and direction, also control the 2-phase stepper motor
  • Driver: L298N Dual H Bridge DC Motor Driver IC
  • Driven part of the terminal supply voltage: VMS 5~35V
  • Driven part of the peak current Io: 2A per bridge
  • The logical part of the terminal supply voltage: 4.5~7V
  • The logical part of the operating current range: 0 ~ 36mA
  • Control signal input voltage range: 4.5~5.5V (high) / 0V (low)
  • Maximum power consumption: 20W
Check out http://blog.pennybuying.com/down/f/F815A.pdf for documentation on the module. This seems to have the same jumpers and headers.
See this for a nice usage writeup.
Got this from dealextreme

Parallel Port Interface:

This is a stepper motor controller that I built a few years ago. It used that array of TIP120 transistors, with an onboard 7805 power supply, and had connections (the orange, green and blue headers) for 3 unipolar stepper motors that could be driven by a parallel port (through the 7244 octal buffer chips). It also could feed 8 inputs (the yellow header) to the parallel port.

This project was a first attempt at etching a pcb (using toner transfer from a laser printed printed image onto photo paper of a drawing made using Visio). That was quite easy to do, but I didn't do a clean job. Some of the traces, especially the really skinny ones, had to be built up with solder. Also, it was not an easy task to drill all the holes, even though I etched registration dimples for the holes.