githubEdit

table-cellsMotor Controller Feature Matrix

This page provides a comprehensive comparison of supported SmartMotorControllerConfig features across all motor controller wrappers in YAMS.

Supported Motor Controllers

Wrapper
Vendor
Hardware
Package Location

TalonFXWrapper

CTRE

TalonFX (Kraken X60, Falcon 500)

yams.motorcontrollers.remote

TalonFXSWrapper

CTRE

TalonFXS (controls NEO, NEO 550, Vortex, Minion)

yams.motorcontrollers.remote

SparkWrapper

REV

SparkMax, SparkFlex

yams.motorcontrollers.local

NovaWrapper

ThriftyBot

ThriftyNova

yams.motorcontrollers.local

Vendor Configuration Classes

Each wrapper accepts a specific vendor configuration class via SmartMotorControllerConfig.withVendorConfig(). This allows you to pass through vendor-specific settings that YAMS doesn't directly expose.

Wrapper
Accepted Vendor Config Class
Package

TalonFXWrapper

TalonFXConfiguration

com.ctre.phoenix6.configs

TalonFXSWrapper

TalonFXSConfiguration

com.ctre.phoenix6.configs

SparkWrapper (SparkMax)

SparkMaxConfig

com.revrobotics.spark.config

SparkWrapper (SparkFlex)

SparkFlexConfig

com.revrobotics.spark.config

NovaWrapper

ThriftyNovaConfig

com.thethriftybot.devices.ThriftyNova

circle-exclamation

Vendor Config Examples

TalonFX with TalonFXConfiguration

TalonFXS with TalonFXSConfiguration

SparkMax with SparkMaxConfig

SparkFlex with SparkFlexConfig

ThriftyNova with ThriftyNovaConfig

circle-info

Configuration Priority: Settings in SmartMotorControllerConfig always take precedence over vendor config settings. The vendor config is applied first as a base, then YAMS overwrites any settings it manages directly.

Feature Support Matrix

Legend

Symbol
Meaning

βœ…

Fully Supported

⚠️

Partially Supported (see notes)

❌

Not Supported

πŸ”§

Requires Vendor Config


Basic Configuration

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

Motor Inversion

βœ…

βœ…

βœ…

βœ…

Encoder Inversion

βœ…

βœ…

βœ…

❌

Idle Mode (Brake/Coast)

βœ…

βœ…

βœ…

βœ…

Reset Previous Config

βœ…

βœ…

βœ…

βœ…

Vendor Config Passthrough

βœ…

βœ…

βœ…

βœ…

Starting Position

βœ…

βœ…

βœ…

βœ…

Current Limits

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

Stator Current Limit

βœ…

βœ…

βœ…

βœ…

Supply Current Limit

βœ…

βœ…

βœ…

βœ…

Voltage Configuration

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

Voltage Compensation

βœ…

βœ…

βœ…

βœ…

Closed Loop Max Voltage

βœ…

βœ…

βœ…

βœ…

Ramp Rates

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

Open Loop Ramp Rate

βœ…

βœ…

βœ…

⚠️ (uses closed loop value)

Closed Loop Ramp Rate

βœ…

βœ…

βœ…

βœ…

circle-exclamation

Gearing

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

Mechanism Gearing

βœ…

βœ…

βœ…

βœ…

External Encoder Gearing

βœ…

βœ…

βœ…

βœ…

Mechanism Circumference (Linear)

βœ…

βœ…

βœ…

βœ…

Closed Loop Control

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

PID Controller

βœ…

βœ…

βœ…

βœ…

LQR Controller

⚠️ (RoboRIO)

⚠️ (RoboRIO)

⚠️ (RoboRIO)

⚠️ (RoboRIO)

Closed Loop Tolerance

βœ…

βœ…

βœ…

βœ…

Control Period Override

βœ…

βœ…

βœ…

βœ…

circle-exclamation

Motion Profiles

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

Trapezoidal Profile

βœ… (Motion Magic)

βœ… (Motion Magic)

βœ… (MAXMotion)

⚠️(RoboRIO)

Exponential Profile

βœ… (Motion Magic Expo)

βœ… (Motion Magic Expo)

⚠️ (RoboRIO)

⚠️ (RoboRIO)

circle-info

