CF12-6 Servo 使用教程

产品规格​

型号CF12-6 Servo
堵转扭矩15kg.cm @ 7.4V
额定负载3.7kg.cm @ 7.4V
转动角度360° (0 ~ 4095)
位置传感器分辨率360° / 4096
机构极限角度无限制
工作电压范围4V ~ 8.4V
典型工作电压7.4V
齿轮形式高精度金属齿轮
空载速度0.088sec / 60°
(113RPM) @ 7.4V
编码器类型12 位编码器
ID 范围0 ~ 253
波特率38400bps ~ 1Mbps (默认 1Mbps)
反馈当前位置、当前速度、当前负载、当前电压、当前温度、异步写标志、舵机状态、移动标志、目标位置、当前电流
空载电流≤210mA @ 7.4V
额定电流900mA
堵转电流2A
Kt 常数7.5kg.cm/A
出力轴25T/OD4.95mm
减速比1/320
齿轮虚位≦0.5°

产品特性​

  • 支持级联连接,单条总线最多可同时控制 253 个舵机(前提是供电充分),并可读取各舵机的反馈信息。
  • 内置 360° 磁编码器,支持 360° 角度控制。
  • 支持高精度角度控制,360° 行程对应 4096 个位置刻度,适用于机器人关节、灵巧手等场景。
  • 支持将任意角度设置为舵机中位,便于装配和校准。
  • 支持加速度启停控制,使启动和停止过程更平缓。
  • 采用紧凑结构设计,适合空间受限的安装场景。
  • 支持通过程序设置工作模式:舵机模式用于角度控制,电机模式用于连续旋转。

硬件使用方法​

产品尺寸​


CF12-6_Servo Web 界面控制

1. ESP32 下载工具​

一般来说,需要先安装 Arduino IDE 及相关依赖库,再编译、上传程序,才能控制 CF 系列舵机。使用这里提供的 ESP32 下载工具,无需安装 Arduino IDE 或相关依赖库,即可将配套的舵机控制程序烧录到驱动板。

点击下载 CF 系列舵机专属 ESP32 下载工具,解压后双击打开 “flash_download_tool_3.9.5.exe”。此时会弹出两个窗口,一个是黑色的终端窗口,用于显示下载工具的工作状态;另一个是下载工具的主 UI 界面,在此处进行操作即可。

在 “DOWNLOAD TOOL MODE” 界面,ChipType 选择 ESP32,WorkMode 选择 Factory(调用二进制文件自动适配相对路径,无需手动输入),点击 OK 确认。


保持界面中 LockSettings 勾选状态(支持最多同时给 8 块驱动板烧录程序),用 USB 线连接驱动板与计算机,点击界面 COM 选项,选择新识别的 COM 口。BAUD 设置烧录速率,最高支持 921600(速率越高烧录越快)。


确认配置后点击 START 开始烧录,待界面显示 FINISH 完成即烧录成功。

 

烧录完成后断开驱动板与电脑的 USB 连接,连接舵机并为驱动板供电,即可开始控制 CF 系列舵机。

2. Web 端使用教程​

以下教程以总线舵机驱动板为例,说明 Web 端控制舵机的方法。如需在项目中使用总线舵机,可参考示例程序和总线舵机驱动电路原理图进行二次开发。

2.1 接入舵机和电源​

以 CF12-6 Servo 为例,在驱动板上接入舵机后,需要通过舵机驱动板的 5.5 × 2.1 mm DC 接口为其供电 4V ~ 8.4V(推荐使用 7.4 V 供电),该供电接口会直接为舵机供电。

注意

Servo Driver with ESP32 能承受的最大电流是 5 A,如果您使用的舵机数量较多,需要分批次供电,以免电流太大烧坏驱动板。

2.2 连接驱动板 WiFi 热点​

  1. 驱动板上电后,会自动创建 WiFi 热点,默认热点名称:ESP32_DEV,默认密码:12345678;
  2. 用手机或电脑连接该 WiFi。由于该 WiFi 无法访问互联网,部分设备可能会自动切换到其他已保存的 WiFi 网络。若发生此情况,请重新连接 ESP32_DEV WiFi,一般再次连接成功后即可保持稳定连接。
  3. 建议使用谷歌浏览器,在地址栏输入 192.168.4.1,进入 Web 端控制界面。


