Language
FEETECH 시리얼 버스 서보는 로봇 공학, 자동화 및 DIY 프로젝트를 위해 설계된 고성능, 비용 효율적인 서보 솔루션입니다. 자체 FT-SCS 통신 프로토콜을 사용하며 TTL 단일 버스 및 RS485 통신 방식을 모두 지원하여 단일 버스로 여러 서보를 제어할 수 있습니다.
주요 기능
통신 프로토콜
- 이중 통신 지원: TTL 레벨(고속) 및 RS485(강한 노이즈 내성) 통신 방식과 호환
- 비동기 양방향 통신: 컨트롤러와 서보 간 질의응답 방식의 상호 작용 모델 사용
- 멀티 서보 버스 제어: 단일 버스에 최대 254개의 서보를 연결할 수 있으며, 각 서보에 고유한 ID(0-253)가 부여됨
- 기본 구성: 1M 보드레이트, 데이터 비트 8개, 스톱 비트 1개, 패리티 없음
- 브로드캐스트 제어: ID 254를 사용하여 모든 서보에 동시에 명령을 보낼 수 있음
제어 모드
- 위치 서보 모드: 0.087° 분해능의 정밀 위치 제어
- 정속 모드: 연속 회전 애플리케이션을 위한 부드러운 속도 제어
- PWM 오픈 루프 모드: 맞춤형 속도 조절을 위한 직접 PWM 제어
- 스테핑 모드: 정밀 애플리케이션을 위한 단계 기반 위치 제어
보호 & 모니터링
- 과열 보호
- 과전압/저전압 보호
- 과전류 보호
- 부하 과부하 보호
- 위치, 속도, 부하, 전압, 온도의 실시간 피드백
기본 제어 예제
다음은 직렬 포트를 통해 FEETECH 서보를 제어하는 방법을 보여주는 간단한 Python 예제입니다:
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()
메모리 테이블 개요
FEETECH 서보는 구성 및 상태 모니터링을 위한 포괄적인 메모리 테이블 구조를 갖추고 있습니다:
| 영역 | 설명 | 지속성 |
|---|---|---|
| 버전 정보 | 펌웨어 버전, 하드웨어 정보 | 읽기 전용 |
| EPROM 구성 | 서보 ID, 보드레이트, 각도 제한, PID 매개변수, 보호 설정 | 전원이 꺼진 후에도 유지됨 |
| SRAM 제어 | 토크 스위치, 목표 위치, 회전 속도, 토크 제한 | 전원이 꺼지면 재설정됨 |
| SRAM 피드백 | 현재 위치, 속도, 부하, 전압, 온도, 상태 | 실시간 읽기 전용 |
| 공장 출하 파라미터 | 캘리브레이션 파라미터, 성능 제한 | 읽기 전용 |
일반 명령
| 명령 | 값 | 기능 |
|---|---|---|
| PING | 0x01 | 서보 작동 상태 확인 |
| READ DATA | 0x02 | 제어 테이블에서 데이터 읽기 |
| WRITE DATA | 0x03 | 제어 테이블에 데이터 쓰기 |
| REG_WRITE | 0x04 | 비동기 쓰기(ACTION 명령에서 실행) |
| ACTION | 0x05 | 대기 중인 모든 REG_WRITE 명령 트리거 |
| SYNC_WRITE | 0x83 | 여러 서보에 동시에 동기 쓰기 |
| RESET | 0x0A | 서보 상태 및 매개변수 재설정 |

