If someone is using a servo motor and realize that the dead band is disturbing the operation:
The MG-995 Motors I bought came with the AA51880 chip, this controller has a feature that allows you to change the deadband. Just change the value of a resistor.
The setting resistor is described in the datasheet by the RBD code:
(4) Pulse Stretcher
The difference between the servo control signal and the feedback signal is the error signal.
This error signal is used to toggle the direction the current flows through the servo. The
function of this pulse stretcher is to “stretch” the small error signal long enough and increases
the duty cycle to the motor for it can maintain sufficient holding force. The circuit also
implements a “dead band” function that prevents servo jitter and hunting. This is a range over
which differences between the input and reference signals will not cause servo operation.
When the signal differences exceed this “dead band” range, drive to the motor occurs. servo’s
drive shaft. The dead band will change according to the value of resistor connected to the RDB
pin.
Originally my MG995 came with a 2k Ohms resistor. But in my tests the best value was only 750 Ohms.
As there is a good amount of internal space, it worked to leave a multi-volt potentiometer, but it would be better to have a SMD resistor of size 0603.
Note: Caution when using a resistor with a value below 750 Ohms, because the current of consumption may be very large, I used a source of only 1A to test. With very low resistor value, the servo motor may not obey the commands, the motor can be locked until the power is restarted.
The dead band is noticed simply:
1- First have the servo go in the direction of 0 ° or below the desired point.
2- Then have it go to the desired point (90 °).
3- Take note the position.
4- Repeat in the reverse order, move to 180 °, or above the desired point.
5- Then push again to the same desired point (90 °).
6- Note the position again.
7- Compare the two annotated positions. This angle between these two marks is the dead band.
Test:
/* Sweep
by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 45; pos <= 90; pos += 1) { // goes from 45 degrees to 90 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(50); // waits 50ms for the servo to reach the position
}
delay(2000); //
for (pos = 135; pos >= 90; pos -= 1) { // goes from 135 degrees to 90 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(50); // waits 50ms for the servo to reach the position
}
delay(2000); //
}