Language
FEETECH-Serienbus-Servos sind leistungsstarke, kostengünstige Servolösungen für Robotik, Automatisierung und DIY-Projekte. Sie nutzen das proprietäre FT-SCS-Kommunikationsprotokoll und unterstützen sowohl TTL-Einzelbus- als auch RS485-Kommunikationsmethoden, sodass mehrere Servos über einen einzigen Bus gesteuert werden können.
Wichtige Funktionen
Kommunikationsprotokoll
- Duale Kommunikationsunterstützung: Kompatibel mit TTL-Pegel (hohe Geschwindigkeit) und RS485 (starke Störfestigkeit)
- Asynchrone Duplex-Kommunikation: Verwendet ein Frage-und-Antwort-Interaktionsmodell zwischen Controller und Servo
- Multi-Servo-Bussteuerung: Bis zu 254 Servos können an einem einzigen Bus angeschlossen werden, jeweils mit einer eindeutigen ID (0-253)
- Standardkonfiguration: 1M Baudrate, 8 Datenbits, 1 Stoppbit, keine Parität
- Broadcast-Steuerung: Mit ID 254 können Befehle gleichzeitig an alle Servos gesendet werden
Steuerungsmodi
- Positionsservo-Modus: Präzise Positionssteuerung mit 0,087° Auflösung
- Modus mit konstanter Geschwindigkeit: Sanfte Geschwindigkeitsregelung für kontinuierliche Rotationsanwendungen
- PWM-Open-Loop-Modus: Direkte PWM-Steuerung für individuelle Geschwindigkeitsregelung
- Schrittmodus: Schrittbasierte Positionssteuerung für Präzisionsanwendungen
Schutz & Überwachung
- Übertemperaturschutz
- Überspannungs-/Unterspannungsschutz
- Überstromschutz
- Überlastschutz
- Echtzeit-Rückmeldung von Position, Geschwindigkeit, Last, Spannung und Temperatur
Einfaches Steuerungsbeispiel
Nachfolgend ein einfaches Python-Beispiel, das zeigt, wie ein FEETECH-Servo über die serielle Schnittstelle gesteuert wird:
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()
Übersicht der Speichertabelle
FEETECH-Servos verfügen über eine umfassende Speichertabellenstruktur für Konfiguration und Statusüberwachung:
| Bereich | Beschreibung | Persistenz |
|---|---|---|
| Versionsinformationen | Firmware-Version, Hardware-Informationen | Schreibgeschützt |
| EPROM-Konfiguration | Servo-ID, Baudrate, Winkelbegrenzungen, PID-Parameter, Schutz-Einstellungen | Bleibt nach dem Ausschalten erhalten |
| SRAM-Steuerung | Drehmomentschalter, Zielposition, Laufgeschwindigkeit, Drehmomentgrenze | Wird beim Ausschalten zurückgesetzt |
| SRAM-Rückmeldung | Aktuelle Position, Geschwindigkeit, Last, Spannung, Temperatur, Status | Echtzeit-schreibgeschützt |
| Werksparameter | Kalibrierparameter, Leistungsgrenzen | Schreibgeschützt |
Häufige Befehle
| Befehl | Wert | Funktion |
|---|---|---|
| PING | 0x01 | Servo-Arbeitsstatus abfragen |
| READ DATA | 0x02 | Daten aus der Steuertabelle lesen |
| WRITE DATA | 0x03 | Daten in die Steuertabelle schreiben |
| REG_WRITE | 0x04 | Asynchrones Schreiben (wird beim ACTION-Befehl ausgeführt) |
| ACTION | 0x05 | Alle in der Warteschlange befindlichen REG_WRITE-Befehle auslösen |
| SYNC_WRITE | 0x83 | Gleichzeitig synchron an mehrere Servos schreiben |
| RESET | 0x0A | Servozustand und Parameter zurücksetzen |

