Motor Boards

CommandStation-EX is compatible with a wide variety of motor boards, also known as “dual H-bridges” and “motor shields”. We’ve sorted them from least difficult to most difficult to use to help you decide what to use. When it comes to selecting a board, some considerations are size, whether it is a shield or needs to be connected with jumper wires, the amount of current you need, and whether it has current sensing capability built-in or if you have to supply it yourself.

If you have trouble finding a particular board from the list, try searching based on it’s name or the type of chip on the board and the terms “H-Bridge” or “Motor Shield”. There are often many places that sell these, especially the Chinese sites like AliExpress and Banggood.

TL;DR (aka short version): We currently recommend the Arduino Motor Shield R3 or a supported clone board like the Deek-Robot. See the Shopping List.

Deek Robot Motor Shield


Where appropriate, we have used the terms “single” and “dual” to indicate on the non-shield type boards, which ones have just a single H-Bridge for one track and which ones have two. A single H-Bridge board will power your main track, but you will then need another board of some kind to connect to your programming track

What is a Motor Controller?

A motor controller (aka shield, aka board) is just a high voltage, high current switch. While initially designed to power electric motors, we use it to create the DCC signal to the track in a clever misapplication of technology. Normally, a pulse width modulated (PWM) signal would be applied to a motor with the PWM pin to control speed and the direction pin would switch the voltage from positive to negative to control the motor spin direction. Instead, we send full DC track voltage to the PWM pin and switch the direction pin at the DCC frequency (around 8000 times a second) to generate the bi-polar square wave. In this way, we use the 5V DC (or 3.3V) microcontroller output to switch the voltage from separate 12-18V DC power supply connected to the motor controller, and create a pulse train signal of 1’s and 0’s that a mobile decoder can interpret as commands.

Boards currently supported

Easy to use boards

Intermediate boards (Tinkerer Level) - require wiring

Expert Level Boards (Tinkerer or Engineer Level) - these boards require you to add your own config to the config.h file, and may not have good current sensing. That said, if you buy a separate current sense board, we particularly like the IBT_2 board (though you will need 2 of them or some other board for the programming track)

Non-compatible boards

  • VNH2SP30 - SparkFun Monster Moto and others. It can’t switch fast enough to generate a reliable DCC signal

  • IFX9202ED - Infineon Dual H-Bridge. Can’t switch fast enough.

  • DFRobot Romeo V2 - Well, an Engineer could perhaps get this one to work.

  • Kuman Board (and any L293D based boards) - not enough current.

Other boards, while not fully supported and tested, can be used. Look for the following criteria:

  • We recommend a dual h-bridge board or two discrete h-bridge boards. They can be different sizes, one bigger for main track and one smaller for programming track operations.

  • It must handle enough current for the layout. 2 amps will drive 3-5 HO scale locomotives.

  • It must have working and accurate current sensing (many do not)

  • It must be able to switch at least 10000 times per second (some do not)

  • Look for an Arduino shield form factor to eliminate wiring (not required but preferred)


Current capabilities of these boards, especially the boards based on the L298 with no heat sink fins like the Arduino Motor Shield can really not deliver 2 Amps. A realistic number would be 1.5 Amps IF you added a heat sink and a cooling fan. If you need 2 Amps or more, you will need to go with a higher current board.

Arduino Motor Shield

Conductor level

Easy to use, widely available and is rated 2A load per channel. In reality, without a heatsink and fan, it can only handle about 1.3 Amps. This is the standard by which we compare other boards that are about the same, worse, or better.

Arduino Motor Shield R3

Install the Arduino Motor Shield

Deek-Robot Motor Shield

Conductor Level

Electrically identical in most every regard to the Arduino motor shield. Often cheaper. Supports 2A per channel, but can deliver realistically 1.3 or maybe 1.5 Amps with an added heatsink and cooling fan.

Deek Robot Motor Shield

Install the Deek-Robot Motor Shield

Flashtree Motor Shield

Conductor Level

Electrically identical in most every regard to the Arduino motor shield. Often cheaper. Supports 2A per channel, but can deliver realistically 1.3 or maybe 1.5 Amps with an added heatsink and cooling fan. Since it identical to the Arduino and the Deek-Robot boards, use the Deek-Robot install below.

Flashtree Motor Shield

