Sunday, September 03, 2006


What appears to be a major unanticipated problem with shaft-encoded gearmotors...

It annoys me that I am so slow at times. This morning I have been working with the 16F877A dual-motor control board. I've been slowly working my way through the kinks and hijinks of getting two motors driven by a PWM cycle driven by a single timer with the two necessary duty cycles being set by their respective CCP modules. I don't think that too many people have been down this path before, including maybe even the people at Microchip.

Anyway, I was reversing rotational directions and testing the limits for the speed range that I could get on the motors running them in this configuration. I was able to get a high of about 5v and a low of about 0.94v with the 16F628A on the old board and I've been pushing and shoving the technology to at least match this.

I was staring at the two gearmotors and set one at a very high rotational speed and another at as low a rotational speed as I am able to get when I had a very unpleasant epiphany.

Here it is folks: Shaft encoded gearmotors have upper and lower rotational limits, right?

The high limit usually isn't much of a problem. What I hadn't seen before is that the lower limit very definitely is.

I happened to be visualising a threaded positioning table for the XY axes. Both Reiyuki and Vik's designs came to mind. I thought of extruding sloped lines on an xy plane thereon.

Then it hit me. If the lower rotational limit isn't zero varying smoothly to the upper limit, there are two whole sheafs of shallow sloped lines that you can't extrude.

You can, of course, turn off one axis and let the other run at any speed. Holding that speed, however, and starting up the other axis you won't be able to extrude a shallower sloped path than the slowest speed of one axis divided by the fastest speed of the other.

That's a disaster.

How quickly can you start and stop a motor.

What happens if you try to turn the motor at it's slowest speed for .1 seconds, then coast?

The goal should not be "Move motor X at speed A, and motor Y at speed B), it should almost always be, "Make sure motor X is positioned over point A, and motor Y is positioned over point B." Just make (A,B) follow a line. All you need to worry about then is the sample points accurate enough, and are the motors responsive enough.

Maybe you can try something. Instead of seeing what the slowest you can get a motor to run continuously, see if you can find out the shortest distance that a motor can move at it's slowest speed and still come to a stop; I.E:

1. Stop motor.
2. Measure position.
3. Start motor.
4. As soon as any motion is detected, Stop motor.
5. Measure position difference.

How far does it move? If it only moves at most .2mm, you'll still have better than .1mm accuracy.
What you describe was the first alternative operation mode that I came up with. I had a short nap and then came up with a much better idea that I will be blogging in a few moments. See if you don't agree.
Post a Comment

Links to this post:

Create a Link

<< Home

This page is powered by Blogger. Isn't yours?

Subscribe to
Posts [Atom]