You are on page 1of 7

Multiservo Shield

1. Introduction

1.1. Features
● Completely eliminates the problem of servo jitter
● Provides 18 servo outputs, occupying only 2 Arduino outputs: SDA and SCL
● A separate power supply for the servos
○ The ability to power Arduino with power of the servo drives
○ The maximum current for servos is 10 A
● 6 three-wire direct connectors with Arduino
● Power supply voltage range
○ 3.3 ... 5.5 V for a digital circuit
○ ≤12 V for a servo power chain
● Range of operating temperature: -40 ° C ... + 85 ° C
● Range of storage temperature: -65 ° C ... + 150 ° C
● Idle current in the control circuit: 15 mA

1.2. Application
● Controlling spider-robots
● Controlling a robotic arm

1.3. Description
Multiservo Shield​ is an expansion board for Arduino Uno, which allows you to manage 18
servos with just two I²C outputs of the Arduino interface. To control these servo drives, there
is a special controller on the board. This helps to eliminate any servo jitter, which is always
present when the servo is controlled directly from Arduino. The board has a separate power
supply for the servo and the control circuit.

2. Location and terminal assignment

Output Description

0 ... 17 Output to the servo

D2, D3, D5, D6, D7, D8 Outputs from Arduino Uno

PWR + Servo power, “+”

PWR- Servo power, “-“

PWR JOIN Jumper combining power supply units

ICSP Interface to update module firmware


3. Application

3.1. Basic information


To start using the Multiservo Shield, it is enough to install it on your Arduino, apply power to
the “PWR” terminal or install a jumper on “PWR JOIN” pins and connect at least one servo.
3.2. Example of a simple connection

multiservo_minimal.ino

#include <Wire.h>
#include <Multiservo.h>

Multiservo servo;

void​ setup(​void​)
{
servo.attach(​17​);
}

void​ loop(​void​)
{
servo.write(​90​);

delay(​1000​);
}

MultiservoSweep.ino

#include <Wire.h>
#include <Multiservo.h>

Multiservo myservo;

int​ pos = ​0​;


void​ setup(​void​)
{
Wire.begin();
myservo.attach(​17​);
}

void​ loop(​void​)
{
​for​ (pos = ​0​; pos <= ​180​; pos += ​1​) ​// goes from 0 degrees to 180 degrees
{ ​// in steps of 1 degree
myservo.write(pos); ​// tell servo to go to position in variable 'pos'
delay(​15​); ​// waits 15ms for the servo to reach the position
}
​for​ (pos = ​180​; pos >= ​0​; pos -= ​1​) ​// goes from 180 degrees to 0 degrees
{
myservo.write(pos); ​// tell servo to go to position in variable 'pos'
delay(​15​); ​// waits 15ms for the servo to reach the position
}
}

3.3. Example of connecting simultaneously to Arduino and Multiservo

multiservo_warduino.ino
#include <Wire.h>
#include <Servo.h>
#include <Multiservo.h>
Servo arduino_servo;
Multiservo multi_servo;

void​ setup(​void​)
{
arduino_servo.attach(​7​);
multi_servo.attach(​7​);
}

void​ loop(​void​)
{
arduino_servo.write(​90​);
multi_servo.write(​90​);

delay(​1000​);
}

3.4. Example of spider connection


It’ll be your homework to write the control code for the spider connection.

4. Detailed description

4.1. Inbuilt ATmega48PA microcontroller


The Multiservo Shield is an intelligent device: there is a microcontroller on the board, which
accepts commands in the I²C interface from Arduino Uno and executes them.

4.2. Getting rid of servo jitter


An inbuilt microcontroller uses interrupts to work with the servo. It accepts commands only in
the background mode, i.e. if it’s time to send a pulse to the servo while the command is
being accepted, the transmission of the command breaks off. Therefore, the servos
connected to Multiservo do not jitter in the quiescent state as it happens in the case of
connecting them to Arduino. The jitter is caused by fluctuations of the duration of the pulse,
delivered by Arduino; fluctuation occurs due to the presence of external interrupts that
compete with interrupts, which control the servos. In the Multiservo Shield in ATmega28PA,
no interrupts are used other than those that are necessary for the servo drives, so this
module is devoid of signal fluctuations.

The result of this approach is the need to resend the command if the Multiservo Shield was
busy during the first transmission of the command. The number of attempts to send data can
be set in a special function of the library.
Multiservo serv;
serv.setSendAttempts(​4​);​// Try to send the command 4 times

4.3. Multiservo Library


To make the work with the Multiservo Shield similar to direct work with the servo, the
Multiservo library needs to be supplied. The Multiservo interface is no different from the
standard Servo interface. At the same time, pin numbers that are transmitted to the “attach”
function are the pin numbers on the Multiservo Shield board, but not Arduino.

4.4. 6 additional outputs for servos, three-wire sensors and modules

The board has 6 connectors to connect in the three-wire interface, and their control lines are
drawn directly from Arduino. These connectors are labeled as “Dn”. Each control terminal on
the “Dn” connector corresponds to the “n” output on the Arduino board (e.g., “D3” → “3”).

5. Power recommendations

Servos require powerful currents to operate, so the preferred method of powering is a


separate power supply for the servos. It is also worth noting that low-power supplies, like
Krona, are not suitable for servos. Try using Li-Ion, Ni-Mh or alkaline power supplies.

Power can be identified by the light of the LEDs. The “μON” LED lights up when power is
applied to the digital section of the module, whereas “PON” lights up when power is applied
to the power section.
6. Specifications
Parameter Min Nom Max Units

Voltage supply of 3.3 5.5 V


the control
section

Voltage supply of 6 V
the power section

Current 10 13 80 mA
consumed by the
digital part

Current 10 A
consumed by the
power section

Storage and -65 +150 °С


transportation
temperature

Operating -40 20 +85 °С


temperature

You might also like