Install the Flashtree (same as Deek-Robot) Motor Shield

DIY More L298NH Motor Shield

Conductor Level

Another similar board to the Arduino motor shield. Supports 2A per channel. This board uses the L298HN, which is the same L298 internally as the Arduino Motor Shield but in a different form factor with a larger heat sink tab. Current sense and other features are identical to the Arduino version.

DIY More Motor Shield

DIY More Website

Install the DIY More Motor Shield (same as Deek-Robot)

YFRobot L298P Motor Shield

Conductor Level

This board is electrically the same, though a different layout than the Arduino motor shield. Often cheaper. Supports 2A per channel, but can deliver realistically 1.3 or maybe 1.5 Amps with an added heatsink and cooling fan. Do NOT confuse this with the DFRobot Motor Shield, which is not plug and play!

YFRobot L298P Motor Driver Shield

Install the YFRobot Motor Shield (same as Deek-Robot)

Remember to select YFROBOT_MOTOR_SHIELD in your config.h file or from the motor board dropdown if using EX-Installer

Pinout for reference:

PWM1/MAIN Enable - D5 (normally pin 3)
PWM2/PROG Enable- D6 (normally pin 11)
DIR1/MAIN Signal - D4 (normally 12)
DIR2/PROG Signal - D7 (normally pin 13)
Current Sense MAIN - A0
Current Senst PROG - A1


This configuration uses the normal accuracy waveform to avoid having to use jumpers. To use the high-accuracy waveform, you would need to use pins 3 and 11 in your motor board definition in config.h and jumper them to D5 and D6 on the shield. For information about high-accuracy mode, See:

High Accuracy Waveform

L298N Motor Driver (dual)

Tinkerer level

THIS BOARD HAS NO CURRENT SENSE! This is a high-current alternative to the Arduino and Deek-Robot shields. It uses the same L298 chip as the Arduino motor shield, only in a different form factor and with better cooling. You’ll need to connect jumper wires from the correct pins on the Arduino to this board. IMPORTANT: You will also need to snip two long chip pins and add 2 resistors to enable current sense in order to have overload protection and be able to acknowledge CV reads and writes. As with any of these boards with current sense issues, you can also add a small current sense board like the MAX471 instead.

L298 Motor Driver

L298N Motor Driver on Amazon

Install the L298N Motor Driver

MiniIBT Motor Driver L6201P (single)

Found on eBay, Amazon and the Chinese sites, this board uses the L6201P H-Bridge chip and is rated for 5 Amps. With a fan and heat sink, it can handle 3 or 4 Amps at 12-14V. Search for MiniIBT or Wingxine to find it. Be careful to match the picture since there is another board that sometimes comes up in searches.

L6201P Wingxine Motor Driver

*Dave Bodnar Tested this board*

Makerfabs H-Bridge Motor Shield

Engineer Level

THIS BOARD HAS NO CURRENT SENSE! See the section below about * current sensing * . The higher current capability and efficient power MOSFETs, make this board a good choice if you are running more than 3-5 locos.

Select MAKERFABS_MOTOR_SHIELD in your config.h file.


PWM1 - D9 (normally pin 3)
PWM2 - D10 (normally pin 11)
CNTRL1A (DIR1A) - D4 (normally 12)
CNTRL2A (DIR2A) - D7 (normally 13)

Pololu MC33926

Tinkerer Level

Comes soldered or in a kit where you just have to solder the headers and connector. While we have a motor board type for this board, the current sense is not acceptable. We recommend using an external current sense board like the MAX471. Many people still use this board.

Pololu MC33926

BTS7960 IBT_2 Board (single)

Tinkerer to Engineer Level


This board can supply a LOT of current. The maximum recommended current is 5A for N and HO scale. This board can supply a whopping 43A, enough to cause a LOT of damage. To use this board, make sure you have fuses or circuit breakers connected in line with both rails. SOFTWARE ALONE CANNOT PROTECT YOU IN ALL CASES.

You will either need 2 of these or one of these and another board to run your programming track. Most people using this board use the Arduino Motor shield for the program track and add this board for MAIN. These boards can provide high current. We have built boosters using these boards. If the 2 Amps (really 1.5A) of the L298 boards aren’t enough for your track, this is one of the best options. IBT_2 is the manufacturer’s name for this board, BTS7960 is the model number of the H-Bridge chip used as the motor controller. The H-Bridge generates a clean wave form, has very low signal propagation delay and no significant voltage drop.

