Some Servo Problems
I ran into some servo problems a while back that I haven't had time to try to fix. The first one turned out to be a programming error where I was using a byte data type to hold too much data. I'm finding that the C-like programming of the Arduino is very limited, and it's taking some getting used to from my experience with more fully featured Perl/PHP languages that I'm used to.
The second thing was that one of the servo motor brass gear shafts kept popping off the plastic servo output shaft. I fit the 1/4" o.d. brass tubing over the slightly less than 1/4" servo drive shaft by expanding the brass tubing slightly. The problem was that the alignment between the servo and the end of the brass tubing was off slightly causing the tube to "walk" off of the plastic shaft as it rotated. I took my micrometer and measured the vertical and horizontal variations from back to front on all the servos. Most of them were off by .02" at most (which is about the size of a mechanical pencil lead) and shouldn't be a problem, but the one, in particular, was off by .06" and was causing problems. I removed some rubber mounting bushings which allowed a little more wiggle on the servo mounting and now it's within the .02" variance as the others. So far, so good.
I also found that for large movements the servos did well, but for small adjustments (10 degrees in Arduino) it didn't always do well in repositioning. I thought that there might be too much friction in the gear shafts for the servo torque to overcome, so I tore everything apart again and applied a little oil to all the brass. It helped a bit but still didn't solve the problem. Then I remembered that these servos are rated something like 5-7 volts, and I had been running them on 5 volts. After bumping up the power supply to 6 volts, everything seems to be in order.
I wrote a quick program to help me calibrate the servo motors to the various clock positions. I plan to do this initially by altering the low and high PWM values for the servos. The factory recommendation is between 900 and 2100 milliseconds, but each servo is a little different (gotta love analog!) By altering these values slightly I can get the servo start and end positions very close to each other. The next step will be to validate the intermediate positions and see if additional adjustment factors are needed to get each servo to reliably move to each of the 12 clock positions.
Comments
Post a Comment