Problems with 99:1 Metal Gearmotor 25Dx69L mm MP 12V with 48 CPR Encoder (#4867) and M3S550

I want to build a 3WD robot and use an ESP32 for it. I tested the motor with a power supply and without the M3S550 controller: it requires a minimum voltage of about 3 V and a current of 0.7 A before it starts rotating at 20 rpm. Once it is spinning, the current drops to about 0.1 A. After that, the voltage can be reduced to around 0.12 V (7 rpm) without the motor stalling.

When I control the motor through the M3S550 (I2C from the ESP32), it needs a maximum signal of 800 (mc.setSpeed(1, 800);) to start. It then runs at a maximum speed of 99 rpm. After that, it can be reduced to lower speeds using a PID controller. With any value below 800, the motor does not begin to rotate.

My question is: Why can’t the motor be started at lower speeds when using the M3S550? Do I need a different controller? Or do I need to operate the M3S550 with parameters other than the default settings?

Hello.

I would not expect any of the Motoron’s default settings to result in behavior like you described. When you try to start the motor with a speed argument other than 800, does the red error LED turn on? Please post the simplest complete program that demonstrates the problem.

Also, what are you using for your power supply? Can you look at what is going one with an oscilloscope to confirm the voltage applied at VIN is actually getting applied to the motor driver outputs both with and without the motor connected?

- Patrick

Thank you, Patrick, for your quick reply. I found my mistake. I’m using your I2CSimple.ino example from GitHub. In that example, the motor’s maximum acceleration is limited using mc.setMaxAcceleration and mc.setMaxDeceleration . As soon as I delete those lines, the motor starts turning at a speed argument of at least 140. That matches the behavior of the motor when I drive it directly with a voltage without the controller.
Thanks again for your help.

2 Likes