Motor Controllers
A motor controller sits between your robot's battery and a motor. It takes a command from the robot controller (like "spin at 75% power") and converts it into the right voltage and current to actually move the motor. Without it, you'd have no way to control speed, direction, or how hard the motor pushes.
This page covers the five motor controllers used on our robot:
| Controller | Maker | Best For |
|---|---|---|
| SPARK MAX | REV Robotics | NEO / NEO 550 brushless motors |
| Thrifty Nova | The Thrifty Bot | NEO / NEO 550 / Thrifty Pulsar / Minion brushless motors |
| SPARK Flex | REV Robotics | NEO Vortex brushless motors |
| Talon FX | CTR Electronics | Kraken X60 / Falcon 500 motors |
| Talon FXS | CTR Electronics | NEO / NEO 550 / Minion brushless motors |
Most controllers support two communication methods:
- PWM — a simple signal wire. Easy to set up but limited features (no feedback, no closed-loop control).
- CAN bus — a two-wire network that lets multiple devices share one cable chain. Gives you encoder readings, current data, temperature, and proper closed-loop control. Always prefer CAN on a real robot.
- CAN FD is an upgraded version of CAN — same two wires, but faster. Most modern motor controllers support it.
SPARK MAX
Official docs: https://docs.revrobotics.com/brushless/spark-max/overview
The SPARK MAX (model REV-11-2158) is a brushless motor controller from REV Robotics. It handles both brushless motors (NEO, NEO 550) and brushed DC motors.
Specifications
| Parameter | Value |
|---|---|
| Operating voltage | 5.5V – 24V DC |
| Absolute max voltage | 30V |
| Continuous output current | 60A |
| Peak current | 100A for 2 seconds |
| Communication | CAN, PWM |
| Dimensions | 70 × 35 × 25.5 mm |
| Weight | 113g |
| Power Connection | 15 cm long, 12 awg integrated leads |
| Motor Connection | 15 cm long, 12 awg integrated leads, 6 pin JST-PH connector for encoder |
| CAN Connection | JST-PH 4-Pin connector with premade cable |
| USB Connection | Configuration and manual control |
| Sensor Connection | 10 pin Data Port |
Wiring
Power Connection:
Connect the integrated (red/black) 12 AWG wires to the Power Distribution channel. If an extension is needed, use 12 AWG or thicker wire with Anderson PowerPole connectors.
The SPARK MAX has no reverse polarity protection. Connecting red to negative or black to positive will permanently destroy it. Double-check before powering on.
Motor Connection (brushless):
Connect the integrated (red/black/white) 12 AWG wire to the motor cables using Anderson PowerPole connectors.
Connect the motor encoder cable to the 6 pin JST-PH encoder port. If an extension is needed, use a 6 pin JST-PH joiner board and a 6 pin JST-PH extension cable.
The wire colors must match between controller and motor. If they don't, the motor won't spin and could be damaged. You also must plug the encoder cable into the ENCODER port on the controller — brushless motors won't run without it.
Motor Connection (brushed):
Connect the integrated (red/black/unused white) 12 AWG wire to the motor cables using Anderson PowerPole connectors. Insulate the white wire — don't cut it, just zip-tie it out of the way.
CAN and PWM:
Connector
If a connector is required, the pinout is as follows:
| Pin | CAN | PWM |
|---|---|---|
| 1 & 3 | CAN High (Yellow) | Signal |
| 2 & 4 | CAN Low (Green) | Ground |
While the two pairs are connected internally, it is also recommended to connect them externally when using CAN, so that an unplugged cable does not disconnect the rest of the bus. Only one of each pin type is required for PWM.
CAN
Avoid placing it on the same CAN bus as other CAN FD devices.
CAN uses a JST-PH connector. Rather than crimping these connectors, a COTS cable is used with the next connection soldered on. The cable has two pairs of wires that are internally connected, so either pair can be used for daisy-chaining. Match wire colors end-to-end along the entire CAN bus.
PWM
PWM uses a JST-PH connector. Rather than crimping these connectors, a COTS cable is used. The cable should connect directly to the robot controller. If an extension is needed, it should be soldered.
Sensor Port:
Data Port A 10-pin port that allows a variety of sensors to be connected.
| Pin | Description |
|---|---|
| 1 | 3.3V |
| 2 | 5V |
| 3 | Analog Input |
| 4 | Forward Limit Input |
| 5 | Quadrature B |
| 6 | Multi-Function Pin |
| 7 | Quadrature A |
| 8 | Reverse Limit Input |
| 9 | Quadrature C |
| 10 | Ground |
Various breakout boards are available.
The SPARK MAX accepts 3.3V sensors. If the firmware is version 1.5.0 or newer, the SPARK MAX is 5V tolerant.
USB:
USB-C port used for configuration and manual control only. The motor won't run on USB power alone — you need 12V on the main leads.
LED Status Codes
The RGB LED on the top tells you the status and fault codes of the motor controller.
- Normal Operation
- Fault Codes
- Update / Recovery
| LED Color & Pattern | What It Means |
|---|---|
| Cyan blinking | Brushless mode, brake, waiting for signal |
| Cyan solid | Brushless mode, brake, signal received |
| Magenta blinking | Brushless mode, coast, waiting for signal |
| Magenta solid | Brushless mode, coast, signal received |
| Blue blinking | Brushed mode, brake, waiting for signal |
| Blue solid | Brushed mode, brake, signal received |
| Yellow blinking | Brushed mode, coast, waiting for signal |
| Yellow solid | Brushed mode, coast, signal received |
| Green blinking | Motor spinning forward (partial speed) |
| Green solid | Motor spinning forward (full speed) |
| Red blinking | Motor spinning reverse (partial speed) |
| Red solid | Motor spinning reverse (full speed) |
| Green/White blinking | Forward limit switch triggered |
| Red/White blinking | Reverse limit switch triggered |
| LED Color & Pattern | What It Means |
|---|---|
| Orange/Blue slow blink | 12V power missing — controller only has USB power |
| Orange/Magenta slow blink | Sensor fault — check encoder connections |
| Orange/Cyan slow blink | Gate driver fault — internal circuit failure |
| Orange/Yellow slow blink | CAN communication error |
| Off (dark) | Corrupt firmware — needs Recovery Mode |
| Orange/Green slow blink | Motor or motor controller overheat |
| LED Color & Pattern | What It Means |
|---|---|
| White/Magenta fast blink | Device identify (you clicked "Blink" in REV Hardware Client) |
| White/Yellow blink | Firmware updating over CAN |
| White/Blue blink | Firmware update retry |
| Off (dark) | USB update mode or Recovery Mode |
Common Faults & Troubleshooting
Thrifty Nova
Official docs: https://docs.thethriftybot.com/thrifty-nova
The Thrifty Nova is made by The Thrifty Bot as a cost-effective brushless motor controller. It supports brushless motors (NEO, NEO 550, Thrifty Pulsar, Minion) and brushed DC motors.
Specifications
| Parameter | Value |
|---|---|
| Operating voltage | 4V – 20V DC |
| Absolute max voltage | 25V |
| Continuous output current | 45A |
| Peak current | 80A for 2 seconds |
| Communication | CAN (FD capable) |
| Dimensions | 2.2 in diameter × 0.761 in |
| Weight | 0.21 lbs |
| Power Connection | 6 in long, 12 awg integrated leads |
| Motor Connection | 6 in long, 12 awg integrated leads, 6 pin JST-PH connector for encoder |
| CAN Connection | JST-PH 4-Pin connector with premade cable |
| USB Connection | Configuration and manual control |
| Sensor Connection | 10 pin Data Connector |
Wiring
Power Connection:
Connect the integrated 12 AWG wires to the Power Distribution channel. If an extension is needed, use 12 AWG or thicker wire with Anderson PowerPole connectors.
Motor Connection (brushless):
Connect the integrated (red/black/white) 12 AWG wire to the motor cables using Anderson PowerPole connectors.
Connect the motor encoder cable to the 6 pin JST-PH encoder port. If an extension is needed, use a 6 pin JST-PH joiner board and a 6 pin JST-PH extension cable.
The wire colors must match between controller and motor. If they don't, the motor won't spin and could be damaged. You also must plug the encoder cable into the ENCODER port on the controller — brushless motors won't run without it.
Motor Connection (brushed):
Connect the integrated (red/black/unused white) 12 AWG wire to the motor cables using Anderson PowerPole connectors. Insulate the white wire — don't cut it, just zip-tie it out of the way.
CAN and PWM:
Connector
If a connector is required, the pinout is as follows:
| Pin | CAN |
|---|---|
| 1 & 3 | CAN High (Yellow) |
| 2 & 4 | CAN Low (Green) |
While the two pairs are connected internally, it is also recommended to connect them externally when using CAN, so that an unplugged cable does not disconnect the rest of the bus.
CAN
CAN uses a JST-PH connector. Rather than crimping these connectors, a COTS cable is used with the next connection soldered on. The cable has two pairs of wires that are internally connected, so either pair can be used for daisy-chaining. Match wire colors end-to-end along the entire CAN bus.
PWM
Thrifty Nova does not support PWM.
Sensor Port:
Data Port A 10-pin port that allows a variety of sensors to be connected.
| Pin | Description |
|---|---|
| 1 | 3.3V |
| 2 | 5V |
| 3 | Analog Input |
| 4 | Forward Limit Input |
| 5 | Quadrature B |
| 6 | Multi-Function Pin |
| 7 | Quadrature A |
| 8 | Reverse Limit Input |
| 9 | Quadrature C / PWM Input |
| 10 | Ground |
Various breakout boards are available.
The Thrifty Nova accepts 3.3V sensors but is 5V tolerant.
USB:
USB-C port used for configuration and manual control only. The motor won't run on USB power alone — you need 12V on the main leads.
LED Status Codes
The RGB LED on the top tells you the status and fault codes of the motor controller.
- Normal Operation
- Fault Codes
| LED Color & Pattern | What It Means |
|---|---|
| Yellow alternating | Idle output |
| Yellow solid | CAN connected but no control |
| Green flashing | Forward motion |
| Red flashing | Reverse motion |
| LED Color & Pattern | What It Means |
|---|---|
| Red alternating sides | Fatal fault |
| Blue flashing | Encoder not connected or invalid |
| Yellow flashing | No CAN |
| Orange flashing slow | Overheated |
| Orange flashing fast | Approaching thermal limit |
Common Faults & Troubleshooting
SPARK Flex
Official docs: https://docs.revrobotics.com/brushless/spark-flex/overview
The SPARK Flex is the next-generation version of the SPARK MAX, built specifically for the NEO Vortex motor. Using its docking interface, it physically clips onto the Vortex instead of having loose motor wires, which makes wiring cleaner and more reliable. It also works with older NEO and NEO 550 motors using the SPARK Flex Dock adapter.
Specifications
| Parameter | Value |
|---|---|
| Operating voltage | 6V – 24V DC |
| Absolute max voltage | 30V |
| Continuous output current | 60A |
| Peak current | 100A for 2 seconds |
| Communication | CAN (FD capable), PWM |
| Dimensions | 60 mm diameter × 28.2 mm |
| Weight | 130g |
| Power Connection | 45 cm long, 12 awg integrated leads |
| Motor Connection | Docking Connector |
| CAN Connection | 45 cm long, 26 awg integrated leads |
| USB Connection | Configuration and manual control |
| Sensor Connection | 10 pin locking Data Port |
Wiring
Power Connection:
Connect the integrated 12 AWG wires to the Power Distribution channel. If an extension is needed, use 12 AWG or thicker wire with Anderson PowerPole connectors.
Motor Connection:
The docking interface handles motor wiring automatically when you fully seat the NEO Vortex. Make sure both docking screws are completely tightened — a partially seated dock loses the electrical connection intermittently, which is very hard to diagnose.
CAN and PWM:
Wire Colors
Description of wire colors:
| Color | CAN Mode | PWM Mode |
|---|---|---|
| Yellow | CAN High | Signal |
| Green | CAN Low | Ground |
CAN
Two integrated pairs of wires come out of the controller. Solder these wires to the next connection. The two pairs are internally connected, so either pair can be used for daisy-chaining. Match wire colors end-to-end along the entire CAN bus.
PWM
When using PWM, only one pair is required. Insulate the other pair — do not cut it, simply zip-tie it out of the way.
Sensor Port:
Data Port A 10-pin port that allows a variety of sensors to be connected.
| Pin | Description |
|---|---|
| 1 | Reserved (Do Not Use) |
| 2 | 5V |
| 3 | Analog Input |
| 4 | Forward Limit Input |
| 5 | Quadrature B |
| 6 | PWM Input |
| 7 | Quadrature A |
| 8 | Reverse Limit Input |
| 9 | Quadrature C |
| 10 | Ground |
Use the Breakout Cable (REV-11-2853) or Pigtail Cable (REV-11-2852) to access data port pins cleanly.
The SPARK Flex accepts 5V sensors.
USB:
USB-C port used for configuration and manual control only. The motor won't run on USB power alone — you need 12V on the main leads.
LED Status Codes
The RGB LED on the side tells you the status and fault codes of the motor controller.
- Normal Operation
- Fault Codes
- Update / Recovery
| LED Color & Pattern | What It Means |
|---|---|
| Cyan blinking | Brushless mode, brake, waiting for signal |
| Cyan solid | Brushless mode, brake, signal received |
| Magenta blinking | Brushless mode, coast, waiting for signal |
| Magenta solid | Brushless mode, coast, signal received |
| Blue blinking | Brushed mode, brake, waiting for signal |
| Blue solid | Brushed mode, brake, signal received |
| Yellow blinking | Brushed mode, coast, waiting for signal |
| Yellow solid | Brushed mode, coast, signal received |
| Green blinking | Motor spinning forward (partial speed) |
| Green solid | Motor spinning forward (full speed) |
| Red blinking | Motor spinning reverse (partial speed) |
| Red solid | Motor spinning reverse (full speed) |
| Green/White blinking | Forward limit switch triggered |
| Red/White blinking | Reverse limit switch triggered |
| LED Color & Pattern | What It Means |
|---|---|
| Orange/Blue slow blink | 12V power missing — controller only has USB power |
| Orange/Magenta slow blink | Sensor fault — check encoder connections |
| Orange/Cyan slow blink | Gate driver fault — internal circuit failure |
| Orange/Yellow slow blink | CAN communication error |
| Off (dark) | Corrupt firmware — needs Recovery Mode |
| Orange/Green slow blink | Motor or motor controller overheat |
| LED Color & Pattern | What It Means |
|---|---|
| White/Magenta fast blink | Device identify (you clicked "Blink" in REV Hardware Client) |
| White/Yellow blink | Firmware updating over CAN |
| White/Blue blink | Firmware update retry |
| Off (dark) | USB update mode or Recovery Mode |
Common Faults & Troubleshooting
Talon FX
Official docs: https://v6.docs.ctr-electronics.com/en/stable/docs/hardware-reference/talonfx/index.html
The Talon FX isn't a standalone box — it's a motor controller built directly into CTR Electronics motor products. The most common ones in FRC are:
- Kraken X60 — full-size, high-power brushless motor
- Kraken X44 — compact, lower power version of the X60
Because the controller is integrated, there's no separate box to mount. The Talon FX is configured and programmed using Phoenix 6 (the CTR software suite) and Phoenix Tuner X (the configuration app).
Specifications
| Parameter | Value |
|---|---|
| Operating voltage | 6V – 24V DC |
| Absolute max voltage | 27V |
| Continuous output current | 60A |
| Peak current | 120A for 2 seconds |
| Communication | CAN FD, PWM |
| Dimensions | Integrated into the motor |
| Weight | Integrated into the motor |
| Power Connection | #6-32 screw terminal |
| Motor Connection | Integrated into the motor |
| CAN Connection | #4-40 screw terminal |
| USB Connection | None |
| Sensor Connection | None |
Wiring
Using screws longer than specified on the power or CAN terminals will physically damage the integrated controller.
Overtightening the screws can cause internal damage to the integrated controller, while screws that are too loose can result in a poor connection and may loosen further over time.
Power Connection:
Use a wire with a cable lug to connect to the power terminals. The wire should run directly from the Power Distribution channel with no intermediate connections, unless the robot design requires them.
- Screw size: #6-32 × ¼ in (IP10/T10 Torx driver)
- Torque: 0.9 N·m — snug but don't strip it
- Wire must be crimped with cable lugs appropriate for the wire gauge and a #6 size screw
- 10 AWG is preferred, 12 awg is acceptable. Red wire for positive, and black wire for negative
Motor Connection:
The Talon FX is integrated into the motor and requires no connections.
CAN and PWM:
CAN
Use a wire with a cable lug to connect to the CAN terminals. The wire should run directly to the next CAN device with no intermediate connections, unless the robot design requires them. Match wire colors end-to-end along the entire CAN bus.
- Screw size: #4-40 × ¼ in (IP8/T8 Torx driver)
- Torque: 0.6 N·m
- Wire should be crimped with cable lugs appropriate for the wire gauge and a #4-40 size screw
- 22 awg, green and yellow, twisted pair wire must be used. Always connect two can pairs to allow daisy chaining.
PWM
Use a wire with a cable lug to connect to the CAN terminals. The wire should run directly to the robot controller with no intermediate connections, unless the robot design requires them.
Sensor Port:
Talon FX does not have a sensor port.
USB:
No USB available. All configuration and control is done through Phoenix Tuner.
LED Status Codes
The Talon FX has two RGB LEDs on the back that work together to show status and fault codes.
- Disabled Codes
- Enabled Codes
- Special Codes
| LED Pattern | What It Means | What To Do |
|---|---|---|
| Off | No power | Check power wires and breaker |
| Alternating red (2 LEDs) | No CAN signal | Check Yellow/Green wiring, check for swapped wires |
| Alternating orange | CAN detected, no Phoenix program | Deploy your robot code |
| Both blink orange simultaneously | Disabled, CAN active | Enable the robot or send a control request |
| LED Pattern | What It Means |
|---|---|
| Both solid orange simultaneously | Neutral Output |
| Both green (blink rate = speed) | Spinning forward |
| Both red (blink rate = speed) | Spinning reverse |
| Offset red/off | Output limited (soft or hard limit) |
| LED Pattern | What It Means | What To Do |
|---|---|---|
| Offset orange/off | Thermal cutoff — overheated | Let it cool; configure current limits to prevent recurrence |
| Alternating red/green | Unlicensed Pro command | Use standard commands or license the device |
| Alternating red/green | Damaged Hardware | Use Tuner X to confirm, contact CTRE |
| Single LED alternating green/orange | Talon FX in bootloader | Perform firmware update |
Common Faults & Troubleshooting
Talon FXS
Official docs: https://v6.docs.ctr-electronics.com/en/stable/docs/hardware-reference/talonfxs/index.html
The Talon FXS is a brushless motor controller from CTR Electronics. It handles both brushless motors (NEO, NEO 550, Minion) and brushed DC motors.
Specifications
| Parameter | Value |
|---|---|
| Operating voltage | 6V – 24V DC |
| Absolute max voltage | 27V |
| Continuous output current | 60A |
| Peak current | 120A for 2 seconds |
| Communication | CAN FD, PWM |
| Dimensions | 1.43 × 1.16 × 3.06 in |
| Weight | 0.25 lbs |
| Power Connection | #6-32 screw terminal |
| Motor Connection | #6-32 screw terminal for stator, 6 pin JST-PH for encoder |
| CAN Connection | #4-40 screw terminal |
| USB Connection | None |
| Sensor Connection | 10 pin Gadgeteer Data Port |
Wiring
Using screws longer than specified on the power or CAN terminals will physically damage the controller.
Overtightening the screws can cause internal damage to the integrated controller, while screws that are too loose can result in a poor connection and may loosen further over time.
Power Connection:
Use a wire with a cable lug to connect to the power terminals. The wire should run directly from the Power Distribution channel with no intermediate connections, unless the robot design requires them.
- Screw size: #6-32 × ¼ in (IP10/T10 Torx driver)
- Torque: 0.9 N·m — snug but don't strip it
- Wire must be crimped with cable lugs appropriate for the wire gauge and a #6 size screw
- 12 awg or larger must be used. Red wire for positive, and black wire for negative
Motor Connection:
Use a wire with a cable lug to connect to the motor terminals. If the motor has built-in leads, connect to them using Anderson PowerPole connectors.
Connect the motor encoder cable to the 6 pin JST-PH encoder port. If an extension is needed, use a 6 pin JST-PH joiner board and a 6 pin JST-PH extension cable.
- Screw size: #6-32 × ¼ in (IP10/T10 Torx driver)
- Torque: 0.9 N·m — snug but don't strip it
- Wire must be crimped with cable lugs appropriate for the wire gauge and a #6 size screw
- 12 awg or larger must be used. Red wire for positive, and black wire for negative
CAN and PWM:
CAN
Use a wire with a cable lug to connect to the CAN terminals. The wire should run directly to the next CAN device with no intermediate connections, unless the robot design requires them. Match wire colors end-to-end along the entire CAN bus.
- Screw size: #4-40 × ¼ in (IP8/T8 Torx driver)
- Torque: 0.6 N·m
- Wire should be crimped with cable lugs appropriate for the wire gauge and a #4-40 size screw
- 22 awg, green and yellow, twisted pair wire must be used. Always connect two can pairs to allow daisy chaining.
PWM
Use a wire with a cable lug to connect to the CAN terminals. The wire should run directly to the robot controller with no intermediate connections, unless the robot design requires them.
Sensor Port:
Gadgeteer Data Port A 10-pin port that allows a variety of sensors to be connected.
| Pin Number | Description |
|---|---|
| 1 | Reserved (Do Not Use) |
| 2 | 5V |
| 3 | Analog Input |
| 4 | Forward Limit Input |
| 5 | Quadrature B |
| 6 | Reserved (Do Not Use) |
| 7 | Quadrature A |
| 8 | Reverse Limit Input |
| 9 | PWM Input |
| 10 | Ground |
Various breakout boards are available.
The Talon FXS accepts 5V sensors.
USB:
No USB available. All configuration and control is done through Phoenix Tuner.
LED Status Codes
The Talon FXS has two RGB LEDs on the top that work together to show status and fault codes.
- Disabled Codes
- Enabled Codes
- Special Codes
| LED Pattern | What It Means | What To Do |
|---|---|---|
| Off | No power | Check power wires and breaker |
| Alternating red (2 LEDs) | No CAN signal | Check Yellow/Green wiring, check for swapped wires |
| Alternating orange | CAN detected, no Phoenix program | Deploy your robot code |
| Both blink orange simultaneously | Disabled, CAN active | Enable the robot or send a control request |
| LED Pattern | What It Means |
|---|---|
| Both solid orange simultaneously | Neutral Output |
| Both green (blink rate = speed) | Spinning forward |
| Both red (blink rate = speed) | Spinning reverse |
| Offset red/off | Output limited (soft or hard limit) |
| LED Pattern | What It Means | What To Do |
|---|---|---|
| Offset orange/off | Thermal cutoff — overheated | Let it cool; configure current limits to prevent recurrence |
| Alternating red/green | Unlicensed Pro command | Use standard commands or license the device |
| Alternating red/green | Damaged Hardware | Use Tuner X to confirm, contact CTRE |
| Single LED alternating green/orange | Talon FXS in bootloader | Perform firmware update |