VSA
 CONSOLE
 RAPU
 R&D
  Overview
  Projects
  How Servos Work
  How SSC's Work
  How DMX Works


 

The purpose of this article is to give an overview of how a Serial Servo Controller (SSC) works and to describe a common interface.  These servo motion controllers are used in many special effects, haunted houses, and other animatronic themed environments.  Visit our Projects page for examples of several animatronic projects.  Though we have taken steps to assure the quality of information here, Brookshire Software, LLC makes no guarantees about the information presented here.  Brookshire Software, LLC cannot be held liable or accountable for any use or misuse of the provided information.  


The MiniSSC II

The Mini-SSC (mini ssc) perfect for servo motion control through the PC or RAPU.

Used with Permission from www.seetron.com

A SSC is a device used to control several servos from a PC across a serial line.  VSA has been specifically engineered for the Scott Edwards Electronics MiniSSC II, the Robot Store's SMI, the Pontech SV203, the Parallax Servo Controller, and DMX devices.  We will start with the MiniSSC II.

The MiniSSC connects to the PC's communications port at 2400bps or 9600bps.  It accepts formatted data from the PC and converts it into PWM signals for the servos.  Each SSC can control up to eight servos and they can be linked together to control more servos.  The MiniSSC requires two power sources: 9-12v for circuitry and 5v for the servos.

Visit the MiniSSC II homepage for ordering and more information.

Interface

The MiniSSC requires three bytes to command one servo to a position.  First, a SYNC byte must be sent indicating the start of a sequence.  For the MiniSSC, the SYNC byte is 255 (or 0xFF) and it always represents a new sequence.  Next, the SERVO byte is sent.  The SERVO byte indicates which servo needs to be moved (it cannot be 255).  Finally, the POSITION byte is sent which tells the MiniSSC where to move this servo (it cannot be 255).  

[ SYNC ] [ SERVO ] [ POSITION ]

For example, sending "255, 1, 127" would move servo #1 to position 127 (the center point).  

The SSC command architecture is simple enough, but consider this: if your robot has 16 servos and runs for a period of just 3 minutes, you will need as many as 86,400 commands -- 259,200 bytes of data.  Click here to learn how VSA can handle the data in the background and create the illusion of a variable speed servo.

Timing

Notice that each command sequence requires 3 bytes, or 24 bits, of data.  At 9600 bps (bits/second), the MiniSSC can process 400 commands/second (or a command every 2.5mS).  If there are 8 servos on each MiniSSC, each servo can receive 50 commands/second (or every 20mS).

Timing is by far the greatest challenge for any animator.  Action must occur at just the right times at just the right speeds or the end result is simply poor.  Even if you spend hundreds of man hours perfecting your actions on one machine, when you go to run it on the presentation machine -- everything might be off.  Click here to see how VSA keeps the actions synchronized regardless of the computer.


The Pontech SV203X

Pontech SV203 - Perfect for servo montion animatronic control

Used with Permission from www.pontech.com

Pontech's SV203 series controllers are similar to the MiniSSC II.  The SV203X can communicate with the PC at 2400, 4800, 9600, and 19200bps through the serial port.  VSA uses the default 9600bps.

Each SV203 board can control eight servos and can be linked together in parallel to control more servos.  Each board requires one 6v supply, but the board can be reconfigured to use a separate 5v supply for the servos.  Additionally, the SV203X supports digital I/O and on-board programming (depending on the model).

Visit the Pontech homepage for ordering and more information.

Interface

The Pontech controller has a wide variety of commands, but of interest to us are the SV203 commands: "BD", "SV", and "M".  The "BD [ BOARD ]" command selects the current board; the "SV [ SERVO ]" selects a new servo; and the "M [ POSITION ]" command sends the currently selected servo on the currently selected board to the specified position.  Notice that, unlike the MiniSSC II, the commands are sent in ASCII and not binary.  

A typical command sequence might look like this

BD [BOARD] SV [SERVO] M [POSITION]

The board and servo numbers are one-based (i.e., the first board is number one and the first servo is number one).  The servo position can be between one and 255.  For example, the command "BD1SV3M127" moves the third servo on the first board to position 127.

