FRC Academy teaches motor control through three real-world motor types used on FRC robots: the REV NEO (brushless, controlled via SPARK MAX over CAN), the CTRE Kraken x60 / Falcon 500 (brushless, controlled via TalonFX over CAN), and the CIM (brushed, controlled via PWMSparkMax over PWM). Choosing the right motor type at the start of each lesson matters — each one requires a different vendor library, a different Java import, and a different constructor call. Picking the wrong type means your imports won’t compile and your hardware won’t respond.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Holden9607/FRC-Academy/llms.txt
Use this file to discover all available pages before exploring further.
Selecting a Motor Type
When you open the Motors learning path in FRC Academy, the app presents three buttons to choose your hardware:- NEO Motor (REV) — brushless NEO motor controlled via REV SPARK MAX over CAN
- Kraken Motor (CTRE) — brushless Kraken/Falcon motor controlled via TalonFX over CAN
- CIM Motor (PWMSparkMax) — brushed CIM motor controlled via PWMSparkMax over PWM
Motor Comparison
| Motor | Controller | Java Class | CAN/PWM | Vendor Library |
|---|---|---|---|---|
| NEO | SPARK MAX | SparkMax | CAN ID | REV Robotics |
| Kraken x60 / Falcon 500 | Talon FX | TalonFX | CAN ID | CTRE Phoenix 6 |
| CIM | SPARK MAX (PWM) | PWMSparkMax | PWM Port | WPILib built-in |
NEO (REV)
The REV NEO is a brushless motor paired with the REV SPARK MAX motor controller. It communicates over the CAN bus and is identified by a CAN ID (starting at 1 by convention in FRC Academy lessons). TheSparkMax class from the REV Robotics vendor library handles all hardware interaction — you must pass both a CAN ID and the MotorType.kBrushless enum to the constructor.
Required import:
SparkMaxConfig for configuring inversion and follower behavior, and ResetMode / PersistMode enums for managing parameter persistence on the controller hardware.
NEO Motor Lessons
Step-by-step lessons for defining, activating, and driving with REV NEO motors
Kraken (CTRE)
The CTRE Kraken x60 (and its predecessor, the Falcon 500) is a brushless motor integrated directly into a TalonFX motor controller housing. It communicates over the CAN bus using the CTRE Phoenix 6 vendor library. TheTalonFX class accepts a CAN ID and an optional CAN bus name string (FRC Academy lessons use "DINO" as the bus name). Motor output is applied using the DutyCycleOut control request rather than a simple set() call.
Required import:
MotorOutputConfigs and applied via the configurator API — not through a simple setInverted() call like older WPILib classes.
Kraken Motor Lessons
Step-by-step lessons for defining, activating, and driving with CTRE Kraken motors
CIM (PWMSparkMax)
The CIM is a classic brushed DC motor and is one of the most historically common motors in FRC. In FRC Academy it is controlled via a SPARK MAX in PWM mode using the WPILibPWMSparkMax class — no vendor library installation required. Instead of a CAN ID, the constructor takes a PWM port number (0-based, matching the port on the roboRIO). The set() and setInverted() methods follow the standard WPILib MotorController interface.
Required import:
PWMSparkMax implements the MotorController interface, it also works with WPILib’s DifferentialDrive class without any additional configuration wrappers.
CIM Motor Lessons
Step-by-step lessons for defining, activating, and driving with CIM motors via PWMSparkMax
All Motor Types at a Glance
NEO (REV)
Brushless · CAN ·
SparkMax · REV vendor library requiredKraken / Falcon (CTRE)
Brushless · CAN ·
TalonFX · CTRE Phoenix 6 requiredCIM (PWMSparkMax)
Brushed · PWM ·
PWMSparkMax · WPILib built-in, no vendor libraryFRC Academy motor lessons automatically tailor guided steps, skeleton code, and solution code to your selected motor type. The same lesson structure — Define, Activate, 2 Motor Tank Drive, 4 Motor Tank Drive — appears for every motor, but the imports, constructor calls, and configuration APIs shown will always match the hardware you selected.