Electronic – arduino – Minimise backlash in DC geared motor

arduinodc motorencodermicrocontroller

I am new here, I actually work on application programming.

As a hobby I started to work with arduino and dc motors. Soon I ended up with backlash problems. Right now I am using a rotary encoder which give 4000 counts per rotation.

This is with a 12v planetary geared dc motor. I also tried with spur geared motor.

I am able to control the motor. But it's not very precise. The difference between counts changes each time.

For example, when I try to stop motor at 2000 counts it will stop anywhere between 2004-2016 counts. This problem is due to backlash. I connected the encoder to motor shaft using a timing pulley.

What if I attach a disc to motor shaft and stop it using solenoid. Anyone ever tried something like that or any other inexpensive idea.

I am from India and I do not get precise products easily here. I can post pictures of setup if needed. I shall give up with DC motor and opt for stepper?

Best Answer

Why don't you use a control loop to integrate out the count error? You want to stop at 2000 and without a controller it stops at maybe 2010. If you had a feedback system it might overshoot up to 2016 but the feedback would bring the output shaft rapidly back to position 2000.

Can you live with this type of overshoot? More sophistication can be incorporated so that the motor begins to decelerate as position 2000 is reached. A 3 term controller might be what you need and the basic overshoot could be possibly halved or more.

However, if the optical encoder is not on the output shaft then it won't work.