Timing

As many as 10 bytes, or 80 bits, may be needed for each servo command position.  At 9600 bps (bits/second), the Pontech can process about 88 commands/sec (or a command every 11.3mS).  If there are 8 servos on the SV203, then each servo can receive about 11 commands/sec (or every 90.4mS).  

In the case of any servo controller, MiniSSC or SV203, timing will remain the greatest challenge.  Action must occur at just the right times at just the right speeds or the end result is simply poor.  Even if you spend hundreds of man hours perfecting your actions on one machine, when you go to run it on the presentation machine -- everything might be off.  Click here to see how VSA keeps the actions synchronized regardless of the computer.


The SMI

Mondotronic SMI - Perfect for halloween haunted hosues.

Used with Permission from www.robotstore.com

Mondotronics' Serial Motor Interface (SMI) uses the same protocol as the MiniSSC, but provides speed control for small DC motors.  When used with the Robot Store's Dual H-Bridge drivers, the SMI can control up to two motors at 9600bps.  

Visit the Robot Store homepage for ordering and more information.

Interface

The SMI requires three bytes to command one servo to a position.  First, a SYNC byte must be sent indicating the start of a sequence.  For the SMI, the SYNC byte is 255 (or 0xFF) and it always represents a new sequence.  Next, the MOTOR byte is sent.  The MOTOR byte indicates which motor's speed needs to be set (it cannot be 255).  Finally, the SPEED byte is sent (it cannot be 255).  

[ SYNC ] [ MOTOR ] [ SPEED ]

The SMI has several different modes of operation, depending on the type of motor setup.  VSA operates the SMI in "Mode 1 : Direction, Speed, and Limit Switches".  In this mode, SPEEDs 1-31 are slowest-fastest reverse, 33-63 are slowest-fastest forward, 32 and 0 are free running and breaking stop.  Since the SMI range is discontinuous, moving from 31 to 32 to 33 would have the motor going as fast as possible forward, then stopping, then as slow as possible in reverse.  Such operation is undesirable for events, so VSA automatically adapts to the discontinuous SMI range and interpolates events properly.


The Parallax Servo Controller

 

The Parallax Serial Servo Controller (P/N 28023) and the Parallax USB Servo Controller (P/N 28823) both control up to 16 standard hobby servos.  The serial controller requires a TTL serial line (not RS232), thus, conversion circuitry may be required for PC connection.  A conversion circuit is only required for the RAPU v3.0 and earlier.  The board also requires a +5V logic supply and a separate ~+5V servo supply.  The USB controller appears as a virtual serial port on the PC and can be used in exactly the same manner as the serial version.  Both devices support 2400bps and 38.4kbps connections. 

The Parallax USB Servo Controller should be installed as a Virtual Com Port (VCOM).  See the FTDI website for details (the Parallax USB Servo Controller should NOT be installed as a D2XX driver).  When installed properly, the device will show up as a "USB Serial Port (COMX)" in the Windows Device Manager.

Interface

The controller's 2400bps or 38.4kbps baud rate is set by serial command.  When VSA begins playback it may not know which baud rate the device is expecting.  Thus, VSA will send the "!SCSBR [BAUD RATE]" command at both baud rates in an attempt to configure the unit properly. 

Once the baud rate is configured, the Parallax controller expects a servo position ranging from 250-1250.  The command follows the format:

!SC [ SERVO ] [ RAMP ] [ LOW POSITION BYTE ] [ HIGH POSITION BYTE ] [ 0x0D ]

The RAMP speed determines how fast the servo attempts to move.  VSA already handles ramping speeds, so the RAMP parameter is automatically set by VSA.  The HIGH and LOW POSITION BYTEs define the actual position of the servo.

Conversion