2.3 舵机扫描​

  1. 驱动板上电时自动扫描舵机,若舵机在驱动板上电后才连接,点击界面 Start Searching 重新扫描。
  2. 我们的舵机出厂默认 ID 为 1,若在驱动板上连接多个舵机,需要修改舵机的 ID,确保 ID 不冲突,否则会扫描不到舵机。更改舵机 ID 时,建议仅将需要改 ID 的单个舵机与驱动板连接。
  3. 驱动板开机默认扫描 ID:0 ~ 20 的舵机,若使用舵机 ID 超过 20,需修改源码 ServoDriverCF.ino 文件中的 MAX_ID 数值(最大有效值是 253),重新烧录程序后生效。
  4. 扫描完成后,界面会显示当前所有已连接的舵机 ID,可进行后续操作。

2.4 核心功能操作​

Web 端界面的操作按键功能及使用方法如下,所有操作均针对 Active ID(当前选中的舵机 ID)生效:

类按键名称功能说明
ID 管理ID Select+/-切换当前选中的舵机 Active ID
ID to Set+/-调整需要设置的新舵机 ID 数值
Set New ID将当前 Active ID 的舵机,修改为 ID to Set 设置的新 ID,修改后断电仍然保存
位置控制Middle控制舵机转动至中间位置(位置范围 0-4095,中间位置为 2047)
Set Middle Position将舵机当前位置设为新的中间位置(2047),自定义舵机中位基准
运动控制Position+舵机顺时针转动,舵机模式下转至 4095 位置后不会继续转动
Position-舵机逆时针转动,舵机模式下转至 0 位置后不会继续转动
Current+/-设置舵机电流,单位6.5mA,本舵机额定电流900mA
Speed+/-设置舵机转速,本舵机最高约 7718 步/秒(50 步/秒≈0.732RPM)
Stop停止舵机运动(适用于二次开发后舵机无法自主停止的场景)
扭矩控制Release关闭扭矩锁,可手动转动舵机
Torque开启扭矩锁,舵机会用力保持在指定位置
运行模式切换Set Servo Mode设置为舵机模式,支持 360° 绝对角度控制,设置后断电不丢失
Set Motor Mode设置为电机模式,支持连续转动 30000 步/±7 圈内相对角度控制,圈数断电不保存,模式断电保存
串口调试Start Serial Forwarding串口转发模式,通过 Type-C 接口直接控制舵机并获取反馈,用于舵机调试。串口波特率是 115200。
ESP-NOW 通信模式Normal普通模式,不通过 ESP-NOW 发送/接收信息
Leader主机模式,通过 ESP-NOW 协议向从动端发送当前 Active ID 舵机的 ID、位置、速度信息。详见 ESP-NOW 通信配置
Follower从动模式,接收主机端 ESP-NOW 协议指令,跟随主机端舵机动作
灯光控制RainbowON/OFF开启/关闭 RGB 灯的彩虹变换效果


Arduino IDE 使用

本教程介绍二次开发工具的安装与使用方法,重点说明如何在 Servo Driver with ESP32 上上传修改后的程序,用于在 ST / SC 系列舵机程序的基础上进行二次开发。本次使用的开发工具为 Arduino IDE,下文介绍 Arduino IDE 中舵机依赖库及开发环境的安装与使用。

1. Arduino 安装及环境搭建​

1.1 Arduino IDE 是什么​

Arduino IDE(Integrated Development Environment,集成开发环境)是一个基于开源代码的开发平台,具备独立的编程语言与开发环境。Arduino IDE 提供丰富的库文件,大幅简化了诸如显示器、传感器等复杂硬件及软件平台的使用过程。

1.2 Arduino IDE 安装​

下载 Arduino IDE​

先到 Arduino 官网 下载最新版本 Arduino IDE 的安装包。官方 IDE 支持不同操作系统下载,根据您的操作系统进行选择。这里下载的是 Windows 的,如果已安装,直接跳到第二步。安装过程很简单,一直点击下一步即可。


注意

安装过程中会提示安装驱动,一直点击安装即可。


