Los servomotores de bus serie FEETECH son soluciones de servomotores de alto rendimiento y rentables diseñadas para robótica, automatización y proyectos de bricolaje. Utilizan el protocolo de comunicación propietario FT-SCS, compatible con comunicación TTL de bus único y RS485, lo que permite controlar varios servomotores mediante un solo bus.
Características principales
Protocolo de comunicación
- Compatibilidad de comunicación dual: Compatible con TTL (alta velocidad) y RS485 (fuerte inmunidad a interferencias)
- Comunicación dúplex asíncrona: Utiliza un modelo de interacción de pregunta-respuesta entre el controlador y el servomotor
- Control de bus multiservo: Se pueden conectar hasta 254 servomotores en un solo bus, cada uno con una ID única (0-253)
- Configuración predeterminada: Baud rate de 1M, 8 bits de datos, 1 bit de parada, sin paridad
- Control de difusión: La ID 254 se puede usar para enviar comandos a todos los servomotores simultáneamente
Modos de control
- Modo servo de posición: Control de posición preciso con resolución de 0,087°
- Modo de velocidad constante: Control suave de velocidad para aplicaciones de rotación continua
- Modo de lazo abierto PWM: Control PWM directo para regulación de velocidad personalizada
- Modo paso a paso: Control de posición por pasos para aplicaciones de precisión
Protección & monitorización
- Protección contra sobretemperatura
- Protección contra sobretensión/subtensión
- Protección contra sobrecorriente
- Protección contra sobrecarga
- Retroalimentación en tiempo real de posición, velocidad, carga, voltaje y temperatura
Ejemplo básico de control
A continuación se muestra un ejemplo sencillo en Python que demuestra cómo controlar un servo FEETECH a través del puerto serie:
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()
Resumen de la tabla de memoria
Los servos FEETECH cuentan con una estructura completa de tabla de memoria para configuración y monitoreo de estado:
| Región | Descripción | Persistencia |
|---|---|---|
| Información de versión | Versión de firmware, información de hardware | Solo lectura |
| Configuración EPROM | ID del servo, baud rate, límites de ángulo, parámetros PID, configuraciones de protección | Persiste después del apagado |
| Control SRAM | Interruptor de torque, posición objetivo, velocidad de rotación, límite de torque | Se restablece al apagarse |
| Retroalimentación SRAM | Posición actual, velocidad, carga, voltaje, temperatura, estado | Solo lectura en tiempo real |
| Parámetros de fábrica | Parámetros de calibración, límites de rendimiento | Solo lectura |
Comandos comunes
| Comando | Valor | Función |
|---|---|---|
| PING | 0x01 | Consultar el estado de funcionamiento del servo |
| READ DATA | 0x02 | Leer datos de la tabla de control |
| WRITE DATA | 0x03 | Escribir datos en la tabla de control |
| REG_WRITE | 0x04 | Escritura asíncrona (se ejecuta con el comando ACTION) |
| ACTION | 0x05 | Activar todos los comandos REG_WRITE en cola |
| SYNC_WRITE | 0x83 | Escribir sincrónicamente en varios servos a la vez |
| RESET | 0x0A | Restablecer el estado y los parámetros del servo |

