飞特技串行舵机——产品介绍

FEETECH 串口总线舵机 - 适用于机器人、自动化和DIY项目的高性能舵机解决方案
语言

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)  # 根据需要调整 COM 端口

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"舵机 ID {servo_id} 连接成功")
        
        # Move servo to position 2048 (middle position, approximately 180°) at 1000 steps/sec
        set_servo_position(servo_id, 2048, 1000)
        print(f"舵机移动到位置 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"舵机移动到位置 0")
    else:
        print(f"连接舵机 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 重置舵机状态和参数

更多资源

本文为概述。请阅读维基上的完整技术文档。

阅读维基百科上的完整文章 →

在飞书知识库中打开