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 で全文を読む →

JuxiTech Wiki で開く