# 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? Commented Jan 28, 2022 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. Commented Jan 28, 2022 at 2:05
• @SystemTheory I'm measuring 0.6hz with rotary position sensor and 20ms control loops. tr.farnell.com/murata/sv01a103aea01r00/… Commented Jan 28, 2022 at 2:12
• @DKNguyen So what do you suggest? Commented Jan 28, 2022 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. Commented Jan 28, 2022 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. Commented Jan 28, 2022 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. Commented Jan 28, 2022 at 3:09
• @glen_geek Thank you for your answer. I will try this suggestion. Commented Jan 28, 2022 at 3:27
• What does the negative resistance effectively do? Commented Jan 28, 2022 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. Commented Jan 28, 2022 at 12:33