🧪 新教程持续更新中 · 从机械臂到传感器,跟着教程从零搭建
跳到主要内容

SCS0009 舵机调试与标定 ​

SCS0009 版本有两套调试内容:

  1. TTL 组装与中位调试:接线、设置舵机 ID、固定舵机臂、微调中位、运行测试。
  2. SCS0009 调试工具:Python + PySide6 GUI,扫描总线、读写全部寄存器、位置控制、波特率/恢复出厂、xdat EEPROM 备份。

协议寄存器细节见 SCS0009 协议内存表。
Arduino/扩展接线见 Arduino Nano。

一、TTL 调试:组装、ID 与中位 ​

首先,下载"灵巧手调试.zip"压缩包,解压后可通过"使用arduio程序调试灵巧手过程(TTL舵机)"文档进行舵机ID设置、标定、校准中位及演示程序运行,或 参考官方开源代码。

成品无拆卸情况下(出厂时舵机 ID、标定和中位已调好)可以直接跳到第 6 点 运行“02 演示程序”和手部追踪。

TTL 调试所需工具与接线

1. 调试灵巧手的接线方式 ​

一种是使用电脑运行python等上位机软件,如飞特舵机上位机或者python代码运行

一种是使用MEGA328P等单片机或自行购买的开发板或主控等

接线方式如下:

(1)python方式调试时的接线方式(只接舵机驱动板):

1. 调试灵巧手的接线方式 – 1

(2)MEGA328P开发板调试时的接线方式(舵机驱动板+328P开发板):

看清楚MEGA328P开发板的针脚位置!

1. 调试灵巧手的接线方式 – 2

1. 调试灵巧手的接线方式 – 3

1. 调试灵巧手的接线方式 – 4

1. 调试灵巧手的接线方式 – 5

下面描述的是使用单片机的调试过程,单片机本身是会不断循环演示程序的,只需断开数据线即可停止。

2. 设置舵机 ID ​

单个灵巧手共使用了8个舵机,右手 ID需要设置为1-8 ,左手 ID需要设置为11-18

中位校准 成品默认 右手[451,571,451,571,451,571,451,571] 左手[571,451,571,451,571,451,571,451]

1、连线:依次将 单个 舵机、舵机驱动板连接起来。

2.设置舵机ID – 1

2、使用舵机厂家提供的上位机软件FD1.9.8.2进行设置

FD.rar

2.设置舵机ID – 2

2.设置舵机ID – 3

2.设置舵机ID – 4

3. 固定伺服喇叭 ​

1、上传代码程序"安装白色伺服喇叭时使用" 到开发板中

该程序的作用:使舵机的齿轮位置处于一个大致居中的位置,后续的动作角度都是基于这个中间的位置进行的。

(1)自行安装软件arduino,根据自身系统参考安装教程,编译下载arduino程序的话,要先在 库管理器 里安装FTServo库、SCServo库

3.固定伺服喇叭 – 1

(2)开发板类型选:选择"Arduino Nano"

3.固定伺服喇叭 – 2

2、调试舵机1、2

(1)编辑:根据要调试的舵机ID,修改如下位置。如要调试食指,则设置ID值为1、2

3.固定伺服喇叭 – 3

(2)上传程序到开发板中

(3)连线:将开发板与舵机驱动板、1、2号舵机连接起来,可以听到舵机齿轮旋转一定角度后停止。

3.固定伺服喇叭 – 4

(4)将伺服喇叭安装在齿轮上,位置尽量保持平行

3.固定伺服喇叭 – 5

3、调试舵机3、4

(1)断开328P开发板与舵机驱动板之间的接线(否则无法上传)

(2)编辑:设置ID值为3、4

3.固定伺服喇叭 – 6

(3)上传程序到开发板中

(4)连线:将开发板与舵机驱动板、3、4号舵机连接起来,可以听到舵机齿轮旋转一定角度后停止。

(5)将伺服喇叭安装在齿轮上,位置尽量保持平行

4、调试舵机5、6

步骤同上

5、调试舵机7、8

步骤同上

4. 微调中间值 ​

1、上传代码程序"01 微调MiddlePos值时使用" 到 开发板中

2、手指处于闭合位置时,立即停止程序(断开数据线即可),并检查伺服喇叭是否正确对齐(如下图)。如果未对齐,调整程序中MiddlePos_1、MiddlePos_2的值,直到对齐为止。记录下该值(8个舵机对应8个值),最后的程序中要使用。

4.微调中间值 – 1

4.微调中间值 – 2

5. 运行测试程序 ​

1、将上面保存的MiddlePos_1、MiddlePos_2的值填入下面数组中,下载程序即可。

