There is quite a bit of wiggliness on my drawing bot. While it is a bit adorable as it draws, I wanted to see if I could improve the line quality. I thought increasing the the rate at which I updated the position would make it smoother. I took it all the way up to 48Hz, but was not getting much better quality than I did at a 1/4 of that.
I little research into analog servos brought some possible solution to light. Analog servos are controlled with a PWM signal. The PWM pulse should be between 1ms and 2ms and repeat at 50Hz.
The basic technology inside an analog servo has been around longer than I have. The circuit converts the signal pulse into a voltage based on it’s length. The output shaft is coupled to a potentiometer which also outputs a voltage. These two voltages are compared to produce an error voltage. The error voltage would be positive or negative based on which direction off the output shaft potentiometer is from the input signal voltage. This voltage is sent through an amplifier and then to the motor. The motor turns in the proper direction until the error voltage is zero.
One problem with this method is the voltage to the motor is proportional to the error voltage. The motor will have very little torque when the error is small, as would occur with small moves.
To keep the servo from being overly sensitive to small changes changes in the pulse length, the servos have a deadband. Over sensitivity would cause jittering and use a lot of power. The deadband is expressed in microseconds (us). Analog servos typically have a 5us deadband. If the error is less than the deadband, the servo will not move.
If the servo pulse range is 1ms to 2ms or a 1000us range, then this causes the second problem. A 1000us range divided by the 5us deadband is 200. This means I basically have to move more the 1/200 of the usable range to get it to move. The full range is 180° so I have roughly 1° resolution. That will cause lines to look very jittery.
Try this to get a feel for an analog servo. With the servo receiving a commanded position, attempt to rotate the output. You will notice two thing. First you will notice the strength of the servo is proportional to how far you twist it off the commanded position. The second thing to notice is noise and vibration. That vibration is the 50Hz PWM period.
Digital Servos use the same same basic input method (1ms to 2ms pulse) to preserve backward compatibility, but everything is done digitally. Additionally, most of the servo’s parameters can be programmed. The digital circuit does not need to be limited to the 50Hz period and the control loop can be more sophisticated than simply using the error voltage.
The two immediate things I can take advantage of is lowering the deadband. I can program it down to 1us or on some servos even lower. This give me a 5x improvement in resolution. The other thing is the higher torque at small moves.
Try this to get the feel for a digital servo. With the servo receiving a commanded position, attempt to rotate the output. You will notice two thing. First you will notice the strength is very strong regardless of how far you twist it. The second thing to notice is noise and vibration. That vibration is going to be a much higher pitch.
The results are subtle, but I think it is better. With no changes to the firmware it got a little better. I changed the update rate from 50Hz to 200Hz and it got a little better again.
I used Hitec HS5055MG servos. I wanted a brand name servo, I know I could program. Out of the box the servo only had about 90deg of rotation. I was able to up that to about 178. I was quite surprised I could not get 180°. That needed to be accounted for in the kinematic or the shapes are distorted.
I think if you want the best, go for the digital, but in my opinion, the improment in quality did not justify the cost.