ETC FT639

FerretTronics Control Circuits http://www.ferrettronics.com/
FerretTronics FT639 Servo
Controller Chip
Data Sheet
General Description:
The FT639 is an RC servo controller chip. The FT639 will
control five radio-controlled servos through one 2400 baud
serial line. It has a footprint of only eight pins. The only
external components required are two resistors and a diode for
an normal RS232 line such as the one found on a personal
computer. No components are needed for a 0-5 volt serial line
such as those found on the Parallax Basic Stamp . Just
connect the servo control lines directly to the chip and connect
the serial in line from a 2400 baud, No parity, 1 stop bit serial
source, and five RC servos can be controlled, (see circuit
setup).
Applications:
Radio control servo motors are used in remote control model
airplanes, cars, and boats. They are widely available and can be
used in robotics, automation, animation, and many other tasks.
The problem with using RC servo motors in the past was the
ability to control them. With the FT639 this is no longer a
problem. It is possible now to control five RC servo motors
with just one 2400 baud serial line. Each of the five RC servos
is independently controlled.
Page 1 of 7
Voltage on V++:
3.0V - 5.5V
Voltage on 2400 Baud
In:
< = V++
Serial Line Setup:
2400 Baud, 8 Bit, No
parity, and 1 Stop Bit
FerretTronics Control Circuits http://www.ferrettronics.com/
Operations:
FT639 has two operating modes: Setup mode and Active mode.
The chip starts in Setup mode. Setup mode is used to set the
pulse length, header length and starting values for the 5 servos.
Active mode sends the control pulses to the servos and controls
the servos through the 2400 baud serial line.
Commands are sent to the FT639 through a 2400 baud, 8 bit,
no parity, 1 stop bit serial line. The commands are all one byte.
Each command is one character sent over the 2400 baud serial
line.
Each RC servo has 256 positions. To send the position of a
servo to the FT639 requires two commands. The first command
contains the servo number and the lower nibble (lower 4 bits)
of the positional number. The second command contains the
servo number and the upper nibble (upper 4 bits) of the
positional number.
The FT639 can set a typical servo in 256 different positions
from 0 to 90 degrees with the short pulse length, or can control
a typical servo in 256 different positions from 0 to 180 degrees
with the long pulse length. The starting position of the servo
can also be adjusted by using a different header length. The
header length can be adjusted in the setup mode.
Setup Mode:
The servo controller starts in Setup mode. The default settings
are the header is approximately 1ms with a short pulse length.
This will control a typical servo in 256 steps from 0 to 90
degrees.
Page 2 of 7
In setup mode the following settings can be adjusted:
1. Header length--this will allow adjustment of the starting
position of the servo. The default setting is 12.
2. Servo pulse length--this allows positioning control of
the servo between 0 to 90 degrees with the shorter pulse
length or positioning control of the servo between 0 to
180 degrees with the longer pulse length. The default
setting is short pulse length.
3. Initial setup of the servo positions--the FT639 will not
send positioning pulses to the servo in Setup mode.
However, positioning commands can be sent to the
FT639 while in setup mode to allow the servos to
energize in a known position. The default setting is
position 0.
The following commands can be sent in Setup mode:
Command
Binary
Value
Decimal
Value
Active Mode
01110101
117
Short Pulse
01010101
85
Long Pulse
01011010
90
The header length command is 0110xxxx, where xxxx is the
setting for the header length. The actual length of the header
will be different for the different pulse length as shown below:
FerretTronics Control Circuits http://www.ferrettronics.com/
Header
Value
Short
Pulse
Length
Long
Pulse
Length
Control Control
Byte
Decimal
Active Mode:
0
.147 ms
.237 ms 01100000
96
1
.219 ms
.357 ms 01100001
97
2
.291 ms
.477 ms 01100010
98
3
.363 ms
.597 ms 01100011
99
4
.435 ms
.717 ms 01100100
100
In Active mode the servo control pulses are sent to the servos.
The servos will be energized in this mode. There are only two
commands that are allowed in this mode. Positional commands
and the setup command. The setup command puts the FT639
back into Setup mode. The position of a servo can be changed
by sending a positional command. The positional commands
are sent in Active mode exactly the same as they were in Setup
mode (see instructions above). Sending a positional command
will make the servo move to the new position as soon as the
upper byte command is sent.
5
.507 ms
.837 ms 01100101
101
The following commands are available in the active mode:
6
.579 ms
.957 ms 01100110
102
Command
Binary
Value
Setup Mode
01111010
Decimal
Value
7
.651 ms
1.077 ms 01100111
103
8
.723 ms
1.197 ms 01101000
104
9
.795 ms
1.317 ms 01101001
105
10
.867 ms
1.437 ms 01101010
106
Positional Commands:
11
.939 ms
1.557 ms 01101011
107
12 1.011 ms
1.677 ms 01101100
108
13 1.083 ms
1.797 ms 01101101
109
14 1.155 ms
1.917 ms 01101110
110
To send a positional command to the individual servos, two
bytes must be sent. The first byte sent contains the lower nibble
of the position byte and the second byte sent contains the upper
nibble of the position byte. The lower byte command must be
sent before the upper byte command. The format for the bytes
are:
15 1.227 ms
2.037 ms 01101111
111
Lower Byte = 0sssxxxx
Upper Byte = 1sssyyyy
sss = Servo number:
Page 3 of 7
122
FerretTronics Control Circuits http://www.ferrettronics.com/
000 = servo 1
2
255 11111111
00011111
10011111
31
159
3
0 00000000
00100000
10100000
32
160
3
49 00110001
00100001
10100011
33
163
3
185 10111001
00101001
10101011
41
171
3
255 11111111
00101111
10101111
47
175
4
0 00000000
00110000
10110000
48
176
4
49 00110001
00110001
10110011
49
179
4
185 10111001
00111001
10111011
57
187
4
255 11111111
00111111
10111111
63
191
5
0 00000000
01000000
11000000
64
192
5
49 00110001
01000001
11000011
65
195
Decimal Value
5
185 10111001
01001001
11001011
73
203
Lower
Byte
5
255 11111111
01001111
11001111
79
207
001 = servo 2
010 = servo 3
011 = servo 4
100 = servo 5
xxxx = the lower nibble of the position byte
yyyy = the upper nibble of the position byte
A table is shown below with the Lower and Upper Byte for
various positional commands:
Binary Value
Position Value
Servo
Decimal
Value
Binary
Value
Lower Byte
(0sssxxxx)
Upper Byte
(1sssyyyy)
Upper
Byte
1
0 00000000
00000000
10000000
0
128
1
49 00110001
00000001
10000011
1
131
1
185 10111001
00001001
10001011
9
139
1
255 11111111
00001111
10001111
15
143
2
0 00000000
00010000
10010000
16
144
2
49 00110001
00010001
10010011
17
147
2
185 10111001
00011001
10011011
25
155
Page 4 of 7
FerretTronics Control Circuits http://www.ferrettronics.com/
Circuit Diagram:
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE
CONST
CONST
CONST
CONST
CONST
Note: For a serial line that has voltage from 0 to V++ requires
no diode resistor network. The line can be connected directly
to the serial-in pin on the FT639.
Example Code:
Other programming examples can be found at:
http://www.ferrettronics.com/software.html
SUB
SUB
SUB
SUB
SUB
servo1
servo2
servo3
servo4
servo5
(value
(value
(value
(value
(value
AS
AS
AS
AS
AS
INTEGER)
INTEGER)
INTEGER)
INTEGER)
INTEGER)
ACTIVE = 117
LONGPULSE = 90
SHORTPULSE = 85
HEADER = 96
SETUP = 122
' Opens COM Port 1 for sending out serial commands
OPEN
"COM1:2400,N,8,1,CD0,CS0,DS0,OP0,RS,TB2048,RB2048"
FOR RANDOM AS #1
' This command will put the FT639 in the setup
mode
PRINT #1, CHR$(SETUP);
' This command will put the FT639 in the long
pulse mode
PRINT #1, CHR$(LONGPULSE);
' This command will put the FT639 in the Short
pulse mode
'PRINT #1, CHR$(SHORTPULSE);
' This command will set the header at 3
PRINT #1, CHR$(HEADER + 3);
' This command will put the FT639 in the active
mode
PRINT #1, CHR$(ACTIVE);
'-----------------------------------' Loop to cycle through all positions
'-----------------------------------FOR i = 0 TO 255
'#########################################
'# This is a QBASIC programming example
'# For controlling the FT639
'#########################################
' Cause a delay
FOR J = 1 TO 100000
NEXT J
DECLARE SUB servoMove (servoNum!, value!)
' Moves the servos through all positions
Page 5 of 7
FerretTronics Control Circuits http://www.ferrettronics.com/
servo1
servo2
servo3
servo4
servo5
NEXT i
(I)
(I)
(I)
(I)
(I)
'-----------------' Positions servo 1
'-----------------SUB servo1 (value AS INTEGER)
DIM uV AS INTEGER
DIM lV AS INTEGER
uV = INT(value / 16)
lV = value - (uV * 16)
uV = uV + 128
PRINT #1, CHR$(lV);
PRINT #1, CHR$(uV);
END SUB
'-----------------' Positions servo 2
'-----------------SUB servo2 (value AS INTEGER)
DIM uV AS INTEGER
DIM lV AS INTEGER
uV = INT(value / 16)
lV = value - (uV * 16)
uV = uV + 128 + 16
lV = lV + 16
PRINT #1, CHR$(lV);
PRINT #1, CHR$(uV);
END SUB
'-----------------' Positions servo 3
'-----------------SUB servo3 (value AS INTEGER)
DIM uV AS INTEGER
DIM lV AS INTEGER
uV = INT(value / 16)
Page 6 of 7
lV = value - (uV * 16)
uV = uV + 128 + 32
lV = lV + 32
PRINT #1, CHR$(lV);
PRINT #1, CHR$(uV);
END SUB
'-----------------' Positions servo 4
'-----------------SUB servo4 (value AS INTEGER)
DIM uV AS INTEGER
DIM lV AS INTEGER
uV = INT(value / 16)
lV = value - (uV * 16)
uV = uV + 128 + 48
lV = lV + 48
PRINT #1, CHR$(lV);
PRINT #1, CHR$(uV);
END SUB
'-----------------' Positions servo 5
'-----------------SUB servo5 (value AS INTEGER)
DIM uV AS INTEGER
DIM lV AS INTEGER
uV = INT(value / 16)
lV = value - (uV * 16)
uV = uV + 128 + 64
lV = lV + 64
PRINT #1, CHR$(lV);
PRINT #1, CHR$(uV);
END SUB
'----------------------------------------------------------' Positions any servo given servo number and
positional value
'-----------------------------------------------------------
FerretTronics Control Circuits http://www.ferrettronics.com/
SUB servoMove (servoNum, value)
DIM uV AS INTEGER
DIM lV AS INTEGER
uV = INT(value / 16)
lV = value - (uV * 16)
uV = uV + 128 + (servoNum - 1) * 16
lV = lV + (servoNum - 1) * 16
PRINT #1, CHR$(lV);
PRINT #1, CHR$(uV);
END SUB
Page 7 of 7