SCS0009 舵机调试与标定
SCS0009 版本有两套调试内容:
- TTL 组装与中位调试:接线、设置舵机 ID、固定舵机臂、微调中位、运行测试。
- SCS0009 调试工具:Python + PySide6 GUI,扫描总线、读写全部寄存器、位置控制、波特率/恢复出厂、xdat EEPROM 备份。
协议寄存器细节见 SCS0009 协议内存表。
Arduino/扩展接线见 Arduino Nano。
一、TTL 调试:组装、ID 与中位
首先,下载"灵巧手调试.zip"压缩包,解压后可通过"使用arduio程序调试灵巧手过程(TTL舵机)"文档进行舵机ID设置、标定、校准中位及演示程序运行,或 参考官方开源代码。
成品无拆卸情况下(出厂时舵机 ID、标定和中位已调好)可以直接跳到第 6 点 运行“02 演示程序”和手部追踪。

1. 调试灵巧手的接线方式
一种是使用电脑运行python等上位机软件,如飞特舵机上位机或者python代码运行
一种是使用MEGA328P等单片机或自行购买的开发板或主控等
接线方式如下:
(1)python方式调试时的接线方式(只接舵机驱动板):

(2)MEGA328P开发板调试时的接线方式(舵机驱动板+328P开发板):
看清楚MEGA328P开发板的针脚位置!




下面描述的是使用单片机的调试过程,单片机本身是会不断循环演示程序的,只需断开数据线即可停止。
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、使用舵机厂家提供的上位机软件FD1.9.8.2进行设置
FD.rar



3. 固定伺服喇叭
1、上传代码程序"安装白色伺服喇叭时使用" 到开发板中
该程序的作用:使舵机的齿轮位置处于一个大致居中的位置,后续的动作角度都是基于这个中间的位置进行的。
(1)自行安装软件arduino,根据自身系统参考安装教程,编译下载arduino程序的话,要先在 库管理器 里安装FTServo库、SCServo库

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

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

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

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

3、调试舵机3、4
(1)断开328P开发板与舵机驱动板之间的接线(否则无法上传)
(2)编辑:设置ID值为3、4

(3)上传程序到开发板中
(4)连线:将开发板与舵机驱动板、3、4号舵机连接起来,可以听到舵机齿轮旋转一定角度后停止。
(5)将伺服喇叭安装在齿轮上,位置尽量保持平行
4、调试舵机5、6
步骤同上
5、调试舵机7、8
步骤同上
4. 微调中间值
1、上传代码程序"01 微调MiddlePos值时使用" 到 开发板中
2、手指处于闭合位置时,立即停止程序(断开数据线即可),并检查伺服喇叭是否正确对齐(如下图)。如果未对齐,调整程序中MiddlePos_1、MiddlePos_2的值,直到对齐为止。记录下该值(8个舵机对应8个值),最后的程序中要使用。


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

6. 运行「02 演示程序」
(1)自行安装软件arduino,根据自身系统参考安装教程
(2)在 灵巧手调试\00 TTL串口舵机\arduino程序(MEGA328P开发板)\02 演示程序目录下根据 左手还是右手 打开对应的ino文件

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

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

(5)编译并上传
注意 此时电脑只单独连接到开发板,开发板先不连接到舵机驱动板(即不和灵巧手连接)
上传成功后,将开发板通过三根跳线连接到舵机驱动板上,舵机连接到舵机驱动板,参考 MEGA328P 开发板调试时的接线方式。
灵巧手会不断循环运行**"02 演示程序"**
运行结果如下:

