NEO 550 encoder - is it absolute?

The documentation for the Neo550 does not mention it being absolute. But I just wanted to check to be sure.

It is not. It also has 42 ticks. But you would usually put it behind lots of gearing in most cases where you need to know the absolute position so if you put a zeroing switch somewhere you could make it work.

5 Likes

Thanks.

All brushless DC motors have some kind of internal absolute position sensing; it’s necessary for the electronic commutation to know which coils to energize at what time. For the three* BLDC motors legal for FRC, this information isn’t available to the user as far as I know.

* Four including the NIDEC, but no one cares about that so I’m not going to bother looking up the specs

2 Likes

So you are saying that it has absolute position knowledge but this is not available to the user?

I don’t have any direct knowledge of this, but I can surmise this from knowledge of BLDC motor control. If someone from REV wanted to comment they’d have a more definitive answer though

It dont think it’s absolute, the NEOs all have 3 hall effect sensors that read when then 14 neodymium magnets pass. Theres no way for it to “know” which magnet is which. It just starts at 0 on power up and counts from there when it sees the magnets pass.

1 Like

As I understand it though, those three hall effect sensors can give an absolute position accurate to 1/6 rotation. That’s how the motor controller knows which coils to energize at any point to keep the motor rotating.

This is correct, technically its an absolute sensor, and every brushless motor controller must use an absolute sensor. However its only absolute within an electrical cycle of the motor. The hall sensor itself has a resolution of 6 within an electrical cycle. The NEO has 7 electrical cycles. That’s where the 42 comes from. 6 states * 7 cycles = 42 counts per revolution.

To make it clear, you would be able to tell where the rotor is within a ~51 degree range, but not which 51 degree range it was in. And the resolution within that range would be ~8 degrees.

There is no way to externally access which state within the 6 counts that the motor is in from the Spark Max, nor can I think of any application where it could be useful outside of making the motor spin.

7 Likes

Just wait till you see my design for a turret with a 7:1 overdrive ratio and 360° rotation limit /s

Thanks for the clarification

1 Like

I’d like to offer a simple response to the original question for anyone who is a bit of a novice with these:

For pretty much any FRC usage, you should treat the NEO 550 encoder as a relative encoder, which knows how many rotations it made since it powered on. If you then have a gearbox attached to the motor, you can figure how many times the output of the gearbox has turned by dividing the rotations of the motor by the gear ratio. To know the absolute position of the gearbox, you need to be aware of what position it was when the motor turned on, such that you can then add the relative angle to that starting position. You can measure that by having an an absolute encoder at the output, or something like a limit switch that you “touch” when the robot starts up, so you know that position.

There are two “gotchas” here:
-If the speed controller browns out in the middle of a game, this relative position will reset to zero, regardless of where your output mechanism is. This will mess everything up, so beware!
-The relative position is measured when motor is turned on, and doesn’t get reset when code is redeployed to the robo Rio. So if you are developing code and doing regular redeploys, don’t assume that the encoder will read 0 when the code starts. You can set it to be zero at the start of your code, which is probably good practice: RelativeEncoder (FRC-REVLib API)

1 Like

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