IBT_2 Board

Just search for “IBT 2 Motor Driver” or “IBT 2 H-Bridge”

IBT_2 Intstallation Instructions

Dual Motor Driver Module H-bridge MOSFET IRF3205

Tinkerer to Engineer Level


This board can supply a LOT of current. The maximum recommended current is 5A for N and HO scale. This board can supply a 15A, enough to cause a LOT of damage. To use this board, make sure you have fuses or circuit breakers connected in line with both rails. SOFTWARE ALONE CANNOT PROTECT YOU IN ALL CASES. You will also need external current sense.

You can use this board to handle both your MAIN and PROG track, or you can use one of the H-Bridges to power your MAIN track and use the Arduino Motor Shield for your PROG track. This board can provide up to 15A when you need more current than the 1.2-1.5A the Arduino Motor Shield can provide. IRF3205 is the model number of the N Channel MOSFETS used in the H-Bridge circuit. MOSFETS are a type of transistor, and rather than many other boards that use an integrated circuit for the H-Bridge, this board uses 4 discrete transistors per H-Bridge. This allows for a highly efficient motor controller with a negligible voltage drop.

IRF3205 Motor Board

Dual Motor Driver IRF3205 Intstallation Instructions

Keyes/Fundumoto (“Beeper Board”)

Engineer Level

You have to lift two traces and solder 2 resistors and use 2 jumpers to the current sense pins. This board is immediately recognizable because it has a cylindrical beeper or buzzer on the board. *TODO:More details on this fix soon*

Keyes/Fundumoto Motor Shield

Velleman KA03 (kit) VMA03 (soldered)

Engineer Level

Must cut traces and solder resistors to get current sensing on the soldered board. Much easier to simply not solder the pins on the kit version. Pin assignments must be added to a new motorboard entry in the config.h file.

Velleman KA03

DFRobot 2x2A DC Motor Shield (DRI0009)

Engineer Level

This is another L298 based board with inadequate cooling. Fan and/or heat sink recommended. Max current realistically 1.3A. This board has NO CURRENT SENSE. As with many boards like this, both L298 current sense pins are tied to ground. Cutting traces and adding sense resistors or the use of an eternal current sense board is required for short circuit protection and loco programming. If you don’t use current sense, you must ground pins A0 and A1 on the Arduino or you will get an overcurrent condition.

Speed Control Jumpers need to all be on the PWM side of the shield (all 4 jumpers on the right 4 pins) Power Source Selection Jumpers need to both be on PWRIN (to the left) and NOT VIN

ENABLE1 (EN1) - D5 (normally pin 3)
ENABLE2 (EN2) - D6 (normally pin 11)
DIR1 (M1) - D4 (normally pin 12)
DIR2 (M2) - D7 (normally pin 13)

On the schematic, pin 1 of the jumper bank is the right side as you read the labels, the PWM side.

NOTE: There is a “Twin” version of this board that uses pins 10, 11 and 12, 13 instead

DFRobot 2x2

DFRobot Romeo V2

Engineer Level

On the surface, this seems like a great idea, an Arduino and motor controller on one board. It is a very thin surface ;) While we don’t recommend it, an Engineer who reads these notes, may still find a use for it. The V2 uses the ATmega32u4 chip instead of either of the chips used on an Uno or a Mega. It only has 2 interrupts that are usable and it reverses their pin assignments. It uses serial on the chip, not with a UART as on the other boards. It may need a software change to accommodate the timer. It also has the same amount of memory as an Uno, which will only run the basic version of DCC++ EX without options. In addition, the serial port uses memory to operate, so you have even less memory free to use than on an Uno.

Onboard is the L298 dual H-Bridge, with the same lack of cooling as on the Arduino Motor Shield. It will only deliver 1.2 to 1.3A instead of 2A, if you add a fan. Very importantly it has NO CURRENT SENSE for either track. The sense outputs are tied to ground. You would have to cut traces and add resistors at the least, or buy current sense boards.

Romeo V2

Click here for a complete Parts Shopping List.

Configuring Motor Boards

If your board is not in the list of supported motor board types, or if you need to make changes or have more information about how motor boards are configured in DCC++ EX, see:

Motor Board Configuration Guide