设置 Arduino IDE 为中文界面​

第一次安装完成后,打开 Arduino IDE 是英文界面的,可以点击 “File” → “Preferences” 。


在 “Language” 里面选择简体中文,点击 OK。


1.3 开发环境安装​

机器人上驱动板的主控模组是 ESP32,所以我们在 Arduino IDE 开发环境中需要安装好 ESP32 对应的开发板。步骤如下:

  1. 打开 Arduino IDE,点击 “文件” → “首选项”。


  2. 在附加开发板管理器网址中添加如下链接,点击“确定”保存设置。

    https://dl.espressif.com/dl/package_esp32_index.json

    注意

    如果您需要添加多个开发板 URL,那无需将 ESP32 开发板支持的 URL 删掉,可以直接将其他 URL 添加至另一行,默认显示是逗号分隔开 URL 的。

    例如:如果您需要添加 ESP8266 开发板的 URL,直接添加至另一行,显示如下:

    https://dl.espressif.com/dl/package_esp32_index.json,http://arduino.esp8266.com/stable/package_esp8266com_index.json


  3. 点击 packages 进行下载并解压缩,在 “我的电脑” 中输入以下路径:

    C:\Users\username\AppData\Local\Arduino15

    username 需要根据自己电脑的用户名更改,将解压的 packages 文件复制到 Arduino15 文件夹下。


    在 Arduino15 目录下的 packages/esp32/hardware/esp32 路径中,可查看安装的 ESP32 开发板支持包版本为 3.0.7。


    注意

    CF 系列舵机开源程序基于 ESP32 开发板支持包 3.0.x 版本编写,推荐使用 3.0.7 版本。若使用其他版本,ESP-NOW 接收回调函数接口可能不兼容,后续上传程序时会出现 esp_now_recv_cb_t 相关的函数类型不匹配错误。

1.4 依赖库安装​

下载 依赖库文件 并解压缩,将解压后的库文件夹复制到 Arduino 的用户库目录(libraries) 中。默认路径如下:

C:\Users\username\Documents\Arduino\libraries

username 需要根据自己电脑的用户名更改。


如何查看自己的库目录?

打开 Arduino IDE,点击 “File” → “Preferences”,查看 Sketchbook location。例如:

Sketchbook location:

C:\Users\ag\Documents\Arduino

则库目录为:

C:\Users\ag\Documents\Arduino\libraries

1.5 上传程序​

  1. 下载 CF 系列舵机开源程序,解压后双击打开 ServoDriverST.ino。注意这个目录下的所有文件要在同一个文件夹下。


  2. 点击 “Tools” → “Port”,查看当前已有的串口设备。记住自己电脑上已有的 COM,不需要点击这个 COM(不同电脑显示的 COM 可能不同,也可能没有已有的 COM)。

  3. 使用 USB 线将总线舵机驱动板与电脑连接,再次点击 “Tools” → “Port”,观察与步骤 2 相比新增的串口设备,再点击新出现的 COM(本示例中新出现的 COM 为 COM7)。


  4. 在 Arduino IDE 中,点击 “Tools” → “Board” → “ESP32” → “ESP32 Dev Module”。


  5. 点击“工具”,其他设置如下:(Partition Scheme 最好用 Huge APP,PSRAM 必须使用 Enabled)


  6. 设置全部完成后,点击左上角的上传图标开始上传程序。


    注意

    如果上传期间遇到了问题,需要重新安装或者更换 Arduino IDE 版本时,在这之前,您需要将 Arduino IDE 卸载干净,卸载软件后需要将 C:\Users\username\AppData\Local\Arduino15 这个文件夹内的所有内容手动删除(一些隐藏文件需要显示才能看到),接着再重新下载安装。

2. 进阶配置​

2.1 修改最大扫描 ID​

为了检测已连接的舵机,程序会从 ID 0 开始依次发送 Ping 指令,直到达到设定的最大 ID。如果舵机的 ID 较大,或连接了较多舵机,可以适当增大 MAX_ID 的值;如果已知舵机 ID 范围较小,则可减小该值,以缩短扫描时间。

在 ServoDriverCF.ino 中修改以下参数即可:

// Set the maximum ID to scan
int MAX_ID = 20;

