ODrive S1 Dual Encoder Calibration No Response

Hello All,

I’ve used an ODrive with a single encoder and had great success, however, I’m having issues with using a load encoder and a commutation encoder.

Current Setup:
ODrive S1 onboard encoder for commutation
ODrive OA1 as the load encoder after a 10:1 reduction

While running calibration I get a No Response error, and while looking at the inspector tool in the GUI, the raw onboard encoder value is reported as 0. This is strange because when I attempt to perform calibration using the onboard encoder as both the load and commutation encoder it reports back correct values and passes calibration. Is this a known issue?

I did some more exploration and found that as far as I can tell, on FW 0.6.9-1 whenever odrv.rs485_encoder_group0.config.mode is set to ODRIVE_OA1 the value of odrv.onboard_encoder0.raw is stuck at 0.

Hi! Yes, sorry this is a known bug we’re working to fix. Please try using rs485_encoder_group1 instead of rs485_encoder_group0 (and the load encoder would be EncoderId.RS485_ENCODER1)

Thanks for the help!

In my configuration, I changed the relevant lines to read as follows:
odrv.axis0.config.load_encoder = EncoderId.RS485_ENCODER1
odrv.rs485_encoder_group1.config.mode = Rs485EncoderMode.ODRIVE_OA1
odrv.axis0.config.commutation_encoder = EncoderId.ONBOARD_ENCODER0

However, odrivetool returns the error ‘anonymous_interface_1265791679008’ object has no attribute ‘rs485_encoder_group1’

Did I read something incorrectly in your suggestion?

That should’ve worked. What version of ODrivetool are you using, and what firmware version is the S1 on? Should be v0.6.9.post0 and v0.6.9 (or v0.6.9-1) respectively. Should show when ODrivetool starts and when you connect the S1.

I found a solution thanks to samuelsadok on Github. They said:

"The recommended workaround is:

  1. Upgrade to devel firmware (or 0.6.10, once it’s released)
  2. Use rs485_encoder_group1 instead of rs485_encoder_group0 (and correspondingly EncoderId.RS485_ENCODER1 instead of EncoderId.RS485_ENCODER0).

For others reading: this is only an issue on ODrive S1, not on ODrive Pro."

so ultimately, the relevant lines of the configuration that worked are:

odrv.axis0.config.load_encoder = EncoderId.RS485_ENCODER1
odrv.rs485_encoder_group1.config.mode = Rs485EncoderMode.ODRIVE_OA1
odrv.axis0.config.commutation_encoder = EncoderId.ONBOARD_ENCODER0

Thank y’all very much for your help – I’ve been really impressed by how on top of this everyone has been :slight_smile:

Ah great, devel makes sense. Glad to hear it’s working out!

1 Like