5.运行测试程序 – 1

6. 运行「02 演示程序」 ​

(1)自行安装软件arduino,根据自身系统参考安装教程

(2)在 灵巧手调试\00 TTL串口舵机\arduino程序(MEGA328P开发板)\02 演示程序目录下根据 左手还是右手 打开对应的ino文件

6.运行"02 演示程序" – 1

(3)编译上传arduino程序到开发板的话,要先在 库管理器 里安装FTServo库、SCServo库

6.运行"02 演示程序" – 2

(4)开发板类型选:选择"Arduino Nano"

6.运行"02 演示程序" – 3

(5)编译并上传

注意 此时电脑只单独连接到开发板,开发板先不连接到舵机驱动板(即不和灵巧手连接)

上传成功后,将开发板通过三根跳线连接到舵机驱动板上,舵机连接到舵机驱动板,参考 MEGA328P 开发板调试时的接线方式。

灵巧手会不断循环运行**"02 演示程序"**

运行结果如下:

6.运行"02 演示程序" – 4


二、SCS0009 调试工具 ​

适用于 Windows 10 / 11;Linux 与 macOS 的差异见第 8 节。本教程覆盖从环境安装到完整调试的每一步。

⚠️ 兼容性说明:本工具目前仅支持 Feetech SCS0009 舵机(SCS 系列,电位器位置反馈,10 位分辨率 0–1023)。寄存器表、xdat 参数格式均针对飞特 SCS0009 设计,其他品牌/型号不保证兼容。

1. 环境要求 ​

依赖版本说明
Python>= 3.8建议 3.10+,从 python.org 下载
PySide6>= 6.0GUI 框架
pyserial>= 3.5串口通信
系统Win10 / Win11任意版本

2. 安装 Python ​

  1. 访问 https://www.python.org/downloads/
  2. 下载 Python 3.10+ 安装包
  3. 安装时务必勾选 "Add Python to PATH"(否则命令行找不到 python)

验证安装:

bash
python --version

3. 安装依赖 ​

推荐在虚拟环境中安装,避免污染系统 Python:

bash
# 进入项目目录
cd SCS0009_ServoController

# 创建虚拟环境
python -m venv .venv

# 激活虚拟环境(Windows)
.venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt

⚠️ 虚拟环境只需创建一次。重复执行会覆盖原环境(清空已装依赖)。之后每次只需 activate 激活即可。

提示:激活后命令行前缀会出现 (.venv)。

4. 检查环境 ​

bash
python setup.py

看到 [OK] 环境检查通过,可以运行项目 即表示环境正确。

5. 连接硬件 ​

  1. 将 USB 转串口适配器(如 CH340 / CP2102)插入电脑
  2. 连接舵机控制器(机械臂控制板)
  3. 给舵机供电(建议 DC 5V 5A,Pro 版 DC 12V 5A)

打开设备管理器(Win+X → 设备管理器)确认串口号:

端口 (COM 和 LPT)
  └─ USB-SERIAL CH340 (COM3)     ← 你的舵机串口

记下 COM 号,启动程序时选择。

6. 启动 GUI ​

bash
python -m src.gui.factory_calibration_tool

或手动指定端口(串口被占用时):

bash
python -m src.gui.factory_calibration_tool --port COM3

查看可用端口:

bash
python -m src.gui.factory_calibration_tool --list-ports

7. 界面操作流程 ​

界面为单面板布局,窗口高度不足时自动出现滚动条,最大化时自适应拉伸。

7.1 串口连接 ​

  • 选择端口、波特率(默认 1M),点击 连接
  • 状态显示 🟢 已连接

7.2 扫描舵机 ​

  • 点击 扫描舵机,检测 ID 1-254 在线舵机
  • 扫描结果实时显示在舵机列表(带型号)
  • 点击舵机列表某行 → 自动填充到舵机下拉框

7.3 参数读写 ​

  • 读取参数:读取全部 44 个寄存器(EEPROM + SRAM),日志实时显示结果
  • 参数表:5 列展示(地址/寄存器/值/存储区域/读写),EPROM/SRAM/DEFAULT 颜色区分
  • 点选联动:点击参数表某行 → 自动填充"写入地址""长度""值"
  • 写入:修改值后点写入,程序自动解锁/写入/锁定
  • 写入结果弹窗:成功弹绿色提示"✅ 已成功写入",失败弹红色提示"❌ 写入失败"(含原因)

