Adafruit Motor Shield v2 For Arduino
Adafruit Motor Shield v2 For Arduino
The original Adafruit Motorshield kit is one of our most beloved kits, which is why we decided to make something even
better. We have upgraded the shield kit to make the bestest, easiest way to drive DC and Stepper motors. This shield
will make quick work of your next robotics project! We kept the ability to drive up to 4 DC motors or 2 stepper motors,
but added many improvements:
Instead of a L293D darlington driver, we now have the TB6612 MOSFET drivers with 1.2A per channel current
capability (you can draw up to 3A peak for approx 20ms at a time). It also has much lower voltage drops across the
motor so you get more torque out of your batteries, and there are built-in flyback diodes as well.
Instead of using a latch and the Arduino's PWM pins, we have a fully-dedicated PWM driver chip onboard. This chip
handles all the motor and speed controls over I2C. Only two GPIO pins (SDA & SCL) plus 5v and GND. are required to
drive the multiple motors, and since it's I2C you can also connect any other I2C devices or shields to the same pins.
This also makes it drop-in compatible with any Arduino, such as the Uno, Leonardo, Due and Mega R3.
Completely stackable design: 5 address-select pins means up to 32 stackable shields: that's 64 steppers or 128 DC
motors! What on earth could you do with that many steppers? I have no idea but if you come up with something send
us a photo because that would be a pretty glorious project.
Lots of other little improvements such as a polarity protection FET on the power pins and a big prototyping area. And
the shield is assembled and tested here at Adafruit so all you have to do is solder on straight or stacking headers and
the terminal blocks.
2 connections for 5V 'hobby' servos connected to the Arduino's high-resolution dedicated timer - no jitter!
4 H-Bridges: TB6612 chipset provides 1.2A per bridge (3A for brief 20ms peaks) with thermal shutdown
As of Arduino 1.5.6-r2 BETA, there is a bug in the Due Wire library that prevents multiple Motor Shields from
working properly with the Due!
You can use 2 DC hobby servos that run on 5V and up to 4 DC motors or 2 stepper motors (or 1 stepper and up to 2
DC motors) that run on 5-12VDC
Yes, by stacking shields! Every shield you stack on will add 4 DC motors or 2 stepper motors (or 1 more stepper and
2 more DC motors).
You will not gain more servo connections as the servo contacts go to pin #9 and #10 on the Arduino.
Check out our lovely servo shield, also stackable with this motor shield and adds 16 free-running servos per shield
http://learn.adafruit.com/adafruit-16-channel-pwm-slash-servo-shield
It is tested to work with Duemilanove, Diecimila, Uno (all revisions), Leonardo and Mega/ADK R3 and higher.
It can work with Mega R2 and lower if you solder a jumper wire from the shield's SDA pin to Digital 20 and the SCL
pin to Digital 21
For use with the Due or other 3.3v processors, you must configure the board for 3.3v logic levels. Find the set of 3
pads labeled "Logic". Cut the small trace between the center pad and 5v and add a jumper from 3.3v to the center.
I get the following error trying to run the example code: "error: Adafruit_MotorShield.h: No such file or
directory...."
Is the power LED lit? The Stepper and DC motor connections will not work if the onboard green Power LED is not lit
brightly!
You must connect 5-12VDC power to the shield through the POWER terminal blocks or through the DC barrel jack
on the Arduino and VIN jumper.
The LED indicates the DC/Stepper motor power supply is working. If it is not lit brightly, then the DC/Stepper motors
will not run. The servo ports are 5V powered and does not use the DC motor supply
GND and either 5v (default) or 3.3v are required to power the logic on-board. (5v or 3v operation is selectable via
jumper)
The shield uses the SDA and SCL i2c pins to control DC and stepper motors. On the Arduino UNO these are also
known as A4 and A5. On the Mega these are also known as Digital 20 and 21. On the Leonardo these are also
known as digital 2 and 3. Do not use those pins on those Arduinos with this shield with anything other than an i2c
sensor/driver.
Since the shield uses I2C to communicate, you can connect any other i2c sensor or driver to the SDA/SCL pins as
long as they do not use address 0x60 (the default address of the shield) or 0x70 (the 'all call' address that this chip
uses for group-control)
If you want to use the servo connections, they are on pins #9 and #10. If you do not use the connector then those
pins are simply not used.
You can use any other pins for any other use
All pins are broken out into 0.1" spaced header along the edges of the shield
Motors take a lot of power, and can cause 'brownouts' that reset the Arduino. For that reason the shield is designed
for seperate (split) supplies - one for the electronics and one for the motor. Doing this will prevent brownouts. Please
read the user manual for information about appropriate power supplies.
You cannot power motors from a 9V battery. You must use AA batteries or a lead acid battery for motors.
Not really, its meant for larger, 5V+ motors. It does not work for 3V motors unless you overdrive them at 5V and then
they will burn out faster
Try soldering a ceramic or disc 0.1uF capacitor between the motor tabs (on the motor itself!) this will reduce noise
that could be feeding back into the circuit (thanks macegr!)
Many small DC motor have a lot of "brush noise". This feeds back into the Arduino circuitry and causes unstable
operation. This problem can be solved by soldering some 0.1uF ceramic noise suppression capacitors to the motor.
You will need 3 total. 1 between the motor terminals, and one from each terminal to the motor casing.
These motors generate a lot of brush noise and usually need the full 3-capacitor treatment for adequate
suppression.
They would not be effective there. The noise must be suppressed at the source or the motor leads will act like
antennae and broadcast it to the rest of the system!
Since the shield is controlled by i2c, the maximum step rate is limited by the i2c bus speed. The default bus speed is
100KHz and can be increased to 400KHz by editing the library file in your Arduino installation folder. The file can be
found in hardware/libraries/wire/utility/twi.h.
Or, you can add the following code to your setup() function: (Note: this line must be inserted after the call to begin())
The shield is addressable from 0x60-0x7F. 0x70 is an "all call" address that all boards will answer to.
Some backpacks have a default address of 0x70. This is the "all call" address of the controller chip on the motor
shield. If you re-address your backpack, it will work with the shield.
The shield comes with 0.1" standard header. Standard header does not permit stacking but it is mechanically stronger
and they're much less expensive too! If you want to stack a shield on top, do not perform this step as it is not possible
to uninstall the headers once soldered in! Skip down to the bottom for the stacking tutorial
Flip the board over so that you can see & solder the pins
of the terminal blocks
OK next up take the 2x3 pin header and place it with the
short legs down into the top corner where it says SERVO
1 and SERVO 2
We don't show soldering in the 2x3 stacking header but you should solder that in as well - even though this
shield does not use it, the one above may need those pins!
To begin controlling motors, you will need to install the Adafruit_Motor_Shield_V2_Library library (code on our github
repository) (https://adafru.it/ciN). It is available from the Arduino library manager so we recommend using that.
If you plan to use AccelStepper for acceleration control or for simultaneous control of multiple stepper motors, you will
also need to download and install the AccelStepper library:
https://adafru.it/IpB
https://adafru.it/IpB
For more details on how to install Arduino libraries, check out our detailed tutorial! (https://adafru.it/aYM)
First, restart the IDE to make sure the new library is loaded.
Plug the shield into the Arduino and connect a DC motor to motor port 1 - it does not matter which wire goes into
which terminal block as motors are bi-directional. Connect to the top two terminal ports, do not connect to the middle
pin (GND) See the photo below for the red and blue wire example. Be sure to screw down the terminal blocks to make
a good connection!
You must also supply 5-12VDC to power the motor. There are two ways to do this
1. You can power the Arduino via the DC Barrel Jack and insert the VIN Jumper shown as the tall black handle
right next to the green Power LED below
2. You can power the Arduino via the DC Barrel jack or USB port. Then Power the shield via the 5-12VDC motor
power terminal port, the double terminal block next to the green Power LED and remove the VIN jumper
If the Green LED next to the power terminal block isn't lit up brightly do not continue!
You should see and hear the DC motor turn on and move back and forth, attaching a slip of paper or tape as a 'flag'
can help you visualize the movement if you have trouble seeing the movement
You can also test a stepper motor connection with the shield. The shield can run unipolar (5-wire and 6-wire) and
bipolar (4-wire) steppers. It cannot run steppers with any other # of wires! The code is the same for unipolar or bipolar
motors, the wiring is just slightly different.
Plug the shield into the Arduino and connect a stepper motor to motor port 2 - unlike DC motors, the wire order does
'matter'. Connect to the top two terminal ports (coil #1) and the bottom two terminal ports (coil #2).
If you have a bipolar motor, do not connect to the middle pin (GND).
If you are using a unipolar motor with 5 wires, connect the common wire to GND.
If you are using a unipolar motor with 6 wires, you can connect the two 'center coil wires' together to GND
1. You can power the Arduino via the DC Barrel Jack and insert the VIN Jumper shown as the tall black handle
right next to the green Power LED below
2. You can power the Arduino via the DC Barrel jack or USB port. Then Power the shield via the 5-12VDC motor
power terminal port, the double terminal block next to the green Power LED and remove the VIN jumper
If the Green LED isn't lit up brightly do not continue - you must power it via the VIN jumper or the terminal block
Once you have verified the motor is connected properly and you have the power LED lit up brightly, we can upload our
You should see and hear the stepper motor turn on and move back and forth, attaching a slip of paper or tape as a
'flag' can help you visualize the movement if you have trouble seeing the movement. There are four ways to move a
stepper, with varying speed, torque and smoothness tradeoffs. This example code will demonstrate all four.
class Adafruit_MotorShield;
The Adafruit_MotorShield class represents a motor shield and must be instantiated before any DCMotors or
StepperMotors can be used. You will need to declare one Adafruit_MotorShield for each shield in your system.
class Adafruit_DCMotor
The Adafruit_DCMotor class represents a DC motor attached to the shield. You must declare an Adafruit_DCMotor for
each motor in your system.
// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
void run(uint8_t);
The run() function controls the motor state. The parameter can have one of 3 values:
Note that the "FORWARD" and "BACKWARD" directions are arbitrary. If they do not match the actual direction of your
vehicle or robot, simple swap the motor leads.
Also note that "RELEASE" simply cuts power to the motor. It does not apply any braking.
void setSpeed(uint8_t);
The setSpeed() function controls the power level delivered to the motor. The speed parameter is a value between 0
and 255.
Note that setSpeed just controls the power delivered to the motor. The actual speed of the motor will depend on
several factors, including: The motor, the power supply and the load.
// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Connect a stepper motor with 200 steps per revolution (1.8 degree)
// to motor port #2 (M3 and M4)
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);
void setSpeed(uint16_t);
The setSpeed() function controls the speed of the stepper motor rotation. Speed is specified in RPM.
Note: Calling step() with a step count of 1 is not the same as calling onestep(). The step function has a delay based on
the speed set in setSpeed(). onestep() has no delay.
void release(void);
The release() function removes all power from the motor. Call this function to reduce power requirements if holding
torque is not required to maintain position.
Voltage requirements:
The first important thing to figure out what voltage the motor is going to use. If you're lucky your motor came with some
sort of specifications. Some small hobby motors are only intended to run at 1.5V, but its just as common to have 6-12V
motors. The motor controllers on this shield are designed to run from 5V to 12V.
MOST 1.5-3V MOTORS WILL NOT WORK
Current requirements:
The second thing to figure out is how much current your motor will need. The motor driver chips that come with the kit
are designed to provide up to 1.2 A per motor, with 3A peak current. Note that once you head towards 2A you'll
probably want to put a heat-sink on the motor driver, otherwise you will get thermal failure, possibly burning out the
chip.
You can't run motors off of a 9V battery so don't waste your time/batteries!
Use a big Lead Acid or NiMH battery pack. Its also very much suggested that you set up two power supplies (split
supply) one for the Arduino and one for the motors. 99% of 'weird motor problems' are due to noise on the power line
from sharing power supplies and/or not having a powerful enough supply! Even small DC motors can draw up to 3
Amps when they stall.
Servos are powered off of the same regulated 5V that the Arduino uses. This is OK for the small hobby servos
suggested. Basically, power up your Arduino with the USB port or DC barrel jack and you're good to go. If you want
something beefier, cut the trace going to the optional servo power terminal and wire up your own 5-6V supply!
There are two places you can get your motor 'high voltage supply' from.
The DC Jack on the Arduino has a protection diode so you won't be able to mess things up too bad if you plug in the
wrong kind of power. The terminal block has a protection FET so you will not damage the arduino/shield if you wire up
your battery supply backwards, but it wont work either!
Note that you may have problems with Arduino resets if the battery supply is not able to provide constant power, so it
is not a suggested way of powering your motor project. You cannot use a 9V battery for this, it must be 4 to 8 AA
batteries or a single/double lead acid battery pack.
If you would like to have the Arduino powered off of USB and the motors powered off of a
DC power supply
Plug in the USB cable. Then connect the motor supply to the power terminal block on the shield. Do not place the
jumper on the shield.
This is a suggested method of powering your motor project as it has a split supply, one power supply for logic, and one
supply for motors
If you would like to have 2 separate DC power supplies for the Arduino and motors.
Plug in the supply for the Arduino into the DC jack, and connect the motor supply to the power terminal block. Make
sure the jumper is removed from the motor shield.
No matter what, if you want to use the DC motor/Stepper system the motor shield LED should be lit indicating good
motor power
Hobby servos are the easiest way to get going with motor control. They have a 3-pin 0.1" female header connection
with +5V, ground and signal inputs. The motor shield simply brings out the PWM output lines from Arduino pins 9 and
10 to two 3-pin headers so that its easy to plug in and go. They can take a lot of power so a 9V battery wont last more
than a few minutes!
The nice thing about using the onboard PWM is that its very precise and goes about its business in the background.
You can use the built in Servo library
Using the servos is easy, please read the official Arduino documentation for how to use them and see the example
Servo sketches in the IDE (https://adafru.it/aOD).
Powering Servos
Power for the Servos comes from the Arduino's on-board 5V regulator, powered directly from the USB or DC power
jack on the Arduino. If you need an external supply, cut the 5v trace on the bottom of the board and connect a 5V or
6V DC supply directly to the Opt Servo power input. Using an external supply is for advanced users as you can
accidentally destroy the servos by connecting a power supply incorrectly!
When using external servo power, be careful not to let it short out against the USB socket shell on the
processor board. Insulate the top of the USB socket with some electrical tape.
The motor shield can drive up to 4 DC motors bi-directionally. That means they can be driven forwards and backwards.
The speed can also be varied at 0.5% increments using the high-quality built in PWM. This means the speed is very
smooth and won't vary!
Note that the H-bridge chip is not meant for driving continuous loads of 1.2A, so this is for small motors. Check the
datasheet for information about the motor to verify its OK!
Connecting DC Motors
To connect a motor, simply solder two wires to the terminals and then connect them to either the M1, M2, M3, or M4.
Then follow these steps in your sketch
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
with getMotor(port#). Port# is which port it is connected to. If you're using M1 its 1, M2 use 2, M3 use 3 and M4 use 4
AFMS.begin();
myMotor->setSpeed(150);
myMotor->run(FORWARD);
Stepper motors are great for (semi-)precise control, perfect for many robot and CNC projects. This motor shield
supports up to 2 stepper motors. The library works identically for bi-polar and uni-polar motors
Before connecting a motor, be sure to check the motor specifications for compatibility with the
shield (https://adafru.it/r2d).
For unipolar motors: to connect up the stepper, first figure out which pins connected to which coil, and which pins are
the center taps. If its a 5-wire motor then there will be 1 that is the center tap for both coils. Theres plenty of tutorials
online on how to reverse engineer the coils pinout. (https://adafru.it/aOO) The center taps should both be connected
together to the GND terminal on the motor shield output block. then coil 1 should connect to one motor port (say M1 or
M3) and coil 2 should connect to the other motor port (M2 or M4).
For bipolar motors: its just like unipolar motors except theres no 5th wire to connect to ground. The code is exactly the
same.
Running a stepper is a little more intricate than running a DC motor but its still very easy
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_PWMServoDriver.h"
Steps indicates how many steps per revolution the motor has. A 7.5 degree/step motor has 360/7.5 = 48 steps.
Stepper# is which port it is connected to. If you're using M1 and M2, its port 1. If you're using M3 and M4 indicate port
2
Theres tons of information about the pros and cons of these different stepping methods in the resources page.
You can use whichever stepping method you want, changing it "on the fly" to as you may want minimum power, more
torque, or more precision.
By default, the motor will 'hold' the position after its done stepping. If you want to release all the coils, so that it can
spin freely, call release()
The stepping commands are 'blocking' and will return once the steps have finished.
Because the stepping commands 'block' - you have to instruct the Stepper motors each time you want them to move. If
you want to have more of a 'background task' stepper control, check out AccelStepper library (https://adafru.it/aOL)
(install similarly to how you did with Adafruit_MotorShield) which has some examples for controlling three steppers
simultaneously with varying acceleration
First make sure you are running the latest version of Adafruit CircuitPython (https://adafru.it/Amd) for your board.
Next you'll need to install the necessary libraries to use the hardware--carefully follow the steps to find and install these
libraries from Adafruit's CircuitPython library bundle (https://adafru.it/uap). Our CircuitPython starter guide has a great
page on how to install the library bundle (https://adafru.it/ABU).
If you choose, you can manually install the libraries individually on your board:
adafruit_pca9685
adafruit_bus_device
adafruit_register
adafruit_motor
adafruit_motorkit
Next connect to the board's serial REPL (https://adafru.it/Awz) so you are at the CircuitPython >>> prompt.
CircuitPython Usage
To demonstrate the usage, we'll initialise the library and use Python code to control DC and stepper motors from the
board's Python REPL.
DC Motors
The four motor spots on the Shield are available as motor1 , motor2 , motor3 , and motor4 .
Note: For small DC motors like sold in the shop you might run into problems with electrical noise they generate and
erratic behavior on your board. If you see erratic behavior like the motor not spinning or the board resetting at high
motor speeds this is likely the problem. See this motor guide FAQ page for information on capacitors you can solder to
the motor to reduce noise (https://adafru.it/scl).
Now to move a motor you can set the throttle attribute. We don't call it speed because it doesn't correlate to a
particular number of revolutions per minute (RPM). RPM depends on the motor and the voltage which is unknown.
For example to drive motor M1 forward at a full speed you set it to 1.0 :
kit.motor1.throttle = 1.0
kit.motor1.throttle = 0.5
kit.motor1.throttle = -0.5
kit.motor1.throttle = 0
To let the motor coast and then spin freely set throttle to None .
That's all there is to controlling DC motors with CircuitPython! With DC motors you can build fun moving projects like
robots or remote controlled cars that glide around with ease.
Stepper Motors
Similar DC motors, stepper motors are available as stepper1 and stepper2 . stepper1 is made up of the M1 and M2
terminals, and stepper2 is made up of the M3 and M4 terminals.
The most basic function (and the default) is to do one single coil step.
kit.stepper1.onestep()
You can also call the onestep function with two optional keyword arguments. To use these, you'll need to import
stepper as well.
stepper.FORWARD (default)
stepper.BACKWARD .
stepper.SINGLE (default) for a full step rotation to a position where one single coil is powered
stepper.DOUBLE for a full step rotation to position where two coils are powered providing more torque
stepper.INTERLEAVED for a half step rotation interleaving single and double coil positions and torque
stepper.MICROSTEP for a microstep rotation to a position where two coils are partially active.
release() which releases all the coils so the motor can free spin, and also won't use any power
The function returns the current step 'position' in microsteps which can be handy to understand how far the stepper
has moved, or you can ignore the result.
kit.stepper1.onestep(direction=stepper.BACKWARD, style=stepper.DOUBLE)
You can even use a loop to continuously call onestep and move the stepper, for example a loop of 200 microsteps
forward for smooth movement:
for i in range(200):
kit.stepper1.onestep(style=stepper.MICROSTEP)
kit = MotorKit()
kit.motor1.throttle = 1.0
time.sleep(0.5)
kit.motor1.throttle = 0
kit = MotorKit()
for i in range(100):
kit.stepper1.onestep()
time.sleep(0.01)
One of the cool things about this shield design is that it is possible to stack shields. Every shield you stack can control
another 2 steppers or 4 DC motors (or a mix of the two)
You can stack up to 32 shields for a total of 64 steppers or 128 DC motors! Most people will probably just stack two or
maybe three but hey, you never know. (PS if you drive 64 steppers from one of these shields send us a photo, OK?)
Note that stacking shields does not increase the servo connections - those are hard-wired to the Arduino digital 9 & 10
pins. If you need to control a lot of servos, you can use our 16-channel servo shield and stack it with this shield to add a
crazy large # of servos. (http://adafru.it/1411)
Stacking shields is very easy. Each shield you want to stack on top of must have stacking headers installed. Check our
instructions for how to do so. (https://adafru.it/ciP) The top shield does not have to have stacking headers unless you
eventually want to put something on top of it.
The only thing to watch for when stacking shields is every shield must have a unique I2C address. The default address
is 0x60. You can adjust the address of the shields to range from 0x60 to 0x7F for a total of 32 unique addresses.
To program the address offset, use a drop of solder to bridge the corresponding address jumper for each binary '1' in
the address.
The right-most jumper is address bit #0, then to the left of that is address bit #1, etc up to address bit #4
etc.
Note that address 0x70 is the "all call" address for the controller chip on the shield. All boards will respond
to address 0x70 - regardless of the address jumper settings.
The Adafruit_MotorShield library has the ability to control multiple shields, unlike the older AF_Motor library. First we
must create a Motor Shield Controller for each shield, with the assigned address.
One motor shield is going to be called AFMSbot (bottom shield, so we remember) and one is AFMStop (top shield) so
we can keep them apart. When you create the shield object, specify the address you set for it above.
// On the top shield, connect two steppers, each with 200 steps
Adafruit_StepperMotor *myStepper2 = AFMStop.getStepper(200, 1);
// On the bottom shield connect a stepper to port M3/M4 with 200 steps
Adafruit_StepperMotor *myStepper1 = AFMSbot.getStepper(200, 2);
// And a DC Motor to port M1
Adafruit_DCMotor *myMotor1 = AFMSbot.getMotor(1);
You can request a stepper or DC motor from any port, just be sure to use the right AFMS controller object when you
call getMotor or getStepper!
Then, both shields must have begin called, before you use the motors connected
You can try out this code for yourself by setting up two shields and running the File->Examples-
>Adafruit_MotorShield->StackingTest example