Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Notes: For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.
When Adafruit redesigned their motor shield for version 2, they didn’t just iterate—they fundamentally reimagined motor control architecture for Arduino projects. After analyzing the schematic and working with dozens of these shields across robotics platforms, I can confidently say the shift from L293D drivers to TB6612 MOSFETs combined with dedicated I2C PWM control represents one of the smartest design decisions in the maker ecosystem.
The Adafruit Motor Shield V2 solves a problem that plagued the original: Arduino pin scarcity. By offloading all motor control to an I2C-connected PCA9685 PWM driver chip, the shield consumes only two GPIO pins (SDA and SCL) regardless of how many motors you’re controlling. This architectural choice enables shield stacking capabilities that border on absurd—up to 32 shields controlling 128 DC motors or 64 stepper motors from a single Arduino. While most projects won’t approach those extremes, the scalability demonstrates the engineering thought behind this design.
Core Architecture and Key Improvements
The Adafruit Motor Shield V2 represents a complete redesign from its L293D-based predecessor. Understanding the architectural changes reveals why this shield delivers superior performance.
TB6612FNG MOSFET Drivers
The heart of the shield consists of two TB6612FNG dual H-bridge motor drivers from Toshiba. Unlike the bipolar junction transistors in the old L293D, these chips use MOSFET technology throughout the switching circuitry. This fundamental change cascades into multiple performance advantages.
MOSFETs exhibit dramatically lower on-resistance compared to BJTs. Where the L293D wastes 2-3V across its internal transistors, the TB6612FNG typically drops only 0.2-0.5V at equivalent currents. For battery-powered robots, this efficiency translates directly to extended runtime and more usable torque delivered to your motors.
The thermal story improves equally. At 1A continuous current, an L293D dissipates approximately 2-3W as heat per channel. The TB6612FNG generates roughly 0.5W under identical conditions—a four to six-fold reduction in wasted power. This efficiency means the shield operates cooler, reducing the need for heatsinking in moderate applications.
PCA9685 PWM Driver Integration
Here’s where the architecture gets clever. Instead of consuming eight Arduino pins for motor control (four for direction, four for PWM), Adafruit integrated the PCA9685—a 16-channel 12-bit PWM driver that communicates entirely over I2C.
This chip handles all speed and control signals independently, requiring only SDA and SCL pins from the Arduino. The PCA9685 generates smooth PWM waveforms at up to 1.6kHz without Arduino CPU intervention, freeing your microcontroller for sensor processing, communications, or complex algorithms.
The 12-bit resolution provides 4096 discrete speed levels per motor compared to Arduino’s native 8-bit (256 levels). In practice, you’ll use the library’s 8-bit interface for simplicity, but the underlying hardware supports finer control when needed.
Technical Specifications and Ratings
Parameter
Specification
Notes
Motor Supply Voltage
4.5V – 13.5V
Connect to external power terminal or VIN jumper
Logic Supply Voltage
5V (or 3.3V with jumper)
Powered from Arduino 5V pin
Continuous Current per Channel
1.2A
Per H-bridge, at 25°C ambient
Peak Current per Channel
3A
Brief duration only (~20ms)
Total Shield Current
4.8A
All four channels at max continuous
Voltage Drop (TB6612FNG)
0.2V – 0.5V
MOSFET saturation voltage
PWM Frequency
Up to 1.6kHz
Set via AFMS.begin() parameter
PWM Resolution
12-bit (4096 levels)
Library uses 8-bit for compatibility
DC Motor Channels
4
M1, M2, M3, M4 terminal blocks
Stepper Motor Channels
2
Port 1 (M1+M2), Port 2 (M3+M4)
Servo Connections
2
Pins D9 and D10, 5V powered
I2C Default Address
0x60
Configurable 0x60-0x7F via jumpers
Stackable Shields
Up to 32
Using I2C address selection
Operating Temperature
-25°C to 130°C
TB6612FNG junction temperature
Understanding Current Limits
The 1.2A continuous rating applies under ideal conditions: 25°C ambient, adequate ventilation, and thermal equilibrium. Real-world applications require derating based on actual operating environment.
Temperature derating: For enclosed spaces or elevated ambient temperatures, reduce maximum continuous current by 15-20%. A 1.2A rated channel should be limited to 1A continuous when operating at 40°C ambient without forced cooling.
Stall current considerations: Motors draw peak current during startup and stall conditions. A motor spec’d for 500mA running current might pull 2A at stall. Ensure your motor’s stall current doesn’t exceed the 3A peak rating, and implement stall detection in software to prevent sustained overload.
I2C Address Configuration and Shield Stacking
The Adafruit Motor Shield V2’s stackability stems from its I2C addressing system. Each shield occupies one unique I2C address in the range 0x60-0x7F, configured via five solder jumpers on the board’s underside.
Address Jumper Configuration Table
Shield #
I2C Address
Jumper Configuration
Binary Offset
Shield 1 (default)
0x60
No jumpers
00000
Shield 2
0x61
Bridge A0 only
00001
Shield 3
0x62
Bridge A1 only
00010
Shield 4
0x63
Bridge A0 + A1
00011
Shield 5
0x64
Bridge A2 only
00100
Shield 6
0x65
Bridge A0 + A2
00101
Shield 7
0x66
Bridge A1 + A2
00110
Shield 8
0x67
Bridge A0 + A1 + A2
00111
The binary address you program (0-31) adds to the base address of 0x60. For example, bridging only A0 creates address 0x60 + 0x01 = 0x61.
Important note: Address 0x70 is reserved as the “all call” address. All shields respond to commands sent to 0x70 regardless of their configured address. This enables simultaneous control of multiple shields with a single I2C transaction.
Power Supply Configuration
Proper power routing is critical for reliable operation. The shield requires two separate power domains: logic power and motor power.
Power Connection Methods
Method 1: Single Power Supply with VIN Jumper (6-12V systems)
1. Connect 7-12V power supply to Arduino DC jack
2. Install VIN jumper on motor shield
3. Shield draws motor power from Arduino VIN
Result: Simplified wiring, single power source
Limitation: Limited to Arduino’s 12V VIN maximum
Method 2: Separate Supplies (Recommended for >12V motors)
1. Power Arduino via USB or separate 5V supply
2. Connect motor power (4.5-13.5V) to shield’s external power terminal
3. Remove VIN jumper
4. Ensure common ground between Arduino and motor supply
Result: Allows full 13.5V motor voltage range
Benefit: Electrical isolation prevents motor noise from resetting Arduino
Power LED Indicator: The shield includes a green LED that illuminates when motor power is correctly supplied. If this LED is off or dim, DC motors and steppers won’t function (servos will still work as they use 5V from Arduino).
Ground Connection Critical Rule
All grounds must connect together: Arduino GND, motor power supply GND, and shield GND. Missing common ground causes erratic behavior, failed I2C communication, and potential component damage.
Installing the Adafruit Motor Shield V2 Library
The shield requires the Adafruit_MotorShield library, which is completely different from the older AF_Motor library used with V1 shields. This library handles I2C communication and PWM control transparently.
Library Installation via Arduino IDE
Open Arduino IDE → Sketch → Include Library → Manage Libraries
Type “adafruit motor” in search box
Locate “Adafruit Motor Shield V2 Library”
Click Install
Restart Arduino IDE to load the library
Required Dependencies
The motor shield library automatically installs required dependencies:
Wire (built-in Arduino I2C library)
Adafruit_MS_PWMServoDriver (PCA9685 control)
For advanced stepper control with acceleration, also install:
AccelStepper library (optional, for smooth acceleration/deceleration)
DC Motor Control Implementation
The library provides a clean object-oriented interface for motor control. Each motor is represented as an object with methods for speed and direction.
Basic DC Motor Example
#include <Wire.h>
#include <Adafruit_MotorShield.h>
// Create motor shield object with default I2C address
The shield supports bipolar or unipolar stepper motors by combining two motor ports per stepper. Each port (Port 1 = M1+M2, Port 2 = M3+M4) can drive one stepper motor.
Stepper Motor Wiring
Bipolar steppers (4 wires):
Coil A → M1 or M3 terminal block
Coil B → M2 or M4 terminal block
Unipolar steppers (5 or 6 wires):
Connect coils same as bipolar
Leave center tap wires unconnected or tie together to ground
Symptom: Motors unresponsive, green power LED not illuminated.
Diagnostic checklist:
Verify external power connected to shield’s power terminal (or Arduino DC jack with VIN jumper)
Measure voltage at power terminal—should read 5-13.5V
Check VIN jumper installation if using Arduino DC jack power method
Confirm power supply provides adequate current (2A+ recommended)
Most common cause: Forgetting to connect external motor power. The shield requires separate motor power—USB alone won’t power motors.
I2C Communication Failure
Symptom: Code hangs at AFMS.begin(), or returns false indicating shield not found.
Troubleshooting steps:
Run I2C scanner code to detect shield address: https://learn.adafruit.com/scanning-i2c-addresses
Verify shield should appear at 0x60 (or configured address)
Check SDA/SCL connections if not stacking (must connect to Arduino’s I2C pins)
On Arduino Mega, I2C is on pins 20/21, not A4/A5
Test with different Arduino if using Due (known I2C compatibility issues)
Arduino Due compatibility note: The Due has persistent I2C problems with this shield. If possible, use UNO, Mega, Leonardo, or Metro M0 boards for better reliability.
Motors Run Weakly or Overheat
Insufficient voltage for motor rating: Remember the 0.2-0.5V drop. For 6V motors, supply at least 6.5V. For 12V motors, use 12.5-13V supply.
Motor current exceeds shield rating: Verify your motor’s running current doesn’t exceed 1.2A continuous. Stall current should stay under 3A peak. Use a multimeter in series to measure actual current draw under load.
Overheating solutions:
Add small heatsinks to TB6612FNG chips (both ICs on shield)
Ensure adequate ventilation around shield
Reduce PWM duty cycle to limit current
Verify motor specifications match shield capabilities
Stepper Motor Doesn’t Step Smoothly
Coil identification error: Use multimeter to measure resistance between stepper wires. Wires from the same coil show low resistance (10-100Ω); different coils show infinite resistance. Ensure each coil connects to one motor port.
Incorrect steps per revolution: Verify stepper motor specifications. Common values: 200 steps (1.8° per step), 48 steps (7.5° per step). Using wrong value causes incorrect rotation amounts.
Insufficient power supply: Stepper motors draw continuous current. Ensure power supply provides enough capacity for both coils energized simultaneously (DOUBLE mode).
Q: Can I use motors rated above 13.5V with the Adafruit Motor Shield V2?
No, the TB6612FNG driver IC has a 15V absolute maximum rating, and Adafruit specifies 13.5V as the safe operating limit. Exceeding this voltage risks permanent damage to the driver chips. For higher voltage motors (18V, 24V, etc.), consider alternative drivers like the VNH5019 or BTS7960 that support higher voltages. You could also use buck converters to step down your supply voltage, but this adds complexity and reduces overall efficiency.
Q: How do I determine which I2C address my shield is using?
Run an I2C scanner sketch (available from Adafruit’s learning guide) which scans addresses 0x00-0x7F and reports found devices. The default address is 0x60 with no jumpers bridged. Additionally, address 0x70 will always appear as this is the “all call” address that all shields respond to regardless of configuration. If you’ve bridged address jumpers, the scanner will show your configured address. Note that 0x70 conflicts with some LED backpacks and displays.
Q: Can I control servo motors and DC motors simultaneously on the same shield?
Yes, the two servo connections (pins D9 and D10) operate independently from the DC/stepper motor outputs. Servos draw power from Arduino’s 5V regulator, not the external motor supply. However, be cautious about total current draw—standard hobby servos can pull 500mA+ under load. If controlling multiple servos plus motors, consider using a separate 5V supply for the servos or upgrade to Adafruit’s 16-channel servo shield which can stack with the motor shield.
Q: Why do my motors vibrate or hum but don’t rotate?
This typically indicates insufficient power supply current or voltage. Motors require significant current during startup and under load. Measure your power supply voltage under load—if it drops below 5V, the supply cannot provide adequate current. Common culprits: 9V alkaline batteries (very poor current capacity), undersized wall adapters, or power supplies rated below 2A. Switch to lithium battery packs, NiMH cells, or quality switching power supplies rated 2-3A minimum.
Q: What’s the difference between SINGLE, DOUBLE, INTERLEAVE, and MICROSTEP modes for steppers?
SINGLE mode energizes one coil at a time, consuming less power but providing approximately 70% of maximum torque. DOUBLE mode energizes both coils simultaneously, delivering full torque but doubling power consumption. INTERLEAVE alternates between single and double coil energization, effectively doubling resolution (half-stepping) with variable torque. MICROSTEP uses software PWM to interpolate between steps, providing very smooth motion at 8× resolution but reduced torque and slower stepping speeds. For most applications, DOUBLE mode offers the best balance of torque and reliability.
Conclusion
The Adafruit Motor Shield V2 exemplifies thoughtful engineering that prioritizes flexibility, efficiency, and scalability. The transition from L293D to TB6612FNG MOSFET drivers delivers tangible improvements: lower voltage drop means more torque from your batteries, reduced heat generation enables higher sustained currents, and better efficiency extends battery life in portable applications.
The I2C control architecture represents the shield’s most innovative feature. By offloading all motor control to the PCA9685 PWM driver, Adafruit preserved precious Arduino GPIO pins while enabling nearly unlimited scalability through shield stacking. The two-pin I2C interface means you can add sensors, displays, and communications modules without pin conflicts.
From a PCB engineering perspective, the shield demonstrates production-quality design: proper copper weight for high-current traces, integrated flyback diodes for inductive load protection, reverse polarity protection via FET, and accessible I2C address selection jumpers. These details separate hobbyist-grade designs from professional solutions.
Understanding the current limitations remains critical. The 1.2A continuous rating is real and must be respected in thermal budget calculations. For motors approaching this limit, add heatsinks to the TB6612FNG chips and ensure adequate ventilation. Beyond 1.2A sustained, consider higher-current alternatives or redesign your mechanical system to reduce motor load.
The shield’s versatility suits a wide range of applications: differential drive robots, CNC plotters, 3D printer axis control, automated camera sliders, and countless educational projects. The mature library support, extensive documentation, and active community support make troubleshooting straightforward and integration reliable.
For makers and engineers working in the 4.5-12V motor range with currents below 1.2A per channel, the Adafruit Motor Shield V2 delivers professional motor control with minimal development effort and maximum Arduino pin availability.
Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Notes: For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.