DRV8302_temperature problem

Good afternoon. I use DRV8302 Shield and SimpleFOC .
Turnigy Multistar 5008 engine.
330KV
11 pole pairs
0.128 resistance

STM32
AS5047

I did a torque (hold) test in angle control mode.
However, when the torque reaches 0.5 N/M(2.5 Ampere) the motor starts to get very (very) hot, but it is designed for currents up to 30 Ampere, like the driver.
I know that SimpleFOC can’t control the current, so I do it myself with the voltage.
“L” command in the terminal.
My heating problem is with L2.0 and above.
I’m measuring the current with a multimeter. The power supply is 17 volts.

Tell me why a motor can get so hot, I know that this motor has already been used in many robotics and FOC projects and had much higher currents.
What could be the problem.
Thank you.

Hi @German_io.
How do you measure torque?
The value 0.5 N•m (do you mean N•m, right?) with only 2.5 A is strange in my opinion.
If you are measuring 0.5 Nm at about 2V, current will be about 16A.

DG

I use a scale with a motor to which a lever (0.1m) is attached and from the readings of the scale I determine the torque in the position control cycle as the static force of pressure on the scale.

Current measure with multimeter and battery

Hey @German_io,

I’ve got a really similar setup, but with a board I designed based on the DRV8305. I was wondering the same thing. I get around 0.25Nm with a 700kv motor and 3A and if I push a little bit more, such as 5-10A, the motor will get really hot. My guess is that this “30A” rating is given for ESCs and drone-like applications where the motor is spinning really fast and it’s cooling itself off. Also, with high RPMs the motor will generate enough back emf to counter a little bit the current passing through the coils.

How can I get the maximum holding current without overheating the motor?
The library does not have a current control cycle at the moment, right?

It doesn’t have current control loop at the moment, but I’m afraid the result would be the same. Right now what you’re doing is capping the maximum current at 2.5A by setting a maximum voltage, if the library supported current feedback you would just set a current limit. The only way to achieve maximum holding torque and not overheat the motor is to find the balance between how hot you’re willing to allow your motor to get and how much torque you need for your application. Adding a cooling fan near the motor and controller is an easy way to increase both.

Hey guys,
I don’t have too much experience with these motors but I would just like to point out few things that have been left unsaid.

Current control loop would only help you control nicer the transient behaviour of the current in between two torques you wish to achieve and it would give you a way to limit the torque ( current ).
It will not influence in any way the statical force application, like in your test setup at the moment.

The other thing I wanted to say is that these kinds of motors are misleading sometimes and you don’t feel how much current are you actually setting through the motor. Your motor has resistance of R=0.1 ohm, and if you put the voltage of V=2 volts on the motor you should have the current of:

I = U / R = 20 

Around 20 Amps, this is a lot of current. The motor needs to dissipate the heat of 20 watts.

Q = I^2*R = 20

And if it not moving it will get hot.
How certain are you that your multimeter is measuring the current well?

Motors are not designed to maintain the maximal torque in static positions or for a long time. So when testing the maximal torque, if this is not your application limitation, try testing the shorter time periods.

Last thing also, that you can try. Try ramping up you je voltage you want to put to the motor. It is possible that in the transient behaviour of the current when going from 0 to 2 volts it jumps even more that 30amps for some short time. So you can avoid this by doing a simple code to ramp the voltage applied during, one second, for example. This will reduce the current spikes.
Something like:

float ramped_voltage = 0;
float your_target_voltage = 2;
void loop(){
motor.loopFOC();
ramped_voltage= constrain(ramped_voltage + 0.001, 0, your_target_voltage );
motor.move(ramped_voltage);
}