MAX_ID 默认值为 20,最大支持设置为 253。数值越大,扫描时间越长。

2.2 ESP-NOW 通信配置​

驱动板之间通过 ESP-NOW 进行无线通信。默认程序支持一对一控制,您也可以自行扩展为一对多或多对多通信。

在 ESP-NOW 通信中,每个设备都拥有唯一的 MAC 地址。建立通信前,控制端(Leader)需要知道被控端(Follower)的 MAC 地址,以便将控制数据发送到指定设备。

驱动板支持以下三种工作模式:

模式说明
Normal普通模式,不参与 ESP-NOW 通信
Leader控制端,向其他设备发送控制数据
Follower被控端,接收并执行控制数据

当使用一块驱动板控制另一块驱动板时,需要将其中一块配置为 Leader,另一块配置为 Follower。

2.2.1 获取 Follower 的 MAC 地址​

首先连接作为 Follower 的驱动板。驱动板上电后会自动获取自身 MAC 地址,并显示在 OLED 屏幕第一行。记录该 MAC 地址,后续配置 Leader 时需要使用。

2.2.2 设置 Follower 模式​

打开 ServoDriverCF.ino,将 DEFAULT_ROLE 修改为 2:

// set the default role here.
// 0 as normal mode.
// 1 as leader, ctrl other device via ESP-NOW.
// 2 as follower, can be controled via ESP-NOW.
#define DEFAULT_ROLE 2

编译并上传程序到 Follower 驱动板。上传完成后,驱动板每次上电都会自动进入 Follower 模式。

提示

此步骤并非必须,也可以在 Web 配置页面中手动切换工作模式。

2.2.3 配置目标 MAC 地址和 Leader 模式​

连接作为 Leader 的驱动板,打开 ServoDriverCF.ino。将 broadcastAddress[] 改为 Follower 的 MAC 地址,记得在每个数值前加上 0x。

// the MAC address of the device you want to ctrl.
uint8_t broadcastAddress[] = {0x94, 0xB5, 0x55, 0x1D, 0xD1, 0x0C};
提示

以上是示例,每个设备的 MAC 地址是不同的,需要根据实际情况更改。

将 DEFAULT_ROLE 修改为 1:

// set the default role here.
// 0 as normal mode.
// 1 as leader, ctrl other device via ESP-NOW.
// 2 as follower, can be controled via ESP-NOW.
#define DEFAULT_ROLE 1

编译并上传程序到 Leader 驱动板。上传完成后,Leader 将自动与指定的 Follower 建立 ESP-NOW 通信。

两个设备分别连接 相同 ID 的舵机 后,可参考 Web 端使用教程 控制 Leader 驱动板上的舵机。Leader 会将当前选中的舵机(Active Servo)的 ID 和位置数据(Position)发送给 Follower,Follower 接收到数据后,将控制对应 ID 的舵机同步运动。

注意事项
  1. 仅在舵机模式(Servo Mode)下有效。若舵机工作于电机模式(Motor Mode),由于无法直接控制目标角度,无法实现位置同步功能。

  2. 建议使用不同的 WiFi 名称。当同时使用多个驱动板时,建议为每块驱动板设置不同的 WiFi SSID。否则在手机、电脑等设备搜索并连接 WiFi 时,可能难以区分不同的驱动板,从而误连接到错误的设备。有关 SSID 的修改方法,请参考 2.3 WIFI:AP 与 STA 模式。

2.3 WIFI:AP 与 STA 模式​

驱动板支持 AP(Access Point)模式和 STA(Station)模式两种 WiFi 工作模式。

模式说明
AP驱动板创建 WiFi 热点,手机或电脑可直接连接该热点访问 Web 控制页面。
STA驱动板连接到已有的 WiFi 网络,并加入该局域网。

2.3.1 配置 AP 模式​

在 AP 模式下,驱动板会创建一个 WiFi 热点。您可以在 ServoDriverCF.ino 中修改热点名称(SSID)和密码:

// WIFI_AP settings.
const char* AP_SSID = "ESP32_DEV";
const char* AP_PWD = "12345678";

修改完成后,将 DEFAULT_WIFI_MODE 设置为 1:

