Os servos de barramento serial FEETECH são soluções de servo de alto desempenho e com ótimo custo-benefício, projetadas para robótica, automação e projetos DIY. Eles utilizam o protocolo de comunicação personalizado FT-SCS, com suporte a métodos de comunicação TTL de barramento único e RS485, permitindo que múltiplos servos sejam controlados através de um único barramento.
Principais Características
Protocolo de Comunicação
- Suporte a Comunicação Dupla: Compatível com métodos de comunicação em nível TTL (alta velocidade) e RS485 (forte imunidade a interferências)
- Comunicação Duplex Assíncrona: Utiliza um modelo de interação de pergunta e resposta entre o controlador e o servo
- Controle de Múltiplos Servos no Barramento: Até 254 servos podem ser conectados em um único barramento, cada um com um ID único (0-253)
- Configuração Padrão: taxa de baud 1M, 8 bits de dados, 1 bit de parada, sem paridade
- Controle de Broadcast: O ID 254 pode ser usado para enviar comandos a todos os servos simultaneamente
Modos de Controle
- Modo Servo de Posição: Controle preciso de posição com resolução de 0.087°
- Modo de Velocidade Constante: Controle suave de velocidade para aplicações de rotação contínua
- Modo PWM em Malha Aberta: Controle PWM direto para regulação de velocidade personalizada
- Modo de Passo: Controle de posição baseado em passos para aplicações de precisão
Proteção & Monitoramento
- Proteção contra sobretemperatura
- Proteção contra sobretensão/subtensão
- Proteção contra sobrecorrente
- Proteção contra sobrecarga de carga
- Feedback em tempo real de posição, velocidade, carga, tensão e temperatura
Exemplo Básico de Controle
Abaixo está um exemplo simples em Python demonstrando como controlar um servo FEETECH via porta serial:
import serial
import time
# Inicializa a porta serial
ser = serial.Serial('COM3', 1000000, timeout=1) # Ajuste a porta COM conforme necessário
def calculate_checksum(data):
"""Calcula o checksum para o protocolo SCS"""
checksum = sum(data)
return (~checksum) & 0xFF
def ping_servo(servo_id):
"""Faz ping ao servo para verificar a conexão"""
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):
"""Define a posição alvo do servo com a velocidade especificada"""
# Posição: 0-4095 corresponde a 0-360° (ajuste conforme o modelo do seu servo)
# Velocidade: passos por segundo
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
# Exemplo de uso
if __name__ == "__main__":
servo_id = 1
# Verifica se o servo está conectado
if ping_servo(servo_id):
print(f"Servo ID {servo_id} connected successfully")
# Move o servo para a posição 2048 (posição central, aproximadamente 180°) a 1000 passos/seg
set_servo_position(servo_id, 2048, 1000)
print(f"Servo moving to position 2048")
time.sleep(2)
# Move o servo para a posição 0 (posição mínima, aproximadamente 0°) a 500 passos/seg
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()
Visão Geral da Tabela de Memória
Os servos FEETECH possuem uma estrutura abrangente de tabela de memória para configuração e monitoramento de status:
| Região | Descrição | Persistência |
|---|---|---|
| Informações de Versão | Versão de firmware, informações de hardware | Somente leitura |
| Configuração EPROM | ID do servo, taxa de baud, limites de ângulo, parâmetros PID, configurações de proteção | Persiste após o desligamento |
| Controle SRAM | Interruptor de torque, posição alvo, velocidade de operação, limite de torque | Redefinido após o desligamento |
| Feedback SRAM | Posição atual, velocidade, carga, tensão, temperatura, status | Somente leitura em tempo real |
| Parâmetros de Fábrica | Parâmetros de calibração, limites de desempenho | Somente leitura |
Comandos Comuns
| Comando | Valor | Função |
|---|---|---|
| PING | 0x01 | Consulta o status de funcionamento do servo |
| READ DATA | 0x02 | Lê dados da tabela de controle |
| WRITE DATA | 0x03 | Escreve dados na tabela de controle |
| REG_WRITE | 0x04 | Escrita assíncrona (executa com o comando ACTION) |
| ACTION | 0x05 | Dispara todos os comandos REG_WRITE enfileirados |
| SYNC_WRITE | 0x83 | Escreve sincronizadamente em múltiplos servos simultaneamente |
| RESET | 0x0A | Redefine o estado e os parâmetros do servo |

