FEETECH Serial Servo – 製品紹介

FEETECH シリアルバスサーボ – ロボティクス、オートメーション、DIY プロジェクト向けの高性能サーボソリューション
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 サーボの状態とパラメータをリセット

その他のリソース

この記事は要約です。完全な技術ドキュメントは Wiki でお読みください。

Wiki で全文を読む →

Feishu Wiki で開く