I’ve been working on driving small 1407 motors with the ODrive 3.6
Specs:
Poles: 12
Voltage: 7.4 ~ 11.1V -> powered via ODrive and 48v power supply with 7.3A peak current
Current: <12A
RPM/V: 3500kv
Encoder: 5056 CPR
My results have been quite varied and I seem to be going in circles and am hoping for some help.
I can run odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION without any issues
Output:
pole_pairs = 6 (int)
calibration_current = 5.0 (float)
resistance_calib_max_voltage = 5.0 (float)
phase_inductance = 1.2657435945584439e-05 (float)
phase_resistance = 0.16441135108470917 (float) <- I get 0.3 Ohms between the phases with a multimeter)
Encoder index search works well too. It makes the nice saw tooth profile when viewed on the plotter.
But the problems seem to happen when I enter odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
If I try position, velocity, or trapezoidal control, the same thing happens:
I enter the mode, set the setpoint and it starts to move towards the goal. Then along the trajectory it just stops moving entirely. There is still current going to the motor (verified with plotting and a multimeter on the power supply to the ODrive) but it isn’t spinning. Sometimes it will do a couple of moves but without fail it just stops turning.
I’ll go back in to IDLE then try closed loop again but it won’t spin (the set point plot does change). It just sends current.
If I run ENCODER_OFFSET_CALIBRATION again without rebooting, then it seems to reset the system and it will spin towards a set point again (but then freeze again as well).
When it does freeze, there is never an error thrown, it just stops moving
I’ve tried:
- 2 different encoders (and they are not slipping, they respond fine to manual moves)
- Adding 47nF caps on all the encoder lines
- Large and small gains for pos and vel gains (vel_int is set to 0).
- Increasing current limit from 5->10A
- doubling PLL up to 2000
- Setting config.calib_range up to .9
- Erasing and re-configuring
- rebooting and full power cycling
- changing from 60 to 15 requested_current_range = 15.0f; // [A]
No combination seems to have resolved the issue.
I’m hoping someone can help guide me towards a simple fix!
Thanks and stay safe,
Matt