odriverobotics / ODrive

High performance motor control
https://odriverobotics.com
MIT License
2.89k stars 1.5k forks source link

odrv.onboard_encoder0.raw returns zero whenever odrv.rs485_encoder_group0.config.mode set to ODRIVE_OA1 #750

Closed SeamusHerson-MilwaukeeTool closed 1 month ago

SeamusHerson-MilwaukeeTool commented 1 month ago

The value returned by the onboard encoder appears to always be 0 when odrv.rs485_encoder_group0.config.mode is set to ODRIVE_OA1 or AMT21_POLLING. This results in a NO_RESPONSE error when attempting calibration.

To Reproduce In odrivetool, enter: odrv.axis0.config.load_encoder = EncoderId.RS485_ENCODER0 odrv.rs485_encoder_group0.config.mode = Rs485EncoderMode.ODRIVE_OA1 odrv.axis0.config.commutation_encoder = EncoderId.ONBOARD_ENCODER0

odrv.onboard_encoder0.raw will always return 0, no matter the orientation of the shaft relative to the onboard encoder.

Expected behavior odrv.onboard_encoder0.raw output will change as the shaft turns relative to the encoder

Desktop (please complete the following information):

Additional context Found this bug while attempting calibration with a OA1 encoder as the load encoder after a 10:1 reduction from the motor w/ the onboard encoder as the commutation encoder.

samuelsadok commented 1 month ago

We're aware of this issue but forgot to document it properly, sorry!

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.

Where would be a good place in the docs where we can add this note where you would have seen it?

(Btw note that this is the repo for ODrive v3.x, the recommended way for bug reports for current-gen ODrives is via Discord or Email)

SeamusHerson-MilwaukeeTool commented 1 month ago

Hi Sam - Thanks for the fix - this works very well!

As far as where would be best to document this note, adding it somewhere near the "! Important" Box in Manual > Hardware Configuration > Encoders > RS485 Encoders is probably the place I would've found it most helpful. Sorry for submitting the issue on the wrong repo - I appreciate the response regardless!

From: samuelsadok @.> Sent: Wednesday, July 24, 2024 4:06 AM To: odriverobotics/ODrive @.> Cc: Herson, Seamus @.>; Author @.> Subject: Re: [odriverobotics/ODrive] odrv.onboard_encoder0.raw returns zero whenever odrv.rs485_encoder_group0.config.mode set to ODRIVE_OA1 (Issue #750)

We're aware of this issue but forgot to document it properly, sorry!

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.

Where would be a good place in the docs where we can add this note where you would have seen it?

(Btw note that this is the repo for ODrive v3.x, the recommended way for bug reports for current-gen ODrives is via Discord or Email)

- Reply to this email directly, view it on GitHubhttps://github.com/odriverobotics/ODrive/issues/750#issuecomment-2247303542, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AUVH63C4EQFG2PYR45GUW5DZN5U75AVCNFSM6AAAAABLJEGGO6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENBXGMYDGNJUGI. You are receiving this because you authored the thread.Message ID: @.**@.>>

samuelsadok commented 1 month ago

Good to know the workaround works for you!

I added the note to https://docs.odriverobotics.com/v/latest/manual/hardware-config.html#rs-485-encoders (a bit further down, but hopefully still visible).

No worries with submitting the issue here, just mentioning it in case other users read it, to keep things organized and avoid confusion.