Maxon 272763 Motor

Hello,

I would like to use the Maxon 272763 with a HEDL-5540 encoder.

Summarising:

24V motor with 2.6A continuous, 18A peak
500CPT (2000 PPR) encoder
600RPM target velocity

When I try to use just the motor with an empty pulley , the motor has some noise regardless of the pos and vel tuning parameters, which leads me to believe there may be an issue with the current controller.

Would it be recommended to run this motor in gimbal mode in this application, or to tweak the current measurement parameters? I tried to change the current control range but that did not have much effect.

Thanks.

1 Like

Hi and welcome

Yes it sounds like you are approaching the current sensing resolution limit and that this may be the cause of your noise. Looking at the datasheet for your motor I see the terminal resistance of 1.27 Ω. For reference, most (large) brushless motors have phase resistance in the 20-30 milliohm range while gimbal motors tend to have a resistance closer to 10 Ohm. This places your motor somewhere in between a gimbal motor and a more typical large brushless motor.

Unfortunately, because your motor has both a relatively high kV (~350kV) and a relatively high resistance, gimbal mode is not a good choice either.

To quote from the odrive doc’s:

If you’re using a regular hobby brushless motor like this one, you should set motor_mode to MOTOR_TYPE_HIGH_CURRENT . For low-current gimbal motors like this one, you should choose MOTOR_TYPE_GIMBAL . Do not use MOTOR_TYPE_GIMBAL on a motor that is not a gimbal motor, as it may overheat the motor or the ODrive.

Further detail: If 100’s of mA of current noise is “small” for you, you can choose MOTOR_TYPE_HIGH_CURRENT . If 100’s of mA of current noise is “large” for you, and you do not intend to spin the motor very fast (omega * L « R), and the motor is fairly large resistance (1 ohm or larger), you can chose MOTOR_TYPE_GIMBAL . If 100’s of mA current noise is “large” for you, and you intend to spin the motor fast, then you need to replace the shunt resistors on the ODrive.

To me it sounds like your last option of replacing the current shunt is the way to go. How to do this and what value to use I am unsure and so this is a question for @madcowswe when he is available.

Thanks for the info. When looking at the Odrive, I mosty compared the peak current, but for Maxon motors this is always relatively high compared to the continuous current.

Maybe a followup question, is there I2T (like) motor protection, if I set the current limit to 18A? I did not see where to set the continuous and peak currents, only the limit.

1 Like

I’m not that familiar with how motor protection works with other motor controllers but with Odrive there is currently only one current limit you can set per motor that I am aware of.

There has been talk over on the discord channel in the past about a model based approach to estimating motor thermal performance but nothing has been started that I know of just yet. You may also be able to monitor your motors temperature by a thermistor in the near future but that is also not implemented at this stage.

Ah good to know, I’m mostly familiar with this type of peak/continous current drives: http://curvegen.kollmorgen.com/webhelp/workbench/English/Content/UsersManual/Motor%20I2t%20algorithm.htm?TocPath=Workbench%20User%20Manual|Configuring%20Motor%20Settings|_____8

I had some good results reducing the vibration by tuning the current loop, however it seems the values are not saved by calling odrv0.save_configuraton() or odrivetool backup-config. Is that known?

I have had the same problem from time to time. Try calling odrv0.reboot(), then change one of your gains and then call odrv0.save_configuration() again. If that still doesn’t work let us know.

if I’m reading the code correctly, none of the motor.current_control values are saved when calling save_configuration().

Furthermore, the p_gain and i_gain values are calculated based on phase_resistance and phase_inductance. Perhaps there is some noise throwing off the current controller, or the gains are calculated wrong for this motor.

With the current shunts that ship with ODrive, there is about 50-100mA RMS of noise on the current sensing. This is simply because 50mA through 500 micro-ohm is a very very tiny voltage, and noise creeps in. This means that with a reactive current controller, there will also be this much noise in the output current. On a motor with a low rated current, this means that the torque noise is large compared to rated torque, which gives a qualitatively poor acoustic and maybe also vibration performance.

To make sure you are getting the best results, make sure you request a range lower than 35A. You need to the save configuration and reboot to take effect.

If you want less acoustic noise beyond that, you can either reduce the current controller bandwidth with odrv0.axis0.motor.set_current_control_bandwidth(float bandwidth), (default: 1000 [1/s]). The downside is reduced available bandwidth for velocity and position control. This will update the current control P and I gains.

If you want to use a lower current range than 35A and hence get better resolution, you need to change the shunts. Pick the rang you would like (I_Range), and choose a current sense amplifier gain (10, 20, 40, 80). For low currents, I’d suggest to pick 10. Then you can compute the required shunt resistor value:
R = 1.6 * 0.9 / (Gain * I_Range). Pick the next lower available value, I personally like this series of resistors, but anything in the same package will do.

2 Likes

Thanks, just to check

R = 1.6*0.9/(10*6) = 0.024, next lower is 0.020 ohm, so I will go for the 20 milliohm.

Am I reading the code correctly that the amplifier gain will be set automatically by configuring the shunt resistance, and in this case setting requested_current_range to 6A?

Yes, correct on all counts ;D

Figure_1

It works! This is Iq_measured vs Iq_setpoint in response to me turning the motor shaft, with a pulley on it, by hand.

Now on to tuning. I hope the motor is strong enough for the axis I want to put it on.

1 Like