# Brushed DC Motor Closed Loop Speed Control Under Load

I've designed a PI controller to control brushed DC motor speed between 0.6Hz - 6Hz (RPM:36 - 360). When I control the motor speed at 0.6Hz (approximately 4.0V supply and 60% PWM duty), it can rotate at target speed as I expected. But for this target speed (0.6Hz), when I apply a very small load, I can easily stop the dc motor (I think because of the low power, undervoltage etc.).
How can I solve this problem or increase torque for 0.6 Hz target speed?

• To make significantly more torque at lower speed you probably need to increase the gear ratio and run the motor at higher voltage and higher shaft speed. However if the torque and current only need to increase a slight amount then perhaps the problem is that there is not sufficient resolution in the feedback measurement of 0.6 hz speed? How many pulses per rotation does your speed sensor indicate? Or else how are you measuring the speed as 0.6 hz? Jan 28 at 2:02
• It's the nature of the beast. You can't run motors arbitrarily slow if you do not have control over the commutation which you do not in a brushed motor. Even when you have that control it is tricky. Jan 28 at 2:05
• @SystemTheory I'm measuring 0.6hz with rotary position sensor and 20ms control loops. tr.farnell.com/murata/sv01a103aea01r00/… Jan 28 at 2:12
• @DKNguyen So what do you suggest? Jan 28 at 2:15
• @Gkhan Gearbox is the typical solution. You could also try adding current into the feedback loop to try and maintain torque without stalling the motor. But the motor is probably going to run very rough if it does run since you have no control over the commutation. Jan 28 at 2:15

I have found that feed-forward compensation works well for brushed motors. It can maintain fairly constant speed, even at slow RPM.

From your motor specs, stall current is 17A, with 12V supply. This spec suggests that winding resistance plus brush resistance is $$\ 12V\over 17A\$$ or 0.7 ohms. A compensating resistance of -0.7 ohms is required for feed-forward compensation.

simulate this circuit – Schematic created using CircuitLab

The negative resistance is generated by sensing motor current with a current-sampling resistor, which generates a small voltage which you amplify. For every amp sensed, you would add to the DC supply 1.4 V.
This method is also applicable to PWM.

• I'm not sure I'd call that feed-forward. but yes it does work well. Jan 28 at 3:03
• @Jasen Perhaps not feed-forward, but I wish to distinguish it from conventional feed-back. It is possible to over-compensate with too much gain. In that case, more mechanical loading increases motor RPM. Jan 28 at 3:09
• @glen_geek Thank you for your answer. I will try this suggestion. Jan 28 at 3:27
• What does the negative resistance effectively do? Jan 28 at 5:23
• @DKNguyen Consider the simple motor model of a BEMF voltage source in series with a resistance (wire + brushes). BEMF voltage is proportional to RPM. When you add an external negative resistance, BEMF follows the driving voltage source more closely. If the external source is constant-voltage, so is RPM. This is true because resistance between two voltage sources approaches zero. Jan 28 at 12:33