Question on CAN Interface

I have some questions about the CAN Protocol documentation (found here: CAN Protocol | ODrive)…

Simply put, are messages with cmdID 0x003, 0x004 and 0x005 (Get Motor/Encoder/Sensorless Error) generated by an axis when those conditions change - or are they only generated in response to a master generated message with the rtr bit set?

The documentation is a bit confusing for those three messages (plus the Get IQ message), because the text indicates they will be generated in response to a master rtr request, but the table states the sender is “Axis”. I could just write that off, as ‘yeah the axis SENDs the message after being told to by the master’ – except there are three other messages (Get Encoder Estimates, Get Encoder Count and Get Sensorless Estimates) that have the sender as Master. So I’m trying to determine whether there’s some subtlety I’m missing (or if perhaps the docs are just wrong?)…

I can imagine it would be nice to have the error conditions reported immediately without having to wait for the master to query about them, so I’m hoping the Get Error messages are generated immediately by the Axis when they are raised.

Can anyone with experience clear this up for me? Thanks!

Hi @kizmit99, thanks for your feedback. After investigation, I’ve decided to simply remove that entire column. As noted at the bottom by the **, the master can request data from the ODrives by sending that message with the rtr bit set, then it receives the same message from the axis.

The errors aren’t immediately generated by the Axis, but the heartbeat is constantly send and contains the state machine state. If the drive is supposed to be in CLOSED_LOOP (0x08) but goes to IDLE (0x01), there will be an error.

The CAN protocol needs and will get some TLC.

1 Like

Thank you - exactly what I needed to know.