Les servos à bus série FEETECH sont des solutions de servomoteurs haute performance et rentables conçues pour la robotique, l'automatisation et les projets DIY. Ils utilisent le protocole de communication propriétaire FT-SCS, prenant en charge la communication TTL sur bus unique et RS485, ce qui permet de contrôler plusieurs servos via un seul bus.
Caractéristiques principales
Protocole de communication
- Double prise en charge de la communication: Compatible avec les niveaux TTL (haute vitesse) et RS485 (forte immunité aux interférences)
- Communication duplex asynchrone: Utilise un modèle d'interaction question-réponse entre le contrôleur et le servo
- Contrôle multi-servos sur bus: Jusqu'à 254 servos peuvent être connectés sur un seul bus, chacun avec un ID unique (0-253)
- Configuration par défaut: Débit de 1 Mbaud, 8 bits de données, 1 bit d'arrêt, sans parité
- Contrôle par diffusion (broadcast): L'ID 254 peut être utilisé pour envoyer des commandes à tous les servos simultanément
Modes de contrôle
- Mode servo de position: Contrôle de position précis avec une résolution de 0,087°
- Mode vitesse constante: Contrôle de vitesse fluide pour les applications de rotation continue
- Mode boucle ouverte PWM: Contrôle PWM direct pour une régulation de vitesse personnalisée
- Mode pas à pas: Contrôle de position par pas pour les applications de précision
Protection & surveillance
- Protection contre la surchauffe
- Protection contre les surtensions/sous-tensions
- Protection contre les surintensités
- Protection contre les surcharges
- Retour en temps réel de la position, de la vitesse, de la charge, de la tension et de la température
Exemple de contrôle de base
Voici un exemple simple en Python montrant comment contrôler un servo FEETECH via le port série :
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()
Vue d'ensemble de la table mémoire
Les servos FEETECH disposent d'une structure complète de table mémoire pour la configuration et la surveillance de l'état :
| Région | Description | Persistance |
|---|---|---|
| Informations de version | Version du firmware, informations matérielles | Lecture seule |
| Configuration EPROM | ID du servo, débit en bauds, limites d'angle, paramètres PID, réglages de protection | Persiste après la mise hors tension |
| Contrôle SRAM | Interrupteur de couple, position cible, vitesse de rotation, limite de couple | Réinitialisé à la mise hors tension |
| Retour SRAM | Position actuelle, vitesse, charge, tension, température, état | Lecture seule en temps réel |
| Paramètres d'usine | Paramètres d'étalonnage, limites de performance | Lecture seule |
Commandes courantes
| Commande | Valeur | Fonction |
|---|---|---|
| PING | 0x01 | Interroger l'état de fonctionnement du servo |
| READ DATA | 0x02 | Lire les données de la table de contrôle |
| WRITE DATA | 0x03 | Écrire des données dans la table de contrôle |
| REG_WRITE | 0x04 | Écriture asynchrone (exécutée sur commande ACTION) |
| ACTION | 0x05 | Déclencher toutes les commandes REG_WRITE en attente |
| SYNC_WRITE | 0x83 | Écrire simultanément sur plusieurs servos |
| RESET | 0x0A | Réinitialiser l'état et les paramètres du servo |

