Rev Robotics recently released a new Through Bore Encoder (here). According to the specifications, the resolution on this encoder for the absolute PWM output is 16-bit (65536 increments per revolution). I have experimented with this encoder using the 2019 WPILib Counter class. According to my experiments, the pulses vary from 1 microsecond to 1024 microseconds with increments of 1 microsecond. This would mean that the resolution is 10-bit (1024 increments per revolution). I used two different encoders and got the same results.
When I asked Rev Robotics support, they stated that the resolution is 16-bit and mentioned that the new 2020 WPILib class had new classes that can read PWM inputs more precisely. Has anyone tried reading the absolute PWM encoder output using the new 2020 code, or any other method? Do you get a resolution more precise than 1024 increments per revolution?
With the new 2020 wpilib support, it’s hard to quantify “resolution”. The low level class returns a ratio of how long the signal was high relative to the period. So you get a number between 0 and 40,000,000 (implementation detail, wpilib returns between 0 and 1). This is the same if your encoder has a 1ms period, 4ms period or 20ms period. So measuring resolution isnt really possible, since it’s a ratio.
You could likely tell by reading a ton of values, and seeing what Delta’s you get there, but it’s not something directly provided by the new classes.
The counter class supports significantly higher resolution then 1us. I don’t think that changing to the DutyCycleEncoder class would help, I think the sensor resolution is limited.
Looking at the underlying sensor data sheet, it appears to only support 16 bit in SSI mode. In PWM output, it looks like it can support 10-13 bits (configurable), trading resolution for frequency. However, based on the fact that Rev specs it at a 1025us output period, that says it’s configured for the 10 bit mode.
Thank you @Joe_Ross for your research; I believe your analysis and answer is correct! I will follow up with Rev Robotics support on this. @Thad_House, thanks for the info about the new classes; using the Counter class, it is actually not that hard to slowly move the encoder back and forth and read the output values, and you can clearly see when it consistently jumps from one value to the next, what the resolution is; I think it would probably be just as easy to do this with the new DutyCycleEncoder class.
You are correct, the sensor’s absolute pulse is 10-bit resolution. We have corrected the documentation and product page on the web.
The absolute position resolution is 16-bit when accessed through the SSI interface, but we do not currently have example code for this interface. It is on our software backlog, but I cannot commit to a date at this time. However, the SSI protocols are defined in the Broadcom datasheet.
The resolution configuration parameters are burned into nonvolatile registers at the factory and cannot be changed.
I’d like to apologize for any inconvenience related to this resolution specification. Please don’t hesitate to reach out to us if you have any questions or concerns.