logo资料库

串口总线舵机通信协议.pdf

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
乐幻索尔总线舵机通信协议 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 型数据,因为读出的角度
分享到:
收藏