I successfully calibrated the first engine. After I moved on to the second. When I applied the command odrv0.axis1.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE, a click was heard. Now the controller is not detected in the device manager, the LED is off. There are no visible damages on the board. Parsing the wiring, I found that the phase terminals of the wires of the second motor were not tightened.
I found a malfunction in the second motor. There is a contact between the ends of the phase wires and the shaft by the motor. My couplings and the shaft of the motor and encoder are made of metal, which provides contact. At the encoder, the gnd wire and the shield wire are connected together according to the instructions, which provides contact between the encoder shaft and its gnd wire. Thus, after applying voltage to the motor winding No. 2, the current through the shafts went into the encoder gnd wire, and through it to the gnd connector on the controller. Tell me, if you do not combine the gnd wire and the screen wire on the encoder, will this be a working solution? What can now be done with my controller after such an error? What components on the board are affected?
I applied 24 V and 1 A to the input terminals. Using fax paper, I determined that component U3 is very hot. U3 - LLVB (LP5907MFX-3.3) voltage regulator, 3.3V, 250mA. I also rang the rest of the components on the board with a multimeter and marked with a blue marker those that showed a short circuit. Finish correctly checking the soldered parts.
I was able to disassemble the engine. One of the windings was sandwiched between the stator and the housing.
It seems you have had an unfortunate combination of issues:
- Your motor was faulty, as you’ve identified… Was this one from the ODrive shop or a different one?
- Your motor was not grounded. I always recommend that users have a fourth motor wire, between the metal chassis and the negative power supply terminal - that would have conducted the fault current back to ground and saved the ODrive.
Although I appreciate that many hobby motors (including the official ones from Oskar’s shop) don’t have much room to add a ground terminal. I sometimes scrape the anodisation off one of the screw holes and use a ring crimp.
- Your encoder is faulty? It should not be connecting the shaft to any of the signals. Ground should be the only permissible connection but even that is not a good practice for the encoder.
So, it would seem that the result is the encoder was connected to a motor phase output. Sadly this will have destroyed the main STM32 chip, along with the regulator that you identified, and possibly some other components as well.
There was another thread where someone had a similar problem: Dead odrive - damaged U8?
Hi Towen. I agree with you.
- The engine was bought on aliexpress.
- Unfortunately I do not have a ground line in the house.
- The encoder is currently giving an error ERROR_CPR_OUT_OF_RANGE. This is an encoder from a working M0 engine. I replaced the M0 encoder with a new one. No error. I have not yet tested the second encoder from the faulty M1 engine. I think both encoders died from a current breakdown in the encoder line on the board.
P.S. My chip is dead, it shows a short on the encoder connection line. I dropped the chip, I’m waiting for a new one to come. I would advise you to check new motors for current leakage. It will be good if the coupling for connecting the motor and encoder does not conduct current.
Another good reason to use a non-contact, magnetic absolute encoder!
Do you mean “on the motor housing”? Or do you mean that you live somewhere that does not have an earth connection on electrical outlets?
You don’t need it to be grounded to mains earth. Just connect the motor chassis to
V- on the ODrive power input.
I mean grounding (third wire) in a 220 V socket. Do you suggest connecting the case to the negative terminal of the power supply?
Post must be at least 20 characters
Tell me. Is it necessary to combine the wire shield with the encoder ground wire? It may be better to connect the shield of the encoder wire to the negative terminal of the power supply.
It shouldn’t make a lot of difference for the encoder (in terms of noise), since there is not normally any high current induced into its cabling.
However, for the rare case where damaged wiring causes a short circuit, it is better to conduct the fault current directly back to the power supply, instead of via the PCB.
So yes, if it’s simple to do, connect the shield to the negative terminal of the power supply.
Thanks for the help. This is fine in my case. Thus, it makes no sense to change the couplings and isolate the encoder shaft from the motor shaft. It is possible to ground the motor rotor through the encoder. If a breakdown occurs on the stator, the current goes to the rotor, then to the encoder shield and to the negative terminal of the power supply.
I managed to revive the controller! I replaced two components on the board: U3 - LLVB (LP5907MFX-3.3) and U2 - STM32F405RGT6. The firmware was successful, only the firmware version shows as 0.0.0 (odrv0.fw_version_major, odrv0.fw_version_minor, odrv0.fw_version_revision). The second odrive v3.6 56v controller helped me a lot, I compared the esr parameters of the components on the board. Now I have two boards, but the second one does not pass the calibration on the same engine. It might be worth flashing a second board.
Thanks for the help! Success!
Nice, glad it’s running!
I wouldn’t recommend that, btw.
Rather than relying on the encoder shield (which is connected to the motor stator only via several sets of bearings) I would include a heavy gauge wire directly from the motor chassis.
“bearing currents”, i.e. electric current flowing through a bearing, can be damaging to both the motor and encoder over time. You get tiny sparks between the balls and the ball-races, which causes arc-erosion.
It’s probably not an issue for you, since you’re using low power motors. But if your bearings wear out before their service life, you’ll know why.