CAN2.0A转FTSCS1.0 协议¶
本文为官方《CAN2.0A转FTSCS1.0 协议》文档的转录。FTSCS1.0 即 通信协议 中各系列共用的 FT-SCS 自定义协议(指令帧与应答帧框架),见 FT-SCS 自定义协议;各系列内存表见 内存表参数。
1、 协议概述¶
本协议是基于CAN2.0A标准数据帧,自定义通信指令转换成FTSCS1.0自定义协议,以便于FEETECH 所有自定义协议总线舵机与CAN总线设备配合使用。
使用CAN2.0A标准数据帧通信,出厂CAN默认波特率为1M,波特率可配置范围100K~1M,出厂默认通信CAN站号配置为1,CAN波特率、通信站号地址可通过CAN指令进行设置。由于FTSCS1.0协议基于485/TTL,所以CAN转换器需要遵守一问一答的通信规则否则会导致485/TTL总线出现数据冲突情况。
本转换协议需基于FEETECH 特定转换模块(如CAN2.0A 转TTL 单总线模块)来配合使用实现通讯转换功能。
2、 CAN2.0A帧格式¶
| CAN-ID | DLC | 数据1 数据2 ... 数据n |
|---|---|---|
| 11位CAN-ID | 数据长度,取值范围0~8 | 每个数据1字节,n<=8 |
CAN-ID结构:
| CAN-ID | BIT10 ... BIT6 | BIT5 ... BIT0 |
|---|---|---|
| CAN指令码 | CAN站点地址 |
- BIT5 ~ BIT0: CAN站号,范围0~63,其中0为广播地址,1~63为单播地址
- BIT10 ~ BIT6: CAN指令码,用来表示接下来发送的CAN报文功能作用
CAN指令码:
| 指令码 | 功能解释 | CAN-ID | 说明 |
|---|---|---|---|
| 0x01 | 内存表读指令 | 0x080+CAN站号 | |
| 0x02 | 内存表写指令 | 0x100+CAN站号 | |
| 0x03 | 位置控制指令 | 0x180+CAN站号 | |
| 0x04 | 同步读指令 | 0x200+CAN站号 | |
| 0x05 | 异步控制指令 | 0x280+CAN站号 | |
| 0x06 | 异步执行指令 | 0x300+CAN站号 | |
| 0x07 | 同步控制指令 | 0x380+CAN站号 | |
| 0x08 | 同步执行指令 | 0x400+CAN站号 | |
| 0x09 | 舵机应答指令 | 0x480+CAN站号 | 用到表示舵机应答的数据 |
| 0x0A | CAN配置指令 | 0x500+CAN站号 | |
| 0x0B | 舵机校准指令 | 0x580+CAN站号 |
2.1 内存表读指令(0x01)¶
使用内存表读指令对舵机内存表进行读查询,一次最多能读6字节数据。
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x080+CAN站号 | 3 | 舵机ID(1字节)、内存表地址(1字节)、内存表长度N(1字节,N<=6) |
| 应答 | 0x480+CAN站号 | N+2 | 舵机ID(1字节)、舵机状态(1字节)、内存表数据1(1字节) ... 内存表数据N(1字节) |
2.2 内存表写指令(0x02)¶
使用内存表写指令对舵机内存表进行写数据,一次最多能写6字节数据。
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x100+CAN站号 | N+2 | 舵机ID(1字节)、内存表地址(1字节)、内存表数据1(1字节) ... 内存表数据N(1字节,N<=6) |
| 应答 | 0x480+CAN站号 | 2 | 舵机ID(1字节)、舵机状态(1字节) |
2.3 位置控制指令(0x03)¶
位置控制指令控制舵机位置,输入指令包括:舵机ID(1字节)、位置(2字节)、加速度(1字节)、速度(2字节)与运行电流(2字节)。
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x180+CAN站号 | 8 | 舵机ID(1字节)、目标位置(2字节)、运行加速度(1字节)、运行速度(2字节)、运行电流(2字节) |
| 应答 | 0x480+CAN站号 | 2 | 舵机ID(1字节)、舵机状态(1字节) |
2.4 同步读指令(0x04)¶
同步读指令,可用于最多同时读取6个舵机的内存表数据。
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x200+CAN站号 | n+2 | 内存表地址(1字节)、内存表长度N(1字节,N<=6)、舵机ID1(1字节) ... 舵机IDn(1字节,n<=6) |
| 应答 | 0x480+CAN站号 | N+2 | 舵机ID(1字节)、舵机状态(1字节)、内存表数据1(1字节) ... 内存表数据N(1字节) |
2.5 异步控制指令(0x05)¶
异步控制指令用于异步控制舵机位置,输入指令包括:舵机ID(1字节)、输入指令包括位置(2字节)、加速度(1字节)、速度(2字节)与运行电流(2字节)。
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x280+CAN站号 | 8 | 舵机ID(1字节)、目标位置(2字节)、运行加速度(1字节)、运行速度(2字节)、运行电流(2字节) |
| 应答 | 0x480+CAN站号 | 2 | 舵机ID(1字节)、舵机状态(1字节) |
2.6 异步执行指令(0x06)¶
异步执行指令用于执行缓存的异步控制指令。
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x300+CAN站号 | 0 | 无 |
2.7 同步控制指令(0x07)¶
同步控制指令用于同步控制舵机位置,输入指令包括:舵机ID(1字节)、输入指令包括位置(2字节)、加速度(1字节)、速度(2字节)与运行电流(2字节),输入指令先缓存在于CAN转换器中,接收同步执行指令后再转换成舵机同步控制指令输出。
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x380+CAN站号 | 8 | 舵机ID(1字节)、目标位置(2字节)、运行加速度(1字节)、运行速度(2字节)、运行电流(2字节) |
2.8 同步执行指令(0x08)¶
CAN转换器接收同步执行后,将缓存的同步控制指令转换成舵机同步控制指令输出。
执行指令:
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x400+CAN站号 | 0 | 无 |
清除指令:
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x400+CAN站号 | 1 | 0 |
查询指令:
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x400+CAN站号 | 1 | 1 |
| 应答 | 0x400+CAN站号 | 1 | 缓存指令数量(1字节) |
2.9 CAN配置指令(0x0A)¶
CAN配置指令:
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x500+CAN站号 | 3 | CAN波特率(1字节)、CAN站号(1字节)、舵机波特率(1字节) |
| 应答 | 0x500+CAN站号 | 8 | 波特率(1字节)、CAN站号(1字节)、舵机波特率(1字节)、预留(1字节)、固件版本(1字节)、固件发布年(1字节)、固件分布月(1字节)、固件发布日(1字节) |
- CAN站号:1~63
- 舵机波特率:0~3,0表示1M、1表示500k、2表示250k、3表示115200
- CAN波特率:0~3,0表示1M、1表示500k、2表示250k、3表示100k
返回CAN配置信息:
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x500+CAN站号 | 0 | 无 |
| 应答 | 0x500+CAN站号 | 8 | 波特率(1字节)、CAN站号(1字节)、舵机波特率(1字节)、预留(1字节)、固件版本(1字节)、固件发布年(1字节)、固件分布月(1字节)、固件发布日(1字节) |
备注:配置修改后重启生效
2.10 舵机校准指令(0x0B)¶
当前位置重校准为设定值:
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x580+CAN站号 | 3 | 舵机ID(1字节)、校准位置(2字节) |
| 应答 | 0x480+CAN站号 | 2 | 舵机ID(1字节)、舵机状态(1字节) |
当前位置校准为中位:
| CAN-ID | DLC | 数据 | |
|---|---|---|---|
| 发送 | 0x580+CAN站号 | 1 | 舵机ID(1字节) |
| 应答 | 0x480+CAN站号 | 2 | 舵机ID(1字节)、舵机状态(1字节) |