V3.6 56Volt loses output to M1

I have this running on 48V battery and occasionally M1 will stop output to motor windings. Encoder output from M1 is still working, and dump_errors(odrv0) does not show any errors. There is just no voltage on any of the motor phases for M1.

Resetting power to the Odrive resolves the problem immediately, however M1 will dropout again after an unpredictable amount of time.

M0 does not have any issue.

Is my board toast?

Hm, where’d you get this board from? That’s definitely strange. Could your encoder be slipping?

Bought it direct from the Odrive store a couple years ago. I don’t think the encoders are slipping as I can watch the linear travel on each motor in Ardurover/Mission Planner.

I could be mistaken on what I’m watching however.

How are you measuring the output? What does Iq_setpoint/Iq_measured say?

Just using a dmm, checked in DC and AC and measure 0V. I’ll try to read Iq_setpoint/Iq_measured

Generally you can assume a DMM won’t give anything useful for the output of an inverter like this – definitely would just recommend checking what the ODrive self-reports as its desired output current (Iq_setpoint) and actual output current (Iq_measured)

I definitely agree a DMM won’t give USEFUL numbers, but when M0 is giving measureable output and the motor spins and M1 gives 0V output and the motor doesn’t spin, I think thats meaningful. I’ll try to read the iq numbers tomorrow

I setup the laptop on the Lawnbot to get these Iq_setpoint & Iq_measured values. Used liveplotter with this command:
start_liveplotter(lambda: [odrv0.axis0.motor.current_control.Iq_setpoint, odrv0.axis0.motor.current_control.Iq_measured])

Ran it for half an hour and of course, now it worked without error.
Well at least I got some nice plots


Tomorrow I ho;e to plot the encoders as well, if it stops raining.

Would this be the correct command to plot M0 & M1 encoder inputs?
start_liveplotter(lambda:[odrv0.axis0.encoder.pos_estimate, odrv0.axis1.encoder.pos_estimate])

Was wondering why my M0 and M1 plots looked so same! Found out you can only have 1 liveplotter window as all windows display the same data.

Also tried encoder plot command
start_liveplotter(lambda:[odrv0.axis0.encoder.pos_estimate, odrv0.axis1.encoder.pos_estimate])
and found it just displays an incrementing number, not what I wanted as it is very hard to tell if the encoder drops out and stops incrementing.

How would I plot the actual encoder pulses?

Another thing I have been noticing for a while, on the first power on of the day, axis 1 will often throw a pile of errors:

axis1
axis: Error(s);
AxisError MOTOR FAILED
AxisError, ENCODER_FAILED
AxisError CONTROLLER_FAILED
motor: Error(s);
MotorError, UNKNOWN TORQUE
MotorError, UNKNOWN_VOLTAGE_COMMAND
DRV fault: none
sensorless estimators: no error
encoder: Error(s):
Encoder Error, ILLEGAL HALL STATE
controller: no error

I can reboot the odrive or reset power and it will work fine for hours. What would cause this?