Motor Controllers
Supported motor controller/motor combinations for module drive and angle motors
TalonSRX and brushed SparkMAX are no longer supported. The pre-2026.8.05 talonsrx and sparkmax_brushed types have been removed — YAGSL now only drives brushless motors through YAMS's SmartMotorController abstraction. See Schema Changes.
Motor Checklist
Configuring a motor
Each module JSON (frontleft.json, etc.) has a drive and an angle motor, both DeviceJson objects of the form "<controller>_<motor>":
{
"drive": { "type": "sparkflex_vortex", "id": 5, "canbus": "" },
"angle": { "type": "sparkmax_neo550", "id": 6, "canbus": "" }
}The <motor> suffix tells YAGSL which DCMotor model to use for feedforward and simulation characterization (free speed, stall torque, etc.) — it must match the physical motor attached to that controller.
Supported controller × motor combinations
Controller
type values
talonfx_krakenx44, talonfx_krakenx60
talonfxs_neo, talonfxs_neo2, talonfxs_neo550, talonfxs_vortex, talonfxs_pulsar, talonfxs_minion
sparkmax_neo, sparkmax_neo2, sparkmax_neo550, sparkmax_vortex, sparkmax_pulsar, sparkmax_minion
sparkflex_neo, sparkflex_neo2, sparkflex_neo550, sparkflex_vortex, sparkflex_pulsar, sparkflex_minion
Nova (ThriftyBot)
nova_neo, nova_neo2, nova_neo550, nova_vortex, nova_pulsar, nova_minion
This is the full cross-product the config generator and parser accept for feedforward/simulation purposes — it is not a claim that every combination is physically wireable. Respect real hardware constraints: TalonFX only physically drives Kraken X44/X60 motors, SparkMAX/SparkFlex drive REV motors via their own connectors, and Nova drives ThriftyBot motors. Pick the row for your actual controller, and the <motor> suffix that matches what's physically bolted to it.
Only CTRE controllers (talonfx_*, talonfxs_*) support the canbus field for CANivore use — set it to "" for your control system's default bus (rio on a roboRIO). See Control system and CAN buses.
TalonFX (Kraken X60 / Kraken X44)
TalonFX is the controller for Kraken X44/X60 and (legacy) Falcon 500 motors. Commonly used as a drive motor for its power and efficiency versus REV NEOs.
Upgradeable/configurable via Tuner X — watch the LED status code when debugging. Settings changed in Tuner X are overwritten on startup by YAGSL.
If running Falcon 500 v2 (effectively discontinued), apply the Loctite fix.
TalonFXS
TalonFXS is CTRE's controller for third-party/non-Kraken brushless motors (NEO, NEO Vortex, Minion, Pulsar) wired through CTRE's ecosystem — same Tuner X tooling and CAN/CANivore support as TalonFX.
SparkMAX
REV SparkMAX, brushless mode (NEO / NEO 550 / NEO Vortex / Minion / Pulsar via the appropriate <motor> suffix).
Requires the REV Hardware Client to test PID, run at a set percentage, and update firmware.
The SparkMAX must be disconnected from the CAN bus on startup to be recognized by the REV Hardware Client.
To tune PID directly on the controller: open REV Hardware Client → select the SparkMAX → Telemetry tab → set to position control while adjusting gains in the left pane.
Checklist
SparkFlex
REV SparkFlex, brushless mode (same motor suffixes as SparkMAX, primarily used with NEO Vortex).
Same REV Hardware Client workflow and startup-disconnect caveat as SparkMAX.
General motor tips (apply regardless of controller)
Confirm CCW+ rotation on the bench before mounting — see When to Invert.
Tune one drive motor and one angle motor fully before copying gains to the other three modules; see Tune PIDF Gains.
Current limits and gearing live in
physicalproperties.json(or a per-modulegearingoverride) — see physicalproperties.json Reference.
Last updated
Was this helpful?