SPI failure when commanding large currents

I have a Solo12 that consistently loses SPI communication if I command a rapid movement. It happens every time with the current limit set to 18 amps, and some of the time at 12 amps. 12 amps is pretty wimpy for trying to do anything dynamic.

When I command the movement (setting a moderate Kp), it reports error 15 from or more SPI channels.

How can I track down the cause? I have a 30A power supply and an oscilloscope confirms that input power doesn’t droop more than a volt during the movement.

Also, how can I make it work again other than by power cycling the robot and recalibrating the legs? It seems like a software reset should be possible.

I have some more clues after connecting to the serial port on the masterboard.

When any of the 6 drivers gets into this mode, the odri_control_interface code reports “SPI Receiver timeout”. This error code ultimately comes from this line: udriver_firmware/dual_motor_torque_ctrl.c at fc06efc38db4d0b187e48a6e5fe0c5643401173a · open-dynamic-robot-initiative/udriver_firmware · GitHub

I’m not sure how to debug past there.

My working assumption is that large currents on the ground wires are causing errors on the SPI bus, which is ground-referenced, and the system never recovers from it. Is there a description of how this is supposed to work?

Cranking the supply voltage up to 32V seems to solve the problem. The supply itself isn’t drooping, but the resistance in the wires (that came with the Solo12 from PAL, I think 5m x 16 AWG x 4 wires) is significant. The scope trace (5 V / div, 500 mS / div) measured right next to the DC60 connectors on the robot shows 2 dips: a small one when it starts up, then a jagged one when it attempts a jump. It droops about 6v, which seems to be enough to brown out the motor driver boards when starting from 26v.

What’s the limit on supply voltage? The lowest rating I see is 50 V, due to two 25 V caps in series on the motor driver board. The MOSFETs are 60 V, which should probably be safe to run up to 40 V.