Language
FEETECH 匯流排伺服馬達是專為機器人、自動化和 DIY 專案設計的高效能、高性價比的伺服解決方案。它們採用客製化的 FT-SCS 通訊協定,支援 TTL 單匯流排和 RS485 兩種通訊方式,允許多個伺服馬達透過單一匯流排進行控制。
主要特色
通訊協定
- 雙通訊支援:相容於 TTL 電平(高速)和 RS485(強抗干擾)通訊方式
- 非同步雙工通訊:控制器與伺服馬達之間採用問答互動模式
- 多伺服匯流排控制:單一匯流排上最多可連接 254 個伺服馬達,每個伺服馬達具有唯一 ID (0-253)
- 預設配置:1M 鮑率,8 位元資料,1 位元停止位元,無同位校驗
- 廣播控制:ID 254 可用於同時向所有伺服馬達發送指令
控制模式
- 位置伺服模式:0.087° 解析度的精確位置控制
- 恆速模式:用於連續旋轉應用的平穩速度控制
- PWM 開環模式:用於客製化速度調節的直接 PWM 控制
- 步進模式:用於精確應用的基於步進的位置控制
保護與監測
- 過溫保護
- 過壓/欠壓保護
- 過電流保護
- 負載過載保護
- 位置、速度、負載、電壓和溫度的即時回饋
基本控制範例
以下是一個簡單的 Python 範例,示範如何透過串列埠控制 FEETECH 伺服馬達:
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 | 重置伺服狀態和參數 |

