Language
FEETECH シリアルバスサーボは、ロボティクス、オートメーション、DIY プロジェクト向けに設計された高性能でコストパフォーマンスに優れたサーボソリューションです。独自の FT-SCS 通信プロトコルを採用し、TTL シングルバスと RS485 の両方の通信方式に対応しているため、1 本のバスで複数のサーボを制御できます。
主な特長
通信プロトコル
- デュアル通信対応: TTL レベル(高速)と RS485(耐ノイズ性に優れる)の通信方式に対応
- 非同期双方向通信: コントローラとサーボ間で質問応答方式の対話モデルを採用
- マルチサーボバス制御: 1 本のバスに最大 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 | サーボの状態とパラメータをリセット |