// set the default wifi mode here.
// 1 as [AP] mode, it will not connect other wifi.
// 2 as [STA] mode, it will connect to know wifi.
#define DEFAULT_WIFI_MODE 1

上传程序后,驱动板上电将自动创建对应的 WiFi 热点。

2.3.2 配置 STA 模式​

在 STA 模式下,驱动板会连接到指定的 WiFi 网络。在 ServoDriverCF.ino 中填写目标 WiFi 的名称和密码:

// WIFI_STA settings.
const char* STA_SSID = "OnePlus 8";
const char* STA_PWD = "40963840";

然后将 DEFAULT_WIFI_MODE 设置为 2:

// set the default wifi mode here.
// 1 as [AP] mode, it will not connect other wifi.
// 2 as [STA] mode, it will connect to know wifi.
#define DEFAULT_WIFI_MODE 2

3. 二次开发教程​

3.1 舵机初始化​

每个控制舵机的程序,都需要对舵机进行初始化,初始化后才可以使用。

#include <SCServo.h>
//用于控制总线舵机驱动板的 UART 引脚号
//Bus Servo Driver HAT (A) / General Driver for Robots / Servo Driver with ESP32
//GPIO 18 - S_RXD(U1RXD), GPIO 19 - S_TXD(U1TXD), as default.
#define S_RXD 18
#define S_TXD 19
CFSCL cfscl;

void setup(){
Serial1.begin(1000000, SERIAL_8N1, S_RXD, S_TXD);
cfscl.pSerial = &Serial1;
while(!Serial1) {}
}

3.2 更改舵机 ID​

串接起来的舵机中,每个 ID 只能对应一个舵机,否则不能正常获取舵机反馈的信息。 当更改舵机 ID 时,尽量保证驱动板只与一个舵机相连接,ID 会被永久保存在舵机中。

#include <SCServo.h>
//用于控制总线舵机驱动板的 UART 引脚号
//Bus Servo Driver HAT (A) / General Driver for Robots / Servo Driver with ESP32
//GPIO 18 - S_RXD(U1RXD), GPIO 19 - S_TXD(U1TXD), as default.
#define S_RXD 18
#define S_TXD 19
CFSCL cfscl;

int ID_ChangeFrom = 1; // 要更改ID的舵机原本ID,出厂默认为1
int ID_Changeto = 2; // 新的ID
void setup(){
Serial1.begin(1000000, SERIAL_8N1, S_RXD, S_TXD);
cfscl.pSerial = &Serial1;
while(!Serial1) {}

cfscl.unLockEprom(ID_ChangeFrom); //解锁EPROM-SAFE
cfscl.writeByte(ID_ChangeFrom, CFSCL_ID, ID_Changeto);//更改ID
cfscl.LockEprom(ID_Changeto); // EPROM-SAFE上锁
}

void loop(){
}

3.3 Ping​

用于测试某一舵机是否正常连接。

#include <SCServo.h>
//用于控制总线舵机驱动板的 UART 引脚号
//Bus Servo Driver HAT (A) / General Driver for Robots / Servo Driver with ESP32
//GPIO 18 - S_RXD(U1RXD), GPIO 19 - S_TXD(U1TXD), as default.
#define S_RXD 18
#define S_TXD 19
CFSCL cfscl;

int TEST_ID = 3; // 要测试的舵机ID

void setup(){
Serial.begin(115200);
Serial1.begin(1000000, SERIAL_8N1, S_RXD, S_TXD);
cfscl.pSerial = &Serial1;
while(!Serial1) {}
}

void loop()
{
int ID = cfscl.Ping(TEST_ID); //ping该ID的舵机,ping不通返回-1
if(ID!=-1){
Serial.print("Servo ID:");
Serial.println(ID, DEC);
delay(100);
}else{
Serial.println("Ping servo ID error!");
delay(2000);
}
}

3.4 写位置​

可用于控制单独舵机转动。

#include <SCServo.h>
//用于控制总线舵机驱动板的 UART 引脚号
//Bus Servo Driver HAT (A) / General Driver for Robots / Servo Driver with ESP32
//GPIO 18 - S_RXD(U1RXD), GPIO 19 - S_TXD(U1TXD), as default.
#define S_RXD 18
#define S_TXD 19
CFSCL cfscl;

