Bad M0 channel on brand new ODrive controller

I finally got all the parts to set up the ODrive Controllers, 2-D5065 ODriver motors with 2-8192 CPR AMT102-V encoders, etc. I ordered from ODrive web site and it looks like the controller has a “bad?” M0 channel; as I mentioned, I have two motors with encoders, etc. and both work perfectly fine on the M1 channel, but NOT on the M0 channel. On M0, it doesn’t even get passed the calibration phase; it just makes a hard click and AFTER THAT, the ODrive is not able to make connection to the USB port unless I reboot and power cycle the controller; I tried on mac, linux box and raspberry pi 4 and all display same behavior. I’ve verified that the cabling, connectors, etc. are good as I switched all to the M1 channel and they all work fine on that channel. I went thru the docs and reset the configuration with no change; also ran the dump_errors(odrv0) command and it shows ALL no errors. Please advise on how to proceed, what tests to run or what specific info is needed to further troubleshoot. Thanks in advance on any info anybody can provide to move forward and fix the problem or replace the controller board.

Have you tried calibrating the motor only, with the encoder disconnected? (you should get a ‘beep’ noise from the motor, while the ODrive measures its resistance and inductance).
If this works then it points to an EMC issue e.g. ground loops or wiring issues, such as noise being fed back down the encoder wires.
If it still doesn’t, then it points to a problem with the board itself.
As a sanity check, you could also try calibration without even a motor connected. You should get ERROR_PHASE_RESISTANCE_OUT_OF_RANGE, but the ODrive shouldn’t disconnect from USB.

What messages do you get in sudo dmesg -w on linux?
I’d be interested to know if the board still responds to the UART commands…
What firmware version do you have?

1 Like

OK, I tried calibrating the motor only with the encoder disconnected and got pretty much the same result…that is, i hard click and i can’t successfully execute any commands unless i power cycle the ODrive. I tried a couple of times with the same result, just a hard click, i don’t hear the beep that is generated when calibrating. Again, M1 port works just fine!
Then, I tried with the motor disconnected it looks like it executes the line and takes me to the next python line, then i run dump_errors(odrv0) and i get AXIS_MOTOR_FAILED and ERROR_PHASE_RESISTANCE_OUT_OF_RANGE. The version of the firmware on the board is: v0.5.1-dev

Hmm. Are the config on m0 and m1 exactly the same?
You could either reset to defaults (erase_config, save_config, reboot) or else you could try odrivetool backup-config and then open the file in a good text editor that supports JSON pretty-print, swap the config over between axis0 and axis1 and see if the error moves round.
Or, just carefully check the output of axis0.motor.config and axis1.motor.config

1 Like

Yes, the config on both m0 and m1 are the same; i executed erase_config and even manually verified all the settings were identical

Sounds good, I’ll generate the JSON files and swap between axis0 and axis1; i’ll even carefully check the output of axis0.motor.config and axis1.motor.config; I’ll post results…

this is the output genrated by sudo dmesg -w after i tried to calibrate the motor

All parameters are EXACTLY the same!

The ‘failed to set dtr/rts’ is probably normal for a virtual serial port, so the last message is when it connected, meaning the port is still connected (so the ODrive is responding on some level). If you disconnect USB and reconnect without resetting the ODrive, do you get the same messages, or do you get the device descriptor read/64 error, or do you get nothing at all in dmesg?

Also, which protocol are you using over USB? Did you change to ascii protocol in tup.config instead of native?

1 Like

I have not made any changes to the ascii protocols…again, the motors/encoders/cabling works fine on channel M1. I’ll try disconnecting / reconnecting USB without resetting the ODrive.

BTW, Thank you for letting me know about the odrivetool backup-config; that is such an awesome utility, makes troubleshooting so much easier :slight_smile:

OK, i continue to get the failed to set dtr/rts messages; but if i don’t execute any other odrive command, i can just reboot [odrv0.reboot()]; i can, then “re-execute” the calibration command, still, i only get a hard click and can’t successfully execute any other command. If i try for example, odrv0.axis0.cotor.config.vel_limit, the odrive “locks” up. if I connect/reconnect the USB it prints the message “Oh no odrv0 disappeared”, but it does NOT establish connection again, unless i power cycle the odrive.

i do get the descriptor read/64 error as well, see attached…

Any other things to try? what’s the process to follow to have the controller replaced by a new one?

That’s very strange… You say that after an attempted calibration on axis 0, the ODrive will respond to the ‘reboot’ command, but will not respond to the dump_errors command? :thinking:
Have you tried any firmware other than 0.5.1-dev? Did you get the same issue with the stock firmware? or did the board ship with this version?

@PJohnson or @madcowswe might be able to shed some more light - they are the guys who can replace your board if needed. I’m just a user like you.

Are you running from a battery or a power supply?

1 Like

Sounds like it’s crashing when enabling sending current to the motor, not just when enabling M0… have you tried swapping the two motors to see if it follows the motor?

towen, THANK YOU for such awesome help, i thought you were part of the support team, if there’s one, didn’t realize you were a user as well :slight_smile: THANK YOU!
if I execute any other axis0-specific command after that, it’ll lock up, looks like any non-axis0 specific command, like system-related, etc. might work, haven’t tried many of them. dump_errors command works. I have not tried any other firmware version as i don’t have any problems with the other motor (axis1) commands. The board shipped with this version. After all this time I’ve spent on this, I’m hoping @PJohnson and @madcowswe send a new board, i cannot afford to spend any more time troubleshooting anymore, have lots of projects to be done :frowning:
@PJohnson @madcowswe please chime in. Thank you!

yes, i’ve changed the motors and either motor displays same behavior, but all work fine on M1. But, once i try to calibrate M0 and it fails (makes a hard click) and any axis0 command locks ODrive. I have to power cycle ODrive. M1 works fine, i’ve swapped motors, encoders, even wiring (to eliminate a bad connector) and ALL work fine on M1.

i’m powering the set up with a 24V/20A power supply.

Hi @ryanez can you please email info@odriverobotics.com with a link to this thread and a description of the problem? Thanks