I am designing a drive that outputs an RPM of about ~350, with output torque of about ~10 mNm. I found a cheap motor that provides this torque (plus more for insurance), but the speed at rated voltage is much higher than I want. I calculated that a 30% duty cycle would give me the design torque and RPM I want. I am just concerned that I would be running the motor too slowly. I know that the microcontroller that sends the PWM signal has a limit on the minimum duty cycle I can apply, but I am wondering what, generally, is a good rule of thumb for practical minimum duty cycles applied to a motor (since if a motor moves too slowly, the friction, momentum, etc may change and it may not behave in the expected deterministic manner). To put it short, is 30% too low? Or should I be more concerned about the ratio between rated speed and design speed?
Electronic – a good rule of thumb for practical minimum design duty cycle for a PWM DC motor controller
duty cyclemotorpwmtorque
Related Solutions
You seem to be confused about what you want. If you want to decrease the motor speed, but you still want maximum torque, then you must apply full rated electrical power to the motor, and put a mechanical brake on the motor until it slows to the speed you desire. Or, you must somehow make your motor less efficient. I don't think that's what you want.
Think of it this way: electrical power is the product of current \$I\$ and voltage \$E\$:
$$ P = I E $$
Mechanical power is the product of torque (\$\tau\$, in newton-meters) in and angular velocity (\$\omega\$, in radians per second):
$$ P = \tau \omega $$
A motor is an electrical to mechanical power converter. The mechanical power always equals the electrical power after losses.
Furthermore, current is proportional to torque, because the more current you apply, the stronger the magnetic field inside the motor, and the attraction between the motor's poles becomes greater.
If the mechanical and electrical powers are correlated, as are the current and torque, then voltage and speed must be, also. And they are, because the faster the rotor spins through the stator field, the greater back-emf it will generate. This is Faraday's law of induction.
So, if you want to decrease speed, decrease voltage. If you want to decrease torque, decrease current. If you increase torque (say by putting a brake on the motor), you are increasing motor torque. But if you don't change the supply of electrical power, then the mechanical power also won't change. If torque increased, the only way to keep mechanical power constant is to decrease speed, so the motor slows down.
There is one kink here: as torque goes up, current goes up. The resistive losses in the motor also go up, because the windings have some resistance, and those resistive losses are proportional to the square of the current:
$$ P = R I^2 $$
So, as current goes up, the resistive losses increase, making the motor a less efficient converter of electrical energy to mechanical energy, because some of that electrical energy is now creating heat. If you stall the motor, then the motor reaches 0% efficiency: speed is zero, so mechanical power must be zero, but the motor is drawing a ton of current, and there is a voltage drop over the winding resistance, so electrical power is very high.
Interesting fact: if you can make a motor with no winding resistance (or other losses), and you connect it to a perfect voltage source, then the speed regulation (how much speed changes with torque) is perfect. That is, the motor won't slow down if you try to stop it: it will just draw exactly enough more current from your battery to keep spinning at the same speed, no matter what.
PWM is all irrelevant to this. PWM motor control is just a way to efficiently apply less than the full battery voltage to the motor. It works because a PWM driven motor is equivalent to a buck converter. Changing your PWM duty cycle is equivalent to changing your supply voltage:
The maximum torque you could have (which you will get when the motor is stalled) is limited by the current your power supply can supply and the losses in the motor, just as it is without PWM. Your PWM driver might add a bit of resistance to the circuit, reducing the current and torque a bit, but usually this isn't significant compared to the resistance of the motor windings.
The plot you shared seems quite similar to the one using diode freewheeling shown here. As you are using a H-bridge with active freewheeling I would guess that could be related to falling and propagation delays on the MOSFETs; during transitions you gonna have a period when only the diode is freewheeling. Try adding a dead-time on your PWM generation, you can use TIMx_BDTR for that matter.
From 1 it also seems like lower gate currents tend to add non-linearity, so changing the gate resistors for lower ones might help.
But, as you said, the gearbox fluid would add non-linearity. Try driving the motor without the gear and checking the speed. If speed control is paramount open-loop control is discouraged. Speed feedback using a encoder and PID algorithm controlling the PWM would be good approach, as seem here.
Best Answer
Let me preface my answer with a disclaimer: All of my experience PWM'ing motors is with speed control of cooling fans. Your application will certainly differ, at least a little bit.
The way I find the minimum duty cycle, I look for the minimum that will allow the motor to start spinning. With standard muffin fans, this is about 40%. Then I add a small margin just to be safe. I find this by applying 0% duty cycle and slowly ramping it up until the motor starts spinning.
This startup power is higher than the amount of power required to keep the motor spinning once it has already spun up. With fans, this is somewhere in the 20-30% range. In other words, if I wanted to spin a fan really slow, I would have to apply 40% to get it moving and then I could back down to 20-30%.
Normally, just to be safe, I do not go below the startup power. That way I can be sure that the motor is spinning, although it does limit the minimum speed that I can do.
There are problems with this, however. Many things can affect the startup power requirements. Temperature, motor loading, age, dust, different motor lots, etc. You have to take all this into account, and built in some power margin.
Alternatively, you have to monitor your motor through a tachometer or something similar. Then have some motor control software do the appropriate thing if the motor is spinning too fast or too slow. Good motor control software will automatically take into account the startup power and other things.
If you don't want to write motor control software then you have little choice but to empirically measure what the startup power requirement is for your system and then add some more for margin. And hope that you added enough.