Falcon 500 Talons FX Absolute Encoder Reset

We are trying to reset the absolute encoder position on the Falcon 500. Can this be done and how?

The Facon 500 has a relative encoder, not an absolute encoder.

You can set the position of the relative encoder with setSelectedSensorPosition(position). “Resetting” it would be setting the position to 0.


The Falcon 500 has an absolute sensor which reads the physical position of the shaft and always reads the same value for the same physical position. This is required for a brushless motor to commutate.

You can read the absolute value with this API call if you’re using the v5 API:

When you ask the motor controller for getSelectedSensorPosition it will give you a position that always starts at zero when it powers up, and will count forward or backward but it doesn’t roll over with each rotation. It counts pulses from power up position.

You can reset this “virtual” encoder, but you can’t reset the absolute encoder value.


The Falcon500 does not have an absolute encoder, it has a relative encoder inside that runs relative to the encoder/motor shafts position when the robot starts up.

If it was an absolute encoder, it would be able to track the position even when it doesn’t have power. This would be something like a Cancoder or Rev Throughbore encoder.

I think there is some confusion about what the term Absolute here means. CTREs phoenix software is calling “Distance since reboot” absolute whereas typically absolute should be a position that is relative to the motors shaft at all times.

Imagine a tick mark at the top of the shaft. If I set that at the top, power it off, rotate 90 then power on does it account for the 90 or is it saying 0. That is how we can differentiate. If it’s 90 then it’s truly absolute like most absolute encoders are, if it’s 0 then it’s absolute from power on which is not actually absolute and a bad choice of wording by CTRE.

Why does it matter? For an arm in a gearbox the exact 0 position of the shaft matters alot more than the relative from power on position that you want for a wheel encoder for rotation counting. If you plan on using the Falcons encoders for position feedback you can’t assume 0 at power on is actually 0. You should either add a real absolute encoder, or do a homing function that will take the arm down to a limit switch and then do a reset when you know it’s in the proper place. Again CTRE seems to have just picked a bad word that implies the built in encoder is something it’s not.


The Falcon 500 actually does have an absolute sensor, but since the absolute position is measured before any gear reduction, it may not be all that useful in many mechanisms. This is why swerve drive generally requires separate encoders (such as CANcoders) on the output shafts of the gearboxes for the turning motors.

kingc95: CTREs phoenix software is calling “Distance since reboot” absolute

I’m curious where you read this, I don’t see anything in our documentation claiming that absolute position is distance since reboot – that would be relative position.

Can you provide more info on what exactly the “absolute mode” on a Falcon is capable of? I haven’t gone through all documentation but does it actually recall absolute position even after a power cycle? (And yes I follow that this is position before any gear reduction)


The absolute position is the position of the rotor in the range [0, 2047] or [-1024, 1023] (depending on the configured Integrated Sensor Absolute Range), and it is persistent across power cycles (and tracks changes while unpowered).

persistent across power cycles (and tracks changes while unpowered).

Is this something that needs to be enabled? my team’s testing has found this to be false.

1 Like

Is there a CTRE example or anything on their docs showing how to get absolute sensor position? We have had the same experience where the TalonFX/Falcon 500s usually report a encoder value of zero when they have been rebooted.

getSelectedSensorPosition() returns the relative position of the sensor, not the absolute position. You can configure the TalonFX to initialize its relative position to its absolute position on boot (instead of to 0) by setting the Integrated Sensor Initialization Strategy (javadoc). You can also manually initialize the relative position to the absolute position by calling getSensorCollection().setIntegratedSensorPositionToAbsolute() (javadoc). Keep in mind that the selected sensor position is still reporting the relative position, so it will not wrap like the absolute position.

Otherwise, the absolute position can be retrieved by calling getSensorCollection().getIntegratedSensorAbsolutePosition() (javadoc). Keep in mind that the absolute position by default is sent over CAN every 240ms, unlike the selected sensor position which is sent every 20ms.


In November 2019, after the Talon FX had been released, I sent an email to CTRE asking if we could use the internal feedback on the Falcon 500 / Talon FX as an absolute encoder, and I received this response from their chief engineer:

The 2048 sensor is absolute within one rotation. So on boot it will report within [0,360) deg. This is similar to the CTRE Mag Encoder’s pulse-width signal in that it is similarly absolute within one rotation.

and that explains the dire warning about messing with the internals:

DO NOTremove the screws from the controller end cap. This can result in a loss of
calibration between the motor and motor controller and will void the warranty. A loss in
calibration will result in decreased performance or permanently damage your Falcon 500.
Once the end cap is removed the Falcon 500 can no longer be put back into its original state
due to the loss of calibration.


Not in the docs, it’s in the screenshot of the Phoenix Tuner software. Look under the pic OP shared. It says Absolute encoder distance: which is something like -1,290 (I’m not staring at the pic cuz I’m on mobile rn) and the reported distance is -1000 meaning they did a soft reset. Okay now the pics gone and I look like a moron… Idk where I saw it now maybe it was in the phoenix bring up talonFX/talonSrx guide screenshot. I haven’t been in Phoenix Tuner myself physically in 2 weeks so I’ve only seen screenshots of that page

Edit: found it!

The software says that under absolute

Further Edit: I’m definitely a moron cuz that absolute is unsigned and not negative so idk where I got the -1290 from but I saw that pic last night and was trying to recall it from memory.

Ah, I see the point of confusion. “On power cycle, sensor position resets to zero” refers to the relative position’s Initialization Strategy config, not the absolute position. There are two initialization strategies for the relative position: reset to 0, and reset to absolute.

1 Like

Can this be clarified? Cuz it’s listed directly under absolute which to most people implies the absolute resets which is not absolute. Which is indeed a paradox…

I wouldn’t suggest forcing teams to have to redownload phoenix Tuner for this but you need to note this in the software and maybe put up a bold warning on the read the docs guide about this until next year.


If you have a suggestion for how we can improve the clarity of the message, I would recommend filing an issue tracker here: GitHub - CrossTheRoadElec/Phoenix-Releases: Release repository for Phoenix-Framework and Phoenix-Tuner

I’m at school right now, so I’m not working, but one of my coworkers will pick up the tracker. I think the change would be a library update, not a Tuner update, and we recommend installing mid-season updates anyways because of bug fixes.

1 Like

I’m also at work, and will try to do this later today, but more than likely will get forgotten by days end. If I don’t do it I will have a student do this tomorrow evening and show them the process cuz it’s a good lesson anyways.

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.