void setup(){
Serial1.begin(1000000, SERIAL_8N1, S_RXD, S_TXD);
cfscl.pSerial = &Serial1;
while(!Serial1) {}
}

void loop()
{
cfscl.WritePosEx(1, 1000, 1500, 50,100); // 控制ID为1的舵机以1500的速度转动到1000的位置,启停加速度50,电流100 * 6.5mA。
delay(2000);

cfscl.WritePosEx(1, 20, 1500, 50,100); // 控制ID为1的舵机以1500的速度转动到20的位置,启停加速度50,电流100 * 6.5mA。
delay(2000);
}

3.5 同步写​

可用于同时控制多个舵机(转动到不同的位置和不同的速度)。

#include <SCServo.h>
//用于控制总线舵机驱动板的 UART 引脚号
//Bus Servo Driver HAT (A) / General Driver for Robots / Servo Driver with ESP32
//GPIO 18 - S_RXD(U1RXD), GPIO 19 - S_TXD(U1TXD), as default.
#define S_RXD 18
#define S_TXD 19
CFSCL cfscl;

byte ID[2];
s16 Position[2];
u16 Speed[2];
byte ACC[2];
u16 Current[2];

void setup()
{
Serial1.begin(1000000, SERIAL_8N1, S_RXD, S_TXD);
cfscl.pSerial = &Serial1;
delay(1000);
ID[0] = 1; // 将需要控制的舵机ID保存到ID[]中。
ID[1] = 2; // 将需要控制的舵机ID保存到ID[]中。
Speed[0] = 3400; // 设置舵机速度,Speed[0]与上面的ID[0]的舵机对应。
Speed[1] = 3400; // 设置舵机速度,Speed[1]与上面的ID[1]的舵机对应。
ACC[0] = 50; // 设置启停加速度,数值越小加速度越小,最大可设置为150.
ACC[1] = 50;
Current[0] = 100;
Current[1] = 100;
}

void loop()
{
Position[0] = 3000; // 设置ID[0](这里是ID为1的)舵机的目标位置,范围为0-4095
Position[1] = 3000; // 设置ID[1](这里是ID为2的)舵机的目标位置,范围为0-4095
cfscl.SyncWritePosEx(ID, 2, Position, Speed, ACC, Current);//servo(ID1/ID2) speed=3400,acc=50,move to position=3000.
delay(2000);

Position[0] = 100;
Position[1] = 100;
cfscl.SyncWritePosEx(ID, 2, Position, Speed, ACC, Current);//servo(ID1/ID2) speed=3400,acc=50,move to position=100.
delay(2000);
}

3.6 获得舵机信息反馈​

#include <SCServo.h>
//用于控制总线舵机驱动板的 UART 引脚号
//Bus Servo Driver HAT (A) / General Driver for Robots / Servo Driver with ESP32
//GPIO 18 - S_RXD(U1RXD), GPIO 19 - S_TXD(U1TXD), as default.
#define S_RXD 18
#define S_TXD 19
CFSCL cfscl;

void setup()
{
Serial1.begin(1000000, SERIAL_8N1, S_RXD, S_TXD);
Serial.begin(115200);
cfscl.pSerial = &Serial1;
while(!Serial1) {}
delay(1000);
}

void loop()
{
int Pos;
int Speed;
int Load;
int Voltage;
int Temper;
int Move;
int Current;

if (cfscl.FeedBack(1) != -1) {
Pos = cfscl.ReadPos(-1);
Speed = cfscl.ReadSpeed(-1);
Load = cfscl.ReadLoad(-1);
Voltage = cfscl.ReadVoltage(-1);
Temper = cfscl.ReadTemper(-1);
Move = cfscl.ReadMove(-1);
Current = cfscl.ReadCurrent(-1);

Serial.print("Position:");
Serial.println(Pos);
Serial.print("Speed:");
Serial.println(Speed);
Serial.print("Load:");
Serial.println(Load);
Serial.print("Voltage:");
Serial.println(Voltage);
Serial.print("Temper:");
Serial.println(Temper);
Serial.print("Move:");
Serial.println(Move);
Serial.print("Current:");
Serial.println(Current);
delay(10);
} else {
Serial.println("FeedBack err");
delay(500);
}
Serial.println();
}


