Feature Replacements

In addition to the changes shown in the other sections, several other Phoenix 5 features have been replaced or improved upon in Phoenix 6.

Motor Invert

In Phoenix 6, motor invert is now a persistent config (Java, C++) instead of a control signal.

Warning

Since invert is a persistent config, getting and setting motor inverts are now blocking API calls. We recommend that users only set the invert once at program startup.

Neutral Mode

In Phoenix 6, Neutral mode is now available in API as a config (Java, C++). Many control requests also have the ability to override the neutral mode to either force braking (Java, C++) or force coasting (Java, C++).

Nominal Output

The Talon FX forward and reverse Nominal Output configs have been removed in Phoenix 6.

The typical use case of the nominal output configs is to overcome friction in closed-loop control modes, which can now be achieved using the kS feedforward parameter (Java, C++).

Sensor Phase

The Talon FX setSensorPhase() method has been removed in Phoenix 6.

  • The Talon FX integrated sensor is always in phase, so the method does nothing in Phoenix 5.

  • When using a remote sensor, you can invert the remote sensor to bring it in phase with the Talon FX.

Sensor Initialization Strategy

The Talon FX and CANcoder sensors are always initialized to their absolute position in Phoenix 6.

Clear Position on Limit

In Phoenix 5, users could configure the TalonFX to clear its sensor position (i.e. set to 0) when a limit switch is triggered. In Phoenix 6, this feature has been improved to allow users to specify the applied sensor position when a limit switch is triggered. This can be configured using the *LimitAutosetPositionValue configs (Java, C++).

Velocity Measurement Period/Window

In Phoenix 6, the velocity rolling average window in Talon FX and CANcoder has been replaced with a Kalman filter, resulting in a less noisy velocity signal with a minimal impact on latency (~1 ms). As a result, the velocity measurement period/window configs are no longer necessary in Phoenix 6 and have been removed.

On the Talon FX, users can optionally configure the VelocityFilterTimeConstant config (Java, C++) to apply stronger filtering to the velocity signal. However, note that stronger filtering may negatively impact velocity PID control.

Allowable Closed-Loop Error

To check if a motor controller is within a given range of the target setpoint, call isNear (Java, C++) on the Position or ClosedLoopError status signal object.

Allowable closed-loop error, which zeroed motor output when close to the setpoint, has been replaced by the more flexible GainSchedErrorThreshold and GainSchedKpBehavior configs (Java, C++) and the per-slot GainSchedBehavior config (Java, C++). Users can set the GainSchedBehavior to ZeroOutput to get similar behavior to allowable closed-loop error, improved to allow kG and custom FeedForward output while within the threshold.

Integral Zone and Max Integral Accumulator

Phoenix 6 automatically prevents integral windup in closed-loop controls. As a result, the Integral Zone and Max Integral Accumulator configs are no longer necessary and have been removed.

Users can optionally use the new GainSched* configs mentioned above to mimic the behavior of Integral Zone by setting up a secondary PID slot with a stronger kI gain and setting the GainSchedBehavior of the primary PID slot to UseSlot*.

CANcoder Sensor Coefficient and Units

In Phoenix 6, CANcoder does not support setting a custom sensor coefficient, unit string, and sensor time base. Instead, the CANcoder uses canonical units of rotations and rotations per second using the C++ units library.

Features Omitted

The following Phoenix 5 features have been omitted from Phoenix 6. While there are no plans for these features to be added, if there is customer demand for these features, they may be considered for addition in the future.

Feedback is welcome at feedback@ctr-electronics.com.

  • Motion Profile Executor

    • Control requests have been improved to cover many of the use cases of the Motion Profile Executor.