FEETECH Serial Servo - Product Introduction

FEETECH Serial Bus Servos - High-performance servo solutions for robotics, automation, and DIY projects
Language

FEETECH serial bus servos are high-performance, cost-effective servo solutions designed for robotics, automation, and DIY projects. They utilize the custom FT-SCS communication protocol, supporting both TTL single-bus and RS485 communication methods, allowing multiple servos to be controlled via a single bus.

Key Features

Communication Protocol

  • Dual Communication Support: Compatible with TTL level (high-speed) and RS485 (strong anti-interference) communication methods
  • Async Duplex Communication: Uses a question-and-answer interaction model between controller and servo
  • Multi-Servo Bus Control: Up to 254 servos can be connected on a single bus, each with a unique ID (0-253)
  • Default Configuration: 1M baud rate, 8 data bits, 1 stop bit, no parity
  • Broadcast Control: ID 254 can be used to send commands to all servos simultaneously

Control Modes

  • Position Servo Mode: Precise position control with 0.087° resolution
  • Constant Speed Mode: Smooth speed control for continuous rotation applications
  • PWM Open-loop Mode: Direct PWM control for custom speed regulation
  • Stepping Mode: Step-based position control for precision applications

Protection & Monitoring

  • Over-temperature protection
  • Over-voltage/under-voltage protection
  • Over-current protection
  • Load overload protection
  • Real-time feedback of position, speed, load, voltage, and temperature

Basic Control Example

Below is a simple Python example demonstrating how to control a FEETECH servo via serial port:

import serial
import time

# Initialize serial port
ser = serial.Serial('COM3', 1000000, timeout=1)  # Adjust COM port as needed

def calculate_checksum(data):
    """Calculate checksum for SCS protocol"""
    checksum = sum(data)
    return (~checksum) & 0xFF

def ping_servo(servo_id):
    """Ping servo to check connection"""
    command = [0xFF, 0xFF, servo_id, 0x02, 0x01]
    checksum = calculate_checksum(command[2:])
    command.append(checksum)
    ser.write(bytearray(command))
    response = ser.read(6)
    return len(response) > 0

def set_servo_position(servo_id, position, speed=1000):
    """Set servo target position with specified speed"""
    # Position: 0-4095 corresponds to 0-360° (adjust based on your servo model)
    # Speed: steps per second
    pos_low = position & 0xFF
    pos_high = (position >> 8) & 0xFF
    speed_low = speed & 0xFF
    speed_high = (speed >> 8) & 0xFF
    
    command = [0xFF, 0xFF, servo_id, 0x09, 0x03, 0x2A, 
               pos_low, pos_high, 0x00, 0x00, speed_low, speed_high]
    checksum = calculate_checksum(command[2:])
    command.append(checksum)
    ser.write(bytearray(command))
    response = ser.read(6)
    return response

# Example usage
if __name__ == "__main__":
    servo_id = 1
    
    # Check if servo is connected
    if ping_servo(servo_id):
        print(f"Servo ID {servo_id} connected successfully")
        
        # Move servo to position 2048 (middle position, approximately 180°) at 1000 steps/sec
        set_servo_position(servo_id, 2048, 1000)
        print(f"Servo moving to position 2048")
        
        time.sleep(2)
        
        # Move servo to position 0 (minimum position, approximately 0°) at 500 steps/sec
        set_servo_position(servo_id, 0, 500)
        print(f"Servo moving to position 0")
    else:
        print(f"Failed to connect to servo ID {servo_id}")
    
    ser.close()

Memory Table Overview

FEETECH servos feature a comprehensive memory table structure for configuration and status monitoring:

Region Description Persistence
Version Information Firmware version, hardware information Read-only
EPROM Configuration Servo ID, baud rate, angle limits, PID parameters, protection settings Persists after power off
SRAM Control Torque switch, target position, running speed, torque limit Reset on power off
SRAM Feedback Current position, speed, load, voltage, temperature, status Real-time read-only
Factory Parameters Calibration parameters, performance limits Read-only

Common Commands

Command Value Function
PING 0x01 Query servo working status
READ DATA 0x02 Read data from control table
WRITE DATA 0x03 Write data to control table
REG_WRITE 0x04 Asynchronous write (execute on ACTION command)
ACTION 0x05 Trigger all queued REG_WRITE commands
SYNC_WRITE 0x83 Synchronously write to multiple servos simultaneously
RESET 0x0A Reset servo state and parameters

More Resources