二、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.0 | GUI 框架 |
| pyserial | >= 3.5 | 串口通信 |
| 系统 | Win10 / Win11 | 任意版本 |
2. 安装 Python
- 访问 https://www.python.org/downloads/
- 下载 Python 3.10+ 安装包
- 安装时务必勾选 "Add Python to PATH"(否则命令行找不到 python)
验证安装:
python --version3. 安装依赖
推荐在虚拟环境中安装,避免污染系统 Python:
# 进入项目目录
cd SCS0009_ServoController
# 创建虚拟环境
python -m venv .venv
# 激活虚拟环境(Windows)
.venv\Scripts\activate
# 安装依赖
pip install -r requirements.txt⚠️ 虚拟环境只需创建一次。重复执行会覆盖原环境(清空已装依赖)。之后每次只需
activate激活即可。
提示:激活后命令行前缀会出现
(.venv)。
4. 检查环境
python setup.py看到 [OK] 环境检查通过,可以运行项目 即表示环境正确。
5. 连接硬件
- 将 USB 转串口适配器(如 CH340 / CP2102)插入电脑
- 连接舵机控制器(机械臂控制板)
- 给舵机供电(建议 DC 5V 5A,Pro 版 DC 12V 5A)
打开设备管理器(Win+X → 设备管理器)确认串口号:
端口 (COM 和 LPT)
└─ USB-SERIAL CH340 (COM3) ← 你的舵机串口记下 COM 号,启动程序时选择。
6. 启动 GUI
python -m src.gui.factory_calibration_tool或手动指定端口(串口被占用时):
python -m src.gui.factory_calibration_tool --port COM3查看可用端口:
python -m src.gui.factory_calibration_tool --list-ports7. 界面操作流程
界面为单面板布局,窗口高度不足时自动出现滚动条,最大化时自适应拉伸。
7.1 串口连接
- 选择端口、波特率(默认 1M),点击 连接
- 状态显示
🟢 已连接
7.2 扫描舵机
- 点击 扫描舵机,检测 ID 1-254 在线舵机
- 扫描结果实时显示在舵机列表(带型号)
- 点击舵机列表某行 → 自动填充到舵机下拉框
7.3 参数读写
- 读取参数:读取全部 44 个寄存器(EEPROM + SRAM),日志实时显示结果
- 参数表:5 列展示(地址/寄存器/值/存储区域/读写),EPROM/SRAM/DEFAULT 颜色区分
- 点选联动:点击参数表某行 → 自动填充"写入地址""长度""值"
- 写入:修改值后点写入,程序自动解锁/写入/锁定
- 写入结果弹窗:成功弹绿色提示"✅ 已成功写入",失败弹红色提示"❌ 写入失败"(含原因)
7.4 修改舵机 ID
- 总线上只接这一只待改 ID 的舵机,避免与已有 ID 冲突。
- 在参数表中找到“舵机 ID”(地址
0x05)行并选中。 - 把“值”改为目标 ID,点 ✏️ 写入;程序会自动解锁 → 写入 → 重新锁定。
- 改完重新扫描总线确认。右手用 1–8,左手用 11–18。
7.5 位置控制
- 拖动滑块或直接输入目标位置(0–1023),数值框与滑块同步。
- 点 ▶ 移动,状态栏显示“移动中…”。
- 到位后提示“已移动完成,请关闭力矩”,点 ⏹ 力矩关。
7.6 波特率/恢复出厂
- 修改波特率:选择新波特率(38400–1000000 bps)后写入;程序会切换串口波特率并 ping 验证,失败自动回滚。
- 恢复出厂:恢复为出厂默认(ID=1,波特率 1M),之后需重新扫描。
7.7 xdat 参数(仅保存 EEPROM)
💾 保存当前舵机:保存当前 ID 舵机的 EEPROM 参数到 xdat 文件(备份)📂 打开 xdat:加载备份文件📤 恢复参数到舵机:把备份写回舵机
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. 注意事项
- 写入会持久化:参数写入 EEPROM 后原值被覆盖,无法撤销;修改前先用 xdat 备份。
- 供电稳定:供电不足会导致丢步、通信失败或舵机失联;按 SCS0009 接线与供电 的要求供电。
- 串口独占:同一端口不能被两个程序同时打开;使用前关闭串口监视器、上位机等其他占用程序。
- ID 修改风险:总线上只接一只待改 ID 的舵机;若改后失联,可尝试“恢复出厂设置”(ID 回到 1)。
- 过温/过压:工具会监控电压和温度(温度 > 60 °C 告警);持续高温时停机散热。
- 热插拔:拔掉 USB 后程序会尝试重连;重新插回后点刷新端口。
- Windows 控制台乱码:命令行工具出现 emoji 乱码时,设置
PYTHONIOENCODING=utf-8后再运行。
10. 常见问题
| 问题 | 解决 |
|---|---|
| 找不到串口 | 设备管理器检查驱动;换 USB 口;装 CH340 驱动 |
| 串口被占用 | 关闭串口监视器等程序;重启工具 |
| 中文字体显示空白 | 系统默认微软雅黑,若异常安装中文字体 |
| 舵机扫描不到 | 检查供电/接线;确认波特率 1M |
| 写入失败 | 检查舵机供电与连接;确认目标寄存器可写 |
| PermissionError 打开串口失败 | 确保没有其他进程占用该 COM 口 |
Linux:Permission denied: /dev/ttyUSB0 | 未加入 dialout 组;见上文 Linux 小节 |
macOS:串口名带 tty. 时卡住 | 改用对应的 /dev/cu.* 设备 |
11. 命令行(可选)
# 列出可用串口
python -m src.gui.factory_calibration_tool --list-ports
# 指定端口启动
python -m src.gui.factory_calibration_tool --port COM3