The RS-232 standard defines an electrical specification (voltage and current) for communications.  Any device that supports RS-232 must be able to transmit and/or receive a logic one with a -3V to -25V signal and a logic zero with a +3V to +25V signal.  The Parallax controller expects a logic zero with a nominal voltage of +0V and and logic one with a nominal voltage of +5V.  Thus, the Parallax controller does not support RS-232.  In order to connect the controller's "misnomer RS-232" port to the PC, a conversion circuit is required.   This circuit will convert the PC's RS-232 transmit signal into a TTL positive serial signal compatible with the Parallax controller.  The RAPU v3.1 and later have a TTL output port and this circuit is not required.

rs232 to ttl conversion circuit (transmit only)


The Pololu USB 16-Servo Controller

The Pololu USB 16-Servo Controller can control up to 16 servos via USB or TTL serial input.  The USB interface requires drivers available from the manufacturer and appears to VSA as a standard communications port.  VSA supports the Pololu controller in both MiniSSC and Pololu modes.  When used as a serial port, the controller requires a conversion circuit.  The Pololu controller can be daisy chained using the TTL serial port.

Interface

In MiniSSC mode, the Pololu controller accepts commands compatible with the MiniSSC board. When in Pololu mode, VSA sends Pololu compatible commands to the controller.  VSA uses "Command 4: Set Position, Absolute" to control the servo positions.  This command has the format:

[ 0x80 ] [ 0x01 ] [ 0x04 ] [ SERVO ] [ HIGH POSITION BYTE ] [ LOW POSITION BYTE ]

The command type (third byte) and device ID (second byte) are fixed.  The LOW POSITION BYTE contains the lower seven bits of the position; the HIGH POSITION BYTE contains the upper seven bits of the position.  Position values range from 500 to 5500. 

When communicating with the Pololu controller using a different baud rate, the device must be rebooted.


The PicoPic

The PicoPic can be used both as a 20 channel servo controller and a digital output (relay) controller.  The PicoPic can be configured for several different baud rates and addresses using the manufacturer's configuration utility. The PicoPic can be daisy chained only by splitting the serial port from the PC.

Interface

The PicoPic Servo and Relay devices in VSA use the PicoPic command format:

[ BOARD ADDRESS ] [ SERVO ] [ HIGH POSITION BYTE ] [ LOW POSITION BYTE ] [ SPEED ]

The BOARD ADDRESS can range from 1 to 255.  The SERVO number ranges from 1 to 20.  VSA derives the board and servo address from the track address.  For example, servo 0 will be on board #1, servo #1.  Servo 21 will be on board #2, servo #2.  The position values range from 500 to 2500.  If a position value is zero or one, the servo output functions as a binary (relay) output of either +0V or +5V, respectively.  Notice that the PicoPic does not have any synchronization bytes.

VSA is designed to control the speed of servos internally and so the SPEED parameter is ignored.  Servos are commanded at the highest possible speed to allow VSA the greatest resolution.


The LynxMotion SSC32

The LynxMotion SSC32 controller is a 32-channel servo and/or digital output (relay) controller.  The SSC32 supports 2400, 9600, 38400, and 115200 bps baud rates (NB: only 2400, 9600, and 38400 are supported by the RAPU).  The SSC32 has on-board jumpers that make choosing separate power supplies (for logic and servo banks) easily configurable.

Interface

The SSC32 Servo devices in VSA use the SSC32's servo move command:

# [ SERVO NUMBER ] P [ ABSOLUTE POSITION ] [ 0x0D ]

The SERVO NUMBER ranges between 0-31 and the ABSOLUTE POSITION ranges from 500-2500.  Both the SERVO NUMBER and the ABSOLUTE POSITION are sent in plain text ASCII (not binary data).  The SSC32 Relay devices use the SSC32's discrete output command:

# [ SERVO NUMBER ] [ LEVEL ]

Sending a discrete output command to the SSC32 automatically disengages the servo output and places the line in a low or high state (LEVEL is either 'H' or 'L').


HOME  | VSA | CONSOLE | RAPU | R&D | COMPANY | SEARCH

VSA is a copyright of Brookshire Software, LLC. All other products mentioned are registered trademarks or trademarks of their respective companies.  

Questions or problems regarding this web site should be directed to webber@BrookshireSoftware.com.
Copyright © Brookshire Software, LLC. All rights reserved.