Python 运行示例

本小节主要阐述 Windows 系统部署 Python 环境和运行 Python 例程的方法。

Windows 部署 Python 环境​

首先到 Python 官网 下载最新版本 Python 的安装包。根据您的操作系统选择进行下载即可,我这里下载的是 windows 的,版本是 3.11.5。


下载完成后,双击安装程序 python-3.11.5-amd64,点击 “Customize installation(自定义安装)” 进入到 “Optional Features” 可选功能界面。


保持勾选点击 “Next” 后进入到 “Advanced Options” 界面,注意一定要保持 “Add Python to environment variables” 的勾选,安装地址可以点击 “Browse” 自己修改,这里是默认安装地址,设置好后点击 “Install” 安装,等待安装完成即可。

安装好后,接下来我们来进行 Python 项目编译示例。

CF 系列舵机 Python 运行示例​

下载 CF 总线舵机控制库(Python) 的程序,解压后,接着在开始菜单栏中输入 cmd 打开 Windows 的命令提示符界面,输入 “cd 文件夹路径” 进入到 CFServo_Python 项目文件夹下。在这个项目文件夹下创建一个对于这个项目的虚拟环境,输入命令:python -m venv [虚拟环境名称,一般叫项目名-env]

python -m venv servopython-env

激活这个虚拟环境,在命令提示符界面中输入:项目名-env\Scripts\activate.bat。

servopython-env\Scripts\activate.bat

在 CFServo_Python 项目下可以看见有一个 requirements.txt 文件,该文件是用于存放该项目会使用到的安装包列表。进入虚拟环境后,输入:

python -m pip install -r requirements.txt

使用该命令可以安装该项目使用到的安装包。可以看见这里使用到的安装包只有 pyserial 且已安装好。


将 CF 系列舵机与驱动板上的总线舵机接口相连接,并且接入符合舵机工作电压的供电电源,在开始菜单栏中搜索设备管理器,可以查看新接入的端口号。


接着将要运行的例程中的 SCS_ID 改为所连接的舵机 ID,我们的舵机出厂 ID 默认为 1。DEVICENAME 修改为接入的端口号,我这里为 COM12(不同电脑接入的端口号不一样)。


信息
  1. CFServo_Python下的 sms_cf 文件夹存放的是适用于 CF 系列舵机的例程。
  2. 我们的 CF 系列舵机,默认波特率是 1000000。

修改后就可以运行例程,这里以 ping.py 文件为例,输入 “cd 文件夹路径” 进入到存放 python 例程的文件夹下。输入:

python ping.py

可以看见运行成功,ID 为 1 的舵机连接成功。


以上是 Python 示例的简单教程,且在资料中还提供了适用于不同硬件设备的 SDK 和不同语言的例程。


串口工具使用

本教程以 CF12-6 Servo 和总线舵机驱动板 Bus Servo Adapter (A) 为例,介绍通过串口助手发送指令帧控制舵机的方法。

接线步骤​

  1. 将 CF12-6 Servo 接入 Bus Servo Adapter (A) 的总线舵机接口。
  2. 通过 USB Type-C 数据线连接 Bus Servo Adapter (A) 和电脑。检查 Bus Servo Adapter (A) 的跳线帽在 B 位置。
  3. 将满足 CF12-6 Servo 的工作电压要求的电源接入 DC5521 插座或绿色电源接线端子。(USB Type-C 只负责串口通信,不能替代舵机电源输入)
  4. 打开 Windows “设备管理器”,在 “端口 (COM 和 LPT)” 中查看新增的 COM 口。


串口助手设置​

打开串口调试助手,选择设备串口,波特率选择 1000000,勾选 “HEX 显示” 、“HEX 发送”、“加时间戳和分包显示”,打开串口后即可向舵机发送指令。


注意

CF 系列舵机默认波特率为 1000000。如果舵机波特率已被修改,串口助手的波特率需要与舵机当前波特率一致。

常用指令帧示例​

根据舵机通信协议和内存表解析来写指令帧控制舵机。