乐幻索尔总线舵机通信协议
1.概要
采用异步串行总线通讯方式,理论多至 253 个机器人舵机可以通过总线组
成链型,通过 UART 异步串行接口统一控制。每个舵机可以设定不同的节点地
址,多个舵机可以统一运动也可以单个独立控制。通过异步串行接口与用户的上
位机(控制器或 PC 机)通讯,您可对其进行参数设置、功能控制。通过异步串行
接口发送指令,可以设置为电机控制模式或位置控制模式。 在电机控制模式下,
可以作为直流减速电机使用,速度可调;在位置控制模式下,拥有 0-240°的转
动范围,外加±30°的偏差可调范围,在此范围内具备精确位置控制性能,速度
可调。只要符合协议的半双工 UART 异步串行接口都可以和舵机进行通讯,对
舵机进行各种控制
2.UART 接口原理图
舵机用程序代码对 UART 异步串行接口进行时序控制,实现半双工异步串
行总线通讯,通讯波特率为 115200bps,且接口简单、协议精简。在您自行设计
的控制器中,用于和舵机通讯的 UART 接口必须如下图所示进行处理。
图 1
3.指令包
指令包格式
表 1:
帧头
0x55 0x55
ID 号 数据长度 指令
Cmd
Length
ID
参数
校验和
Prm 1…Prm N Checksum
帧头:连续收到两个 0x55 ,表示有数据包到达。
ID: 每个舵机都有一个 ID 号。ID 号范围 0~253,转换为十六进制 0x00~0xFD。
广播 ID: ID 号 254(0xFE) 为广播 ID,若控制器发出的 ID 号为 254(0xFE),所
有的舵机均接收指令,但都不返回应答信息,(读取舵机 ID 号除外,具体说明参
见下面指令介绍)以防总线冲突。
数据长度:等于待发送的数据(包含本身一个字节)长度,即数据长度 Length
加 3 等于这一包指令的长度,从帧头到校验和。
指令:控制舵机的各种指令,如位置、速度控制等。
参数:除指令外需要补充的控制信息。
校验和:校验和 Checksum,计算方法如下:
Checksum = ~ (ID + Length + Cmd+ Prm1 + ... Prm N)若括号内的计算和超出 255,
则取最低的一个字节,“~”表示取反。
3.指令类型
指令有两种,写指令和读指令。写指令:后面一般带有参数,将相应功能的参数
写进舵机,来完成某种动作。读指令:后面一般不带参数,舵机接收到读指令后
会立即返回相应数据,返回的指令值和发送给舵机的“读指令”值相同,并且带
有参数。所以上位机发送读指令后要立马准备将自己变为读取状态。
下表是上位机发送个舵机的指令:
表 2
指令名
指令值 数据长度
SERVO_MOVE_TIME_WRITE
SERVO_MOVE_TIME_READ
SERVO_MOVE_TIME_WAIT_WRITE
SERVO_MOVE_TIME_WAIT_READ
SERVO_MOVE_START
SERVO_MOVE_STOP
SERVO_ID_WRITE
SERVO_ID_READ
SERVO_ANGLE_OFFSET_ADJUST
SERVO_ANGLE_OFFSET_WRITE
SERVO_ANGLE_OFFSET_READ
SERVO_ANGLE_LIMIT_WRITE
SERVO_ANGLE_LIMIT_READ
SERVO_VIN_LIMIT_WRITE
SERVO_VIN_LIMIT_READ
SERVO_TEMP_MAX_LIMIT_WRITE
SERVO_TEMP_MAX_LIMIT_READ
SERVO_TEMP_READ
SERVO_VIN_READ
SERVO_POS_READ
SERVO_OR_MOTOR_MODE_WRITE
SERVO_OR_MOTOR_MODE_READ
SERVO_LOAD_OR_UNLOAD_WRITE
SERVO_LOAD_OR_UNLOAD_READ
SERVO_LED_CTRL_WRITE
SERVO_LED_CTRL_READ
SERVO_LED_ERROR_WRITE
SERVO_LED_ERROR_READ
1
2
7
8
11
12
13
14
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
7
3
7
3
3
3
4
3
4
3
3
7
3
7
3
4
3
3
3
3
7
3
4
3
4
3
4
3
指令名:只是为了方便识别,用户也可以根据自己的习惯自行设定。指令名后缀
为“_WRITE”代表写指令,后缀为“_READ”代表读指令。
指令值:即表 1 中指令包的指令 Cmd。
数据长度:即表 1 中数据长度 Length
1.指令名 SERVO_MOVE_TIME_WRITE 指令值 1 数据长度 7:
参数 1:角度的低八位。
参数 2:角度的高八位。范围 0~1000,对应舵机角度的 0~240°,即舵机可变化
的最小角度为 0.24 度。
参数 3:时间低八位。
参数 4:时间高八位,时间的范围 0~30000 毫秒。该命令发送给舵机,舵机将在
参数时间内从当前角度匀速转动到参数角度。该指令到达舵机后,舵机会立即转
动。
2.指令名 SERVO_MOVE_TIME_READ 指令值 2 数据长度 3:
读取指令名 SERVO_MOVE_TIME_WRITE 发送给舵机的角度和时间值,舵机返回
给上位机的指令包详情请参见下面表 4 的说明。
3.指令名 SERVO_MOVE_TIME_WAIT_WRITE 指令值 7 数据长度 7:
参数 1:预设角度的低八位。
参数 2:预设角度的高八位。范围 0~1000,对应舵机角度的 0~240°,即舵机可
变化的最小角度为 0.24 度。
参数 3:预设时间低八位。
参数 4:预设时间高八位,时间的范围 0~30000 毫秒。该指令跟第 1 点中
SERVO_MOVE_TIME_WRITE 指令功能相似,不同的是该指令到达舵机后,舵机不
会立即转动,需要等待指令名 SERVO_MOVE_START 指令值为 11 的指令送达舵机
后,舵机才会转动,将在参数时间内从当前角度匀速转动到参数角度。
4.指令名 SERVO_MOVE_TIME_WAIT_READ 指令值 8 数据长度 3:
读取指令名 SERVO_MOVE_TIME_WAIT_WRITE 发送给舵机的预设角度和预设时
间值,舵机返回给上位机的指令包详情请参见下面表 3 的说明。
5.指令名 SERVO_MOVE_START 指令值 11 数据长度 3:
配合指令 SERVO_MOVE_TIME_WAIT_WRITE 使用,在第 3 点中有说明。
6.指令名 SERVO_MOVE_STOP 指令值 12 数据长度 3:
该指令到达舵机,如果舵机正在转动,就会立即停止转动。停在当前角度位置。
7.指令名 SERVO_ID_WRITE 指令值 13 数据长度 4:
参数 1:舵机的 ID 值,范围 0~253,默认为 1。该指令会重新给舵机写入 ID 值,
并且掉电保存。
8.指令名 SERVO_ID_READ 指令值 14 数据长度 3:
读取舵机的 ID 值,舵机返回给上位机的指令包详情请参见下面表 4 的说明。
9.指令名 SERVO_ANGLE_OFFSET_ADJUST 指令值 17 数据长度 4:
参数 1:舵机内部的偏差值,范围-125~125,对应角度为-30°~30°,该指令到
达舵机,舵机将立即转动进行偏差调整。
注意 1:通过此指令调整好的偏差值不支持掉电保存,想要保存请参加第 10 点。
注意 2:因为该参数为 signed char 型数据,而发送的指令包都为 unsigned char
型数据,所以发送之前要做强制转换成 unsigned char 型数据放到指令包中进行
发送
10.指令名 SERVO_ANGLE_OFFSET_WRITE 指令值 18 数据长度 3:
保存偏差值,并支持掉电保存。其偏差值的调整已在第 9 点中说明。
11.指令名 SERVO_ANGLE_OFFSET_READ 指令值 19 数据长度 3:
读取舵机设定的偏差值,舵机返回给上位机的指令包详情请参见下面表 4 的说明。
12.指令名 SERVO_ANGLE_LIMIT_WRITE 指令值 20 数据长度 7:
参数 1:最小角度的低八位。
参数 2:最小角度的高八位。范围 0~1000。
参数 3:最大角度的低八位。
参数 4:最大角度的高八位。范围 0~1000。且最小角度值要始终小于最大角度值。
该命令发送给舵机,舵机的转动角度将被限制在最小与最大之间转动。并且角度
限制值支持掉电保存。
13.指令名 SERVO_ANGLE_LIMIT_READ 指令值 21 数据长度 3:
读取舵机角度的限制值,舵机返回给上位机的指令包详情请参见下面表 4 的说明。
14.指令名 SERVO_VIN_LIMIT_WRITE 指令值 22 数据长度 7:
参数 1:最小输入电压的低八位。
参数 2:最小输入电压的高八位。范围 4500~12000 毫伏。
参数 3:最大输入电压的低八位。
参数 4:最大输入电压的高八位。范围 4500~12000 毫伏。且最小输入电压值要
始终小于最大输入电压值。该命令发送给舵机,舵机的输入电压将被限制在最小
与最大之间。超出范围舵机的 LED 灯将会闪烁报警,(如果设置了 LED 报警)为
了保护舵机,其内的电机将会处于卸载断电状态,此时舵机将不会输出力矩,并
且输入电压限制值支持掉电保存。
15.指令名 SERVO_VIN_LIMIT_READ 指令值 23 数据长度 3:
读取舵机输入电压的限制值,舵机返回给上位机的指令包详情请参见下面表 4
的说明。
16.指令名 SERVO_TEMP_MAX_LIMIT_WRITE 指令值 24 数据长度 4:
参数 1:舵机内部最高温度限制,范围 50~100℃,默认值 85℃,如果舵机内部
温度超过了此值,舵机的 LED 灯将会闪烁报警,(如果设置了 LED 报警)为了保
护舵机,其内的电机将会处于卸载断电状态,此时舵机将不会输出力矩,直到温
度低于此值舵机会再次进入工作状态,并且此值支持掉电保存。
17.指令名 SERVO_TEMP_MAX_LIMIT_READ 指令值 25 数据长度 3:
读取舵机内部最高温度限制的值,舵机返回给上位机的指令包详情请参见下面表
4 的说明。
18.指令名 SERVO_TEMP_READ 指令值 26 数据长度 3:
读取舵机内部实时温度,舵机返回给上位机的指令包详情请参见下面表 4 的说明。
19.指令名 SERVO_VIN_READ 指令值 27 数据长度 3:
读取舵机内部当前的输入电压值,舵机返回给上位机的指令包详情请参见下面表
4 的说明。
20.指令名 SERVO_POS_READ 指令值 28 数据长度 3:
读取舵机当前的实际角度位置值,舵机返回给上位机的指令包详情请参见下面表
4 的说明。
21.指令名 SERVO_OR_MOTOR_MODE_WRITE 指令值 29 数据长度 7:
参数 1:舵机模式,范围 0 或 1,0 代表位置控制模式,1 代表电机控制模式,默
认值 0,
参数 2:空值,
参数 3:转动速度值的低八位。
参数 4:转动速度值的高八位。范围-1000~1000,只在电机控制模式时有效,控
制电机的转速,该值为负值代表反转,正值代表正转。写入的模式和速度不支持
掉电保存。
注意:由于转动速度为 signed short int 型数据,所以发送改指令包之前先将
该数据强制转换成 unsigned short int 型数据在进行数据传输。
22.指令名 SERVO_OR_MOTOR_MODE_READ 指令值 30 数据长度 3:
读取舵机模式相关的参数,舵机返回给上位机的指令包详情请参见下面表 4 的说
明。
23.指令名 SERVO_LOAD_OR_UNLOAD_WRITE 指令值 31 数据长度 4:
参数 1:舵机内部电机是否卸载掉电,范围 0 或 1,0 代表卸载掉电,此时舵机
无力矩输出。1 代表装载电机,此时舵机有力矩输出,默认值 0。
24.指令名 SERVO_LOAD_OR_UNLOAD_READ 指令值 32 数据长度 3:
读取舵机内部电机的状态,舵机返回给上位机的指令包详情请参见下面表 4 的说
明。
25.指令名 SERVO_LED_CTRL_WRITE 指令值 33 数据长度 4:
参数 1:LED 灯的亮灭状态,范围 0 或 1,0 代表 LED 常亮。1 代表 LED 常灭,默
认 0,并且支持掉电保存。
26.指令名 SERVO_LED_CTRL_READ 指令值 34 数据长度 3:
读取 LED 灯的状态,舵机返回给上位机的指令包详情请参见下面表 4 的说明。
27.指令名 SERVO_LED_ERROR_WRITE 指令值 35 数据长度 4:
参数 1:舵机哪些故障会导致 LED 闪烁报警的值,范围 0~7。有三种故障会导致
LED 闪烁报警,不管 LED 灯的状态是常灭还是常亮。第一种是舵机内部温度超过
最大温度限制值,(此值设定在第 16 点)。第二种是舵机输入电压超过限制值,
(此值设定在第 14 点)。第三种是舵机发生堵转。该值对应故障报警关系如下表:
表 3
0 没有报警
1 过温
2 过压
3 过温和过压
4 堵转
5 过温和堵转
6 过压和堵转
7 过温、过压和堵转
28.指令名 SERVO_LED_ERROR_READ 指令值 36 数据长度 3:
读取舵机故障报警值,舵机返回给上位机的指令包详情请参见下面表 4 的说明。
表 4
指令名
指令值 数据长度
SERVO_MOVE_TIME_READ
SERVO_MOVE_TIME_WAIT_READ
SERVO_ID_READ
SERVO_ANGLE_OFFSET_READ
SERVO_ANGLE_LIMIT_READ
SERVO_VIN_LIMIT_READ
SERVO_TEMP_MAX_LIMIT_READ
SERVO_TEMP_READ
SERVO_VIN_READ
SERVO_POS_READ
SERVO_OR_MOTOR_MODE_READ
SERVO_LOAD_OR_UNLOAD_READ
SERVO_LED_CTRL_READ
SERVO_LED_ERROR_READ
2
8
14
19
21
23
25
26
27
28
30
32
34
36
7
7
4
4
7
7
4
4
5
5
7
4
4
4
表 4 是舵机返回给上位机的指令,这些指令只有在上位机给舵机发送了读取指令
后舵机才会返回的指令,并且返回的指令值和上位机发给舵机的读取指令值是一
致的,不同的是,此返回值都是带有参数的。返回的数据指令包与上位机发送个
舵机的指令包格式是一样的,都如表 1 那样。
1. 指令名 SERVO_MOVE_TIME_READ 指令值 2 数据长度 7:
参数 1:角度的低八位。
参数 2:角度的高八位。范围 0~1000。
参数 3:时间低八位。
参数 4:时间高八位,时间的范围 0~30000 毫秒。
2. 指令名 SERVO_MOVE_TIME_READ 指令值 8 数据长度 7:
参数 1:预设角度的低八位。
参数 2:预设角度的高八位。范围 0~1000。
参数 3:预设时间低八位。
参数 4:预设时间高八位,时间的范围 0~30000 毫秒。
3. 指令名 SERVO_ID_READ 指令值 14 数据长度 4:
参数 1:舵机 ID 值,默认值 1。
说明:ID 的读取比其他读指令多一个特殊的地方,如果该指令包的 ID 为广播 ID:
254(0xFE),舵机是会返回应答信息的,而其他的读指令在 ID 为广播 ID 时都是不
返回应答信息的。这样做的目的是在不知道舵机 ID 号的情况下可以通过广播 ID
查询到舵机 ID 号,但是是限制条件是,总线上只能接一个舵机,不然都会返回
数据造成总线冲突。
4. 指令名 SERVO_ANGLE_OFFSET_READ 指令值 19 数据长度 4:
参数 1:舵机设定的偏差值,范围-125~125,默认值 0。
5. 指令名 SERVO_ANGLE_LIMIT_READ 指令值 21 数据长度 7:
参数 1:最小角度的低八位。
参数 2:最小角度的高八位。范围 0~1000。
参数 3:最大角度的低八位。
参数 4:最大角度的高八位。范围 0~1000。默认值最小角度为 0,最大角度为 1000。
6. 指令名 SERVO_VIN_LIMIT_READ 指令值 23 数据长度 7:
参数 1:最小输入电压的低八位。
参数 2:最小输入电压的高八位。范围 6500~12000 毫伏。
参数 3:最大输入电压的低八位。
参数 4:最大输入电压的高八位。范围 6500~12000 毫伏。默认值最小电压为 6500,
最大电压为 12000
7. 指令名 SERVO_TEMP_MAX_LIMIT_READ 指令值 25 数据长度 4:
参数 1:舵机内部最高温度限制,范围 50~100℃,默认值 85℃。
8. 指令名 SERVO_TEMP_READ 指令值 26 数据长度 4:
参数 1:舵机内部当前温度,无默认值。
9. 指令名 SERVO_VIN_READ 指令值 27 数据长度 5:
参数 1:舵机当前输入电压值的低八位。
参数 2:舵机当前输入电压值的高八位,无默认值。
10. 指令名 SERVO_POS_READ 指令值 28 数据长度 5:
参数 1:舵机当前角度位置值的低八位。
参数 2:舵机当前角度位置值的高八位,无默认值。
说明:返回的角度位置值要转换成 signed short int 型数据,因为读出的角度