7.4 修改舵机 ID ​

  1. 总线上只接这一只待改 ID 的舵机,避免与已有 ID 冲突。
  2. 在参数表中找到“舵机 ID”(地址 0x05)行并选中。
  3. 把“值”改为目标 ID,点 ✏️ 写入;程序会自动解锁 → 写入 → 重新锁定。
  4. 改完重新扫描总线确认。右手用 1–8,左手用 11–18。

7.5 位置控制 ​

  1. 拖动滑块或直接输入目标位置(0–1023),数值框与滑块同步。
  2. 点 ▶ 移动,状态栏显示“移动中…”。
  3. 到位后提示“已移动完成,请关闭力矩”,点 ⏹ 力矩关。

7.6 波特率/恢复出厂 ​

  • 修改波特率:选择新波特率(38400–1000000 bps)后写入;程序会切换串口波特率并 ping 验证,失败自动回滚。
  • 恢复出厂:恢复为出厂默认(ID=1,波特率 1M),之后需重新扫描。

7.7 xdat 参数(仅保存 EEPROM) ​

  1. 💾 保存当前舵机:保存当前 ID 舵机的 EEPROM 参数到 xdat 文件(备份)
  2. 📂 打开 xdat:加载备份文件
  3. 📤 恢复参数到舵机:把备份写回舵机

8. Linux 与 macOS 差异 ​

Linux ​

  • 字体:sudo apt install fonts-noto-cjk fonts-noto-color-emoji,否则中文界面可能空白、emoji 显示为方块。
  • 串口权限:sudo usermod -a -G dialout $USER,注销并重新登录后生效;groups 应包含 dialout。临时可用 sudo chmod 666 /dev/ttyUSB0。
  • 设备名:/dev/ttyUSB*(CH340 / CP2102 / PL2303)或 /dev/ttyACM*(板载 USB 串口);用 lsusb、dmesg | grep -i tty 查制造商。
  • 固定设备名(可选):在 /etc/udev/rules.d/99-servo.rules 写 SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="ttyServo",之后用 /dev/ttyServo。
  • 启动:python -m src.gui.factory_calibration_tool --port /dev/ttyUSB0。
  • 常见问题:pip 报 externally-managed-environment 时用 venv,或加 --break-system-packages。

macOS ​

  • Python:建议用 Homebrew 安装 brew install python,不要用系统自带旧版本。
  • 串口命名:使用 /dev/cu.*,不要用 /dev/tty.*(后者可能阻塞);ls /dev/cu.* 查看。
  • USB 驱动:CH340 / CP2102 / FTDI 多数免驱;老批次 CH340 需装 WCH 驱动,可用 system_profiler SPUSBDataType 排查。
  • 启动:python -m src.gui.factory_calibration_tool --port /dev/cu.usbserial-0001。
  • Apple Silicon:用原生 Python 3.10+,避免 Rosetta 下的旧 Python;首次运行若提示“无法验证开发者”,到“隐私与安全性”中允许。
  • 省电:macOS 休眠可能断开串口,操作时保持唤醒。

9. 注意事项 ​

  1. 写入会持久化:参数写入 EEPROM 后原值被覆盖,无法撤销;修改前先用 xdat 备份。
  2. 供电稳定:供电不足会导致丢步、通信失败或舵机失联;按 SCS0009 接线与供电 的要求供电。
  3. 串口独占:同一端口不能被两个程序同时打开;使用前关闭串口监视器、上位机等其他占用程序。
  4. ID 修改风险:总线上只接一只待改 ID 的舵机;若改后失联,可尝试“恢复出厂设置”(ID 回到 1)。
  5. 过温/过压:工具会监控电压和温度(温度 > 60 °C 告警);持续高温时停机散热。
  6. 热插拔:拔掉 USB 后程序会尝试重连;重新插回后点刷新端口。
  7. Windows 控制台乱码:命令行工具出现 emoji 乱码时,设置 PYTHONIOENCODING=utf-8 后再运行。

10. 常见问题 ​

问题解决
找不到串口设备管理器检查驱动;换 USB 口;装 CH340 驱动
串口被占用关闭串口监视器等程序;重启工具
中文字体显示空白系统默认微软雅黑,若异常安装中文字体
舵机扫描不到检查供电/接线;确认波特率 1M
写入失败检查舵机供电与连接;确认目标寄存器可写
PermissionError 打开串口失败确保没有其他进程占用该 COM 口
Linux:Permission denied: /dev/ttyUSB0未加入 dialout 组;见上文 Linux 小节
macOS:串口名带 tty. 时卡住改用对应的 /dev/cu.* 设备

11. 命令行(可选) ​

bash
# 列出可用串口
python -m src.gui.factory_calibration_tool --list-ports

# 指定端口启动
python -m src.gui.factory_calibration_tool --port COM3

相关页面 ​