In going over the BASIC Atom 'Bot code, and the SSC-32 manual, I came across this statement:
The positioning resolution is 0.09°/unit (180°/2000). From here on, the term
pulse width and position are the same.
And found these statements in the illustrations for normal and extended ranges:
1.5mS = 0° centered
0.9mS = -45°
0.5mS = -90°
2.1mS = +45°
2.5mS = +90°
If the resolution is 0.09°/unit, then shouldn’t -45° be 1.0mS, and +45° be 2.0uS?
Not a big point, but What I’d like to understand is why the angle (BASIC scaled) is not simply offset and multiplied by 0.09 (using an equivalent integer scaling) to arrive at the desired angle of the joint?
I understand the need to limit the “excursion” of the servo’s travel to what it and the attached hardware are capable of, but I’d expect the “scale” to be preserved.
I realize that the BASIC Atom program is NOT using floating point math. However the Pulse Min/Max constants could be calculated from the Angle min/max values to give accurately scaled pulse values. Or is this not necessary for some reason? Or maybe the above +45° and -45° position errors come into play somehow?
Of course this all assumes that the servo’s response to pulsewidth is linear. And obviously the servo’s overall accuracy is not that great. Mainly I’m just curious. I’m still trying to figure out what the /300 scaling in these two equations are for:
XPos2(Index) = -(DCoord * COS(DAngle + (Index * 43 + 21)) / 300)
ZPos2(Index) = -(DCoord * SIN(DAngle + (Index * 43 + 21)) / 300)
Maybe Luis has figured it out? Or Laurent Gay would care to comment?
Alan KM6VV