The last time I taught my high school robotics class I used RobotC to program TETRIX servos. The
RobotC API provides the functions
servoValue,
servo, and
servoChangeRate. From the documentation we learned that the only way you can be sure not to push your servo against a physical barrier and damage it is to avoid setting it to a position it can't reach. The easy programming also allowed us to avoid learning about how servos really work.
leJOS NXJ has tools for dealing with servos that afford a much better learning experience, in my opinion. The
leJOS API provides
setRange(),
setAngle(),
setPulseWidth(),
getAngle(), and
getPluseWidth(). At the very least you will need to call setRange and setAngle on servos. That's because setAngle depends on a range of movement having been set with setRange. With leJOS it behooves you to set servos to a safe range of movement before moving it around, and to do so you have to understand something about how pulse width modulation makes servos run. Two articles do an excellent job explaining how to servos work , one from
Jameco Electronics and one from
Science Buddies. But there is still a gap of information when it comes to using the setRange and setAngle methods. The documentation provides the following:
public void
setRange(int microsecLOW, int microsecHIGH, int travelRange)
"Set the allowable pulse width operating range of this servo in microseconds and the total travel range. Default for pulse width at instantiation is 750 & 2250 microseconds. Default for travel is 200 degrees. "
The parameters are defined as follows:
microsecLOW
- The low end of the servos response/operating range in microseconds
microsecHIGH
- The high end of the servos response/operating range in microseconds
travelRange
- The total mechanical travel range of the servo in degrees
To better understand what these values mean I created some diagrams that make clear the function of each parameter.
|
The minimum and maximum PWM allowed are 750 and 2250, but if you use these you are in danger of hitting the robot. |
|
If the servo horn is attached such that the servo's physical stops are tilted the arm can hit the robot even with a safe min and max PWM range. |
|
The third argument to setRange sets the number of programmable positions between the min and max limits. |
|
Setting the travelRange to 10, for example, will greatly reduce the precision it is capable of. |
No comments :
Post a Comment