I servomotori a bus seriale FEETECH sono soluzioni di servomotori ad alte prestazioni e convenienti progettate per robotica, automazione e progetti fai-da-te. Utilizzano il protocollo di comunicazione proprietario FT-SCS e supportano sia la comunicazione TTL su bus singolo sia RS485, consentendo di controllare più servomotori tramite un unico bus.
Caratteristiche principali
Protocollo di comunicazione
- Doppio supporto di comunicazione: Compatibile con TTL (alta velocità) e RS485 (forte immunità alle interferenze)
- Comunicazione duplex asincrona: Utilizza un modello di interazione domanda-risposta tra controller e servomotore
- Controllo multi-servo su bus: Fino a 254 servomotori possono essere collegati su un unico bus, ciascuno con un ID univoco (0-253)
- Configurazione predefinita: Baud rate 1M, 8 bit di dati, 1 bit di stop, nessuna parità
- Controllo broadcast: L'ID 254 può essere utilizzato per inviare comandi a tutti i servomotori contemporaneamente
Modalità di controllo
- Modalità servo di posizione: Controllo preciso della posizione con risoluzione di 0,087°
- Modalità velocità costante: Controllo fluido della velocità per applicazioni a rotazione continua
- Modalità open-loop PWM: Controllo PWM diretto per la regolazione personalizzata della velocità
- Modalità step: Controllo di posizione a step per applicazioni di precisione
Protezione & monitoraggio
- Protezione da sovratemperatura
- Protezione da sovratensione/sottotensione
- Protezione da sovracorrente
- Protezione da sovraccarico
- Feedback in tempo reale di posizione, velocità, carico, tensione e temperatura
Esempio di controllo di base
Di seguito un semplice esempio in Python che mostra come controllare un servomotore FEETECH tramite porta seriale:
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()
Panoramica della tabella di memoria
I servomotori FEETECH dispongono di una struttura completa di tabella di memoria per la configurazione e il monitoraggio dello stato:
| Regione | Descrizione | Persistenza |
|---|---|---|
| Informazioni sulla versione | Versione firmware, informazioni hardware | Sola lettura |
| Configurazione EPROM | ID servomotore, baud rate, limiti angolari, parametri PID, impostazioni di protezione | Persiste dopo lo spegnimento |
| Controllo SRAM | Interruttore di coppia, posizione target, velocità di rotazione, limite di coppia | Resettato allo spegnimento |
| Feedback SRAM | Posizione corrente, velocità, carico, tensione, temperatura, stato | Sola lettura in tempo reale |
| Parametri di fabbrica | Parametri di calibrazione, limiti di prestazione | Sola lettura |
Comandi comuni
| Comando | Valore | Funzione |
|---|---|---|
| PING | 0x01 | Interrogare lo stato operativo del servomotore |
| READ DATA | 0x02 | Leggere i dati dalla tabella di controllo |
| WRITE DATA | 0x03 | Scrivere dati nella tabella di controllo |
| REG_WRITE | 0x04 | Scrittura asincrona (eseguita sul comando ACTION) |
| ACTION | 0x05 | Eseguire tutti i comandi REG_WRITE in coda |
| SYNC_WRITE | 0x83 | Scrivere sincronamente su più servomotori contemporaneamente |
| RESET | 0x0A | Resettare lo stato e i parametri del servomotore |