Profile Execution Location:

  • TalonFX/TalonFXS: Profiles run on the motor controller (Motion Magic)

  • SparkMax/SparkFlex: Trapezoidal profiles run on motor controller (MAXMotion), exponential profiles run on RoboRIO

  • Nova: All profiles run on RoboRIO

Feedforward

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

SimpleMotorFeedforward

βœ…

βœ…

βœ…

βœ…

ArmFeedforward

βœ…

βœ…

βœ…

βœ…

ElevatorFeedforward

βœ…

βœ…

βœ…

βœ…

Simulation Feedforward

βœ…

βœ…

βœ…

βœ…

Soft Limits

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

Angle Soft Limits

βœ…

βœ…

βœ…

βœ…

Distance Soft Limits

βœ…

βœ…

βœ…

βœ…

Continuous Wrapping

βœ…

βœ…

βœ…

⚠️ (RoboRIO PID only)

External Encoders

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

External Encoder Support

βœ…

βœ…

βœ…

βœ…

External Encoder Inversion

βœ…

βœ…

βœ…

❌

External Encoder Zero Offset

βœ…

βœ…

βœ…

❌

Use External for Feedback

βœ…

βœ…

βœ…

βœ…

Feedback Synchronization

βœ…

βœ…

βœ…

❌

Supported External Encoder Types:

Wrapper
Supported Encoders

TalonFX

CANcoder, CANdi (PWM1/PWM2)

TalonFXS

CANcoder, CANdi (PWM1/PWM2)

SparkMax/Flex

SparkAbsoluteEncoder (Through Bore, REV Hex)

Nova

ThriftyNova ExternalEncoder (ABS type)

Follower Motors

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

Hardware Followers

βœ…

βœ…

βœ…

βœ…

Follower Inversion

βœ…

βœ…

βœ…

βœ…

Loosely Coupled Followers

βœ…

βœ…

βœ…

βœ…

circle-exclamation

Telemetry

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

Telemetry Name

βœ…

βœ…

βœ…

βœ…

Telemetry Verbosity

βœ…

βœ…

βœ…

βœ…

Custom Telemetry Config

βœ…

βœ…

βœ…

βœ…

Simulation

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

DCMotorSim

βœ…

βœ…

βœ…

βœ…

Moment of Inertia

βœ…

βœ…

βœ…

βœ…

Custom Sim Supplier

βœ…

βœ…

βœ…

βœ…

External Encoder Sim

βœ…

βœ…

βœ…

⚠️

Safety Features

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

Temperature Cutoff

❌

❌

❌

βœ…

SysId Integration

Feature
TalonFX
TalonFXS
SparkMax/Flex
Nova

SysId Routine Support

βœ… (SignalLogger)

βœ… (SignalLogger)

βœ…

βœ…

Custom SysId Config

βœ…

βœ…

βœ…

βœ…


Motor Type Support by Wrapper

TalonFXWrapper

  • Kraken X60 / Kraken X60 FOC

  • Falcon 500 / Falcon 500 FOC

TalonFXSWrapper

  • NEO (via JST connector)

  • NEO 550 (via JST connector)

  • NEO Vortex (via JST connector)

  • Minion (via JST connector, with Advanced Hall Support)

SparkWrapper

  • NEO (SparkMax with brushless mode)

  • NEO 550 (SparkMax with brushless mode)

  • NEO Vortex (SparkFlex)

  • Any brushless motor (SparkMax/SparkFlex)

NovaWrapper

  • NEO

  • NEO 550

  • NEO Vortex

  • Any motor compatible with ThriftyNova


Configuration Examples

TalonFX with CANcoder

TalonFXS with NEO

SparkMax with Absolute Encoder

ThriftyNova Basic Setup


Known Limitations

ThriftyNova (NovaWrapper)

  • No separate open/closed loop ramp rates

  • No encoder inversion support

  • No external encoder inversion

  • No zero offset for external encoders

  • No feedback synchronization threshold

  • Continuous wrapping only works with RoboRIO-side PID

SparkMax/SparkFlex (SparkWrapper)

  • Exponential profiles run on RoboRIO, not on motor controller

  • External encoders must be REV-compatible (Through Bore, Hex)

TalonFX/TalonFXS

  • Requires Phoenix 6 library

  • CANcoder/CANdi must be on same CAN bus for best performance

Last updated