How to decrease the motor Speed without losing the maximum Torque

Hi there,

I am using MDS40A motor driver(Cytron.io - Simplifying Digital Making) to drive a power window motor (12V, brushed motor) similar to the one at (Cytron.io - Simplifying Digital Making). I am using PWM generated by Arduino to control the speed of the motor. As I use lower value of PWM to get slower speed (the current gets reduced as well), the torque of the motor is drastically reduced. I am using Arduino Uno.

What I have understood is that with PWM, the voltage and current are not affected by the duty cycle. Torque depends on available current, while RPM depends on available current or amount of time it is ON. When the motor is ON, it resists load (accelerates) and when it's OFF it does not resist load (gets slowed by load/decelerates), hence RPM can be controlled by amount of time motor is ON, while torque stays at max due to max current at ON period.

I want to decrease the motor speed without losing the maximum torque. Can anyone help me on this? Can it be done with code?

What max current are you seeing? What is the motor's DC resistance?

I want to decrease the motor speed without losing the maximum torque.

I think a motor develops "maximum torque" at 0 rpm with maximum current applied. Anything different and the motor will probably not be developing "maximum torque".

Correcto Moondo 8)

If the motor is fairly large, it would have a fairly high inductance, meaning that a high PWM frequency may just be turned into heat by the coils. You could try reducing the PWM frequency so that the coils have more time to saturate during each cycle, just be aware that you may get more audible noise and more jerkiness if you do that. Arduino Playground - PwmFrequency explains how to change the PWM frequency of the arduino.
Another potential option would be to simply gear down the motor if space permits. This method will actually increase the torque of the motor.

You need a PID loop for RPM control
Look here DC motor control with PID - Exhibition - Arduino Forum

When mechanicaly loaded, the system will increase PWM in an attempt to maintain "actual speed" at "target speed" level.
This is the only way to run at low speed (20 RPM) while maintaining a high torque